Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/boto/datapipeline/layer1.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d30785e31577 |
---|---|
1 # Copyright (c) 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved | |
2 # | |
3 # Permission is hereby granted, free of charge, to any person obtaining a | |
4 # copy of this software and associated documentation files (the | |
5 # "Software"), to deal in the Software without restriction, including | |
6 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
7 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
8 # persons to whom the Software is furnished to do so, subject to the fol- | |
9 # lowing conditions: | |
10 # | |
11 # The above copyright notice and this permission notice shall be included | |
12 # in all copies or substantial portions of the Software. | |
13 # | |
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
20 # IN THE SOFTWARE. | |
21 # | |
22 | |
23 import boto | |
24 from boto.compat import json | |
25 from boto.connection import AWSQueryConnection | |
26 from boto.regioninfo import RegionInfo | |
27 from boto.exception import JSONResponseError | |
28 from boto.datapipeline import exceptions | |
29 | |
30 | |
31 class DataPipelineConnection(AWSQueryConnection): | |
32 """ | |
33 This is the AWS Data Pipeline API Reference . This guide provides | |
34 descriptions and samples of the AWS Data Pipeline API. | |
35 | |
36 AWS Data Pipeline is a web service that configures and manages a | |
37 data-driven workflow called a pipeline. AWS Data Pipeline handles | |
38 the details of scheduling and ensuring that data dependencies are | |
39 met so your application can focus on processing the data. | |
40 | |
41 The AWS Data Pipeline API implements two main sets of | |
42 functionality. The first set of actions configure the pipeline in | |
43 the web service. You call these actions to create a pipeline and | |
44 define data sources, schedules, dependencies, and the transforms | |
45 to be performed on the data. | |
46 | |
47 The second set of actions are used by a task runner application | |
48 that calls the AWS Data Pipeline API to receive the next task | |
49 ready for processing. The logic for performing the task, such as | |
50 querying the data, running data analysis, or converting the data | |
51 from one format to another, is contained within the task runner. | |
52 The task runner performs the task assigned to it by the web | |
53 service, reporting progress to the web service as it does so. When | |
54 the task is done, the task runner reports the final success or | |
55 failure of the task to the web service. | |
56 | |
57 AWS Data Pipeline provides an open-source implementation of a task | |
58 runner called AWS Data Pipeline Task Runner. AWS Data Pipeline | |
59 Task Runner provides logic for common data management scenarios, | |
60 such as performing database queries and running data analysis | |
61 using Amazon Elastic MapReduce (Amazon EMR). You can use AWS Data | |
62 Pipeline Task Runner as your task runner, or you can write your | |
63 own task runner to provide custom data management. | |
64 | |
65 The AWS Data Pipeline API uses the Signature Version 4 protocol | |
66 for signing requests. For more information about how to sign a | |
67 request with this protocol, see `Signature Version 4 Signing | |
68 Process`_. In the code examples in this reference, the Signature | |
69 Version 4 Request parameters are represented as AuthParams. | |
70 """ | |
71 APIVersion = "2012-10-29" | |
72 DefaultRegionName = "us-east-1" | |
73 DefaultRegionEndpoint = "datapipeline.us-east-1.amazonaws.com" | |
74 ServiceName = "DataPipeline" | |
75 TargetPrefix = "DataPipeline" | |
76 ResponseError = JSONResponseError | |
77 | |
78 _faults = { | |
79 "PipelineDeletedException": exceptions.PipelineDeletedException, | |
80 "InvalidRequestException": exceptions.InvalidRequestException, | |
81 "TaskNotFoundException": exceptions.TaskNotFoundException, | |
82 "PipelineNotFoundException": exceptions.PipelineNotFoundException, | |
83 "InternalServiceError": exceptions.InternalServiceError, | |
84 } | |
85 | |
86 def __init__(self, **kwargs): | |
87 region = kwargs.pop('region', None) | |
88 if not region: | |
89 region = RegionInfo(self, self.DefaultRegionName, | |
90 self.DefaultRegionEndpoint) | |
91 kwargs['host'] = region.endpoint | |
92 super(DataPipelineConnection, self).__init__(**kwargs) | |
93 self.region = region | |
94 | |
95 def _required_auth_capability(self): | |
96 return ['hmac-v4'] | |
97 | |
98 def activate_pipeline(self, pipeline_id): | |
99 """ | |
100 Validates a pipeline and initiates processing. If the pipeline | |
101 does not pass validation, activation fails. | |
102 | |
103 Call this action to start processing pipeline tasks of a | |
104 pipeline you've created using the CreatePipeline and | |
105 PutPipelineDefinition actions. A pipeline cannot be modified | |
106 after it has been successfully activated. | |
107 | |
108 :type pipeline_id: string | |
109 :param pipeline_id: The identifier of the pipeline to activate. | |
110 | |
111 """ | |
112 params = {'pipelineId': pipeline_id, } | |
113 return self.make_request(action='ActivatePipeline', | |
114 body=json.dumps(params)) | |
115 | |
116 def create_pipeline(self, name, unique_id, description=None): | |
117 """ | |
118 Creates a new empty pipeline. When this action succeeds, you | |
119 can then use the PutPipelineDefinition action to populate the | |
120 pipeline. | |
121 | |
122 :type name: string | |
123 :param name: The name of the new pipeline. You can use the same name | |
124 for multiple pipelines associated with your AWS account, because | |
125 AWS Data Pipeline assigns each new pipeline a unique pipeline | |
126 identifier. | |
127 | |
128 :type unique_id: string | |
129 :param unique_id: A unique identifier that you specify. This identifier | |
130 is not the same as the pipeline identifier assigned by AWS Data | |
131 Pipeline. You are responsible for defining the format and ensuring | |
132 the uniqueness of this identifier. You use this parameter to ensure | |
133 idempotency during repeated calls to CreatePipeline. For example, | |
134 if the first call to CreatePipeline does not return a clear | |
135 success, you can pass in the same unique identifier and pipeline | |
136 name combination on a subsequent call to CreatePipeline. | |
137 CreatePipeline ensures that if a pipeline already exists with the | |
138 same name and unique identifier, a new pipeline will not be | |
139 created. Instead, you'll receive the pipeline identifier from the | |
140 previous attempt. The uniqueness of the name and unique identifier | |
141 combination is scoped to the AWS account or IAM user credentials. | |
142 | |
143 :type description: string | |
144 :param description: The description of the new pipeline. | |
145 | |
146 """ | |
147 params = {'name': name, 'uniqueId': unique_id, } | |
148 if description is not None: | |
149 params['description'] = description | |
150 return self.make_request(action='CreatePipeline', | |
151 body=json.dumps(params)) | |
152 | |
153 def delete_pipeline(self, pipeline_id): | |
154 """ | |
155 Permanently deletes a pipeline, its pipeline definition and | |
156 its run history. You cannot query or restore a deleted | |
157 pipeline. AWS Data Pipeline will attempt to cancel instances | |
158 associated with the pipeline that are currently being | |
159 processed by task runners. Deleting a pipeline cannot be | |
160 undone. | |
161 | |
162 To temporarily pause a pipeline instead of deleting it, call | |
163 SetStatus with the status set to Pause on individual | |
164 components. Components that are paused by SetStatus can be | |
165 resumed. | |
166 | |
167 :type pipeline_id: string | |
168 :param pipeline_id: The identifier of the pipeline to be deleted. | |
169 | |
170 """ | |
171 params = {'pipelineId': pipeline_id, } | |
172 return self.make_request(action='DeletePipeline', | |
173 body=json.dumps(params)) | |
174 | |
175 def describe_objects(self, object_ids, pipeline_id, marker=None, | |
176 evaluate_expressions=None): | |
177 """ | |
178 Returns the object definitions for a set of objects associated | |
179 with the pipeline. Object definitions are composed of a set of | |
180 fields that define the properties of the object. | |
181 | |
182 :type pipeline_id: string | |
183 :param pipeline_id: Identifier of the pipeline that contains the object | |
184 definitions. | |
185 | |
186 :type object_ids: list | |
187 :param object_ids: Identifiers of the pipeline objects that contain the | |
188 definitions to be described. You can pass as many as 25 identifiers | |
189 in a single call to DescribeObjects. | |
190 | |
191 :type evaluate_expressions: boolean | |
192 :param evaluate_expressions: Indicates whether any expressions in the | |
193 object should be evaluated when the object descriptions are | |
194 returned. | |
195 | |
196 :type marker: string | |
197 :param marker: The starting point for the results to be returned. The | |
198 first time you call DescribeObjects, this value should be empty. As | |
199 long as the action returns `HasMoreResults` as `True`, you can call | |
200 DescribeObjects again and pass the marker value from the response | |
201 to retrieve the next set of results. | |
202 | |
203 """ | |
204 params = { | |
205 'pipelineId': pipeline_id, | |
206 'objectIds': object_ids, | |
207 } | |
208 if evaluate_expressions is not None: | |
209 params['evaluateExpressions'] = evaluate_expressions | |
210 if marker is not None: | |
211 params['marker'] = marker | |
212 return self.make_request(action='DescribeObjects', | |
213 body=json.dumps(params)) | |
214 | |
215 def describe_pipelines(self, pipeline_ids): | |
216 """ | |
217 Retrieve metadata about one or more pipelines. The information | |
218 retrieved includes the name of the pipeline, the pipeline | |
219 identifier, its current state, and the user account that owns | |
220 the pipeline. Using account credentials, you can retrieve | |
221 metadata about pipelines that you or your IAM users have | |
222 created. If you are using an IAM user account, you can | |
223 retrieve metadata about only those pipelines you have read | |
224 permission for. | |
225 | |
226 To retrieve the full pipeline definition instead of metadata | |
227 about the pipeline, call the GetPipelineDefinition action. | |
228 | |
229 :type pipeline_ids: list | |
230 :param pipeline_ids: Identifiers of the pipelines to describe. You can | |
231 pass as many as 25 identifiers in a single call to | |
232 DescribePipelines. You can obtain pipeline identifiers by calling | |
233 ListPipelines. | |
234 | |
235 """ | |
236 params = {'pipelineIds': pipeline_ids, } | |
237 return self.make_request(action='DescribePipelines', | |
238 body=json.dumps(params)) | |
239 | |
240 def evaluate_expression(self, pipeline_id, expression, object_id): | |
241 """ | |
242 Evaluates a string in the context of a specified object. A | |
243 task runner can use this action to evaluate SQL queries stored | |
244 in Amazon S3. | |
245 | |
246 :type pipeline_id: string | |
247 :param pipeline_id: The identifier of the pipeline. | |
248 | |
249 :type object_id: string | |
250 :param object_id: The identifier of the object. | |
251 | |
252 :type expression: string | |
253 :param expression: The expression to evaluate. | |
254 | |
255 """ | |
256 params = { | |
257 'pipelineId': pipeline_id, | |
258 'objectId': object_id, | |
259 'expression': expression, | |
260 } | |
261 return self.make_request(action='EvaluateExpression', | |
262 body=json.dumps(params)) | |
263 | |
264 def get_pipeline_definition(self, pipeline_id, version=None): | |
265 """ | |
266 Returns the definition of the specified pipeline. You can call | |
267 GetPipelineDefinition to retrieve the pipeline definition you | |
268 provided using PutPipelineDefinition. | |
269 | |
270 :type pipeline_id: string | |
271 :param pipeline_id: The identifier of the pipeline. | |
272 | |
273 :type version: string | |
274 :param version: The version of the pipeline definition to retrieve. | |
275 This parameter accepts the values `latest` (default) and `active`. | |
276 Where `latest` indicates the last definition saved to the pipeline | |
277 and `active` indicates the last definition of the pipeline that was | |
278 activated. | |
279 | |
280 """ | |
281 params = {'pipelineId': pipeline_id, } | |
282 if version is not None: | |
283 params['version'] = version | |
284 return self.make_request(action='GetPipelineDefinition', | |
285 body=json.dumps(params)) | |
286 | |
287 def list_pipelines(self, marker=None): | |
288 """ | |
289 Returns a list of pipeline identifiers for all active | |
290 pipelines. Identifiers are returned only for pipelines you | |
291 have permission to access. | |
292 | |
293 :type marker: string | |
294 :param marker: The starting point for the results to be returned. The | |
295 first time you call ListPipelines, this value should be empty. As | |
296 long as the action returns `HasMoreResults` as `True`, you can call | |
297 ListPipelines again and pass the marker value from the response to | |
298 retrieve the next set of results. | |
299 | |
300 """ | |
301 params = {} | |
302 if marker is not None: | |
303 params['marker'] = marker | |
304 return self.make_request(action='ListPipelines', | |
305 body=json.dumps(params)) | |
306 | |
307 def poll_for_task(self, worker_group, hostname=None, | |
308 instance_identity=None): | |
309 """ | |
310 Task runners call this action to receive a task to perform | |
311 from AWS Data Pipeline. The task runner specifies which tasks | |
312 it can perform by setting a value for the workerGroup | |
313 parameter of the PollForTask call. The task returned by | |
314 PollForTask may come from any of the pipelines that match the | |
315 workerGroup value passed in by the task runner and that was | |
316 launched using the IAM user credentials specified by the task | |
317 runner. | |
318 | |
319 If tasks are ready in the work queue, PollForTask returns a | |
320 response immediately. If no tasks are available in the queue, | |
321 PollForTask uses long-polling and holds on to a poll | |
322 connection for up to a 90 seconds during which time the first | |
323 newly scheduled task is handed to the task runner. To | |
324 accomodate this, set the socket timeout in your task runner to | |
325 90 seconds. The task runner should not call PollForTask again | |
326 on the same `workerGroup` until it receives a response, and | |
327 this may take up to 90 seconds. | |
328 | |
329 :type worker_group: string | |
330 :param worker_group: Indicates the type of task the task runner is | |
331 configured to accept and process. The worker group is set as a | |
332 field on objects in the pipeline when they are created. You can | |
333 only specify a single value for `workerGroup` in the call to | |
334 PollForTask. There are no wildcard values permitted in | |
335 `workerGroup`, the string must be an exact, case-sensitive, match. | |
336 | |
337 :type hostname: string | |
338 :param hostname: The public DNS name of the calling task runner. | |
339 | |
340 :type instance_identity: dict | |
341 :param instance_identity: Identity information for the Amazon EC2 | |
342 instance that is hosting the task runner. You can get this value by | |
343 calling the URI, `http://169.254.169.254/latest/meta-data/instance- | |
344 id`, from the EC2 instance. For more information, go to `Instance | |
345 Metadata`_ in the Amazon Elastic Compute Cloud User Guide. Passing | |
346 in this value proves that your task runner is running on an EC2 | |
347 instance, and ensures the proper AWS Data Pipeline service charges | |
348 are applied to your pipeline. | |
349 | |
350 """ | |
351 params = {'workerGroup': worker_group, } | |
352 if hostname is not None: | |
353 params['hostname'] = hostname | |
354 if instance_identity is not None: | |
355 params['instanceIdentity'] = instance_identity | |
356 return self.make_request(action='PollForTask', | |
357 body=json.dumps(params)) | |
358 | |
359 def put_pipeline_definition(self, pipeline_objects, pipeline_id): | |
360 """ | |
361 Adds tasks, schedules, and preconditions that control the | |
362 behavior of the pipeline. You can use PutPipelineDefinition to | |
363 populate a new pipeline or to update an existing pipeline that | |
364 has not yet been activated. | |
365 | |
366 PutPipelineDefinition also validates the configuration as it | |
367 adds it to the pipeline. Changes to the pipeline are saved | |
368 unless one of the following three validation errors exists in | |
369 the pipeline. | |
370 | |
371 #. An object is missing a name or identifier field. | |
372 #. A string or reference field is empty. | |
373 #. The number of objects in the pipeline exceeds the maximum | |
374 allowed objects. | |
375 | |
376 | |
377 | |
378 Pipeline object definitions are passed to the | |
379 PutPipelineDefinition action and returned by the | |
380 GetPipelineDefinition action. | |
381 | |
382 :type pipeline_id: string | |
383 :param pipeline_id: The identifier of the pipeline to be configured. | |
384 | |
385 :type pipeline_objects: list | |
386 :param pipeline_objects: The objects that define the pipeline. These | |
387 will overwrite the existing pipeline definition. | |
388 | |
389 """ | |
390 params = { | |
391 'pipelineId': pipeline_id, | |
392 'pipelineObjects': pipeline_objects, | |
393 } | |
394 return self.make_request(action='PutPipelineDefinition', | |
395 body=json.dumps(params)) | |
396 | |
397 def query_objects(self, pipeline_id, sphere, marker=None, query=None, | |
398 limit=None): | |
399 """ | |
400 Queries a pipeline for the names of objects that match a | |
401 specified set of conditions. | |
402 | |
403 The objects returned by QueryObjects are paginated and then | |
404 filtered by the value you set for query. This means the action | |
405 may return an empty result set with a value set for marker. If | |
406 `HasMoreResults` is set to `True`, you should continue to call | |
407 QueryObjects, passing in the returned value for marker, until | |
408 `HasMoreResults` returns `False`. | |
409 | |
410 :type pipeline_id: string | |
411 :param pipeline_id: Identifier of the pipeline to be queried for object | |
412 names. | |
413 | |
414 :type query: dict | |
415 :param query: Query that defines the objects to be returned. The Query | |
416 object can contain a maximum of ten selectors. The conditions in | |
417 the query are limited to top-level String fields in the object. | |
418 These filters can be applied to components, instances, and | |
419 attempts. | |
420 | |
421 :type sphere: string | |
422 :param sphere: Specifies whether the query applies to components or | |
423 instances. Allowable values: `COMPONENT`, `INSTANCE`, `ATTEMPT`. | |
424 | |
425 :type marker: string | |
426 :param marker: The starting point for the results to be returned. The | |
427 first time you call QueryObjects, this value should be empty. As | |
428 long as the action returns `HasMoreResults` as `True`, you can call | |
429 QueryObjects again and pass the marker value from the response to | |
430 retrieve the next set of results. | |
431 | |
432 :type limit: integer | |
433 :param limit: Specifies the maximum number of object names that | |
434 QueryObjects will return in a single call. The default value is | |
435 100. | |
436 | |
437 """ | |
438 params = {'pipelineId': pipeline_id, 'sphere': sphere, } | |
439 if query is not None: | |
440 params['query'] = query | |
441 if marker is not None: | |
442 params['marker'] = marker | |
443 if limit is not None: | |
444 params['limit'] = limit | |
445 return self.make_request(action='QueryObjects', | |
446 body=json.dumps(params)) | |
447 | |
448 def report_task_progress(self, task_id): | |
449 """ | |
450 Updates the AWS Data Pipeline service on the progress of the | |
451 calling task runner. When the task runner is assigned a task, | |
452 it should call ReportTaskProgress to acknowledge that it has | |
453 the task within 2 minutes. If the web service does not recieve | |
454 this acknowledgement within the 2 minute window, it will | |
455 assign the task in a subsequent PollForTask call. After this | |
456 initial acknowledgement, the task runner only needs to report | |
457 progress every 15 minutes to maintain its ownership of the | |
458 task. You can change this reporting time from 15 minutes by | |
459 specifying a `reportProgressTimeout` field in your pipeline. | |
460 If a task runner does not report its status after 5 minutes, | |
461 AWS Data Pipeline will assume that the task runner is unable | |
462 to process the task and will reassign the task in a subsequent | |
463 response to PollForTask. task runners should call | |
464 ReportTaskProgress every 60 seconds. | |
465 | |
466 :type task_id: string | |
467 :param task_id: Identifier of the task assigned to the task runner. | |
468 This value is provided in the TaskObject that the service returns | |
469 with the response for the PollForTask action. | |
470 | |
471 """ | |
472 params = {'taskId': task_id, } | |
473 return self.make_request(action='ReportTaskProgress', | |
474 body=json.dumps(params)) | |
475 | |
476 def report_task_runner_heartbeat(self, taskrunner_id, worker_group=None, | |
477 hostname=None): | |
478 """ | |
479 Task runners call ReportTaskRunnerHeartbeat every 15 minutes | |
480 to indicate that they are operational. In the case of AWS Data | |
481 Pipeline Task Runner launched on a resource managed by AWS | |
482 Data Pipeline, the web service can use this call to detect | |
483 when the task runner application has failed and restart a new | |
484 instance. | |
485 | |
486 :type taskrunner_id: string | |
487 :param taskrunner_id: The identifier of the task runner. This value | |
488 should be unique across your AWS account. In the case of AWS Data | |
489 Pipeline Task Runner launched on a resource managed by AWS Data | |
490 Pipeline, the web service provides a unique identifier when it | |
491 launches the application. If you have written a custom task runner, | |
492 you should assign a unique identifier for the task runner. | |
493 | |
494 :type worker_group: string | |
495 :param worker_group: Indicates the type of task the task runner is | |
496 configured to accept and process. The worker group is set as a | |
497 field on objects in the pipeline when they are created. You can | |
498 only specify a single value for `workerGroup` in the call to | |
499 ReportTaskRunnerHeartbeat. There are no wildcard values permitted | |
500 in `workerGroup`, the string must be an exact, case-sensitive, | |
501 match. | |
502 | |
503 :type hostname: string | |
504 :param hostname: The public DNS name of the calling task runner. | |
505 | |
506 """ | |
507 params = {'taskrunnerId': taskrunner_id, } | |
508 if worker_group is not None: | |
509 params['workerGroup'] = worker_group | |
510 if hostname is not None: | |
511 params['hostname'] = hostname | |
512 return self.make_request(action='ReportTaskRunnerHeartbeat', | |
513 body=json.dumps(params)) | |
514 | |
515 def set_status(self, object_ids, status, pipeline_id): | |
516 """ | |
517 Requests that the status of an array of physical or logical | |
518 pipeline objects be updated in the pipeline. This update may | |
519 not occur immediately, but is eventually consistent. The | |
520 status that can be set depends on the type of object. | |
521 | |
522 :type pipeline_id: string | |
523 :param pipeline_id: Identifies the pipeline that contains the objects. | |
524 | |
525 :type object_ids: list | |
526 :param object_ids: Identifies an array of objects. The corresponding | |
527 objects can be either physical or components, but not a mix of both | |
528 types. | |
529 | |
530 :type status: string | |
531 :param status: Specifies the status to be set on all the objects in | |
532 `objectIds`. For components, this can be either `PAUSE` or | |
533 `RESUME`. For instances, this can be either `CANCEL`, `RERUN`, or | |
534 `MARK_FINISHED`. | |
535 | |
536 """ | |
537 params = { | |
538 'pipelineId': pipeline_id, | |
539 'objectIds': object_ids, | |
540 'status': status, | |
541 } | |
542 return self.make_request(action='SetStatus', | |
543 body=json.dumps(params)) | |
544 | |
545 def set_task_status(self, task_id, task_status, error_id=None, | |
546 error_message=None, error_stack_trace=None): | |
547 """ | |
548 Notifies AWS Data Pipeline that a task is completed and | |
549 provides information about the final status. The task runner | |
550 calls this action regardless of whether the task was | |
551 sucessful. The task runner does not need to call SetTaskStatus | |
552 for tasks that are canceled by the web service during a call | |
553 to ReportTaskProgress. | |
554 | |
555 :type task_id: string | |
556 :param task_id: Identifies the task assigned to the task runner. This | |
557 value is set in the TaskObject that is returned by the PollForTask | |
558 action. | |
559 | |
560 :type task_status: string | |
561 :param task_status: If `FINISHED`, the task successfully completed. If | |
562 `FAILED` the task ended unsuccessfully. The `FALSE` value is used | |
563 by preconditions. | |
564 | |
565 :type error_id: string | |
566 :param error_id: If an error occurred during the task, this value | |
567 specifies an id value that represents the error. This value is set | |
568 on the physical attempt object. It is used to display error | |
569 information to the user. It should not start with string "Service_" | |
570 which is reserved by the system. | |
571 | |
572 :type error_message: string | |
573 :param error_message: If an error occurred during the task, this value | |
574 specifies a text description of the error. This value is set on the | |
575 physical attempt object. It is used to display error information to | |
576 the user. The web service does not parse this value. | |
577 | |
578 :type error_stack_trace: string | |
579 :param error_stack_trace: If an error occurred during the task, this | |
580 value specifies the stack trace associated with the error. This | |
581 value is set on the physical attempt object. It is used to display | |
582 error information to the user. The web service does not parse this | |
583 value. | |
584 | |
585 """ | |
586 params = {'taskId': task_id, 'taskStatus': task_status, } | |
587 if error_id is not None: | |
588 params['errorId'] = error_id | |
589 if error_message is not None: | |
590 params['errorMessage'] = error_message | |
591 if error_stack_trace is not None: | |
592 params['errorStackTrace'] = error_stack_trace | |
593 return self.make_request(action='SetTaskStatus', | |
594 body=json.dumps(params)) | |
595 | |
596 def validate_pipeline_definition(self, pipeline_objects, pipeline_id): | |
597 """ | |
598 Tests the pipeline definition with a set of validation checks | |
599 to ensure that it is well formed and can run without error. | |
600 | |
601 :type pipeline_id: string | |
602 :param pipeline_id: Identifies the pipeline whose definition is to be | |
603 validated. | |
604 | |
605 :type pipeline_objects: list | |
606 :param pipeline_objects: A list of objects that define the pipeline | |
607 changes to validate against the pipeline. | |
608 | |
609 """ | |
610 params = { | |
611 'pipelineId': pipeline_id, | |
612 'pipelineObjects': pipeline_objects, | |
613 } | |
614 return self.make_request(action='ValidatePipelineDefinition', | |
615 body=json.dumps(params)) | |
616 | |
617 def make_request(self, action, body): | |
618 headers = { | |
619 'X-Amz-Target': '%s.%s' % (self.TargetPrefix, action), | |
620 'Host': self.region.endpoint, | |
621 'Content-Type': 'application/x-amz-json-1.1', | |
622 'Content-Length': str(len(body)), | |
623 } | |
624 http_request = self.build_base_http_request( | |
625 method='POST', path='/', auth_path='/', params={}, | |
626 headers=headers, data=body) | |
627 response = self._mexe(http_request, sender=None, | |
628 override_num_retries=10) | |
629 response_body = response.read().decode('utf-8') | |
630 boto.log.debug(response_body) | |
631 if response.status == 200: | |
632 if response_body: | |
633 return json.loads(response_body) | |
634 else: | |
635 json_body = json.loads(response_body) | |
636 fault_name = json_body.get('__type', None) | |
637 exception_class = self._faults.get(fault_name, self.ResponseError) | |
638 raise exception_class(response.status, response.reason, | |
639 body=json_body) |