933 lines
43 KiB
Python
933 lines
43 KiB
Python
|
# 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 = {
|
||
|
"IncompatibleVersionException": exceptions.IncompatibleVersionException,
|
||
|
"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
|
||
|
super(ElasticTranscoderConnection, self).__init__(**kwargs)
|
||
|
self.region = region
|
||
|
|
||
|
def _required_auth_capability(self):
|
||
|
return ['hmac-v4']
|
||
|
|
||
|
def cancel_job(self, id=None):
|
||
|
"""
|
||
|
The CancelJob operation cancels an unfinished job.
|
||
|
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 cancel.
|
||
|
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=None, input_name=None, output=None,
|
||
|
outputs=None, output_key_prefix=None, playlists=None):
|
||
|
"""
|
||
|
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.
|
||
|
|
||
|
If you have specified more than one output for your jobs (for
|
||
|
example, one output for the Kindle Fire and another output for
|
||
|
the Apple iPhone 4s), you currently must use the Elastic
|
||
|
Transcoder API to list the jobs (as opposed to the AWS
|
||
|
Console).
|
||
|
|
||
|
: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: The `CreateJobOutput` structure.
|
||
|
|
||
|
:type outputs: list
|
||
|
:param outputs: A section of the request body that provides information
|
||
|
about the transcoded (target) files. We recommend that you use the
|
||
|
`Outputs` syntax instead of the `Output` syntax.
|
||
|
|
||
|
:type output_key_prefix: string
|
||
|
:param output_key_prefix: The value, if any, that you want Elastic
|
||
|
Transcoder to prepend to the names of all files that this job
|
||
|
creates, including output files, thumbnails, and playlists.
|
||
|
|
||
|
:type playlists: list
|
||
|
:param playlists: If you specify a preset in `PresetId` for which the
|
||
|
value of `Container` is ts (MPEG-TS), Playlists contains
|
||
|
information about the master playlists that you want Elastic
|
||
|
Transcoder to create.
|
||
|
We recommend that you create only one master playlist. The maximum
|
||
|
number of master playlists in a job is 30.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/jobs'
|
||
|
params = {}
|
||
|
if pipeline_id is not None:
|
||
|
params['PipelineId'] = pipeline_id
|
||
|
if input_name is not None:
|
||
|
params['Input'] = input_name
|
||
|
if output is not None:
|
||
|
params['Output'] = output
|
||
|
if outputs is not None:
|
||
|
params['Outputs'] = outputs
|
||
|
if output_key_prefix is not None:
|
||
|
params['OutputKeyPrefix'] = output_key_prefix
|
||
|
if playlists is not None:
|
||
|
params['Playlists'] = playlists
|
||
|
return self.make_request('POST', uri, expected_status=201,
|
||
|
data=json.dumps(params))
|
||
|
|
||
|
def create_pipeline(self, name=None, input_bucket=None,
|
||
|
output_bucket=None, role=None, notifications=None,
|
||
|
content_config=None, thumbnail_config=None):
|
||
|
"""
|
||
|
The CreatePipeline operation creates a pipeline with settings
|
||
|
that you specify.
|
||
|
|
||
|
: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 Amazon S3 bucket in which you saved the media
|
||
|
files that you want to transcode.
|
||
|
|
||
|
:type output_bucket: string
|
||
|
:param output_bucket: The Amazon S3 bucket in which you want Elastic
|
||
|
Transcoder to save the transcoded files. (Use this, or use
|
||
|
ContentConfig:Bucket plus ThumbnailConfig:Bucket.)
|
||
|
Specify this value when all of the following are true:
|
||
|
|
||
|
+ You want to save transcoded files, thumbnails (if any), and playlists
|
||
|
(if any) together in one bucket.
|
||
|
+ You do not want to specify the users or groups who have access to the
|
||
|
transcoded files, thumbnails, and playlists.
|
||
|
+ You do not want to specify the permissions that Elastic Transcoder
|
||
|
grants to the files. When Elastic Transcoder saves files in
|
||
|
`OutputBucket`, it grants full control over the files only to the
|
||
|
AWS account that owns the role that is specified by `Role`.
|
||
|
+ You want to associate the transcoded files and thumbnails with the
|
||
|
Amazon S3 Standard storage class.
|
||
|
|
||
|
|
||
|
|
||
|
If you want to save transcoded files and playlists in one bucket and
|
||
|
thumbnails in another bucket, specify which users can access the
|
||
|
transcoded files or the permissions the users have, or change the
|
||
|
Amazon S3 storage class, omit `OutputBucket` and specify values for
|
||
|
`ContentConfig` and `ThumbnailConfig` instead.
|
||
|
|
||
|
:type role: string
|
||
|
:param role: The IAM Amazon Resource Name (ARN) for the role that you
|
||
|
want Elastic Transcoder to use to create the pipeline.
|
||
|
|
||
|
:type notifications: dict
|
||
|
:param notifications:
|
||
|
The Amazon Simple Notification Service (Amazon SNS) topic that you want
|
||
|
to notify to report job status.
|
||
|
To receive notifications, you must also subscribe to the new topic in
|
||
|
the Amazon SNS console.
|
||
|
|
||
|
+ **Progressing**: The topic ARN for the Amazon Simple Notification
|
||
|
Service (Amazon SNS) topic that you want to notify when Elastic
|
||
|
Transcoder has started to process a job in this pipeline. This is
|
||
|
the ARN that Amazon SNS returned when you created the topic. For
|
||
|
more information, see Create a Topic in the Amazon Simple
|
||
|
Notification Service Developer Guide.
|
||
|
+ **Completed**: The topic ARN for the Amazon SNS topic that you want
|
||
|
to notify when Elastic Transcoder has finished processing a job in
|
||
|
this pipeline. This is the ARN that Amazon SNS returned when you
|
||
|
created the topic.
|
||
|
+ **Warning**: The topic ARN for the Amazon SNS topic that you want to
|
||
|
notify when Elastic Transcoder encounters a warning condition while
|
||
|
processing a job in this pipeline. This is the ARN that Amazon SNS
|
||
|
returned when you created the topic.
|
||
|
+ **Error**: The topic ARN for the Amazon SNS topic that you want to
|
||
|
notify when Elastic Transcoder encounters an error condition while
|
||
|
processing a job in this pipeline. This is the ARN that Amazon SNS
|
||
|
returned when you created the topic.
|
||
|
|
||
|
:type content_config: dict
|
||
|
:param content_config:
|
||
|
The optional `ContentConfig` object specifies information about the
|
||
|
Amazon S3 bucket in which you want Elastic Transcoder to save
|
||
|
transcoded files and playlists: which bucket to use, which users
|
||
|
you want to have access to the files, the type of access you want
|
||
|
users to have, and the storage class that you want to assign to the
|
||
|
files.
|
||
|
|
||
|
If you specify values for `ContentConfig`, you must also specify values
|
||
|
for `ThumbnailConfig`.
|
||
|
|
||
|
If you specify values for `ContentConfig` and `ThumbnailConfig`, omit
|
||
|
the `OutputBucket` object.
|
||
|
|
||
|
|
||
|
+ **Bucket**: The Amazon S3 bucket in which you want Elastic Transcoder
|
||
|
to save transcoded files and playlists.
|
||
|
+ **Permissions** (Optional): The Permissions object specifies which
|
||
|
users you want to have access to transcoded files and the type of
|
||
|
access you want them to have. You can grant permissions to a
|
||
|
maximum of 30 users and/or predefined Amazon S3 groups.
|
||
|
+ **Grantee Type**: Specify the type of value that appears in the
|
||
|
`Grantee` object:
|
||
|
|
||
|
+ **Canonical**: The value in the `Grantee` object is either the
|
||
|
canonical user ID for an AWS account or an origin access identity
|
||
|
for an Amazon CloudFront distribution. For more information about
|
||
|
canonical user IDs, see Access Control List (ACL) Overview in the
|
||
|
Amazon Simple Storage Service Developer Guide. For more information
|
||
|
about using CloudFront origin access identities to require that
|
||
|
users use CloudFront URLs instead of Amazon S3 URLs, see Using an
|
||
|
Origin Access Identity to Restrict Access to Your Amazon S3
|
||
|
Content. A canonical user ID is not the same as an AWS account
|
||
|
number.
|
||
|
+ **Email**: The value in the `Grantee` object is the registered email
|
||
|
address of an AWS account.
|
||
|
+ **Group**: The value in the `Grantee` object is one of the following
|
||
|
predefined Amazon S3 groups: `AllUsers`, `AuthenticatedUsers`, or
|
||
|
`LogDelivery`.
|
||
|
|
||
|
+ **Grantee**: The AWS user or group that you want to have access to
|
||
|
transcoded files and playlists. To identify the user or group, you
|
||
|
can specify the canonical user ID for an AWS account, an origin
|
||
|
access identity for a CloudFront distribution, the registered email
|
||
|
address of an AWS account, or a predefined Amazon S3 group
|
||
|
+ **Access**: The permission that you want to give to the AWS user that
|
||
|
you specified in `Grantee`. Permissions are granted on the files
|
||
|
that Elastic Transcoder adds to the bucket, including playlists and
|
||
|
video files. Valid values include:
|
||
|
|
||
|
+ `READ`: The grantee can read the objects and metadata for objects
|
||
|
that Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `READ_ACP`: The grantee can read the object ACL for objects that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `WRITE_ACP`: The grantee can write the ACL for the objects that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `FULL_CONTROL`: The grantee has `READ`, `READ_ACP`, and `WRITE_ACP`
|
||
|
permissions for the objects that Elastic Transcoder adds to the
|
||
|
Amazon S3 bucket.
|
||
|
|
||
|
+ **StorageClass**: The Amazon S3 storage class, `Standard` or
|
||
|
`ReducedRedundancy`, that you want Elastic Transcoder to assign to
|
||
|
the video files and playlists that it stores in your Amazon S3
|
||
|
bucket.
|
||
|
|
||
|
:type thumbnail_config: dict
|
||
|
:param thumbnail_config:
|
||
|
The `ThumbnailConfig` object specifies several values, including the
|
||
|
Amazon S3 bucket in which you want Elastic Transcoder to save
|
||
|
thumbnail files, which users you want to have access to the files,
|
||
|
the type of access you want users to have, and the storage class
|
||
|
that you want to assign to the files.
|
||
|
|
||
|
If you specify values for `ContentConfig`, you must also specify values
|
||
|
for `ThumbnailConfig` even if you don't want to create thumbnails.
|
||
|
|
||
|
If you specify values for `ContentConfig` and `ThumbnailConfig`, omit
|
||
|
the `OutputBucket` object.
|
||
|
|
||
|
|
||
|
+ **Bucket**: The Amazon S3 bucket in which you want Elastic Transcoder
|
||
|
to save thumbnail files.
|
||
|
+ **Permissions** (Optional): The `Permissions` object specifies which
|
||
|
users and/or predefined Amazon S3 groups you want to have access to
|
||
|
thumbnail files, and the type of access you want them to have. You
|
||
|
can grant permissions to a maximum of 30 users and/or predefined
|
||
|
Amazon S3 groups.
|
||
|
+ **GranteeType**: Specify the type of value that appears in the
|
||
|
Grantee object:
|
||
|
|
||
|
+ **Canonical**: The value in the `Grantee` object is either the
|
||
|
canonical user ID for an AWS account or an origin access identity
|
||
|
for an Amazon CloudFront distribution. A canonical user ID is not
|
||
|
the same as an AWS account number.
|
||
|
+ **Email**: The value in the `Grantee` object is the registered email
|
||
|
address of an AWS account.
|
||
|
+ **Group**: The value in the `Grantee` object is one of the following
|
||
|
predefined Amazon S3 groups: `AllUsers`, `AuthenticatedUsers`, or
|
||
|
`LogDelivery`.
|
||
|
|
||
|
+ **Grantee**: The AWS user or group that you want to have access to
|
||
|
thumbnail files. To identify the user or group, you can specify the
|
||
|
canonical user ID for an AWS account, an origin access identity for
|
||
|
a CloudFront distribution, the registered email address of an AWS
|
||
|
account, or a predefined Amazon S3 group.
|
||
|
+ **Access**: The permission that you want to give to the AWS user that
|
||
|
you specified in `Grantee`. Permissions are granted on the
|
||
|
thumbnail files that Elastic Transcoder adds to the bucket. Valid
|
||
|
values include:
|
||
|
|
||
|
+ `READ`: The grantee can read the thumbnails and metadata for objects
|
||
|
that Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `READ_ACP`: The grantee can read the object ACL for thumbnails that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `WRITE_ACP`: The grantee can write the ACL for the thumbnails that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `FULL_CONTROL`: The grantee has `READ`, `READ_ACP`, and `WRITE_ACP`
|
||
|
permissions for the thumbnails that Elastic Transcoder adds to the
|
||
|
Amazon S3 bucket.
|
||
|
|
||
|
+ **StorageClass**: The Amazon S3 storage class, `Standard` or
|
||
|
`ReducedRedundancy`, that you want Elastic Transcoder to assign to
|
||
|
the thumbnails that it stores in your Amazon S3 bucket.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/pipelines'
|
||
|
params = {}
|
||
|
if name is not None:
|
||
|
params['Name'] = name
|
||
|
if input_bucket is not None:
|
||
|
params['InputBucket'] = input_bucket
|
||
|
if output_bucket is not None:
|
||
|
params['OutputBucket'] = output_bucket
|
||
|
if role is not None:
|
||
|
params['Role'] = role
|
||
|
if notifications is not None:
|
||
|
params['Notifications'] = notifications
|
||
|
if content_config is not None:
|
||
|
params['ContentConfig'] = content_config
|
||
|
if thumbnail_config is not None:
|
||
|
params['ThumbnailConfig'] = thumbnail_config
|
||
|
return self.make_request('POST', uri, expected_status=201,
|
||
|
data=json.dumps(params))
|
||
|
|
||
|
def create_preset(self, name=None, description=None, container=None,
|
||
|
video=None, audio=None, thumbnails=None):
|
||
|
"""
|
||
|
The CreatePreset operation creates a preset with settings that
|
||
|
you specify.
|
||
|
Elastic Transcoder checks the CreatePreset settings to ensure
|
||
|
that they meet Elastic Transcoder requirements and to
|
||
|
determine whether they comply with H.264 standards. If your
|
||
|
settings are not valid for Elastic Transcoder, Elastic
|
||
|
Transcoder returns an HTTP 400 response (
|
||
|
`ValidationException`) and does not create the preset. If the
|
||
|
settings are valid for Elastic Transcoder but aren't strictly
|
||
|
compliant with the H.264 standard, Elastic Transcoder 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 Elastic Transcoder produces.
|
||
|
Elastic Transcoder 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. Valid values
|
||
|
include `mp3`, `mp4`, `ogg`, `ts`, and `webm`.
|
||
|
|
||
|
: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 = {}
|
||
|
if name is not None:
|
||
|
params['Name'] = name
|
||
|
if description is not None:
|
||
|
params['Description'] = description
|
||
|
if container is not None:
|
||
|
params['Container'] = container
|
||
|
if video is not None:
|
||
|
params['Video'] = video
|
||
|
if audio is not None:
|
||
|
params['Audio'] = audio
|
||
|
if thumbnails is not None:
|
||
|
params['Thumbnails'] = thumbnails
|
||
|
return self.make_request('POST', uri, expected_status=201,
|
||
|
data=json.dumps(params))
|
||
|
|
||
|
def delete_pipeline(self, id=None):
|
||
|
"""
|
||
|
The DeletePipeline operation removes a pipeline.
|
||
|
|
||
|
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=None):
|
||
|
"""
|
||
|
The DeletePreset operation removes a preset that you've added
|
||
|
in an AWS region.
|
||
|
|
||
|
You can't delete the default presets that are included with
|
||
|
Elastic Transcoder.
|
||
|
|
||
|
: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=None, ascending=None,
|
||
|
page_token=None):
|
||
|
"""
|
||
|
The ListJobsByPipeline operation gets a list of the jobs
|
||
|
currently in a pipeline.
|
||
|
|
||
|
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 Elastic Transcoder 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 pipeline_id is not None:
|
||
|
params['PipelineId'] = pipeline_id
|
||
|
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=None, ascending=None,
|
||
|
page_token=None):
|
||
|
"""
|
||
|
The ListJobsByStatus operation gets a list of jobs that have a
|
||
|
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`, `Complete`,
|
||
|
`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 Elastic Transcoder 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 status is not None:
|
||
|
params['Status'] = status
|
||
|
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, ascending=None, page_token=None):
|
||
|
"""
|
||
|
The ListPipelines operation gets a list of the pipelines
|
||
|
associated with the current AWS account.
|
||
|
|
||
|
:type ascending: string
|
||
|
:param ascending: To list pipelines in chronological order by the date
|
||
|
and time that they were created, enter `True`. To list pipelines in
|
||
|
reverse chronological order, enter `False`.
|
||
|
|
||
|
:type page_token: string
|
||
|
:param page_token: When Elastic Transcoder returns more than one page
|
||
|
of results, use `pageToken` in subsequent `GET` requests to get
|
||
|
each successive page of results.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/pipelines'.format()
|
||
|
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_presets(self, ascending=None, page_token=None):
|
||
|
"""
|
||
|
The ListPresets operation gets a list of the default presets
|
||
|
included with Elastic Transcoder and the presets that you've
|
||
|
added in an AWS region.
|
||
|
|
||
|
:type ascending: string
|
||
|
:param ascending: To list presets in chronological order by the date
|
||
|
and time that they were created, enter `True`. To list presets in
|
||
|
reverse chronological order, enter `False`.
|
||
|
|
||
|
:type page_token: string
|
||
|
:param page_token: When Elastic Transcoder returns more than one page
|
||
|
of results, use `pageToken` in subsequent `GET` requests to get
|
||
|
each successive page of results.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/presets'.format()
|
||
|
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 read_job(self, id=None):
|
||
|
"""
|
||
|
The ReadJob operation returns detailed information about a
|
||
|
job.
|
||
|
|
||
|
: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=None):
|
||
|
"""
|
||
|
The ReadPipeline operation gets detailed information about a
|
||
|
pipeline.
|
||
|
|
||
|
: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=None):
|
||
|
"""
|
||
|
The ReadPreset operation gets detailed information about a
|
||
|
preset.
|
||
|
|
||
|
: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=None, input_bucket=None, output_bucket=None,
|
||
|
topics=None):
|
||
|
"""
|
||
|
The TestRole operation tests the IAM role used to create the
|
||
|
pipeline.
|
||
|
|
||
|
The `TestRole` action lets you determine whether the IAM role
|
||
|
you are using has sufficient permissions to let Elastic
|
||
|
Transcoder 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 Amazon S3 bucket that contains media files to
|
||
|
be transcoded. The action attempts to read from this bucket.
|
||
|
|
||
|
:type output_bucket: string
|
||
|
:param output_bucket: The Amazon S3 bucket that Elastic Transcoder 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 Amazon Simple Notification
|
||
|
Service (Amazon SNS) topics that you want the action to send a test
|
||
|
notification to.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/roleTests'
|
||
|
params = {}
|
||
|
if role is not None:
|
||
|
params['Role'] = role
|
||
|
if input_bucket is not None:
|
||
|
params['InputBucket'] = input_bucket
|
||
|
if output_bucket is not None:
|
||
|
params['OutputBucket'] = output_bucket
|
||
|
if topics is not None:
|
||
|
params['Topics'] = topics
|
||
|
return self.make_request('POST', uri, expected_status=200,
|
||
|
data=json.dumps(params))
|
||
|
|
||
|
def update_pipeline(self, id, name=None, input_bucket=None, role=None,
|
||
|
notifications=None, content_config=None,
|
||
|
thumbnail_config=None):
|
||
|
"""
|
||
|
Use the `UpdatePipeline` operation to update settings for a
|
||
|
pipeline. When you change pipeline settings, your changes take
|
||
|
effect immediately. Jobs that you have already submitted and
|
||
|
that Elastic Transcoder has not started to process are
|
||
|
affected in addition to jobs that you submit after you change
|
||
|
settings.
|
||
|
|
||
|
:type id: string
|
||
|
:param id: The ID of the pipeline that you want to update.
|
||
|
|
||
|
: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 Amazon S3 bucket in which you saved the media
|
||
|
files that you want to transcode and the graphics that you want to
|
||
|
use as watermarks.
|
||
|
|
||
|
:type role: string
|
||
|
:param role: The IAM Amazon Resource Name (ARN) for the role that you
|
||
|
want Elastic Transcoder to use to transcode jobs for this pipeline.
|
||
|
|
||
|
:type notifications: dict
|
||
|
:param notifications:
|
||
|
The Amazon Simple Notification Service (Amazon SNS) topic or topics to
|
||
|
notify in order to report job status.
|
||
|
To receive notifications, you must also subscribe to the new topic in
|
||
|
the Amazon SNS console.
|
||
|
|
||
|
:type content_config: dict
|
||
|
:param content_config:
|
||
|
The optional `ContentConfig` object specifies information about the
|
||
|
Amazon S3 bucket in which you want Elastic Transcoder to save
|
||
|
transcoded files and playlists: which bucket to use, which users
|
||
|
you want to have access to the files, the type of access you want
|
||
|
users to have, and the storage class that you want to assign to the
|
||
|
files.
|
||
|
|
||
|
If you specify values for `ContentConfig`, you must also specify values
|
||
|
for `ThumbnailConfig`.
|
||
|
|
||
|
If you specify values for `ContentConfig` and `ThumbnailConfig`, omit
|
||
|
the `OutputBucket` object.
|
||
|
|
||
|
|
||
|
+ **Bucket**: The Amazon S3 bucket in which you want Elastic Transcoder
|
||
|
to save transcoded files and playlists.
|
||
|
+ **Permissions** (Optional): The Permissions object specifies which
|
||
|
users you want to have access to transcoded files and the type of
|
||
|
access you want them to have. You can grant permissions to a
|
||
|
maximum of 30 users and/or predefined Amazon S3 groups.
|
||
|
+ **Grantee Type**: Specify the type of value that appears in the
|
||
|
`Grantee` object:
|
||
|
|
||
|
+ **Canonical**: The value in the `Grantee` object is either the
|
||
|
canonical user ID for an AWS account or an origin access identity
|
||
|
for an Amazon CloudFront distribution. For more information about
|
||
|
canonical user IDs, see Access Control List (ACL) Overview in the
|
||
|
Amazon Simple Storage Service Developer Guide. For more information
|
||
|
about using CloudFront origin access identities to require that
|
||
|
users use CloudFront URLs instead of Amazon S3 URLs, see Using an
|
||
|
Origin Access Identity to Restrict Access to Your Amazon S3
|
||
|
Content. A canonical user ID is not the same as an AWS account
|
||
|
number.
|
||
|
+ **Email**: The value in the `Grantee` object is the registered email
|
||
|
address of an AWS account.
|
||
|
+ **Group**: The value in the `Grantee` object is one of the following
|
||
|
predefined Amazon S3 groups: `AllUsers`, `AuthenticatedUsers`, or
|
||
|
`LogDelivery`.
|
||
|
|
||
|
+ **Grantee**: The AWS user or group that you want to have access to
|
||
|
transcoded files and playlists. To identify the user or group, you
|
||
|
can specify the canonical user ID for an AWS account, an origin
|
||
|
access identity for a CloudFront distribution, the registered email
|
||
|
address of an AWS account, or a predefined Amazon S3 group
|
||
|
+ **Access**: The permission that you want to give to the AWS user that
|
||
|
you specified in `Grantee`. Permissions are granted on the files
|
||
|
that Elastic Transcoder adds to the bucket, including playlists and
|
||
|
video files. Valid values include:
|
||
|
|
||
|
+ `READ`: The grantee can read the objects and metadata for objects
|
||
|
that Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `READ_ACP`: The grantee can read the object ACL for objects that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `WRITE_ACP`: The grantee can write the ACL for the objects that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `FULL_CONTROL`: The grantee has `READ`, `READ_ACP`, and `WRITE_ACP`
|
||
|
permissions for the objects that Elastic Transcoder adds to the
|
||
|
Amazon S3 bucket.
|
||
|
|
||
|
+ **StorageClass**: The Amazon S3 storage class, `Standard` or
|
||
|
`ReducedRedundancy`, that you want Elastic Transcoder to assign to
|
||
|
the video files and playlists that it stores in your Amazon S3
|
||
|
bucket.
|
||
|
|
||
|
:type thumbnail_config: dict
|
||
|
:param thumbnail_config:
|
||
|
The `ThumbnailConfig` object specifies several values, including the
|
||
|
Amazon S3 bucket in which you want Elastic Transcoder to save
|
||
|
thumbnail files, which users you want to have access to the files,
|
||
|
the type of access you want users to have, and the storage class
|
||
|
that you want to assign to the files.
|
||
|
|
||
|
If you specify values for `ContentConfig`, you must also specify values
|
||
|
for `ThumbnailConfig` even if you don't want to create thumbnails.
|
||
|
|
||
|
If you specify values for `ContentConfig` and `ThumbnailConfig`, omit
|
||
|
the `OutputBucket` object.
|
||
|
|
||
|
|
||
|
+ **Bucket**: The Amazon S3 bucket in which you want Elastic Transcoder
|
||
|
to save thumbnail files.
|
||
|
+ **Permissions** (Optional): The `Permissions` object specifies which
|
||
|
users and/or predefined Amazon S3 groups you want to have access to
|
||
|
thumbnail files, and the type of access you want them to have. You
|
||
|
can grant permissions to a maximum of 30 users and/or predefined
|
||
|
Amazon S3 groups.
|
||
|
+ **GranteeType**: Specify the type of value that appears in the
|
||
|
Grantee object:
|
||
|
|
||
|
+ **Canonical**: The value in the `Grantee` object is either the
|
||
|
canonical user ID for an AWS account or an origin access identity
|
||
|
for an Amazon CloudFront distribution. A canonical user ID is not
|
||
|
the same as an AWS account number.
|
||
|
+ **Email**: The value in the `Grantee` object is the registered email
|
||
|
address of an AWS account.
|
||
|
+ **Group**: The value in the `Grantee` object is one of the following
|
||
|
predefined Amazon S3 groups: `AllUsers`, `AuthenticatedUsers`, or
|
||
|
`LogDelivery`.
|
||
|
|
||
|
+ **Grantee**: The AWS user or group that you want to have access to
|
||
|
thumbnail files. To identify the user or group, you can specify the
|
||
|
canonical user ID for an AWS account, an origin access identity for
|
||
|
a CloudFront distribution, the registered email address of an AWS
|
||
|
account, or a predefined Amazon S3 group.
|
||
|
+ **Access**: The permission that you want to give to the AWS user that
|
||
|
you specified in `Grantee`. Permissions are granted on the
|
||
|
thumbnail files that Elastic Transcoder adds to the bucket. Valid
|
||
|
values include:
|
||
|
|
||
|
+ `READ`: The grantee can read the thumbnails and metadata for objects
|
||
|
that Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `READ_ACP`: The grantee can read the object ACL for thumbnails that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `WRITE_ACP`: The grantee can write the ACL for the thumbnails that
|
||
|
Elastic Transcoder adds to the Amazon S3 bucket.
|
||
|
+ `FULL_CONTROL`: The grantee has `READ`, `READ_ACP`, and `WRITE_ACP`
|
||
|
permissions for the thumbnails that Elastic Transcoder adds to the
|
||
|
Amazon S3 bucket.
|
||
|
|
||
|
+ **StorageClass**: The Amazon S3 storage class, `Standard` or
|
||
|
`ReducedRedundancy`, that you want Elastic Transcoder to assign to
|
||
|
the thumbnails that it stores in your Amazon S3 bucket.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/pipelines/{0}'.format(id)
|
||
|
params = {}
|
||
|
if name is not None:
|
||
|
params['Name'] = name
|
||
|
if input_bucket is not None:
|
||
|
params['InputBucket'] = input_bucket
|
||
|
if role is not None:
|
||
|
params['Role'] = role
|
||
|
if notifications is not None:
|
||
|
params['Notifications'] = notifications
|
||
|
if content_config is not None:
|
||
|
params['ContentConfig'] = content_config
|
||
|
if thumbnail_config is not None:
|
||
|
params['ThumbnailConfig'] = thumbnail_config
|
||
|
return self.make_request('PUT', uri, expected_status=200,
|
||
|
data=json.dumps(params))
|
||
|
|
||
|
def update_pipeline_notifications(self, id=None, notifications=None):
|
||
|
"""
|
||
|
With the UpdatePipelineNotifications operation, you can update
|
||
|
Amazon Simple Notification Service (Amazon SNS) notifications
|
||
|
for a pipeline.
|
||
|
|
||
|
When you update notifications for a pipeline, Elastic
|
||
|
Transcoder 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 ARN for the Amazon Simple Notification Service (Amazon SNS)
|
||
|
topic that you want to notify to report job status.
|
||
|
To receive notifications, you must also subscribe to the new topic in
|
||
|
the Amazon SNS console.
|
||
|
|
||
|
+ **Progressing**: The topic ARN for the Amazon Simple Notification
|
||
|
Service (Amazon SNS) topic that you want to notify when Elastic
|
||
|
Transcoder has started to process jobs that are added to this
|
||
|
pipeline. This is the ARN that Amazon SNS returned when you created
|
||
|
the topic.
|
||
|
+ **Completed**: The topic ARN for the Amazon SNS topic that you want
|
||
|
to notify when Elastic Transcoder has finished processing a job.
|
||
|
This is the ARN that Amazon SNS returned when you created the
|
||
|
topic.
|
||
|
+ **Warning**: The topic ARN for the Amazon SNS topic that you want to
|
||
|
notify when Elastic Transcoder encounters a warning condition. This
|
||
|
is the ARN that Amazon SNS returned when you created the topic.
|
||
|
+ **Error**: The topic ARN for the Amazon SNS topic that you want to
|
||
|
notify when Elastic Transcoder encounters an error condition. This
|
||
|
is the ARN that Amazon SNS returned when you created the topic.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/pipelines/{0}/notifications'.format(id)
|
||
|
params = {}
|
||
|
if id is not None:
|
||
|
params['Id'] = id
|
||
|
if notifications is not None:
|
||
|
params['Notifications'] = notifications
|
||
|
return self.make_request('POST', uri, expected_status=200,
|
||
|
data=json.dumps(params))
|
||
|
|
||
|
def update_pipeline_status(self, id=None, status=None):
|
||
|
"""
|
||
|
The UpdatePipelineStatus operation pauses or reactivates a
|
||
|
pipeline, so that the pipeline stops or restarts the
|
||
|
processing of jobs.
|
||
|
|
||
|
Changing the pipeline status is useful if you want to cancel
|
||
|
one or more jobs. You can't cancel jobs after Elastic
|
||
|
Transcoder 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 desired status of the pipeline:
|
||
|
|
||
|
|
||
|
+ `Active`: The pipeline is processing jobs.
|
||
|
+ `Paused`: The pipeline is not currently processing jobs.
|
||
|
|
||
|
"""
|
||
|
uri = '/2012-09-25/pipelines/{0}/status'.format(id)
|
||
|
params = {}
|
||
|
if id is not None:
|
||
|
params['Id'] = id
|
||
|
if status is not None:
|
||
|
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 = super(ElasticTranscoderConnection, self).make_request(
|
||
|
verb, resource, headers=headers, data=data, params=params)
|
||
|
body = json.loads(response.read().decode('utf-8'))
|
||
|
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)
|