from core.controllers.ApplicationVersionController import ApplicationVersionController from core.models.session.Application import Application from cli.helpers import parse_application_argument from cli.observers import application_version_observer, connection_observer import pprint NAME = 'application' def register(subparsers): parser = subparsers.add_parser(NAME) subs = parser.add_subparsers(title='subcommands', dest='subcommand') base = _base_parser() list_parser = subs.add_parser('list') list_parser.add_argument('--code', '-c') subs.add_parser('show', parents=[base]) install_parser = subs.add_parser('install', parents=[base]) install_parser.add_argument('--reinstall', '-r', action='store_true') subs.add_parser('uninstall', parents=[base]) return parser def handle(arguments, main_parser): if arguments.subcommand is None: main_parser.parse_args(['application', '--help']) return if arguments.subcommand == 'list': if arguments.code: application = Application.find(arguments.code) if application is not None: pprint.pp(ApplicationVersionController.get_all(application)) else: main_parser.error('the following argument should be a valid reference: --code/-c') else: pprint.pp(ApplicationVersionController.get_all()) elif arguments.subcommand == 'show': details = parse_application_argument(arguments.application) app_version = ApplicationVersionController.get(details.get('application_code'), details.get('version_number')) if app_version is not None: pprint.pp(app_version) else: main_parser.error('the following argument should be a valid reference: --application/-a') elif arguments.subcommand == 'install': details = parse_application_argument(arguments.application) app_version = ApplicationVersionController.get(details.get('application_code'), details.get('version_number')) if app_version is not None: ApplicationVersionController.install(app_version, arguments.reinstall, application_version_observer=application_version_observer, connection_observer=connection_observer) else: main_parser.error('the following argument should be a valid reference: --application/-a') elif arguments.subcommand == 'uninstall': details = parse_application_argument(arguments.application) app_version = ApplicationVersionController.get(details.get('application_code'), details.get('version_number')) if app_version is not None: ApplicationVersionController.uninstall(app_version) else: main_parser.error('the following argument should be a valid reference: --application/-a') def _base_parser(): import argparse p = argparse.ArgumentParser(add_help=False) p.add_argument('--application', '-a', required=True) return p