def handle_schedule(self, result): for a in result.get('activities', []): self.state.set_running(a['id']) self.trace_activity(a) for w in result.get('workflows', []): self.state.set_running(w['id']) self.trace_workflow(w) self.trace_flush() for a in result.get('activities', []): try: args, kwargs = serialization.loads(a['input_data']) f = self.activity_executor.submit(a['f'], *args, **kwargs) f.add_done_callback( partial(self.complete_activity_and_reschedule_decision, a['id'])) except RuntimeError: pass # The executor must be closed for w in result.get('workflows', []): r = ChildWorkflowRunner(w['f'], self.workflow_executor, self.activity_executor, w['input_data'], parent=self, wid=w['id']) r.reschedule_decision() self.reschedule_if_history_updated()
def deserialize_input(input_data): """Deserialize the input data in args, kwargs.""" args, kwargs = loads(input_data) # raise TypeError if deconstructing fails if not isinstance(args, list): raise ValueError('Invalid args: %r' % (args,)) if not isinstance(kwargs, dict): raise ValueError('Invalid kwargs: %r' % (kwargs,)) return args, kwargs
def handle_schedule(self, result): for a in result.get('activities', []): self.state.set_running(a['id']) self.trace_activity(a) for w in result.get('workflows', []): self.state.set_running(w['id']) self.trace_workflow(w) self.trace_flush() for a in result.get('activities', []): try: args, kwargs = serialization.loads(a['input_data']) f = self.activity_executor.submit(a['f'], *args, **kwargs) f.add_done_callback(partial( self.complete_activity_and_reschedule_decision, a['id'])) except RuntimeError: pass # The executor must be closed for w in result.get('workflows', []): r = ChildWorkflowRunner(w['f'], self.workflow_executor, self.activity_executor, w['input_data'], parent=self, wid=w['id']) r.reschedule_decision() self.reschedule_if_history_updated()
def deserialize_result(result): return loads(result)
def test_dumps_loads(value, result): from flowy.serialization import dumps, loads assert loads(dumps(value)) == result
def handle_finish(self, result): self.stop_running(serialization.loads(result['result']))
def complete_subwf_and_reschedule_decision(self, task_id, result): with self.lock: self.state.set_result(task_id, result) self.trace_result(task_id, serialization.loads(result)) self.update_history_or_reschedule()