"""Main executor script. Contain only execution methods.""" import argparse import logging import os import raven from accounting.bin import build_helper def _execute_command(command_function, *args): """Execute the command and capture exceptions if any. Args: command_function (function): Actual function for the command args (tuple): optional arguments passed to command_function """ client = None if os.environ.get('SENTRY_DSN'): client = raven.Client() try: command_function(*args) except Exception as e: if client: client.captureException() raise e def execute(*args): """Integrate main entry point for the Build command line helper. Args: args (tuple): Args for the flow. """ parser = argparse.ArgumentParser( description='Build helper command line script') parser.add_argument('cmd', choices=build_helper.__COMMANDS__, help='build step command') parser.add_argument( '-p', '--period_id', required=False, type=int, help=( 'Only for filter_phys_transactions command. \n' 'Desired accounting period id,' 'Example: filter_phys_transactions -p 204')) parser.add_argument('-l', '--log_level', help='logging level', default='error', choices=['critical', 'error', 'warning', 'info', 'debug']) args = parser.parse_args(args) if args else parser.parse_args() logging.basicConfig(level=getattr(logging, args.log_level.upper())) package_name = build_helper.get_package_name(args.cmd) command_name = build_helper.get_command_name(args.cmd) package = build_helper.get_package(package_name) command = getattr(package, command_name) if command_name == 'filter_phys_transactions': _execute_command(command, args.period_id) else: _execute_command(command) if __name__ == '__main__': execute()