From 43ffbc7c346f4a09b054a6656182e644936c04c2 Mon Sep 17 00:00:00 2001 From: Labrys of Knossos Date: Sun, 16 Dec 2018 18:38:54 -0500 Subject: [PATCH] Add feature to make libs importable --- core/__init__.py | 25 +++++--------------- libs/__init__.py | 47 +++++++++++++++++++++++++++++++++++++ libs/autoload.py | 6 +++++ libs/util.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 19 deletions(-) create mode 100644 libs/__init__.py create mode 100644 libs/autoload.py create mode 100644 libs/util.py diff --git a/core/__init__.py b/core/__init__.py index 1b7e41f9..212158ca 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -11,26 +11,13 @@ import subprocess import sys import time +import libs.autoload +import libs.util -# init libs -PROGRAM_DIR = os.path.dirname(os.path.normpath(os.path.abspath(os.path.join(__file__, os.pardir)))) +if not libs.autoload.completed: + sys.exit('Could not load vendored libraries.') -LIBS_DIR = os.path.join(PROGRAM_DIR, 'libs') -sys.path.insert(0, LIBS_DIR) - -LIBS_DIR_COMMON = os.path.join(LIBS_DIR, 'common') -sys.path.insert(0, LIBS_DIR_COMMON) - -LIBS_DIR_CUSTOM = os.path.join(LIBS_DIR, 'custom') -sys.path.insert(0, LIBS_DIR_CUSTOM) - -if sys.version_info[0] == 2: - LIBS_DIR_PY2 = os.path.join(LIBS_DIR, 'py2') - sys.path.insert(0, LIBS_DIR_PY2) - -if sys.platform.startswith('win32') or (os.name == 'nt'): - LIBS_DIR_WIN = os.path.join(LIBS_DIR, 'win') - sys.path.insert(0, LIBS_DIR_WIN) +PROGRAM_DIR = libs.util.module_root() # init preliminaries SYS_ARGV = sys.argv[1:] @@ -43,7 +30,7 @@ CONFIG_FILE = os.path.join(PROGRAM_DIR, 'autoProcessMedia.cfg') CONFIG_SPEC_FILE = os.path.join(PROGRAM_DIR, 'autoProcessMedia.cfg.spec') CONFIG_MOVIE_FILE = os.path.join(PROGRAM_DIR, 'autoProcessMovie.cfg') CONFIG_TV_FILE = os.path.join(PROGRAM_DIR, 'autoProcessTv.cfg') -TEST_FILE = os.path.join(os.path.join(PROGRAM_DIR, 'tests'), 'test.mp4') +TEST_FILE = os.path.join(PROGRAM_DIR, 'tests', 'test.mp4') MYAPP = None import six diff --git a/libs/__init__.py b/libs/__init__.py new file mode 100644 index 00000000..154178ec --- /dev/null +++ b/libs/__init__.py @@ -0,0 +1,47 @@ + +import os +import sys + +import libs.util + +ROOT_DIR = libs.util.module_root() +LIB_DIR = os.path.join(ROOT_DIR, 'libs') + +COMMON = 'common' +CUSTOM = 'custom' +PY2 = 'py2' +WIN = 'win' + +LOADED = {} +MANDATORY = { + COMMON, + CUSTOM, +} +DIRECTORY = { + lib: os.path.join(LIB_DIR, lib) + for lib in [COMMON, CUSTOM, PY2, WIN] +} + +if sys.platform == 'win32': + MANDATORY.add(WIN) + +if sys.version_info < (3, ): + MANDATORY.add(PY2) + + +def add_libs(name): + if name in MANDATORY and name not in LOADED: + path = libs.util.add_path(DIRECTORY[name]) + if path: + LOADED[name] = path + return path + + +def add_all_libs(): + for lib in MANDATORY: + add_libs(lib) + return is_finished() + + +def is_finished(): + return MANDATORY.issubset(LOADED.keys()) diff --git a/libs/autoload.py b/libs/autoload.py new file mode 100644 index 00000000..23205448 --- /dev/null +++ b/libs/autoload.py @@ -0,0 +1,6 @@ + +import libs + +__all__ = ['completed'] + +completed = libs.add_all_libs() diff --git a/libs/util.py b/libs/util.py new file mode 100644 index 00000000..3b597d69 --- /dev/null +++ b/libs/util.py @@ -0,0 +1,60 @@ + +import subprocess +import sys +import os + +__all__ = [ + 'module_root', + 'add_path', +] + + +def module_root(module=__file__): + try: + path = module.__file__ + except AttributeError: + path = module + directory = os.path.dirname(path) + parent = os.path.join(directory, os.pardir) + absolute = os.path.abspath(parent) + normalized = os.path.normpath(absolute) + return normalized + + +def add_path(path, index=0): + sys.path.insert(index, path) + try: + sys.path.index(path) + except ValueError: + return + else: + return path + + +def install_requirements( + requirements, + upgrade=True, + path=None, + file=False, + executable=sys.executable, +): + + args = [ + executable, + '-m', + 'pip', + 'install', + ] + + if file: + args.append('-r') + args.append(requirements) + + if upgrade: + args.append('--upgrade') + + if path is not None: + args.append('--target') + args.append(path) + + subprocess.call(args)