from core.controllers.PolicyController import PolicyController import pprint NAME = 'policy' def register(subparsers): parser = subparsers.add_parser(NAME) subs = parser.add_subparsers(title='subcommands', dest='subcommand') base = _base_parser() subs.add_parser('preview', parents=[base]) subs.add_parser('instate', parents=[base]) subs.add_parser('inspect', parents=[base]) subs.add_parser('revoke', parents=[base]) return parser def handle(arguments, main_parser): if arguments.subcommand is None: main_parser.parse_args(['policy', '--help']) return policy = PolicyController.get(arguments.policy) if policy is None: main_parser.error('the following argument should be a valid reference: --policy/-p') if arguments.subcommand == 'preview': print(PolicyController.preview(policy)) elif arguments.subcommand == 'instate': PolicyController.instate(policy) elif arguments.subcommand == 'inspect': if PolicyController.is_instated(policy): pprint.pp({'status': 'Instated'}) elif PolicyController.is_suggestible(policy): pprint.pp({'status': 'Suggested'}) else: pprint.pp({'status': 'Uninstated'}) elif arguments.subcommand == 'revoke': PolicyController.revoke(policy) def _base_parser(): import argparse p = argparse.ArgumentParser(add_help=False) p.add_argument('--policy', '-p', choices=['capability', 'privilege'], required=True) return p