from datetime import date from garcon import activity from garcon import decider from argparse import ArgumentParser import boto.swf.layer2 as swf import json import log import sys from octopus import flows parser = ArgumentParser( description='Octopus command line.', epilog='Octopus © {year} The Orchard'.format(year=str(date.today().year))) parser.add_argument('-f', '--flow', dest='flow', help='launch the worker related to a specific flow', metavar='flow') parser.add_argument('-s', '--start', dest='start', help='start a flow.', action='store_true') parser.add_argument('-c', '--context', dest='context', help='flow context', default='{}') parser.add_argument('-i', '--input', dest='input', help='initial workflow context') parser.add_argument('-w', '--worker', dest='worker', help='define the type of worker (activity, decider).') parser.add_argument('-a', '--activities', dest='activities', default=None, help='define the name of the activity (activity, decider).') if __name__ == '__main__': log.enable_logs() options = parser.parse_args() if len(sys.argv) <= 1: parser.print_help() exit() if options.start: flows.start(options.flow, json.loads(options.context)) else: flow = flows.get_flow(options.flow) if options.worker == 'decider': w = decider.DeciderWorker(flow) print('Run decider worker for %s' % flow.domain) while(True): w.run() elif options.worker == 'activity': w = activity.ActivityWorker(flow, options.activities) print('Run activity worker for %s' % flow.domain) w.run()