from core.Constants import Constants from core.Errors import UnknownConnectionTypeError from cli.helpers import get_distribution from cli.commands import all_commands from cli.commands import get_set, sync_update from pathlib import Path import argparse import sys def _handle_exception(identifier, message, traceback): if issubclass(identifier, UnknownConnectionTypeError): print('Please specify the desired connection method and try again.\n') else: sys.__excepthook__(identifier, message, traceback) if __name__ == '__main__': Path(Constants.HV_CONFIG_HOME).mkdir(parents=True, exist_ok=True) Path(Constants.HV_DATA_HOME).mkdir(parents=True, exist_ok=True) sys.excepthook = _handle_exception distribution = get_distribution() parser = argparse.ArgumentParser(prog=distribution.name) parser.add_argument('--version', '-v', action='version', version=f'{distribution.name} v{distribution.version}') subparsers = parser.add_subparsers(title='commands', dest='command') for command in all_commands: command.register(subparsers) arguments = parser.parse_args() if arguments.command is None: parser.print_help() elif arguments.command in (get_set.NAME, get_set.NAME_SET): get_set.handle(arguments, parser) elif arguments.command in (sync_update.NAME_SYNC, sync_update.NAME_UPDATE): sync_update.handle(arguments, parser) else: command = next((c for c in all_commands if getattr(c, 'NAME', None) == arguments.command), None) if command: command.handle(arguments, parser)