diff --git a/libmat2/__init__.py b/libmat2/__init__.py index d910215a6e3cbd07b2c35c3c95c4bce161590609..74b07effa54698d5a7b08326c5807e50596ef8ea 100644 --- a/libmat2/__init__.py +++ b/libmat2/__init__.py @@ -1,5 +1,13 @@ #!/bin/env python3 +import os +import collections +import importlib +from typing import Dict + +# make pyflakes happy +assert Dict + # A set of extension that aren't supported, despite matching a supported mimetype UNSUPPORTED_EXTENSIONS = { '.asc', @@ -17,3 +25,28 @@ UNSUPPORTED_EXTENSIONS = { '.xsd', '.xsl', } + +DEPENDENCIES = { + 'cairo': 'Cairo', + 'gi': 'PyGobject', + 'gi.repository.GdkPixbuf': 'GdkPixbuf from PyGobject', + 'gi.repository.Poppler': 'Poppler from PyGobject', + 'mutagen': 'Mutagen', + } + +def check_dependencies() -> dict: + ret = collections.defaultdict(bool) # type: Dict[str, bool] + + exiftool = '/usr/bin/exiftool' + ret['Exiftool'] = False + if os.path.isfile(exiftool) and os.access(exiftool, os.X_OK): + ret['Exiftool'] = True + + for key, value in DEPENDENCIES.items(): + ret[value] = True + try: + importlib.import_module(key) + except ImportError: + ret[value] = False + + return ret diff --git a/mat2 b/mat2 index 7c7b6526c813b198ffeb2773a043f7e68bee902c..efc0478e79ff45920d1c81121c6c3f37ba3f0f60 100755 --- a/mat2 +++ b/mat2 @@ -9,7 +9,7 @@ import argparse import multiprocessing try: - from libmat2 import parser_factory, UNSUPPORTED_EXTENSIONS + from libmat2 import parser_factory, UNSUPPORTED_EXTENSIONS, check_dependencies except ValueError as e: print(e) sys.exit(1) @@ -36,6 +36,9 @@ def create_arg_parser(): version='MAT2 %s' % __version__) parser.add_argument('-l', '--list', action='store_true', help='list all supported fileformats') + parser.add_argument('-c', '--check-dependencies', action='store_true', + help='check if MAT2 has all the dependencies it needs') + info = parser.add_mutually_exclusive_group() info.add_argument('-s', '--show', action='store_true', @@ -108,9 +111,14 @@ def main(): args = arg_parser.parse_args() if not args.files: - if not args.list: + if args.list: + show_parsers() + elif args.check_dependencies: + print("Dependencies required for MAT2 %s:" % __version__) + for key, value in sorted(check_dependencies().items()): + print('- %s: %s' % (key, 'yes' if value else 'no')) + else: return arg_parser.print_help() - show_parsers() return 0 elif args.show: