Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/boto/swf/layer1.py @ 2:6af9afd405e9 draft
"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author | shellac |
---|---|
date | Thu, 14 May 2020 14:56:58 -0400 |
parents | 26e78fe6e8c4 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/boto/swf/layer1.py Thu May 14 14:56:58 2020 -0400 @@ -0,0 +1,1513 @@ +# Copyright (c) 2012 Mitch Garnaat http://garnaat.org/ +# Copyright (c) 2012 Amazon.com, Inc. or its affiliates. +# All Rights Reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + +import time + +import boto +from boto.connection import AWSAuthConnection +from boto.provider import Provider +from boto.exception import SWFResponseError +from boto.swf import exceptions as swf_exceptions +from boto.compat import json + +# +# To get full debug output, uncomment the following line and set the +# value of Debug to be 2 +# +#boto.set_stream_logger('swf') +Debug = 0 + + +class Layer1(AWSAuthConnection): + """ + Low-level interface to Simple WorkFlow Service. + """ + + DefaultRegionName = 'us-east-1' + """The default region name for Simple Workflow.""" + + ServiceName = 'com.amazonaws.swf.service.model.SimpleWorkflowService' + """The name of the Service""" + + # In some cases, the fault response __type value is mapped to + # an exception class more specific than SWFResponseError. + _fault_excp = { + 'com.amazonaws.swf.base.model#DomainAlreadyExistsFault': + swf_exceptions.SWFDomainAlreadyExistsError, + 'com.amazonaws.swf.base.model#LimitExceededFault': + swf_exceptions.SWFLimitExceededError, + 'com.amazonaws.swf.base.model#OperationNotPermittedFault': + swf_exceptions.SWFOperationNotPermittedError, + 'com.amazonaws.swf.base.model#TypeAlreadyExistsFault': + swf_exceptions.SWFTypeAlreadyExistsError, + 'com.amazonaws.swf.base.model#WorkflowExecutionAlreadyStartedFault': + swf_exceptions.SWFWorkflowExecutionAlreadyStartedError, + } + + ResponseError = SWFResponseError + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=True, port=None, proxy=None, proxy_port=None, + debug=0, session_token=None, region=None, profile_name=None): + if not region: + region_name = boto.config.get('SWF', 'region', + self.DefaultRegionName) + for reg in boto.swf.regions(): + if reg.name == region_name: + region = reg + break + + self.region = region + super(Layer1, self).__init__(self.region.endpoint, + aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, + debug, session_token, profile_name=profile_name) + + def _required_auth_capability(self): + return ['hmac-v4'] + + @classmethod + def _normalize_request_dict(cls, data): + """ + This class method recurses through request data dictionary and removes + any default values. + + :type data: dict + :param data: Specifies request parameters with default values to be removed. + """ + for item in list(data.keys()): + if isinstance(data[item], dict): + cls._normalize_request_dict(data[item]) + if data[item] in (None, {}): + del data[item] + + def json_request(self, action, data, object_hook=None): + """ + This method wraps around make_request() to normalize and serialize the + dictionary with request parameters. + + :type action: string + :param action: Specifies an SWF action. + + :type data: dict + :param data: Specifies request parameters associated with the action. + """ + self._normalize_request_dict(data) + json_input = json.dumps(data) + return self.make_request(action, json_input, object_hook) + + def make_request(self, action, body='', object_hook=None): + """ + :raises: ``SWFResponseError`` if response status is not 200. + """ + headers = {'X-Amz-Target': '%s.%s' % (self.ServiceName, action), + 'Host': self.region.endpoint, + 'Content-Type': 'application/json; charset=UTF-8', + 'Content-Encoding': 'amz-1.0', + 'Content-Length': str(len(body))} + http_request = self.build_base_http_request('POST', '/', '/', + {}, headers, body, None) + response = self._mexe(http_request, sender=None, + override_num_retries=10) + response_body = response.read().decode('utf-8') + boto.log.debug(response_body) + if response.status == 200: + if response_body: + return json.loads(response_body, object_hook=object_hook) + else: + return None + else: + json_body = json.loads(response_body) + fault_name = json_body.get('__type', None) + # Certain faults get mapped to more specific exception classes. + excp_cls = self._fault_excp.get(fault_name, self.ResponseError) + raise excp_cls(response.status, response.reason, body=json_body) + + # Actions related to Activities + + def poll_for_activity_task(self, domain, task_list, identity=None): + """ + Used by workers to get an ActivityTask from the specified + activity taskList. This initiates a long poll, where the + service holds the HTTP connection open and responds as soon as + a task becomes available. The maximum time the service holds + on to the request before responding is 60 seconds. If no task + is available within 60 seconds, the poll will return an empty + result. An empty result, in this context, means that an + ActivityTask is returned, but that the value of taskToken is + an empty string. If a task is returned, the worker should use + its type to identify and process it correctly. + + :type domain: string + :param domain: The name of the domain that contains the task + lists being polled. + + :type task_list: string + :param task_list: Specifies the task list to poll for activity tasks. + + :type identity: 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. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('PollForActivityTask', { + 'domain': domain, + 'taskList': {'name': task_list}, + 'identity': identity, + }) + + def respond_activity_task_completed(self, task_token, result=None): + """ + Used by workers to tell the service that the ActivityTask + identified by the taskToken completed successfully with a + result (if provided). + + :type task_token: string + :param task_token: The taskToken of the ActivityTask. + + :type result: string + :param result: The result of the activity task. It is a free + form string that is implementation specific. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RespondActivityTaskCompleted', { + 'taskToken': task_token, + 'result': result, + }) + + def respond_activity_task_failed(self, task_token, + details=None, reason=None): + """ + Used by workers to tell the service that the ActivityTask + identified by the taskToken has failed with reason (if + specified). + + :type task_token: string + :param task_token: The taskToken of the ActivityTask. + + :type details: string + :param details: Optional detailed information about the failure. + + :type reason: string + :param reason: Description of the error that may assist in diagnostics. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RespondActivityTaskFailed', { + 'taskToken': task_token, + 'details': details, + 'reason': reason, + }) + + def respond_activity_task_canceled(self, task_token, details=None): + """ + Used by workers to tell the service that the ActivityTask + identified by the taskToken was successfully + canceled. Additional details can be optionally provided using + the details argument. + + :type task_token: string + :param task_token: The taskToken of the ActivityTask. + + :type details: string + :param details: Optional detailed information about the failure. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RespondActivityTaskCanceled', { + 'taskToken': task_token, + 'details': details, + }) + + def record_activity_task_heartbeat(self, task_token, details=None): + """ + Used by activity workers to report to the service that the + ActivityTask represented by the specified taskToken is still + making progress. The worker can also (optionally) specify + details of the progress, for example percent complete, using + the details parameter. This action can also be used by the + worker as a mechanism to check if cancellation is being + requested for the activity task. If a cancellation is being + attempted for the specified task, then the boolean + cancelRequested flag returned by the service is set to true. + + :type task_token: string + :param task_token: The taskToken of the ActivityTask. + + :type details: string + :param details: If specified, contains details about the + progress of the task. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RecordActivityTaskHeartbeat', { + 'taskToken': task_token, + 'details': details, + }) + + # Actions related to Deciders + + def poll_for_decision_task(self, domain, task_list, identity=None, + maximum_page_size=None, + next_page_token=None, + reverse_order=None): + """ + Used by deciders to get a DecisionTask from the specified + decision taskList. A decision task may be returned for any + open workflow execution that is using the specified task + list. The task includes a paginated view of the history of the + workflow execution. The decider should use the workflow type + and the history to determine how to properly handle the task. + + :type domain: string + :param domain: The name of the domain containing the task + lists to poll. + + :type task_list: string + :param task_list: Specifies the task list to poll for decision tasks. + + :type identity: string + :param identity: Identity of the decider making the request, + which is recorded in the DecisionTaskStarted event in the + workflow history. This enables diagnostic tracing when + problems arise. The form of this identity is user defined. + + :type maximum_page_size: integer :param maximum_page_size: The + maximum number of history events returned in each page. The + default is 100, but the caller can override this value to a + page size smaller than the default. You cannot specify a page + size greater than 100. + + :type next_page_token: string + :param next_page_token: If on a previous call to this method a + NextPageToken was returned, the results are being paginated. + To get the next page of results, repeat the call with the + returned token and all other arguments unchanged. + + :type reverse_order: boolean + :param reverse_order: When set to true, returns the events in + reverse order. By default the results are returned in + ascending order of the eventTimestamp of the events. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('PollForDecisionTask', { + 'domain': domain, + 'taskList': {'name': task_list}, + 'identity': identity, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + + def respond_decision_task_completed(self, task_token, + decisions=None, + execution_context=None): + """ + Used by deciders to tell the service that the DecisionTask + identified by the taskToken has successfully completed. + The decisions argument specifies the list of decisions + made while processing the task. + + :type task_token: string + :param task_token: The taskToken of the ActivityTask. + + :type decisions: list + :param decisions: The list of decisions (possibly empty) made by + the decider while processing this decision task. See the docs + for the Decision structure for details. + + :type execution_context: string + :param execution_context: User defined context to add to + workflow execution. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RespondDecisionTaskCompleted', { + 'taskToken': task_token, + 'decisions': decisions, + 'executionContext': execution_context, + }) + + def request_cancel_workflow_execution(self, domain, workflow_id, + run_id=None): + """ + Records a WorkflowExecutionCancelRequested event in the + currently running workflow execution identified by the given + domain, workflowId, and runId. This logically requests the + cancellation of the workflow execution as a whole. It is up to + the decider to take appropriate actions when it receives an + execution history with this event. + + :type domain: string + :param domain: The name of the domain containing the workflow + execution to cancel. + + :type run_id: string + :param run_id: The runId of the workflow execution to cancel. + + :type workflow_id: string + :param workflow_id: The workflowId of the workflow execution + to cancel. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RequestCancelWorkflowExecution', { + 'domain': domain, + 'workflowId': workflow_id, + 'runId': run_id, + }) + + def start_workflow_execution(self, domain, workflow_id, + workflow_name, workflow_version, + task_list=None, child_policy=None, + execution_start_to_close_timeout=None, + input=None, tag_list=None, + task_start_to_close_timeout=None): + """ + Starts an execution of the workflow type in the specified + domain using the provided workflowId and input data. + + :type domain: string + :param domain: The name of the domain in which the workflow + execution is created. + + :type workflow_id: string + :param workflow_id: The user defined identifier associated with + the workflow execution. You can use this to associate a + custom identifier with the workflow execution. You may + specify the same identifier if a workflow execution is + logically a restart of a previous execution. You cannot + have two open workflow executions with the same workflowId + at the same time. + + :type workflow_name: string + :param workflow_name: The name of the workflow type. + + :type workflow_version: string + :param workflow_version: The version of the workflow type. + + :type task_list: string + :param task_list: The task list to use for the decision tasks + generated for this workflow execution. This overrides the + defaultTaskList specified when registering the workflow type. + + :type child_policy: string + :param child_policy: If set, specifies the policy to use for the + child workflow executions of this workflow execution if it + is terminated, by calling the TerminateWorkflowExecution + action explicitly or due to an expired timeout. This policy + overrides the default child policy specified when registering + the workflow type using RegisterWorkflowType. The supported + child policies are: + + * TERMINATE: the child executions will be terminated. + * REQUEST_CANCEL: a request to cancel will be attempted + for each child execution by recording a + WorkflowExecutionCancelRequested event in its history. + It is up to the decider to take appropriate actions + when it receives an execution history with this event. + * ABANDON: no action will be taken. The child executions + will continue to run. + + :type execution_start_to_close_timeout: string + :param execution_start_to_close_timeout: The total duration for + this workflow execution. This overrides the + defaultExecutionStartToCloseTimeout specified when + registering the workflow type. + + :type input: string + :param input: The input for the workflow + execution. This is a free form string which should be + meaningful to the workflow you are starting. This input is + made available to the new workflow execution in the + WorkflowExecutionStarted history event. + + :type tag_list: list :param tag_list: The list of tags to + associate with the workflow execution. You can specify a + maximum of 5 tags. You can list workflow executions with a + specific tag by calling list_open_workflow_executions or + list_closed_workflow_executions and specifying a TagFilter. + + :type task_start_to_close_timeout: string :param + task_start_to_close_timeout: Specifies the maximum duration of + decision tasks for this workflow execution. This parameter + overrides the defaultTaskStartToCloseTimout specified when + registering the workflow type using register_workflow_type. + + :raises: UnknownResourceFault, TypeDeprecatedFault, + SWFWorkflowExecutionAlreadyStartedError, SWFLimitExceededError, + SWFOperationNotPermittedError, DefaultUndefinedFault + """ + return self.json_request('StartWorkflowExecution', { + 'domain': domain, + 'workflowId': workflow_id, + 'workflowType': {'name': workflow_name, + 'version': workflow_version}, + 'taskList': {'name': task_list}, + 'childPolicy': child_policy, + 'executionStartToCloseTimeout': execution_start_to_close_timeout, + 'input': input, + 'tagList': tag_list, + 'taskStartToCloseTimeout': task_start_to_close_timeout, + + }) + + def signal_workflow_execution(self, domain, signal_name, workflow_id, + input=None, run_id=None): + """ + Records a WorkflowExecutionSignaled event in the workflow + execution history and creates a decision task for the workflow + execution identified by the given domain, workflowId and + runId. The event is recorded with the specified user defined + signalName and input (if provided). + + :type domain: string + :param domain: The name of the domain containing the workflow + execution to signal. + + :type signal_name: string + :param signal_name: The name of the signal. This name must be + meaningful to the target workflow. + + :type workflow_id: string + :param workflow_id: The workflowId of the workflow execution + to signal. + + :type input: string + :param input: Data to attach to the WorkflowExecutionSignaled + event in the target workflow execution's history. + + :type run_id: string + :param run_id: The runId of the workflow execution to signal. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('SignalWorkflowExecution', { + 'domain': domain, + 'signalName': signal_name, + 'workflowId': workflow_id, + 'input': input, + 'runId': run_id, + }) + + def terminate_workflow_execution(self, domain, workflow_id, + child_policy=None, details=None, + reason=None, run_id=None): + """ + Records a WorkflowExecutionTerminated event and forces closure + of the workflow execution identified by the given domain, + runId, and workflowId. The child policy, registered with the + workflow type or specified when starting this execution, is + applied to any open child workflow executions of this workflow + execution. + + :type domain: string + :param domain: The domain of the workflow execution to terminate. + + :type workflow_id: string + :param workflow_id: The workflowId of the workflow execution + to terminate. + + :type child_policy: string + :param child_policy: If set, specifies the policy to use for + the child workflow executions of the workflow execution being + terminated. This policy overrides the child policy specified + for the workflow execution at registration time or when + starting the execution. The supported child policies are: + + * TERMINATE: the child executions will be terminated. + + * REQUEST_CANCEL: a request to cancel will be attempted + for each child execution by recording a + WorkflowExecutionCancelRequested event in its + history. It is up to the decider to take appropriate + actions when it receives an execution history with this + event. + + * ABANDON: no action will be taken. The child executions + will continue to run. + + :type details: string + :param details: Optional details for terminating the + workflow execution. + + :type reason: string + :param reason: An optional descriptive reason for terminating + the workflow execution. + + :type run_id: string + :param run_id: The runId of the workflow execution to terminate. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('TerminateWorkflowExecution', { + 'domain': domain, + 'workflowId': workflow_id, + 'childPolicy': child_policy, + 'details': details, + 'reason': reason, + 'runId': run_id, + }) + +# Actions related to Administration + +## Activity Management + + def register_activity_type(self, domain, name, version, task_list=None, + default_task_heartbeat_timeout=None, + default_task_schedule_to_close_timeout=None, + default_task_schedule_to_start_timeout=None, + default_task_start_to_close_timeout=None, + description=None): + """ + Registers a new activity type along with its configuration + settings in the specified domain. + + :type domain: string + :param domain: The name of the domain in which this activity is + to be registered. + + :type name: string + :param name: The name of the activity type within the domain. + + :type version: string + :param version: The version of the activity type. + + :type task_list: string + :param task_list: If set, specifies the default task list to + use for scheduling tasks of this activity type. This default + task list is used if a task list is not provided when a task + is scheduled through the schedule_activity_task Decision. + + :type default_task_heartbeat_timeout: string + :param default_task_heartbeat_timeout: If set, specifies the + default maximum time before which a worker processing a task + of this type must report progress by calling + RecordActivityTaskHeartbeat. If the timeout is exceeded, the + activity task is automatically timed out. This default can be + overridden when scheduling an activity task using the + ScheduleActivityTask Decision. If the activity worker + subsequently attempts to record a heartbeat or returns a + result, the activity worker receives an UnknownResource + fault. In this case, Amazon SWF no longer considers the + activity task to be valid; the activity worker should clean up + the activity task.no docs + + :type default_task_schedule_to_close_timeout: string + :param default_task_schedule_to_close_timeout: If set, + specifies the default maximum duration for a task of this + activity type. This default can be overridden when scheduling + an activity task using the ScheduleActivityTask Decision.no + docs + + :type default_task_schedule_to_start_timeout: string + :param default_task_schedule_to_start_timeout: If set, + specifies the default maximum duration that a task of this + activity type can wait before being assigned to a worker. This + default can be overridden when scheduling an activity task + using the ScheduleActivityTask Decision. + + :type default_task_start_to_close_timeout: string + :param default_task_start_to_close_timeout: If set, specifies + the default maximum duration that a worker can take to process + tasks of this activity type. This default can be overridden + when scheduling an activity task using the + ScheduleActivityTask Decision. + + :type description: string + :param description: A textual description of the activity type. + + :raises: SWFTypeAlreadyExistsError, SWFLimitExceededError, + UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RegisterActivityType', { + 'domain': domain, + 'name': name, + 'version': version, + 'defaultTaskList': {'name': task_list}, + 'defaultTaskHeartbeatTimeout': default_task_heartbeat_timeout, + 'defaultTaskScheduleToCloseTimeout': default_task_schedule_to_close_timeout, + 'defaultTaskScheduleToStartTimeout': default_task_schedule_to_start_timeout, + 'defaultTaskStartToCloseTimeout': default_task_start_to_close_timeout, + 'description': description, + }) + + def deprecate_activity_type(self, domain, activity_name, activity_version): + """ + Deprecates the specified activity type. After an activity + type has been deprecated, you cannot create new tasks of + that activity type. Tasks of this type that were scheduled + before the type was deprecated will continue to run. + + :type domain: string + :param domain: The name of the domain in which the activity + type is registered. + + :type activity_name: string + :param activity_name: The name of this activity. + + :type activity_version: string + :param activity_version: The version of this activity. + + :raises: UnknownResourceFault, TypeDeprecatedFault, + SWFOperationNotPermittedError + """ + return self.json_request('DeprecateActivityType', { + 'domain': domain, + 'activityType': {'name': activity_name, + 'version': activity_version} + }) + +## Workflow Management + + def register_workflow_type(self, domain, name, version, + task_list=None, + default_child_policy=None, + default_execution_start_to_close_timeout=None, + default_task_start_to_close_timeout=None, + description=None): + """ + Registers a new workflow type and its configuration settings + in the specified domain. + + :type domain: string + :param domain: The name of the domain in which to register + the workflow type. + + :type name: string + :param name: The name of the workflow type. + + :type version: string + :param version: The version of the workflow type. + + :type task_list: list of name, version of tasks + :param task_list: If set, specifies the default task list to use + for scheduling decision tasks for executions of this workflow + type. This default is used only if a task list is not provided + when starting the execution through the StartWorkflowExecution + Action or StartChildWorkflowExecution Decision. + + :type default_child_policy: string + + :param default_child_policy: If set, specifies the default + policy to use for the child workflow executions when a + workflow execution of this type is terminated, by calling the + TerminateWorkflowExecution action explicitly or due to an + expired timeout. This default can be overridden when starting + a workflow execution using the StartWorkflowExecution action + or the StartChildWorkflowExecution Decision. The supported + child policies are: + + * TERMINATE: the child executions will be terminated. + + * REQUEST_CANCEL: a request to cancel will be attempted + for each child execution by recording a + WorkflowExecutionCancelRequested event in its + history. It is up to the decider to take appropriate + actions when it receives an execution history with this + event. + + * ABANDON: no action will be taken. The child executions + will continue to run.no docs + + :type default_execution_start_to_close_timeout: string + :param default_execution_start_to_close_timeout: If set, + specifies the default maximum duration for executions of this + workflow type. You can override this default when starting an + execution through the StartWorkflowExecution Action or + StartChildWorkflowExecution Decision. + + :type default_task_start_to_close_timeout: string + :param default_task_start_to_close_timeout: If set, specifies + the default maximum duration of decision tasks for this + workflow type. This default can be overridden when starting a + workflow execution using the StartWorkflowExecution action or + the StartChildWorkflowExecution Decision. + + :type description: string + :param description: Textual description of the workflow type. + + :raises: SWFTypeAlreadyExistsError, SWFLimitExceededError, + UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('RegisterWorkflowType', { + 'domain': domain, + 'name': name, + 'version': version, + 'defaultTaskList': {'name': task_list}, + 'defaultChildPolicy': default_child_policy, + 'defaultExecutionStartToCloseTimeout': default_execution_start_to_close_timeout, + 'defaultTaskStartToCloseTimeout': default_task_start_to_close_timeout, + 'description': description, + }) + + def deprecate_workflow_type(self, domain, workflow_name, workflow_version): + """ + Deprecates the specified workflow type. After a workflow type + has been deprecated, you cannot create new executions of that + type. Executions that were started before the type was + deprecated will continue to run. A deprecated workflow type + may still be used when calling visibility actions. + + :type domain: string + :param domain: The name of the domain in which the workflow + type is registered. + + :type workflow_name: string + :param workflow_name: The name of the workflow type. + + :type workflow_version: string + :param workflow_version: The version of the workflow type. + + :raises: UnknownResourceFault, TypeDeprecatedFault, + SWFOperationNotPermittedError + """ + return self.json_request('DeprecateWorkflowType', { + 'domain': domain, + 'workflowType': {'name': workflow_name, + 'version': workflow_version}, + }) + +## Domain Management + + def register_domain(self, name, + workflow_execution_retention_period_in_days, + description=None): + """ + Registers a new domain. + + :type name: string + :param name: Name of the domain to register. The name must be unique. + + :type workflow_execution_retention_period_in_days: string + + :param workflow_execution_retention_period_in_days: Specifies + the duration *in days* for which the record (including the + history) of workflow executions in this domain should be kept + by the service. After the retention period, the workflow + execution will not be available in the results of visibility + calls. If a duration of NONE is specified, the records for + workflow executions in this domain are not retained at all. + + :type description: string + :param description: Textual description of the domain. + + :raises: SWFDomainAlreadyExistsError, SWFLimitExceededError, + SWFOperationNotPermittedError + """ + return self.json_request('RegisterDomain', { + 'name': name, + 'workflowExecutionRetentionPeriodInDays': workflow_execution_retention_period_in_days, + 'description': description, + }) + + def deprecate_domain(self, name): + """ + Deprecates the specified domain. After a domain has been + deprecated it cannot be used to create new workflow executions + or register new types. However, you can still use visibility + actions on this domain. Deprecating a domain also deprecates + all activity and workflow types registered in the + domain. Executions that were started before the domain was + deprecated will continue to run. + + :type name: string + :param name: The name of the domain to deprecate. + + :raises: UnknownResourceFault, DomainDeprecatedFault, + SWFOperationNotPermittedError + """ + return self.json_request('DeprecateDomain', {'name': name}) + +# Visibility Actions + +## Activity Visibility + + def list_activity_types(self, domain, registration_status, + name=None, + maximum_page_size=None, + next_page_token=None, reverse_order=None): + """ + Returns information about all activities registered in the + specified domain that match the specified name and + registration status. The result includes information like + creation date, current status of the activity, etc. The + results may be split into multiple pages. To retrieve + subsequent pages, make the call again using the nextPageToken + returned by the initial call. + + :type domain: string + :param domain: The name of the domain in which the activity + types have been registered. + + :type registration_status: string + :param registration_status: Specifies the registration status + of the activity types to list. Valid values are: + + * REGISTERED + * DEPRECATED + + :type name: string + :param name: If specified, only lists the activity types that + have this name. + + :type maximum_page_size: integer + :param maximum_page_size: The maximum number of results + returned in each page. The default is 100, but the caller can + override this value to a page size smaller than the + default. You cannot specify a page size greater than 100. + + :type next_page_token: string + :param next_page_token: If on a previous call to this method a + NextResultToken was returned, the results have more than one + page. To get the next page of results, repeat the call with + the nextPageToken and keep all other arguments unchanged. + + :type reverse_order: boolean + + :param reverse_order: When set to true, returns the results in + reverse order. By default the results are returned in + ascending alphabetical order of the name of the activity + types. + + :raises: SWFOperationNotPermittedError, UnknownResourceFault + """ + return self.json_request('ListActivityTypes', { + 'domain': domain, + 'name': name, + 'registrationStatus': registration_status, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + + def describe_activity_type(self, domain, activity_name, activity_version): + """ + Returns information about the specified activity type. This + includes configuration settings provided at registration time + as well as other general information about the type. + + :type domain: string + :param domain: The name of the domain in which the activity + type is registered. + + :type activity_name: string + :param activity_name: The name of this activity. + + :type activity_version: string + :param activity_version: The version of this activity. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('DescribeActivityType', { + 'domain': domain, + 'activityType': {'name': activity_name, + 'version': activity_version} + }) + +## Workflow Visibility + + def list_workflow_types(self, domain, registration_status, + maximum_page_size=None, name=None, + next_page_token=None, reverse_order=None): + """ + Returns information about workflow types in the specified + domain. The results may be split into multiple pages that can + be retrieved by making the call repeatedly. + + :type domain: string + :param domain: The name of the domain in which the workflow + types have been registered. + + :type registration_status: string + :param registration_status: Specifies the registration status + of the activity types to list. Valid values are: + + * REGISTERED + * DEPRECATED + + :type name: string + :param name: If specified, lists the workflow type with this name. + + :type maximum_page_size: integer + :param maximum_page_size: The maximum number of results + returned in each page. The default is 100, but the caller can + override this value to a page size smaller than the + default. You cannot specify a page size greater than 100. + + :type next_page_token: string + :param next_page_token: If on a previous call to this method a + NextPageToken was returned, the results are being + paginated. To get the next page of results, repeat the call + with the returned token and all other arguments unchanged. + + :type reverse_order: boolean + :param reverse_order: When set to true, returns the results in + reverse order. By default the results are returned in + ascending alphabetical order of the name of the workflow + types. + + :raises: SWFOperationNotPermittedError, UnknownResourceFault + """ + return self.json_request('ListWorkflowTypes', { + 'domain': domain, + 'name': name, + 'registrationStatus': registration_status, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + + def describe_workflow_type(self, domain, workflow_name, workflow_version): + """ + Returns information about the specified workflow type. This + includes configuration settings specified when the type was + registered and other information such as creation date, + current status, etc. + + :type domain: string + :param domain: The name of the domain in which this workflow + type is registered. + + :type workflow_name: string + :param workflow_name: The name of the workflow type. + + :type workflow_version: string + :param workflow_version: The version of the workflow type. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('DescribeWorkflowType', { + 'domain': domain, + 'workflowType': {'name': workflow_name, + 'version': workflow_version} + }) + +## Workflow Execution Visibility + + def describe_workflow_execution(self, domain, run_id, workflow_id): + """ + Returns information about the specified workflow execution + including its type and some statistics. + + :type domain: string + :param domain: The name of the domain containing the + workflow execution. + + :type run_id: string + :param run_id: A system generated unique identifier for the + workflow execution. + + :type workflow_id: string + :param workflow_id: The user defined identifier associated + with the workflow execution. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('DescribeWorkflowExecution', { + 'domain': domain, + 'execution': {'runId': run_id, + 'workflowId': workflow_id}, + }) + + def get_workflow_execution_history(self, domain, run_id, workflow_id, + maximum_page_size=None, + next_page_token=None, + reverse_order=None): + """ + Returns the history of the specified workflow execution. The + results may be split into multiple pages. To retrieve + subsequent pages, make the call again using the nextPageToken + returned by the initial call. + + :type domain: string + :param domain: The name of the domain containing the + workflow execution. + + :type run_id: string + :param run_id: A system generated unique identifier for the + workflow execution. + + :type workflow_id: string + :param workflow_id: The user defined identifier associated + with the workflow execution. + + :type maximum_page_size: integer + :param maximum_page_size: Specifies the maximum number of + history events returned in one page. The next page in the + result is identified by the NextPageToken returned. By default + 100 history events are returned in a page but the caller can + override this value to a page size smaller than the + default. You cannot specify a page size larger than 100. + + :type next_page_token: string + :param next_page_token: If a NextPageToken is returned, the + result has more than one pages. To get the next page, repeat + the call and specify the nextPageToken with all other + arguments unchanged. + + :type reverse_order: boolean + :param reverse_order: When set to true, returns the events in + reverse order. By default the results are returned in + ascending order of the eventTimeStamp of the events. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('GetWorkflowExecutionHistory', { + 'domain': domain, + 'execution': {'runId': run_id, + 'workflowId': workflow_id}, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + + def count_open_workflow_executions(self, domain, latest_date, oldest_date, + tag=None, + workflow_id=None, + workflow_name=None, + workflow_version=None): + """ + Returns the number of open workflow executions within the + given domain that meet the specified filtering criteria. + + .. note: + workflow_id, workflow_name/workflow_version and tag are mutually + exclusive. You can specify at most one of these in a request. + + :type domain: string + :param domain: The name of the domain containing the + workflow executions to count. + + :type latest_date: timestamp + :param latest_date: Specifies the latest start or close date + and time to return. + + :type oldest_date: timestamp + :param oldest_date: Specifies the oldest start or close date + and time to return. + + :type workflow_name: string + :param workflow_name: Name of the workflow type to filter on. + + :type workflow_version: string + :param workflow_version: Version of the workflow type to filter on. + + :type tag: string + :param tag: If specified, only executions that have a tag + that matches the filter are counted. + + :type workflow_id: string + :param workflow_id: If specified, only workflow executions + matching the workflow_id are counted. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('CountOpenWorkflowExecutions', { + 'domain': domain, + 'startTimeFilter': {'oldestDate': oldest_date, + 'latestDate': latest_date}, + 'typeFilter': {'name': workflow_name, + 'version': workflow_version}, + 'executionFilter': {'workflowId': workflow_id}, + 'tagFilter': {'tag': tag}, + }) + + def list_open_workflow_executions(self, domain, + oldest_date, + latest_date=None, + tag=None, + workflow_id=None, + workflow_name=None, + workflow_version=None, + maximum_page_size=None, + next_page_token=None, + reverse_order=None): + """ + Returns the list of open workflow executions within the + given domain that meet the specified filtering criteria. + + .. note: + workflow_id, workflow_name/workflow_version + and tag are mutually exclusive. You can specify at most + one of these in a request. + + :type domain: string + :param domain: The name of the domain containing the + workflow executions to count. + + :type latest_date: timestamp + :param latest_date: Specifies the latest start or close date + and time to return. + + :type oldest_date: timestamp + :param oldest_date: Specifies the oldest start or close date + and time to return. + + :type tag: string + :param tag: If specified, only executions that have a tag + that matches the filter are counted. + + :type workflow_id: string + :param workflow_id: If specified, only workflow executions + matching the workflow_id are counted. + + :type workflow_name: string + :param workflow_name: Name of the workflow type to filter on. + + :type workflow_version: string + :param workflow_version: Version of the workflow type to filter on. + + :type maximum_page_size: integer + :param maximum_page_size: The maximum number of results + returned in each page. The default is 100, but the caller can + override this value to a page size smaller than the + default. You cannot specify a page size greater than 100. + + :type next_page_token: string + :param next_page_token: If on a previous call to this method a + NextPageToken was returned, the results are being + paginated. To get the next page of results, repeat the call + with the returned token and all other arguments unchanged. + + :type reverse_order: boolean + :param reverse_order: When set to true, returns the results in + reverse order. By default the results are returned in + descending order of the start or the close time of the + executions. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + + """ + return self.json_request('ListOpenWorkflowExecutions', { + 'domain': domain, + 'startTimeFilter': {'oldestDate': oldest_date, + 'latestDate': latest_date}, + 'tagFilter': {'tag': tag}, + 'typeFilter': {'name': workflow_name, + 'version': workflow_version}, + 'executionFilter': {'workflowId': workflow_id}, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + + def count_closed_workflow_executions(self, domain, + start_latest_date=None, + start_oldest_date=None, + close_latest_date=None, + close_oldest_date=None, + close_status=None, + tag=None, + workflow_id=None, + workflow_name=None, + workflow_version=None): + """ + Returns the number of closed workflow executions within the + given domain that meet the specified filtering criteria. + + .. note: + close_status, workflow_id, workflow_name/workflow_version + and tag are mutually exclusive. You can specify at most + one of these in a request. + + .. note: + start_latest_date/start_oldest_date and + close_latest_date/close_oldest_date are mutually + exclusive. You can specify at most one of these in a request. + + :type domain: string + :param domain: The name of the domain containing the + workflow executions to count. + + :type start_latest_date: timestamp + :param start_latest_date: If specified, only workflow executions + that meet the start time criteria of the filter are counted. + + :type start_oldest_date: timestamp + :param start_oldest_date: If specified, only workflow executions + that meet the start time criteria of the filter are counted. + + :type close_latest_date: timestamp + :param close_latest_date: If specified, only workflow executions + that meet the close time criteria of the filter are counted. + + :type close_oldest_date: timestamp + :param close_oldest_date: If specified, only workflow executions + that meet the close time criteria of the filter are counted. + + :type close_status: string + :param close_status: The close status that must match the close status + of an execution for it to meet the criteria of this filter. + Valid values are: + + * COMPLETED + * FAILED + * CANCELED + * TERMINATED + * CONTINUED_AS_NEW + * TIMED_OUT + + :type tag: string + :param tag: If specified, only executions that have a tag + that matches the filter are counted. + + :type workflow_id: string + :param workflow_id: If specified, only workflow executions + matching the workflow_id are counted. + + :type workflow_name: string + :param workflow_name: Name of the workflow type to filter on. + + :type workflow_version: string + :param workflow_version: Version of the workflow type to filter on. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('CountClosedWorkflowExecutions', { + 'domain': domain, + 'startTimeFilter': {'oldestDate': start_oldest_date, + 'latestDate': start_latest_date}, + 'closeTimeFilter': {'oldestDate': close_oldest_date, + 'latestDate': close_latest_date}, + 'closeStatusFilter': {'status': close_status}, + 'tagFilter': {'tag': tag}, + 'typeFilter': {'name': workflow_name, + 'version': workflow_version}, + 'executionFilter': {'workflowId': workflow_id} + }) + + def list_closed_workflow_executions(self, domain, + start_latest_date=None, + start_oldest_date=None, + close_latest_date=None, + close_oldest_date=None, + close_status=None, + tag=None, + workflow_id=None, + workflow_name=None, + workflow_version=None, + maximum_page_size=None, + next_page_token=None, + reverse_order=None): + """ + Returns the number of closed workflow executions within the + given domain that meet the specified filtering criteria. + + .. note: + close_status, workflow_id, workflow_name/workflow_version + and tag are mutually exclusive. You can specify at most + one of these in a request. + + .. note: + start_latest_date/start_oldest_date and + close_latest_date/close_oldest_date are mutually + exclusive. You can specify at most one of these in a request. + + :type domain: string + :param domain: The name of the domain containing the + workflow executions to count. + + :type start_latest_date: timestamp + :param start_latest_date: If specified, only workflow executions + that meet the start time criteria of the filter are counted. + + :type start_oldest_date: timestamp + :param start_oldest_date: If specified, only workflow executions + that meet the start time criteria of the filter are counted. + + :type close_latest_date: timestamp + :param close_latest_date: If specified, only workflow executions + that meet the close time criteria of the filter are counted. + + :type close_oldest_date: timestamp + :param close_oldest_date: If specified, only workflow executions + that meet the close time criteria of the filter are counted. + + :type close_status: string + :param close_status: The close status that must match the close status + of an execution for it to meet the criteria of this filter. + Valid values are: + + * COMPLETED + * FAILED + * CANCELED + * TERMINATED + * CONTINUED_AS_NEW + * TIMED_OUT + + :type tag: string + :param tag: If specified, only executions that have a tag + that matches the filter are counted. + + :type workflow_id: string + :param workflow_id: If specified, only workflow executions + matching the workflow_id are counted. + + :type workflow_name: string + :param workflow_name: Name of the workflow type to filter on. + + :type workflow_version: string + :param workflow_version: Version of the workflow type to filter on. + + :type maximum_page_size: integer + :param maximum_page_size: The maximum number of results + returned in each page. The default is 100, but the caller can + override this value to a page size smaller than the + default. You cannot specify a page size greater than 100. + + :type next_page_token: string + :param next_page_token: If on a previous call to this method a + NextPageToken was returned, the results are being + paginated. To get the next page of results, repeat the call + with the returned token and all other arguments unchanged. + + :type reverse_order: boolean + :param reverse_order: When set to true, returns the results in + reverse order. By default the results are returned in + descending order of the start or the close time of the + executions. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('ListClosedWorkflowExecutions', { + 'domain': domain, + 'startTimeFilter': {'oldestDate': start_oldest_date, + 'latestDate': start_latest_date}, + 'closeTimeFilter': {'oldestDate': close_oldest_date, + 'latestDate': close_latest_date}, + 'executionFilter': {'workflowId': workflow_id}, + 'closeStatusFilter': {'status': close_status}, + 'tagFilter': {'tag': tag}, + 'typeFilter': {'name': workflow_name, + 'version': workflow_version}, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + +## Domain Visibility + + def list_domains(self, registration_status, + maximum_page_size=None, + next_page_token=None, reverse_order=None): + """ + Returns the list of domains registered in the account. The + results may be split into multiple pages. To retrieve + subsequent pages, make the call again using the nextPageToken + returned by the initial call. + + :type registration_status: string + :param registration_status: Specifies the registration status + of the domains to list. Valid Values: + + * REGISTERED + * DEPRECATED + + :type maximum_page_size: integer + :param maximum_page_size: The maximum number of results + returned in each page. The default is 100, but the caller can + override this value to a page size smaller than the + default. You cannot specify a page size greater than 100. + + :type next_page_token: string + :param next_page_token: If on a previous call to this method a + NextPageToken was returned, the result has more than one + page. To get the next page of results, repeat the call with + the returned token and all other arguments unchanged. + + :type reverse_order: boolean + :param reverse_order: When set to true, returns the results in + reverse order. By default the results are returned in + ascending alphabetical order of the name of the domains. + + :raises: SWFOperationNotPermittedError + """ + return self.json_request('ListDomains', { + 'registrationStatus': registration_status, + 'maximumPageSize': maximum_page_size, + 'nextPageToken': next_page_token, + 'reverseOrder': reverse_order, + }) + + def describe_domain(self, name): + """ + Returns information about the specified domain including + description and status. + + :type name: string + :param name: The name of the domain to describe. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('DescribeDomain', {'name': name}) + +## Task List Visibility + + def count_pending_decision_tasks(self, domain, task_list): + """ + Returns the estimated number of decision tasks in the + specified task list. The count returned is an approximation + and is not guaranteed to be exact. If you specify a task list + that no decision task was ever scheduled in then 0 will be + returned. + + :type domain: string + :param domain: The name of the domain that contains the task list. + + :type task_list: string + :param task_list: The name of the task list. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('CountPendingDecisionTasks', { + 'domain': domain, + 'taskList': {'name': task_list} + }) + + def count_pending_activity_tasks(self, domain, task_list): + """ + Returns the estimated number of activity tasks in the + specified task list. The count returned is an approximation + and is not guaranteed to be exact. If you specify a task list + that no activity task was ever scheduled in then 0 will be + returned. + + :type domain: string + :param domain: The name of the domain that contains the task list. + + :type task_list: string + :param task_list: The name of the task list. + + :raises: UnknownResourceFault, SWFOperationNotPermittedError + """ + return self.json_request('CountPendingActivityTasks', { + 'domain': domain, + 'taskList': {'name': task_list} + })