def run_wf(wf_name=''): """ TODO: 1. make wf_name meaningful 2. refact it so as to reduce redundant code 3. how to response gracefully if error/exception occurs 4. the response should be contained the state of the workflow triggered :http param async: :return: """ is_async = request.args.get('async', False) event, req = None, request.args if request.method == 'POST': event = Event.from_json(request.data) event.save() stat_driver.add_event(event) async_results = reactor.dispatch_event(event=event, wf_name=wf_name, req=req) else: async_results = reactor.dispatch_req(wf_name, req, event=event) if not is_async: for ar in async_results: ar.wait() return json.dumps([ar.wf_id for ar in async_results])
def on_message(self, headers, message): # TODO: should we validate the message format and field type here? try: event = Event.from_json(message) self.stat_driver.add_event(event) self.reactor.dispatch_event(event) except: self.logger.exception('failed to process message: ' + message) else: msg_id = headers['message-id'] self.conn.ack(msg_id, self.subscription_id)