| Index: third_party/gsutil/boto/boto/swf/layer1_decisions.py | 
| diff --git a/third_party/gsutil/boto/boto/swf/layer1_decisions.py b/third_party/gsutil/boto/boto/swf/layer1_decisions.py | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..6c273aa14d349f42ea7939d7407f396b4e4a50f1 | 
| --- /dev/null | 
| +++ b/third_party/gsutil/boto/boto/swf/layer1_decisions.py | 
| @@ -0,0 +1,287 @@ | 
| +""" | 
| +Helper class for creating decision responses. | 
| +""" | 
| + | 
| + | 
| +class Layer1Decisions: | 
| +    """ | 
| +    Use this object to build a list of decisions for a decision response. | 
| +    Each method call will add append a new decision.  Retrieve the list | 
| +    of decisions from the _data attribute. | 
| + | 
| +    """ | 
| +    def __init__(self): | 
| +        self._data = [] | 
| + | 
| +    def schedule_activity_task(self, | 
| +                               activity_id, | 
| +                               activity_type_name, | 
| +                               activity_type_version, | 
| +                               task_list=None, | 
| +                               control=None, | 
| +                               heartbeat_timeout=None, | 
| +                               schedule_to_close_timeout=None, | 
| +                               schedule_to_start_timeout=None, | 
| +                               start_to_close_timeout=None, | 
| +                               input=None): | 
| +        """ | 
| +        Schedules an activity task. | 
| + | 
| +        :type activity_id: string | 
| +        :param activity_id: The activityId of the type of the activity | 
| +            being scheduled. | 
| + | 
| +        :type activity_type_name: string | 
| +        :param activity_type_name: The name of the type of the activity | 
| +            being scheduled. | 
| + | 
| +        :type activity_type_version: string | 
| +        :param activity_type_version: The version of the type of the | 
| +            activity being scheduled. | 
| + | 
| +        :type task_list: string | 
| +        :param task_list: If set, specifies the name of the task list in | 
| +            which to schedule the activity task. If not specified, the | 
| +            defaultTaskList registered with the activity type will be used. | 
| +            Note: a task list for this activity task must be specified either | 
| +            as a default for the activity type or through this field. If | 
| +            neither this field is set nor a default task list was specified | 
| +            at registration time then a fault will be returned. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'ScheduleActivityTask' | 
| +        attrs = o['scheduleActivityTaskDecisionAttributes'] = {} | 
| +        attrs['activityId'] = activity_id | 
| +        attrs['activityType'] = { | 
| +            'name': activity_type_name, | 
| +            'version': activity_type_version, | 
| +        } | 
| +        if task_list is not None: | 
| +            attrs['taskList'] = {'name': task_list} | 
| +        if control is not None: | 
| +            attrs['control'] = control | 
| +        if heartbeat_timeout is not None: | 
| +            attrs['heartbeatTimeout'] = heartbeat_timeout | 
| +        if schedule_to_close_timeout is not None: | 
| +            attrs['scheduleToCloseTimeout'] = schedule_to_close_timeout | 
| +        if schedule_to_start_timeout is not None: | 
| +            attrs['scheduleToStartTimeout'] = schedule_to_start_timeout | 
| +        if start_to_close_timeout is not None: | 
| +            attrs['startToCloseTimeout'] = start_to_close_timeout | 
| +        if input is not None: | 
| +            attrs['input'] = input | 
| +        self._data.append(o) | 
| + | 
| +    def request_cancel_activity_task(self, activity_id): | 
| +        """ | 
| +        Attempts to cancel a previously scheduled activity task. If | 
| +        the activity task was scheduled but has not been assigned to a | 
| +        worker, then it will be canceled. If the activity task was | 
| +        already assigned to a worker, then the worker will be informed | 
| +        that cancellation has been requested in the response to | 
| +        RecordActivityTaskHeartbeat. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'RequestCancelActivityTask' | 
| +        attrs = o['requestCancelActivityTaskDecisionAttributes'] = {} | 
| +        attrs['activityId'] = activity_id | 
| +        self._data.append(o) | 
| + | 
| +    def record_marker(self, marker_name, details=None): | 
| +        """ | 
| +        Records a MarkerRecorded event in the history. Markers can be | 
| +        used for adding custom information in the history for instance | 
| +        to let deciders know that they do not need to look at the | 
| +        history beyond the marker event. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'RecordMarker' | 
| +        attrs = o['recordMarkerDecisionAttributes'] = {} | 
| +        attrs['markerName'] = marker_name | 
| +        if details is not None: | 
| +            attrs['details'] = details | 
| +        self._data.append(o) | 
| + | 
| +    def complete_workflow_execution(self, result=None): | 
| +        """ | 
| +        Closes the workflow execution and records a WorkflowExecutionCompleted | 
| +        event in the history | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'CompleteWorkflowExecution' | 
| +        attrs = o['completeWorkflowExecutionDecisionAttributes'] = {} | 
| +        if result is not None: | 
| +            attrs['result'] = result | 
| +        self._data.append(o) | 
| + | 
| +    def fail_workflow_execution(self, reason=None, details=None): | 
| +        """ | 
| +        Closes the workflow execution and records a | 
| +        WorkflowExecutionFailed event in the history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'FailWorkflowExecution' | 
| +        attrs = o['failWorkflowExecutionDecisionAttributes'] = {} | 
| +        if reason is not None: | 
| +            attrs['reason'] = reason | 
| +        if details is not None: | 
| +            attrs['details'] = details | 
| +        self._data.append(o) | 
| + | 
| +    def cancel_workflow_executions(self, details=None): | 
| +        """ | 
| +        Closes the workflow execution and records a WorkflowExecutionCanceled | 
| +        event in the history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'CancelWorkflowExecution' | 
| +        attrs = o['cancelWorkflowExecutionsDecisionAttributes'] = {} | 
| +        if details is not None: | 
| +            attrs['details'] = details | 
| +        self._data.append(o) | 
| + | 
| +    def continue_as_new_workflow_execution(self, | 
| +                                           child_policy=None, | 
| +                                           execution_start_to_close_timeout=None, | 
| +                                           input=None, | 
| +                                           tag_list=None, | 
| +                                           task_list=None, | 
| +                                           start_to_close_timeout=None, | 
| +                                           workflow_type_version=None): | 
| +        """ | 
| +        Closes the workflow execution and starts a new workflow execution of | 
| +        the same type using the same workflow id and a unique run Id. A | 
| +        WorkflowExecutionContinuedAsNew event is recorded in the history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'ContinueAsNewWorkflowExecution' | 
| +        attrs = o['continueAsNewWorkflowExecutionDecisionAttributes'] = {} | 
| +        if child_policy is not None: | 
| +            attrs['childPolicy'] = child_policy | 
| +        if execution_start_to_close_timeout is not None: | 
| +            attrs['executionStartToCloseTimeout'] = execution_start_to_close_timeout | 
| +        if input is not None: | 
| +            attrs['input'] = input | 
| +        if tag_list is not None: | 
| +            attrs['tagList'] = tag_list | 
| +        if task_list is not None: | 
| +            attrs['taskList'] = {'name': task_list} | 
| +        if start_to_close_timeout is not None: | 
| +            attrs['startToCloseTimeout'] = start_to_close_timeout | 
| +        if workflow_type_version is not None: | 
| +            attrs['workflowTypeVersion'] = workflow_type_version | 
| +        self._data.append(o) | 
| + | 
| +    def start_timer(self, | 
| +                    start_to_fire_timeout, | 
| +                    timer_id, | 
| +                    control=None): | 
| +        """ | 
| +        Starts a timer for this workflow execution and records a TimerStarted | 
| +        event in the history.  This timer will fire after the specified delay | 
| +        and record a TimerFired event. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'StartTimer' | 
| +        attrs = o['startTimerDecisionAttributes'] = {} | 
| +        attrs['startToFireTimeout'] = start_to_fire_timeout | 
| +        attrs['timerId'] = timer_id | 
| +        if control is not None: | 
| +            attrs['control'] = control | 
| +        self._data.append(o) | 
| + | 
| +    def cancel_timer(self, timer_id): | 
| +        """ | 
| +        Cancels a previously started timer and records a TimerCanceled | 
| +        event in the history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'CancelTimer' | 
| +        attrs = o['cancelTimerDecisionAttributes'] = {} | 
| +        attrs['timerId'] = timer_id | 
| +        self._data.append(o) | 
| + | 
| +    def signal_external_workflow_execution(self, | 
| +                                           workflow_id, | 
| +                                           signal_name, | 
| +                                           run_id=None, | 
| +                                           control=None, | 
| +                                           input=None): | 
| +        """ | 
| +        Requests a signal to be delivered to the specified external workflow | 
| +        execution and records a SignalExternalWorkflowExecutionInitiated | 
| +        event in the history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'SignalExternalWorkflowExecution' | 
| +        attrs = o['signalExternalWorkflowExecutionDecisionAttributes'] = {} | 
| +        attrs['workflowId'] = workflow_id | 
| +        attrs['signalName'] = signal_name | 
| +        if run_id is not None: | 
| +            attrs['runId'] = run_id | 
| +        if control is not None: | 
| +            attrs['control'] = control | 
| +        if input is not None: | 
| +            attrs['input'] = input | 
| +        self._data.append(o) | 
| + | 
| +    def request_cancel_external_workflow_execution(self, | 
| +                                                   workflow_id, | 
| +                                                   control=None, | 
| +                                                   run_id=None): | 
| +        """ | 
| +        Requests that a request be made to cancel the specified | 
| +        external workflow execution and records a | 
| +        RequestCancelExternalWorkflowExecutionInitiated event in the | 
| +        history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'RequestCancelExternalWorkflowExecution' | 
| +        attrs = o['requestCancelExternalWorkflowExecutionDecisionAttributes'] = {} | 
| +        attrs['workflowId'] = workflow_id | 
| +        if control is not None: | 
| +            attrs['control'] = control | 
| +        if run_id is not None: | 
| +            attrs['runId'] = run_id | 
| +        self._data.append(o) | 
| + | 
| +    def start_child_workflow_execution(self, | 
| +                                       workflow_type_name, | 
| +                                       workflow_type_version, | 
| +                                       workflow_id, | 
| +                                       child_policy=None, | 
| +                                       control=None, | 
| +                                       execution_start_to_close_timeout=None, | 
| +                                       input=None, | 
| +                                       tag_list=None, | 
| +                                       task_list=None, | 
| +                                       task_start_to_close_timeout=None): | 
| +        """ | 
| +        Requests that a child workflow execution be started and | 
| +        records a StartChildWorkflowExecutionInitiated event in the | 
| +        history.  The child workflow execution is a separate workflow | 
| +        execution with its own history. | 
| +        """ | 
| +        o = {} | 
| +        o['decisionType'] = 'StartChildWorkflowExecution' | 
| +        attrs = o['startChildWorkflowExecutionDecisionAttributes'] = {} | 
| +        attrs['workflowType'] = { | 
| +            'name': workflow_type_name, | 
| +            'version': workflow_type_version, | 
| +        } | 
| +        attrs['workflowId'] = workflow_id | 
| +        if child_policy is not None: | 
| +            attrs['childPolicy'] = child_policy | 
| +        if control is not None: | 
| +            attrs['control'] = control | 
| +        if execution_start_to_close_timeout is not None: | 
| +            attrs['executionStartToCloseTimeout'] = execution_start_to_close_timeout | 
| +        if input is not None: | 
| +            attrs['input'] = input | 
| +        if tag_list is not None: | 
| +            attrs['tagList'] = tag_list | 
| +        if task_list is not None: | 
| +            attrs['taskList'] = {'name': task_list} | 
| +        if task_start_to_close_timeout is not None: | 
| +            attrs['taskStartToCloseTimeout'] = task_start_to_close_timeout | 
| +        self._data.append(o) | 
|  |