diff --git a/main.py b/main.py index c6b4b21e53832cc2686799d0e390ef3805251a3b..de623b2c306d82aee6168fb1a394c7922f50d207 100644 --- a/main.py +++ b/main.py @@ -44,21 +44,30 @@ def clean_meta(filename:str): if not __check_file(filename, os.R_OK|os.W_OK): return - p, mtype = parser_factory.get_parser(f) + p, mtype = parser_factory.get_parser(filename) if p is None: print("[-] %s's format (%s) is not supported" % (filename, mtype)) return p.remove_all() def main(): - args = create_arg_parser().parse_args() + arg_parser = create_arg_parser() + args = arg_parser.parse_args() if args.show: for f in args.files: show_meta(f) - else: + elif args.list: + print('[+] Supported formats:') + for parser in parser_factory._get_parsers(): + for mtype in parser.mimetypes: + extensions = ', '.join(mimetypes.guess_all_extensions(mtype)) + print(' - %s (%s)' % (mtype, extensions)) + elif args.files: for f in args.files: clean_meta(f) + else: + arg_parser.print_help() if __name__ == '__main__': diff --git a/src/parser_factory.py b/src/parser_factory.py index 770f17c944ff07f7c15257791a9c92bf8d40fc1a..7ce4246914c3a6c038a765503f931f35c30426ae 100644 --- a/src/parser_factory.py +++ b/src/parser_factory.py @@ -16,12 +16,17 @@ for module_loader, name, ispkg in pkgutil.walk_packages('.src'): continue importlib.import_module(name) +def _get_parsers() -> list: + """ Get all our parsers!""" + def __get_parsers(cls): + return cls.__subclasses__() + \ + [g for s in cls.__subclasses__() for g in __get_parsers(s)] + return __get_parsers(abstract.AbstractParser) + def get_parser(filename: str) -> (T, str): mtype, _ = mimetypes.guess_type(filename) - def get_subclasses(cls): - return cls.__subclasses__() + \ - [g for s in cls.__subclasses__() for g in get_subclasses(s)] - for c in get_subclasses(abstract.AbstractParser): + + for c in _get_parsers(): if mtype in c.mimetypes: return c(filename), mtype return None, mtype