diff --git a/.gitignore b/.gitignore index 8d5b911..318fa0f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ dist/' docs/_build __pycache__/ *.py[cod] +*.egg-info diff --git a/accessible_output2/__init__.py b/accessible_output2/__init__.py index e5c4868..4ecc9e2 100644 --- a/accessible_output2/__init__.py +++ b/accessible_output2/__init__.py @@ -1,48 +1,29 @@ -from __future__ import absolute_import -import ctypes -import os -import types -from platform_utils import paths - - -def load_library(libname, cdll=False): - if paths.is_frozen(): - libfile = os.path.join( - paths.embedded_data_path(), "accessible_output2", "lib", libname - ) - else: - libfile = os.path.join(paths.module_path(), "lib", libname) - if not os.path.exists(libfile): - _cxfreeze_libfile = os.path.join( - paths.embedded_data_path(), "lib", "accessible_output2", "lib", libname - ) - if os.path.exists(_cxfreeze_libfile): - libfile = _cxfreeze_libfile - if cdll: - return ctypes.cdll[libfile] - return ctypes.windll[libfile] - - -def get_output_classes(): - from . import outputs - - module_type = types.ModuleType - classes = [ - m.output_class - for m in outputs.__dict__.values() - if isinstance(m, module_type) and hasattr(m, "output_class") - ] - return sorted(classes, key=lambda c: c.priority) - - -def find_datafiles(): - import platform - from glob import glob - import accessible_output2 - - if platform.system() != "Windows": - return [] - path = os.path.join(accessible_output2.__path__[0], "lib", "*.dll") - results = glob(path) - dest_dir = os.path.join("accessible_output2", "lib") - return [(dest_dir, results)] +from __future__ import absolute_import +import ctypes +import types +from pathlib import Path + +lib = Path(__file__).parent / "lib" + + +def load_library(libname, cdll=False): + + lib_path = lib / libname + libfile = str(lib_path) + dll_loader = ctypes.cdll if cdll else ctypes.windll + try: + return dll_loader[libfile] + except AttributeError: + return None + + +def get_output_classes(): + from . import outputs + + module_type = types.ModuleType + classes = [ + m.output_class + for m in outputs.__dict__.values() + if isinstance(m, module_type) and hasattr(m, "output_class") + ] + return sorted(classes, key=lambda c: c.priority) diff --git a/accessible_output2/lib/ZDSRAPI.dll b/accessible_output2/lib/ZDSRAPI.dll deleted file mode 100644 index e68fa1a..0000000 Binary files a/accessible_output2/lib/ZDSRAPI.dll and /dev/null differ diff --git a/accessible_output2/lib/ZDSRAPI_x64.dll b/accessible_output2/lib/ZDSRAPI_x64.dll deleted file mode 100644 index d769c8f..0000000 Binary files a/accessible_output2/lib/ZDSRAPI_x64.dll and /dev/null differ diff --git a/accessible_output2/outputs/auto.py b/accessible_output2/outputs/auto.py index a6f7a24..e492584 100644 --- a/accessible_output2/outputs/auto.py +++ b/accessible_output2/outputs/auto.py @@ -51,7 +51,7 @@ def braille(self, *args, **kwargs): def output(self, *args, **kwargs): output = self.get_first_available_output() if output: - output.speak(*args, **kwargs) + output.output(*args, **kwargs) def is_system_output(self): """Returns True if this output is a system output.""" diff --git a/accessible_output2/outputs/base.py b/accessible_output2/outputs/base.py index 7d96dbc..964cda7 100644 --- a/accessible_output2/outputs/base.py +++ b/accessible_output2/outputs/base.py @@ -65,9 +65,9 @@ def output(self, text, **options): RuntimeError: If the requested output doesn't define either speak or braille. """ output = False - if self.speak(text, **options): + if self.speak(text, **options) is not False: output = True - if self.braille(text, **options): + if self.braille(text, **options) is not False: output = True if not output: raise RuntimeError( diff --git a/accessible_output2/outputs/nvda.py b/accessible_output2/outputs/nvda.py index e164ae1..0a1b9be 100644 --- a/accessible_output2/outputs/nvda.py +++ b/accessible_output2/outputs/nvda.py @@ -1,10 +1,6 @@ from __future__ import absolute_import -import os -import platform import ctypes -from platform_utils import paths -from libloader import load_library from .base import Output diff --git a/accessible_output2/outputs/zdsr.py b/accessible_output2/outputs/zdsr.py index 0d00123..11fc0f8 100644 --- a/accessible_output2/outputs/zdsr.py +++ b/accessible_output2/outputs/zdsr.py @@ -1,41 +1,43 @@ from __future__ import absolute_import -import os -import platform import ctypes +import os +from pathlib import Path -from platform_utils import paths -from libloader import load_library from .base import Output class ZDSR(Output): """Supports The ZDSR screen reader""" + _dll_loc = Path(os.path.expandvars(R"%ProgramFiles(x86)%\zdsr\zdsr")) name = "ZDSR" - lib32 = "ZDSRAPI.dll" - lib64 = "ZDSRAPI_x64.dll" - is_loaded=False + lib32 = _dll_loc / "ZDSRAPI.dll" + lib64 = _dll_loc / "ZDSRAPI_x64.dll" + is_loaded = False argtypes = { "speak": (ctypes.c_wchar_p,), } def load(self): - self.lib.InitTTS(0,"") - self.is_loaded=True + self.lib.InitTTS(0, "") + self.is_loaded = True def is_active(self): try: - if not self.is_loaded: self.load() + if not self.is_loaded: + self.load() return self.lib.GetSpeakState() != 2 except: return False def speak(self, text, interrupt=False): - if not self.is_loaded: self.load() - self.lib.Speak(text,interrupt) + if not self.is_loaded: + self.load() + self.lib.Speak(text, interrupt) def silence(self): - if not self.is_loaded: self.load() + if not self.is_loaded: + self.load() self.lib.StopSpeak() diff --git a/requirements.txt b/requirements.txt index 26456e2..9b1303c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ -libloader -platform_utils +libloader \ No newline at end of file diff --git a/setup.py b/setup.py index 83c29ab..192c8e8 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,7 @@ from setuptools import setup, find_packages import io -__doc__ = ( - """Library to provide speech and braille output to a variety of different screen readers and other accessibility solutions.""" -) +__doc__ = """Library to provide speech and braille output to a variety of different screen readers and other accessibility solutions.""" with io.open("readme.rst", encoding="UTF8") as readme: long_description = readme.read() @@ -19,7 +17,9 @@ packages=find_packages(), package_data={"accessible_output2": ["lib/*"]}, zip_safe=False, - install_requires=["libloader", "platform_utils"], + install_requires=[ + "libloader", + ], extras_require={ ':sys_platform == "win32"': ["pywin32", "libloader"], ':sys_platform == "darwin"': ["appscript"],