Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/boto/swf/layer2.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 """Object-oriented interface to SWF wrapping boto.swf.layer1.Layer1""" | |
| 2 | |
| 3 import time | |
| 4 from functools import wraps | |
| 5 from boto.swf.layer1 import Layer1 | |
| 6 from boto.swf.layer1_decisions import Layer1Decisions | |
| 7 | |
| 8 DEFAULT_CREDENTIALS = { | |
| 9 'aws_access_key_id': None, | |
| 10 'aws_secret_access_key': None | |
| 11 } | |
| 12 | |
| 13 def set_default_credentials(aws_access_key_id, aws_secret_access_key): | |
| 14 """Set default credentials.""" | |
| 15 DEFAULT_CREDENTIALS.update({ | |
| 16 'aws_access_key_id': aws_access_key_id, | |
| 17 'aws_secret_access_key': aws_secret_access_key, | |
| 18 }) | |
| 19 | |
| 20 class SWFBase(object): | |
| 21 | |
| 22 name = None | |
| 23 domain = None | |
| 24 aws_access_key_id = None | |
| 25 aws_secret_access_key = None | |
| 26 region = None | |
| 27 | |
| 28 def __init__(self, **kwargs): | |
| 29 # Set default credentials. | |
| 30 for credkey in ('aws_access_key_id', 'aws_secret_access_key'): | |
| 31 if DEFAULT_CREDENTIALS.get(credkey): | |
| 32 setattr(self, credkey, DEFAULT_CREDENTIALS[credkey]) | |
| 33 # Override attributes with keyword args. | |
| 34 for kwarg in kwargs: | |
| 35 setattr(self, kwarg, kwargs[kwarg]) | |
| 36 | |
| 37 self._swf = Layer1(self.aws_access_key_id, | |
| 38 self.aws_secret_access_key, | |
| 39 region=self.region) | |
| 40 | |
| 41 def __repr__(self): | |
| 42 rep_str = str(self.name) | |
| 43 if hasattr(self, 'version'): | |
| 44 rep_str += '-' + str(getattr(self, 'version')) | |
| 45 return '<%s %r at 0x%x>' % (self.__class__.__name__, rep_str, id(self)) | |
| 46 | |
| 47 class Domain(SWFBase): | |
| 48 | |
| 49 """Simple Workflow Domain.""" | |
| 50 | |
| 51 description = None | |
| 52 retention = 30 | |
| 53 @wraps(Layer1.describe_domain) | |
| 54 def describe(self): | |
| 55 """DescribeDomain.""" | |
| 56 return self._swf.describe_domain(self.name) | |
| 57 | |
| 58 @wraps(Layer1.deprecate_domain) | |
| 59 def deprecate(self): | |
| 60 """DeprecateDomain""" | |
| 61 self._swf.deprecate_domain(self.name) | |
| 62 | |
| 63 @wraps(Layer1.register_domain) | |
| 64 def register(self): | |
| 65 """RegisterDomain.""" | |
| 66 self._swf.register_domain(self.name, str(self.retention), | |
| 67 self.description) | |
| 68 | |
| 69 @wraps(Layer1.list_activity_types) | |
| 70 def activities(self, status='REGISTERED', **kwargs): | |
| 71 """ListActivityTypes.""" | |
| 72 act_types = self._swf.list_activity_types(self.name, status, **kwargs) | |
| 73 act_objects = [] | |
| 74 for act_args in act_types['typeInfos']: | |
| 75 act_ident = act_args['activityType'] | |
| 76 del act_args['activityType'] | |
| 77 act_args.update(act_ident) | |
| 78 act_args.update({ | |
| 79 'aws_access_key_id': self.aws_access_key_id, | |
| 80 'aws_secret_access_key': self.aws_secret_access_key, | |
| 81 'domain': self.name, | |
| 82 'region': self.region, | |
| 83 }) | |
| 84 act_objects.append(ActivityType(**act_args)) | |
| 85 return act_objects | |
| 86 | |
| 87 @wraps(Layer1.list_workflow_types) | |
| 88 def workflows(self, status='REGISTERED', **kwargs): | |
| 89 """ListWorkflowTypes.""" | |
| 90 wf_types = self._swf.list_workflow_types(self.name, status, **kwargs) | |
| 91 wf_objects = [] | |
| 92 for wf_args in wf_types['typeInfos']: | |
| 93 wf_ident = wf_args['workflowType'] | |
| 94 del wf_args['workflowType'] | |
| 95 wf_args.update(wf_ident) | |
| 96 wf_args.update({ | |
| 97 'aws_access_key_id': self.aws_access_key_id, | |
| 98 'aws_secret_access_key': self.aws_secret_access_key, | |
| 99 'domain': self.name, | |
| 100 'region': self.region, | |
| 101 }) | |
| 102 | |
| 103 wf_objects.append(WorkflowType(**wf_args)) | |
| 104 return wf_objects | |
| 105 | |
| 106 def executions(self, closed=False, **kwargs): | |
| 107 """List list open/closed executions. | |
| 108 | |
| 109 For a full list of available parameters refer to | |
| 110 :py:func:`boto.swf.layer1.Layer1.list_closed_workflow_executions` and | |
| 111 :py:func:`boto.swf.layer1.Layer1.list_open_workflow_executions` | |
| 112 """ | |
| 113 if closed: | |
| 114 executions = self._swf.list_closed_workflow_executions(self.name, | |
| 115 **kwargs) | |
| 116 else: | |
| 117 if 'oldest_date' not in kwargs: | |
| 118 # Last 24 hours. | |
| 119 kwargs['oldest_date'] = time.time() - (3600 * 24) | |
| 120 executions = self._swf.list_open_workflow_executions(self.name, | |
| 121 **kwargs) | |
| 122 exe_objects = [] | |
| 123 for exe_args in executions['executionInfos']: | |
| 124 for nested_key in ('execution', 'workflowType'): | |
| 125 nested_dict = exe_args[nested_key] | |
| 126 del exe_args[nested_key] | |
| 127 exe_args.update(nested_dict) | |
| 128 | |
| 129 exe_args.update({ | |
| 130 'aws_access_key_id': self.aws_access_key_id, | |
| 131 'aws_secret_access_key': self.aws_secret_access_key, | |
| 132 'domain': self.name, | |
| 133 'region': self.region, | |
| 134 }) | |
| 135 | |
| 136 exe_objects.append(WorkflowExecution(**exe_args)) | |
| 137 return exe_objects | |
| 138 | |
| 139 @wraps(Layer1.count_pending_activity_tasks) | |
| 140 def count_pending_activity_tasks(self, task_list): | |
| 141 """CountPendingActivityTasks.""" | |
| 142 return self._swf.count_pending_activity_tasks(self.name, task_list) | |
| 143 | |
| 144 @wraps(Layer1.count_pending_decision_tasks) | |
| 145 def count_pending_decision_tasks(self, task_list): | |
| 146 """CountPendingDecisionTasks.""" | |
| 147 return self._swf.count_pending_decision_tasks(self.name, task_list) | |
| 148 | |
| 149 | |
| 150 class Actor(SWFBase): | |
| 151 | |
| 152 task_list = None | |
| 153 last_tasktoken = None | |
| 154 domain = None | |
| 155 | |
| 156 def run(self): | |
| 157 """To be overloaded by subclasses.""" | |
| 158 raise NotImplementedError() | |
| 159 | |
| 160 class ActivityWorker(Actor): | |
| 161 | |
| 162 """Base class for SimpleWorkflow activity workers.""" | |
| 163 | |
| 164 @wraps(Layer1.respond_activity_task_canceled) | |
| 165 def cancel(self, task_token=None, details=None): | |
| 166 """RespondActivityTaskCanceled.""" | |
| 167 if task_token is None: | |
| 168 task_token = self.last_tasktoken | |
| 169 return self._swf.respond_activity_task_canceled(task_token, details) | |
| 170 | |
| 171 @wraps(Layer1.respond_activity_task_completed) | |
| 172 def complete(self, task_token=None, result=None): | |
| 173 """RespondActivityTaskCompleted.""" | |
| 174 if task_token is None: | |
| 175 task_token = self.last_tasktoken | |
| 176 return self._swf.respond_activity_task_completed(task_token, result) | |
| 177 | |
| 178 @wraps(Layer1.respond_activity_task_failed) | |
| 179 def fail(self, task_token=None, details=None, reason=None): | |
| 180 """RespondActivityTaskFailed.""" | |
| 181 if task_token is None: | |
| 182 task_token = self.last_tasktoken | |
| 183 return self._swf.respond_activity_task_failed(task_token, details, | |
| 184 reason) | |
| 185 | |
| 186 @wraps(Layer1.record_activity_task_heartbeat) | |
| 187 def heartbeat(self, task_token=None, details=None): | |
| 188 """RecordActivityTaskHeartbeat.""" | |
| 189 if task_token is None: | |
| 190 task_token = self.last_tasktoken | |
| 191 return self._swf.record_activity_task_heartbeat(task_token, details) | |
| 192 | |
| 193 @wraps(Layer1.poll_for_activity_task) | |
| 194 def poll(self, **kwargs): | |
| 195 """PollForActivityTask.""" | |
| 196 task_list = self.task_list | |
| 197 if 'task_list' in kwargs: | |
| 198 task_list = kwargs.get('task_list') | |
| 199 del kwargs['task_list'] | |
| 200 task = self._swf.poll_for_activity_task(self.domain, task_list, | |
| 201 **kwargs) | |
| 202 self.last_tasktoken = task.get('taskToken') | |
| 203 return task | |
| 204 | |
| 205 class Decider(Actor): | |
| 206 | |
| 207 """Base class for SimpleWorkflow deciders.""" | |
| 208 | |
| 209 @wraps(Layer1.respond_decision_task_completed) | |
| 210 def complete(self, task_token=None, decisions=None, **kwargs): | |
| 211 """RespondDecisionTaskCompleted.""" | |
| 212 if isinstance(decisions, Layer1Decisions): | |
| 213 # Extract decision list from a Layer1Decisions instance. | |
| 214 decisions = decisions._data | |
| 215 if task_token is None: | |
| 216 task_token = self.last_tasktoken | |
| 217 return self._swf.respond_decision_task_completed(task_token, decisions, | |
| 218 **kwargs) | |
| 219 | |
| 220 @wraps(Layer1.poll_for_decision_task) | |
| 221 def poll(self, **kwargs): | |
| 222 """PollForDecisionTask.""" | |
| 223 task_list = self.task_list | |
| 224 if 'task_list' in kwargs: | |
| 225 task_list = kwargs.get('task_list') | |
| 226 del kwargs['task_list'] | |
| 227 decision_task = self._swf.poll_for_decision_task(self.domain, task_list, | |
| 228 **kwargs) | |
| 229 self.last_tasktoken = decision_task.get('taskToken') | |
| 230 return decision_task | |
| 231 | |
| 232 class WorkflowType(SWFBase): | |
| 233 | |
| 234 """A versioned workflow type.""" | |
| 235 | |
| 236 version = None | |
| 237 task_list = None | |
| 238 child_policy = 'TERMINATE' | |
| 239 | |
| 240 @wraps(Layer1.describe_workflow_type) | |
| 241 def describe(self): | |
| 242 """DescribeWorkflowType.""" | |
| 243 return self._swf.describe_workflow_type(self.domain, self.name, | |
| 244 self.version) | |
| 245 @wraps(Layer1.register_workflow_type) | |
| 246 def register(self, **kwargs): | |
| 247 """RegisterWorkflowType.""" | |
| 248 args = { | |
| 249 'default_execution_start_to_close_timeout': '3600', | |
| 250 'default_task_start_to_close_timeout': '300', | |
| 251 'default_child_policy': 'TERMINATE', | |
| 252 } | |
| 253 args.update(kwargs) | |
| 254 self._swf.register_workflow_type(self.domain, self.name, self.version, | |
| 255 **args) | |
| 256 | |
| 257 @wraps(Layer1.deprecate_workflow_type) | |
| 258 def deprecate(self): | |
| 259 """DeprecateWorkflowType.""" | |
| 260 self._swf.deprecate_workflow_type(self.domain, self.name, self.version) | |
| 261 | |
| 262 @wraps(Layer1.start_workflow_execution) | |
| 263 def start(self, **kwargs): | |
| 264 """StartWorkflowExecution.""" | |
| 265 if 'workflow_id' in kwargs: | |
| 266 workflow_id = kwargs['workflow_id'] | |
| 267 del kwargs['workflow_id'] | |
| 268 else: | |
| 269 workflow_id = '%s-%s-%i' % (self.name, self.version, time.time()) | |
| 270 | |
| 271 for def_attr in ('task_list', 'child_policy'): | |
| 272 kwargs[def_attr] = kwargs.get(def_attr, getattr(self, def_attr)) | |
| 273 run_id = self._swf.start_workflow_execution(self.domain, workflow_id, | |
| 274 self.name, self.version, **kwargs)['runId'] | |
| 275 return WorkflowExecution(name=self.name, version=self.version, | |
| 276 runId=run_id, domain=self.domain, workflowId=workflow_id, | |
| 277 aws_access_key_id=self.aws_access_key_id, | |
| 278 aws_secret_access_key=self.aws_secret_access_key) | |
| 279 | |
| 280 class WorkflowExecution(SWFBase): | |
| 281 | |
| 282 """An instance of a workflow.""" | |
| 283 | |
| 284 workflowId = None | |
| 285 runId = None | |
| 286 | |
| 287 @wraps(Layer1.signal_workflow_execution) | |
| 288 def signal(self, signame, **kwargs): | |
| 289 """SignalWorkflowExecution.""" | |
| 290 self._swf.signal_workflow_execution(self.domain, signame, | |
| 291 self.workflowId, **kwargs) | |
| 292 | |
| 293 @wraps(Layer1.terminate_workflow_execution) | |
| 294 def terminate(self, **kwargs): | |
| 295 """TerminateWorkflowExecution (p. 103).""" | |
| 296 return self._swf.terminate_workflow_execution(self.domain, | |
| 297 self.workflowId, **kwargs) | |
| 298 | |
| 299 @wraps(Layer1.get_workflow_execution_history) | |
| 300 def history(self, **kwargs): | |
| 301 """GetWorkflowExecutionHistory.""" | |
| 302 return self._swf.get_workflow_execution_history(self.domain, self.runId, | |
| 303 self.workflowId, **kwargs)['events'] | |
| 304 | |
| 305 @wraps(Layer1.describe_workflow_execution) | |
| 306 def describe(self): | |
| 307 """DescribeWorkflowExecution.""" | |
| 308 return self._swf.describe_workflow_execution(self.domain, self.runId, | |
| 309 self.workflowId) | |
| 310 | |
| 311 @wraps(Layer1.request_cancel_workflow_execution) | |
| 312 def request_cancel(self): | |
| 313 """RequestCancelWorkflowExecution.""" | |
| 314 return self._swf.request_cancel_workflow_execution(self.domain, | |
| 315 self.workflowId, self.runId) | |
| 316 | |
| 317 | |
| 318 class ActivityType(SWFBase): | |
| 319 | |
| 320 """A versioned activity type.""" | |
| 321 | |
| 322 version = None | |
| 323 | |
| 324 @wraps(Layer1.deprecate_activity_type) | |
| 325 def deprecate(self): | |
| 326 """DeprecateActivityType.""" | |
| 327 return self._swf.deprecate_activity_type(self.domain, self.name, | |
| 328 self.version) | |
| 329 | |
| 330 @wraps(Layer1.describe_activity_type) | |
| 331 def describe(self): | |
| 332 """DescribeActivityType.""" | |
| 333 return self._swf.describe_activity_type(self.domain, self.name, | |
| 334 self.version) | |
| 335 | |
| 336 @wraps(Layer1.register_activity_type) | |
| 337 def register(self, **kwargs): | |
| 338 """RegisterActivityType.""" | |
| 339 args = { | |
| 340 'default_task_heartbeat_timeout': '600', | |
| 341 'default_task_schedule_to_close_timeout': '3900', | |
| 342 'default_task_schedule_to_start_timeout': '300', | |
| 343 'default_task_start_to_close_timeout': '3600', | |
| 344 } | |
| 345 args.update(kwargs) | |
| 346 self._swf.register_activity_type(self.domain, self.name, self.version, | |
| 347 **args) |
