diff --git a/libmat2/__init__.py b/libmat2/__init__.py index 41c2395..501baaa 100644 --- a/libmat2/__init__.py +++ b/libmat2/__init__.py @@ -30,35 +30,65 @@ UNSUPPORTED_EXTENSIONS = { } DEPENDENCIES = { - 'Cairo': 'cairo', - 'PyGobject': 'gi', - 'GdkPixbuf from PyGobject': 'gi.repository.GdkPixbuf', - 'Poppler from PyGobject': 'gi.repository.Poppler', - 'GLib from PyGobject': 'gi.repository.GLib', - 'Mutagen': 'mutagen', - } + 'Cairo': { + 'module': 'cairo', + 'required': True, + }, + 'PyGobject': { + 'module': 'gi', + 'required': True, + }, + 'GdkPixbuf from PyGobject': { + 'module': 'gi.repository.GdkPixbuf', + 'required': True, + }, + 'Poppler from PyGobject': { + 'module': 'gi.repository.Poppler', + 'required': True, + }, + 'GLib from PyGobject': { + 'module': 'gi.repository.GLib', + 'required': True, + }, + 'Mutagen': { + 'module': 'mutagen', + 'required': True, + }, +} CMD_DEPENDENCIES = { - 'Exiftool': exiftool._get_exiftool_path, - 'Ffmpeg': video._get_ffmpeg_path, - } + 'Exiftool': { + 'cmd': exiftool._get_exiftool_path, + 'required': False, + }, + 'Ffmpeg': { + 'cmd': video._get_ffmpeg_path, + 'required': False, + }, +} -def check_dependencies() -> Dict[str, bool]: +def check_dependencies() -> Dict[str, Dict[str, bool]]: ret = collections.defaultdict(bool) # type: Dict[str, bool] for key, value in DEPENDENCIES.items(): - ret[key] = True + ret[key] = { + 'found': True, + 'required': value['required'], + } try: - importlib.import_module(value) + importlib.import_module(value['module']) except ImportError: # pragma: no cover - ret[key] = False # pragma: no cover + ret[key]['found'] = False for k, v in CMD_DEPENDENCIES.items(): - ret[k] = True + ret[k] = { + 'found': True, + 'required': v['required'], + } try: - v() + v['cmd']() except RuntimeError: # pragma: no cover - ret[k] = False + ret[k]['found'] = False return ret diff --git a/mat2 b/mat2 index 4773c85..d32716f 100755 --- a/mat2 +++ b/mat2 @@ -165,9 +165,10 @@ def main() -> int: show_parsers() return 0 elif args.check_dependencies: - print("Dependencies required for MAT2 %s:" % __version__) + print("Dependencies for MAT2 %s:" % __version__) for key, value in sorted(check_dependencies().items()): - print('- %s: %s' % (key, 'yes' if value else 'no')) + print('- %s: %s %s' % (key, 'yes' if value['found'] else 'no', + '(optional)' if not value['required'] else '')) else: arg_parser.print_help() return 0 diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py index de5f67c..64e679f 100644 --- a/tests/test_libmat2.py +++ b/tests/test_libmat2.py @@ -16,7 +16,8 @@ class TestCheckDependencies(unittest.TestCase): def test_deps(self): ret = check_dependencies() for key, value in ret.items(): - self.assertTrue(value, "The value for %s is False" % key) + if value['required']: + self.assertTrue(value['found'], "The value for %s is False" % key) class TestParserFactory(unittest.TestCase):