sp-hydra-veil-cli/cli/commands/application.py
2026-05-30 08:25:00 -05:00

73 lines
No EOL
2.9 KiB
Python

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