def test_set_and_get(self): expect(ctx.get("workflow_id")).to.equal("") expect(ctx.get("event_id")).to.equal("") ctx.set("workflow_id", "foo-bar") ctx.set("event_id", 4) expect(ctx.get("workflow_id")).to.equal("foo-bar") expect(ctx.get("event_id")).to.equal("4")
def test_reset(self): ctx.set("workflow_id", "foo-bar") ctx.set("task_list", "tl") expect(ctx.get("workflow_id")).to.equal("foo-bar") expect(ctx.get("task_list")).to.equal("tl") ctx.reset() expect(ctx.get("workflow_id")).to.equal("") expect(ctx.get("task_list")).to.equal("")
def poll(self, task_list=None, identity=None): """Polls for an activity task to process from current actor's instance defined ``task_list`` if no activity task was polled, raises a PollTimeout exception. :param task_list: task list the Actor should watch for tasks on :type task_list: string :param identity: Identity of the worker making the request, which is recorded in the ActivityTaskStarted event in the workflow history. This enables diagnostic tracing when problems arise. The form of this identity is user defined. :type identity: string :raises: PollTimeout :returns: task token, polled activity task :rtype: (str, ActivityTask) """ logging_context.reset() task_list = task_list or self.task_list identity = identity or self._identity try: task = self.connection.poll_for_activity_task( self.domain.name, task_list, identity=format.identity(identity), ) except boto.exception.SWFResponseError as e: message = self.get_error_message(e) if e.error_code == "UnknownResourceFault": raise DoesNotExistError( "Unable to poll activity task", message, ) raise ResponseError(message) if not task.get("taskToken"): raise PollTimeout("Activity Worker poll timed out") logging_context.set("workflow_id", task["workflowExecution"]["workflowId"]) logging_context.set("task_type", "activity") logging_context.set("event_id", task["startedEventId"]) logging_context.set("activity_id", task["activityId"]) activity_task = ActivityTask.from_poll(self.domain, self.task_list, task,) return Response( task_token=activity_task.task_token, activity_task=activity_task, raw_response=task, )
def poll(self, task_list=None, identity=None, **kwargs): """ Polls a decision task and returns the token and the full history of the workflow's events. :param task_list: task list to poll for decision tasks from. :type task_list: str :param identity: Identity of the decider making the request, which is recorded in the DecisionTaskStarted event in the workflow history. :type identity: str :returns: a Response object with history, token, and execution set :rtype: swf.responses.Response """ logging_context.reset() task_list = task_list or self.task_list task = self.connection.poll_for_decision_task( self.domain.name, task_list=task_list, identity=format.identity(identity), **kwargs) token = task.get('taskToken') if token is None: raise PollTimeout("Decider poll timed out") events = task['events'] logging_context.set("workflow_id", task["workflowExecution"]["workflowId"]) logging_context.set("task_type", "decision") logging_context.set("event_id", task["startedEventId"]) next_page = task.get('nextPageToken') while next_page: try: task = self.connection.poll_for_decision_task( self.domain.name, task_list=task_list, identity=format.identity(identity), next_page_token=next_page, **kwargs) except boto.exception.SWFResponseError as e: message = self.get_error_message(e) if e.error_code == 'UnknownResourceFault': raise DoesNotExistError( "Unable to poll decision task", message, ) raise ResponseError(message) token = task.get('taskToken') if token is None: raise PollTimeout("Decider poll timed out") events.extend(task['events']) next_page = task.get('nextPageToken') history = History.from_event_list(events) workflow_type = WorkflowType( domain=self.domain, name=task['workflowType']['name'], version=task['workflowType']['version'], ) execution = WorkflowExecution( domain=self.domain, workflow_id=task['workflowExecution']['workflowId'], run_id=task['workflowExecution']['runId'], workflow_type=workflow_type, ) # TODO: move history into execution (needs refactoring on WorkflowExecution.history()) return Response(token=token, history=history, execution=execution)
def poll(self, task_list=None, identity=None): """Polls for an activity task to process from current actor's instance defined ``task_list`` if no activity task was polled, raises a PollTimeout exception. :param task_list: task list the Actor should watch for tasks on :type task_list: string :param identity: Identity of the worker making the request, which is recorded in the ActivityTaskStarted event in the workflow history. This enables diagnostic tracing when problems arise. The form of this identity is user defined. :type identity: string :raises: PollTimeout :returns: task token, polled activity task :rtype: (str, ActivityTask) """ logging_context.reset() task_list = task_list or self.task_list identity = identity or self._identity try: task = self.connection.poll_for_activity_task( self.domain.name, task_list, identity=format.identity(identity), ) except boto.exception.SWFResponseError as e: message = self.get_error_message(e) if e.error_code == 'UnknownResourceFault': raise DoesNotExistError( "Unable to poll activity task", message, ) raise ResponseError(message) if 'taskToken' not in task: raise PollTimeout("Activity Worker poll timed out") logging_context.set("workflow_id", task["workflowExecution"]["workflowId"]) logging_context.set("task_type", "activity") logging_context.set("event_id", task["startedEventId"]) logging_context.set("activity_id", task["activityId"]) activity_task = ActivityTask.from_poll( self.domain, self.task_list, task, ) return Response( task_token=activity_task.task_token, activity_task=activity_task, raw_response=task, )