| Index: third_party/gsutil/boto/boto/elastictranscoder/layer1.py
|
| diff --git a/third_party/gsutil/boto/boto/elastictranscoder/layer1.py b/third_party/gsutil/boto/boto/elastictranscoder/layer1.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3368dc05e9451427c164e62ed0f7ffdfb83efd64
|
| --- /dev/null
|
| +++ b/third_party/gsutil/boto/boto/elastictranscoder/layer1.py
|
| @@ -0,0 +1,509 @@
|
| +# Copyright (c) 2013 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.
|
| +#
|
| +from boto.compat import json
|
| +from boto.exception import JSONResponseError
|
| +from boto.connection import AWSAuthConnection
|
| +from boto.regioninfo import RegionInfo
|
| +from boto.elastictranscoder import exceptions
|
| +
|
| +
|
| +class ElasticTranscoderConnection(AWSAuthConnection):
|
| + """
|
| + AWS Elastic Transcoder Service
|
| + The AWS Elastic Transcoder Service.
|
| + """
|
| + APIVersion = "2012-09-25"
|
| + DefaultRegionName = "us-east-1"
|
| + DefaultRegionEndpoint = "elastictranscoder.us-east-1.amazonaws.com"
|
| + ResponseError = JSONResponseError
|
| +
|
| + _faults = {
|
| + "LimitExceededException": exceptions.LimitExceededException,
|
| + "ResourceInUseException": exceptions.ResourceInUseException,
|
| + "AccessDeniedException": exceptions.AccessDeniedException,
|
| + "ResourceNotFoundException": exceptions.ResourceNotFoundException,
|
| + "InternalServiceException": exceptions.InternalServiceException,
|
| + "ValidationException": exceptions.ValidationException,
|
| + }
|
| +
|
| +
|
| + def __init__(self, **kwargs):
|
| + region = kwargs.get('region')
|
| + if not region:
|
| + region = RegionInfo(self, self.DefaultRegionName,
|
| + self.DefaultRegionEndpoint)
|
| + else:
|
| + del kwargs['region']
|
| + kwargs['host'] = region.endpoint
|
| + AWSAuthConnection.__init__(self, **kwargs)
|
| + self.region = region
|
| +
|
| + def _required_auth_capability(self):
|
| + return ['hmac-v4']
|
| +
|
| + def cancel_job(self, id):
|
| + """
|
| + To delete a job, send a DELETE request to the `//jobs/ [jobId]
|
| + ` resource.
|
| + You can only cancel a job that has a status of `Submitted`. To
|
| + prevent a pipeline from starting to process a job while you're
|
| + getting the job identifier, use UpdatePipelineStatus to
|
| + temporarily pause the pipeline.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the job that you want to delete.
|
| +
|
| + To get a list of the jobs (including their `jobId`) that have
|
| + a status of `Submitted`, use the ListJobsByStatus API
|
| + action.
|
| +
|
| + """
|
| + uri = '/2012-09-25/jobs/{0}'.format(id)
|
| + return self.make_request('DELETE', uri, expected_status=202)
|
| +
|
| + def create_job(self, pipeline_id, input_name, output):
|
| + """
|
| + To create a job, send a POST request to the `//jobs` resource.
|
| +
|
| + When you create a job, Elastic Transcoder returns JSON data
|
| + that includes the values that you specified plus information
|
| + about the job that is created.
|
| +
|
| + :type pipeline_id: string
|
| + :param pipeline_id: The `Id` of the pipeline that you want Elastic
|
| + Transcoder to use for transcoding. The pipeline
|
| + determines several settings, including the
|
| + Amazon S3 bucket from which Elastic Transcoder
|
| + gets the files to transcode and the bucket into
|
| + which Elastic Transcoder puts the transcoded
|
| + files.
|
| +
|
| + :type input_name: dict
|
| + :param input_name: A section of the request body that provides
|
| + information about the file that is being
|
| + transcoded.
|
| +
|
| + :type output: dict
|
| + :param output: A section of the request body that provides information
|
| + about the transcoded (target) file.
|
| +
|
| + """
|
| + uri = '/2012-09-25/jobs'
|
| + params = {
|
| + 'PipelineId': pipeline_id,
|
| + 'Input': input_name,
|
| + 'Output': output,
|
| + }
|
| + return self.make_request('POST', uri, expected_status=201,
|
| + data=json.dumps(params))
|
| +
|
| + def create_pipeline(self, name, input_bucket, output_bucket, role,
|
| + notifications):
|
| + """
|
| + To create a pipeline, send a POST request to the `/pipelines`
|
| + resource.
|
| +
|
| + :type name: string
|
| + :param name: The name of the pipeline. We recommend that the name be
|
| + unique within the AWS account, but uniqueness is not
|
| + enforced.
|
| +
|
| + Constraints: Maximum 40 characters.
|
| +
|
| + :type input_bucket: string
|
| + :param input_bucket: The bucket in which you saved the media files that
|
| + you want to transcode.
|
| +
|
| + :type output_bucket: string
|
| + :param output_bucket: The bucket in which you want to save the
|
| + transcoded files.
|
| +
|
| + :type role: string
|
| + :param role: The IAM Amazon Resource Name (ARN) for the role that you
|
| + want to use to create the pipeline.
|
| +
|
| + :type notifications: dict
|
| + :param notifications: The () topic that you want to notify to report job
|
| + status.
|
| + To receive notifications, you must also subscribe
|
| + to the new topic in the console.
|
| +
|
| + + **Progressing**: The () topic that you want to
|
| + notify when has started to process the job.
|
| + + **Completed**: The topic that you want to notify
|
| + when has finished processing the job.
|
| + + **Warning**: The topic that you want to notify
|
| + when encounters a warning condition.
|
| + + **Error**: The topic that you want to notify
|
| + when encounters an error condition.
|
| +
|
| + """
|
| + uri = '/2012-09-25/pipelines'
|
| + params = {
|
| + 'Name': name,
|
| + 'InputBucket': input_bucket,
|
| + 'OutputBucket': output_bucket,
|
| + 'Role': role,
|
| + 'Notifications': notifications,
|
| + }
|
| + return self.make_request('POST', uri, expected_status=201,
|
| + data=json.dumps(params))
|
| +
|
| + def create_preset(self, name, container, video, audio, thumbnails,
|
| + description=None):
|
| + """
|
| + To create a preset, send a POST request to the `//presets`
|
| + resource.
|
| + checks the settings that you specify to ensure that they meet
|
| + requirements and to determine whether they comply with H.264
|
| + standards. If your settings are not valid for , returns an
|
| + HTTP 400 response ( `ValidationException`) and does not create
|
| + the preset. If the settings are valid for but aren't strictly
|
| + compliant with the H.264 standard, creates the preset and
|
| + returns a warning message in the response. This helps you
|
| + determine whether your settings comply with the H.264 standard
|
| + while giving you greater flexibility with respect to the video
|
| + that produces.
|
| + uses the H.264 video-compression format. For more information,
|
| + see the International Telecommunication Union publication
|
| + Recommendation ITU-T H.264: Advanced video coding for generic
|
| + audiovisual services .
|
| +
|
| + :type name: string
|
| + :param name: The name of the preset. We recommend that the name be
|
| + unique within the AWS account, but uniqueness is not
|
| + enforced.
|
| +
|
| + :type description: string
|
| + :param description: A description of the preset.
|
| +
|
| + :type container: string
|
| + :param container: The container type for the output file. This value
|
| + must be `mp4`.
|
| +
|
| + :type video: dict
|
| + :param video: A section of the request body that specifies the video
|
| + parameters.
|
| +
|
| + :type audio: dict
|
| + :param audio: A section of the request body that specifies the audio
|
| + parameters
|
| +
|
| + :type thumbnails: dict
|
| + :param thumbnails: A section of the request body that specifies the
|
| + thumbnail parameters, if any.
|
| +
|
| + """
|
| + uri = '/2012-09-25/presets'
|
| + params = {
|
| + 'Name': name,
|
| + 'Container': container,
|
| + 'Video': video,
|
| + 'Audio': audio,
|
| + 'Thumbnails': thumbnails,
|
| + }
|
| + if description is not None:
|
| + params['Description'] = description
|
| + return self.make_request('POST', uri, expected_status=201,
|
| + data=json.dumps(params))
|
| +
|
| + def delete_pipeline(self, id):
|
| + """
|
| + To delete a pipeline, send a DELETE request to the
|
| + `//pipelines/ [pipelineId] ` resource.
|
| +
|
| + You can only delete a pipeline that has never been used or
|
| + that is not currently in use (doesn't contain any active
|
| + jobs). If the pipeline is currently in use, `DeletePipeline`
|
| + returns an error.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the pipeline that you want to delete.
|
| +
|
| + """
|
| + uri = '/2012-09-25/pipelines/{0}'.format(id)
|
| + return self.make_request('DELETE', uri, expected_status=202)
|
| +
|
| + def delete_preset(self, id):
|
| + """
|
| + To delete a preset, send a DELETE request to the `//presets/
|
| + [presetId] ` resource.
|
| +
|
| + If the preset has been used, you cannot delete it.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the preset for which you want to get
|
| + detailed information.
|
| +
|
| + """
|
| + uri = '/2012-09-25/presets/{0}'.format(id)
|
| + return self.make_request('DELETE', uri, expected_status=202)
|
| +
|
| + def list_jobs_by_pipeline(self, pipeline_id, ascending=None,
|
| + page_token=None):
|
| + """
|
| + To get a list of the jobs currently in a pipeline, send a GET
|
| + request to the `//jobsByPipeline/ [pipelineId] ` resource.
|
| +
|
| + Elastic Transcoder returns all of the jobs currently in the
|
| + specified pipeline. The response body contains one element for
|
| + each job that satisfies the search criteria.
|
| +
|
| + :type pipeline_id: string
|
| + :param pipeline_id: The ID of the pipeline for which you want to get job
|
| + information.
|
| +
|
| + :type ascending: string
|
| + :param ascending: To list jobs in chronological order by the date and
|
| + time that they were submitted, enter `True`. To
|
| + list jobs in reverse chronological order, enter
|
| + `False`.
|
| +
|
| + :type page_token: string
|
| + :param page_token: When returns more than one page of results, use
|
| + `pageToken` in subsequent `GET` requests to get
|
| + each successive page of results.
|
| +
|
| + """
|
| + uri = '/2012-09-25/jobsByPipeline/{0}'.format(pipeline_id)
|
| + params = {}
|
| + if ascending is not None:
|
| + params['Ascending'] = ascending
|
| + if page_token is not None:
|
| + params['PageToken'] = page_token
|
| + return self.make_request('GET', uri, expected_status=200,
|
| + params=params)
|
| +
|
| + def list_jobs_by_status(self, status, ascending=None, page_token=None):
|
| + """
|
| + To get a list of the jobs that have a specified status, send a
|
| + GET request to the `//jobsByStatus/ [status] ` resource.
|
| +
|
| + Elastic Transcoder returns all of the jobs that have the
|
| + specified status. The response body contains one element for
|
| + each job that satisfies the search criteria.
|
| +
|
| + :type status: string
|
| + :param status: To get information about all of the jobs associated with
|
| + the current AWS account that have a given status,
|
| + specify the following status: `Submitted`,
|
| + `Progressing`, `Completed`, `Canceled`, or `Error`.
|
| +
|
| + :type ascending: string
|
| + :param ascending: To list jobs in chronological order by the date and
|
| + time that they were submitted, enter `True`. To
|
| + list jobs in reverse chronological order, enter
|
| + `False`.
|
| +
|
| + :type page_token: string
|
| + :param page_token: When returns more than one page of results, use
|
| + `pageToken` in subsequent `GET` requests to get
|
| + each successive page of results.
|
| +
|
| + """
|
| + uri = '/2012-09-25/jobsByStatus/{0}'.format(status)
|
| + params = {}
|
| + if ascending is not None:
|
| + params['Ascending'] = ascending
|
| + if page_token is not None:
|
| + params['PageToken'] = page_token
|
| + return self.make_request('GET', uri, expected_status=200,
|
| + params=params)
|
| +
|
| + def list_pipelines(self):
|
| + """
|
| + To get a list of the pipelines associated with the current AWS
|
| + account, send a GET request to the `//pipelines` resource.
|
| +
|
| +
|
| + """
|
| + uri = '/2012-09-25/pipelines'
|
| + return self.make_request('GET', uri, expected_status=200)
|
| +
|
| + def list_presets(self):
|
| + """
|
| + To get a list of all presets associated with the current AWS
|
| + account, send a GET request to the `//presets` resource.
|
| +
|
| +
|
| + """
|
| + uri = '/2012-09-25/presets'
|
| + return self.make_request('GET', uri, expected_status=200)
|
| +
|
| + def read_job(self, id):
|
| + """
|
| + To get detailed information about a job, send a GET request to
|
| + the `//jobs/ [jobId] ` resource.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the job for which you want to get detailed
|
| + information.
|
| +
|
| + """
|
| + uri = '/2012-09-25/jobs/{0}'.format(id)
|
| + return self.make_request('GET', uri, expected_status=200)
|
| +
|
| + def read_pipeline(self, id):
|
| + """
|
| + To get detailed information about a pipeline, send a GET
|
| + request to the `//pipelines/ [pipelineId] ` resource.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the pipeline to read.
|
| +
|
| + """
|
| + uri = '/2012-09-25/pipelines/{0}'.format(id)
|
| + return self.make_request('GET', uri, expected_status=200)
|
| +
|
| + def read_preset(self, id):
|
| + """
|
| + To get detailed information about a preset, send a GET request
|
| + to the `//presets/ [presetId] ` resource.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the preset for which you want to get
|
| + detailed information.
|
| +
|
| + """
|
| + uri = '/2012-09-25/presets/{0}'.format(id)
|
| + return self.make_request('GET', uri, expected_status=200)
|
| +
|
| + def test_role(self, role, input_bucket, output_bucket, topics):
|
| + """
|
| + To test the IAM role that's used by Elastic Transcoder to
|
| + create the pipeline, send a POST request to the `//roleTests`
|
| + resource.
|
| +
|
| + The `TestRole` action lets you determine whether the IAM role
|
| + you are using has sufficient permissions to let perform tasks
|
| + associated with the transcoding process. The action attempts
|
| + to assume the specified IAM role, checks read access to the
|
| + input and output buckets, and tries to send a test
|
| + notification to Amazon SNS topics that you specify.
|
| +
|
| + :type role: string
|
| + :param role: The IAM Amazon Resource Name (ARN) for the role that you
|
| + want Elastic Transcoder to test.
|
| +
|
| + :type input_bucket: string
|
| + :param input_bucket: The bucket that contains media files to be
|
| + transcoded. The action attempts to read from
|
| + this bucket.
|
| +
|
| + :type output_bucket: string
|
| + :param output_bucket: The bucket that will write transcoded media files
|
| + to. The action attempts to read from this
|
| + bucket.
|
| +
|
| + :type topics: list
|
| + :param topics: The ARNs of one or more () topics that you want the
|
| + action to send a test notification to.
|
| +
|
| + """
|
| + uri = '/2012-09-25/roleTests'
|
| + params = {
|
| + 'Role': role,
|
| + 'InputBucket': input_bucket,
|
| + 'OutputBucket': output_bucket,
|
| + 'Topics': topics,
|
| + }
|
| + return self.make_request('POST', uri, expected_status=200,
|
| + data=json.dumps(params))
|
| +
|
| + def update_pipeline_notifications(self, id, notifications):
|
| + """
|
| + To update () notifications for a pipeline, send a POST request
|
| + to the `//pipelines/ [pipelineId] /notifications` resource.
|
| +
|
| + When you update notifications for a pipeline, returns the
|
| + values that you specified in the request.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the pipeline for which you want to change
|
| + notification settings.
|
| +
|
| + :type notifications: dict
|
| + :param notifications: The () topic that you want to notify to report job
|
| + status.
|
| + To receive notifications, you must also subscribe
|
| + to the new topic in the console.
|
| +
|
| + + **Progressing**: The () topic that you want to
|
| + notify when has started to process the job.
|
| + + **Completed**: The topic that you want to notify
|
| + when has finished processing the job.
|
| + + **Warning**: The topic that you want to notify
|
| + when encounters a warning condition.
|
| + + **Error**: The topic that you want to notify
|
| + when encounters an error condition.
|
| +
|
| + """
|
| + uri = '/2012-09-25/pipelines/{0}/notifications'.format(id)
|
| + params = {'Notifications': notifications, }
|
| + return self.make_request('POST', uri, expected_status=200,
|
| + data=json.dumps(params))
|
| +
|
| + def update_pipeline_status(self, id, status):
|
| + """
|
| + To pause or reactivate a pipeline, so the pipeline stops or
|
| + restarts processing jobs, update the status for the pipeline.
|
| + Send a POST request to the `//pipelines/ [pipelineId] /status`
|
| + resource.
|
| +
|
| + Changing the pipeline status is useful if you want to cancel
|
| + one or more jobs. You can't cancel jobs after has started
|
| + processing them; if you pause the pipeline to which you
|
| + submitted the jobs, you have more time to get the job IDs for
|
| + the jobs that you want to cancel, and to send a CancelJob
|
| + request.
|
| +
|
| + :type id: string
|
| + :param id: The identifier of the pipeline to update.
|
| +
|
| + :type status: string
|
| + :param status: The new status of the pipeline:
|
| +
|
| +
|
| + + `active`: Enable the pipeline, so it starts processing
|
| + jobs.
|
| + + `paused`: Disable the pipeline, so it stops processing
|
| + jobs.
|
| +
|
| + """
|
| + uri = '/2012-09-25/pipelines/{0}/status'.format(id)
|
| + params = {'Status': status, }
|
| + return self.make_request('POST', uri, expected_status=200,
|
| + data=json.dumps(params))
|
| +
|
| + def make_request(self, verb, resource, headers=None, data='',
|
| + expected_status=None, params=None):
|
| + if headers is None:
|
| + headers = {}
|
| + response = AWSAuthConnection.make_request(
|
| + self, verb, resource, headers=headers, data=data)
|
| + body = json.load(response)
|
| + if response.status == expected_status:
|
| + return body
|
| + else:
|
| + error_type = response.getheader('x-amzn-ErrorType').split(':')[0]
|
| + error_class = self._faults.get(error_type, self.ResponseError)
|
| + raise error_class(response.status, response.reason, body)
|
|
|