# -*- coding: utf-8 -*- import sys import argparse import transaction from cliff.app import App from cliff.command import Command from cliff.commandmanager import CommandManager from pyramid.paster import bootstrap from tracim.exceptions import CommandAbortedError class TracimCLI(App): def __init__(self): super(TracimCLI, self).__init__( description='TracimCli', version='0.1', command_manager=CommandManager('tracimcli'), deferred_help=True, ) def initialize_app(self, argv): self.LOG.debug('initialize_app') def prepare_to_run_command(self, cmd): self.LOG.debug('prepare_to_run_command %s', cmd.__class__.__name__) def clean_up(self, cmd, result, err): self.LOG.debug('clean_up %s', cmd.__class__.__name__) if err: self.LOG.debug('got an error: %s', err) def main(argv=sys.argv[1:]): myapp = TracimCLI() return myapp.run(argv) if __name__ == "__main__": main() class AppContextCommand(Command): """ Command who initialize app context at beginning of take_action method. """ auto_setup_context = True def take_action(self, parsed_args): super(AppContextCommand, self).take_action(parsed_args) if self.auto_setup_context: with bootstrap(parsed_args.config_file) as app_context: with app_context['request'].tm: self.take_app_action(parsed_args, app_context) def get_parser(self, prog_name): parser = super(AppContextCommand, self).get_parser(prog_name) parser.add_argument( "-c", "--config", help='application config file to read (default: development.ini)', dest='config_file', default="development.ini" ) return parser # def run(self, parsed_args): # super().run(parsed_args) # transaction.commit() class TestTracimCommand(AppContextCommand): def take_app_action(self, parser, app_context): print('test') class Extender(argparse.Action): """ Copied class from http://stackoverflow.com/a/12461237/801924 """ def __call__(self, parser, namespace, values, option_strings=None): # Need None here incase `argparse.SUPPRESS` was supplied for `dest` dest = getattr(namespace, self.dest, None) # print dest,self.default,values,option_strings if not hasattr(dest, 'extend') or dest == self.default: dest = [] setattr(namespace, self.dest, dest) # if default isn't set to None, this method might be called # with the default as `values` for other arguements which # share this destination. parser.set_defaults(**{self.dest: None}) try: dest.extend(values) except ValueError: dest.append(values)