Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: third_party/gsutil/boto/boto/swf/layer2.py

Issue 12317103: Added gsutil to depot tools (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: added readme Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/boto/boto/swf/layer2.py
diff --git a/third_party/gsutil/boto/boto/swf/layer2.py b/third_party/gsutil/boto/boto/swf/layer2.py
new file mode 100644
index 0000000000000000000000000000000000000000..10c34d558697881085b83d54146ac30b4eee6e9a
--- /dev/null
+++ b/third_party/gsutil/boto/boto/swf/layer2.py
@@ -0,0 +1,342 @@
+"""Object-oriented interface to SWF wrapping boto.swf.layer1.Layer1"""
+
+import time
+from functools import wraps
+from boto.swf.layer1 import Layer1
+from boto.swf.layer1_decisions import Layer1Decisions
+
+DEFAULT_CREDENTIALS = {
+ 'aws_access_key_id': None,
+ 'aws_secret_access_key': None
+}
+
+def set_default_credentials(aws_access_key_id, aws_secret_access_key):
+ """Set default credentials."""
+ DEFAULT_CREDENTIALS.update({
+ 'aws_access_key_id': aws_access_key_id,
+ 'aws_secret_access_key': aws_secret_access_key,
+ })
+
+class SWFBase(object):
+
+ """SWFBase."""
+
+ name = None
+ domain = None
+ aws_access_key_id = None
+ aws_secret_access_key = None
+
+ def __init__(self, **kwargs):
+ """Construct an SWF object."""
+ # Set default credentials.
+ for credkey in ('aws_access_key_id', 'aws_secret_access_key'):
+ if DEFAULT_CREDENTIALS.get(credkey):
+ setattr(self, credkey, DEFAULT_CREDENTIALS[credkey])
+ # Override attributes with keyword args.
+ for kwarg in kwargs:
+ setattr(self, kwarg, kwargs[kwarg])
+
+ self._swf = Layer1(self.aws_access_key_id,
+ self.aws_secret_access_key)
+
+ def __repr__(self):
+ """Generate string representation."""
+ rep_str = self.name
+ if hasattr(self, 'version'):
+ rep_str += '-' + getattr(self, 'version')
+ return '<%s %r at 0x%x>' % (self.__class__.__name__, rep_str, id(self))
+
+class Domain(SWFBase):
+
+ """Simple Workflow Domain."""
+
+ description = None
+ retention = 30
+ @wraps(Layer1.describe_domain)
+ def describe(self):
+ """DescribeDomain."""
+ return self._swf.describe_domain(self.name)
+
+ @wraps(Layer1.deprecate_domain)
+ def deprecate(self):
+ """DeprecateDomain"""
+ self._swf.deprecate_domain(self.name)
+
+ @wraps(Layer1.register_domain)
+ def register(self):
+ """RegisterDomain."""
+ self._swf.register_domain(self.name, str(self.retention),
+ self.description)
+
+ @wraps(Layer1.list_activity_types)
+ def activities(self, status='REGISTERED', **kwargs):
+ """ListActivityTypes."""
+ act_types = self._swf.list_activity_types(self.name, status, **kwargs)
+ act_objects = []
+ for act_args in act_types['typeInfos']:
+ act_ident = act_args['activityType']
+ del act_args['activityType']
+ act_args.update(act_ident)
+ act_args.update({
+ 'aws_access_key_id': self.aws_access_key_id,
+ 'aws_secret_access_key': self.aws_secret_access_key,
+ 'domain': self.name,
+ })
+ act_objects.append(ActivityType(**act_args))
+ return act_objects
+
+ @wraps(Layer1.list_workflow_types)
+ def workflows(self, status='REGISTERED', **kwargs):
+ """ListWorkflowTypes."""
+ wf_types = self._swf.list_workflow_types(self.name, status, **kwargs)
+ wf_objects = []
+ for wf_args in wf_types['typeInfos']:
+ wf_ident = wf_args['workflowType']
+ del wf_args['workflowType']
+ wf_args.update(wf_ident)
+ wf_args.update({
+ 'aws_access_key_id': self.aws_access_key_id,
+ 'aws_secret_access_key': self.aws_secret_access_key,
+ 'domain': self.name,
+ })
+
+ wf_objects.append(WorkflowType(**wf_args))
+ return wf_objects
+
+ def executions(self, closed=False, **kwargs):
+ """List list open/closed executions.
+
+ For more info, try:
+ >>> help(boto.swf.layer1.Layer1.list_closed_workflow_executions)
+ >>> help(boto.swf.layer1.Layer1.list_open_workflow_executions)
+ """
+ if closed:
+ executions = self._swf.list_closed_workflow_executions(self.name,
+ **kwargs)
+ else:
+ if 'oldest_date' not in kwargs:
+ # Last 24 hours.
+ kwargs['oldest_date'] = time.time() - (3600 * 24)
+ executions = self._swf.list_open_workflow_executions(self.name,
+ **kwargs)
+ exe_objects = []
+ for exe_args in executions['executionInfos']:
+ for nested_key in ('execution', 'workflowType'):
+ nested_dict = exe_args[nested_key]
+ del exe_args[nested_key]
+ exe_args.update(nested_dict)
+
+ exe_args.update({
+ 'aws_access_key_id': self.aws_access_key_id,
+ 'aws_secret_access_key': self.aws_secret_access_key,
+ 'domain': self.name,
+ })
+
+ exe_objects.append(WorkflowExecution(**exe_args))
+ return exe_objects
+
+ @wraps(Layer1.count_pending_activity_tasks)
+ def count_pending_activity_tasks(self, task_list):
+ """CountPendingActivityTasks."""
+ return self._swf.count_pending_activity_tasks(self.name, task_list)
+
+ @wraps(Layer1.count_pending_decision_tasks)
+ def count_pending_decision_tasks(self, task_list):
+ """CountPendingDecisionTasks."""
+ return self._swf.count_pending_decision_tasks(self.name, task_list)
+
+
+class Actor(SWFBase):
+
+ """Simple Workflow Actor interface."""
+
+ task_list = None
+ last_tasktoken = None
+ domain = None
+
+ def run(self):
+ """To be overloaded by subclasses."""
+ raise NotImplementedError()
+
+class ActivityWorker(Actor):
+
+ """ActivityWorker."""
+
+ @wraps(Layer1.respond_activity_task_canceled)
+ def cancel(self, task_token=None, details=None):
+ """RespondActivityTaskCanceled."""
+ if task_token is None:
+ task_token = self.last_tasktoken
+ return self._swf.respond_activity_task_canceled(task_token, details)
+
+ @wraps(Layer1.respond_activity_task_completed)
+ def complete(self, task_token=None, result=None):
+ """RespondActivityTaskCompleted."""
+ if task_token is None:
+ task_token = self.last_tasktoken
+ return self._swf.respond_activity_task_completed(task_token, result)
+
+ @wraps(Layer1.respond_activity_task_failed)
+ def fail(self, task_token=None, details=None, reason=None):
+ """RespondActivityTaskFailed."""
+ if task_token is None:
+ task_token = self.last_tasktoken
+ return self._swf.respond_activity_task_failed(task_token, details,
+ reason)
+
+ @wraps(Layer1.record_activity_task_heartbeat)
+ def heartbeat(self, task_token=None, details=None):
+ """RecordActivityTaskHeartbeat."""
+ if task_token is None:
+ task_token = self.last_tasktoken
+ return self._swf.record_activity_task_heartbeat(task_token, details)
+
+ @wraps(Layer1.poll_for_activity_task)
+ def poll(self, **kwargs):
+ """PollForActivityTask."""
+ task = self._swf.poll_for_activity_task(self.domain, self.task_list,
+ **kwargs)
+ self.last_tasktoken = task.get('taskToken')
+ return task
+
+class Decider(Actor):
+
+ """Simple Workflow Decider."""
+
+ @wraps(Layer1.respond_decision_task_completed)
+ def complete(self, task_token=None, decisions=None, **kwargs):
+ """RespondDecisionTaskCompleted."""
+ if isinstance(decisions, Layer1Decisions):
+ # Extract decision list from a Layer1Decisions instance.
+ decisions = decisions._data
+ if task_token is None:
+ task_token = self.last_tasktoken
+ return self._swf.respond_decision_task_completed(task_token, decisions,
+ **kwargs)
+
+ @wraps(Layer1.poll_for_decision_task)
+ def poll(self, **kwargs):
+ """PollForDecisionTask."""
+ result = self._swf.poll_for_decision_task(self.domain, self.task_list,
+ **kwargs)
+ # Record task token.
+ self.last_tasktoken = result.get('taskToken')
+ # Record the last event.
+ return result
+
+class WorkflowType(SWFBase):
+
+ """WorkflowType."""
+
+ version = None
+ task_list = None
+ child_policy = 'TERMINATE'
+
+ @wraps(Layer1.describe_workflow_type)
+ def describe(self):
+ """DescribeWorkflowType."""
+ return self._swf.describe_workflow_type(self.domain, self.name,
+ self.version)
+ @wraps(Layer1.register_workflow_type)
+ def register(self, **kwargs):
+ """RegisterWorkflowType."""
+ args = {
+ 'default_execution_start_to_close_timeout': '3600',
+ 'default_task_start_to_close_timeout': '300',
+ 'default_child_policy': 'TERMINATE',
+ }
+ args.update(kwargs)
+ self._swf.register_workflow_type(self.domain, self.name, self.version,
+ **args)
+
+ @wraps(Layer1.deprecate_workflow_type)
+ def deprecate(self):
+ """DeprecateWorkflowType."""
+ self._swf.deprecate_workflow_type(self.domain, self.name, self.version)
+
+ @wraps(Layer1.start_workflow_execution)
+ def start(self, **kwargs):
+ """StartWorkflowExecution."""
+ if 'workflow_id' in kwargs:
+ workflow_id = kwargs['workflow_id']
+ del kwargs['workflow_id']
+ else:
+ workflow_id = '%s-%s-%i' % (self.name, self.version, time.time())
+
+ for def_attr in ('task_list', 'child_policy'):
+ kwargs[def_attr] = kwargs.get(def_attr, getattr(self, def_attr))
+ run_id = self._swf.start_workflow_execution(self.domain, workflow_id,
+ self.name, self.version, **kwargs)['runId']
+ return WorkflowExecution(name=self.name, version=self.version,
+ runId=run_id, domain=self.domain, workflowId=workflow_id,
+ aws_access_key_id=self.aws_access_key_id,
+ aws_secret_access_key=self.aws_secret_access_key)
+
+class WorkflowExecution(SWFBase):
+
+ """WorkflowExecution."""
+
+ workflowId = None
+ runId = None
+
+ @wraps(Layer1.signal_workflow_execution)
+ def signal(self, signame, **kwargs):
+ """SignalWorkflowExecution."""
+ self._swf.signal_workflow_execution(self.domain, signame,
+ self.workflowId, **kwargs)
+
+ @wraps(Layer1.terminate_workflow_execution)
+ def terminate(self, **kwargs):
+ """TerminateWorkflowExecution (p. 103)."""
+ return self._swf.terminate_workflow_execution(self.domain,
+ self.workflowId, **kwargs)
+
+ @wraps(Layer1.get_workflow_execution_history)
+ def history(self, **kwargs):
+ """GetWorkflowExecutionHistory."""
+ return self._swf.get_workflow_execution_history(self.domain, self.runId,
+ self.workflowId, **kwargs)['events']
+
+ @wraps(Layer1.describe_workflow_execution)
+ def describe(self):
+ """DescribeWorkflowExecution."""
+ return self._swf.describe_workflow_execution(self.domain, self.runId,
+ self.workflowId)
+
+ @wraps(Layer1.request_cancel_workflow_execution)
+ def request_cancel(self):
+ """RequestCancelWorkflowExecution."""
+ return self._swf.request_cancel_workflow_execution(self.domain,
+ self.workflowId, self.runId)
+
+
+class ActivityType(SWFBase):
+
+ """ActivityType."""
+
+ version = None
+
+ @wraps(Layer1.deprecate_activity_type)
+ def deprecate(self):
+ """DeprecateActivityType."""
+ return self._swf.deprecate_activity_type(self.domain, self.name,
+ self.version)
+
+ @wraps(Layer1.describe_activity_type)
+ def describe(self):
+ """DescribeActivityType."""
+ return self._swf.describe_activity_type(self.domain, self.name,
+ self.version)
+
+ @wraps(Layer1.register_activity_type)
+ def register(self, **kwargs):
+ """RegisterActivityType."""
+ args = {
+ 'default_task_heartbeat_timeout': '600',
+ 'default_task_schedule_to_close_timeout': '3900',
+ 'default_task_schedule_to_start_timeout': '300',
+ 'default_task_start_to_close_timeout': '3600',
+ }
+ args.update(kwargs)
+ self._swf.register_activity_type(self.domain, self.name, self.version,
+ **args)

Powered by Google App Engine
This is Rietveld 408576698