[Python-modules-commits] [python-botocore] 01/05: New upstream version 1.4.64

Takaki Taniguchi takaki at moszumanska.debian.org
Thu Oct 20 07:22:26 UTC 2016


This is an automated email from the git hooks/post-receive script.

takaki pushed a commit to branch master
in repository python-botocore.

commit f90a4166da009793622be5d192b0172171b99dff
Author: TANIGUCHI Takaki <takaki at asis.media-as.org>
Date:   Thu Oct 20 16:01:27 2016 +0900

    New upstream version 1.4.64
---
 PKG-INFO                                           |    2 +-
 botocore.egg-info/PKG-INFO                         |    2 +-
 botocore.egg-info/SOURCES.txt                      |    4 +
 botocore/__init__.py                               |    2 +-
 botocore/args.py                                   |   13 +-
 botocore/client.py                                 |  162 +-
 botocore/data/acm/2015-12-08/service-2.json        |  110 +-
 .../data/cloudformation/2010-05-15/waiters-2.json  |   90 -
 botocore/data/cloudfront/2016-08-20/service-2.json |    0
 .../data/cloudfront/2016-09-29/paginators-1.json   |   32 +
 botocore/data/cloudfront/2016-09-29/service-2.json | 3496 ++++++++++++++++++++
 botocore/data/cloudfront/2016-09-29/waiters-2.json |   47 +
 botocore/data/config/2014-11-12/service-2.json     |  144 +-
 botocore/data/ecr/2015-09-21/service-2.json        |  132 +-
 .../data/elasticache/2015-02-02/service-2.json     |  615 ++--
 .../elasticbeanstalk/2010-12-01/service-2.json     |  333 +-
 botocore/data/endpoints.json                       |  207 +-
 botocore/data/gamelift/2015-10-01/service-2.json   | 1934 ++++-------
 botocore/data/iot/2015-05-28/service-2.json        |   29 +
 .../kinesisanalytics/2015-08-14/service-2.json     |    8 +-
 botocore/data/rds/2014-10-31/service-2.json        |  132 +-
 botocore/data/route53/2013-04-01/service-2.json    |  210 +-
 botocore/handlers.py                               |    1 -
 botocore/utils.py                                  |   10 +-
 docs/source/conf.py                                |    2 +-
 tests/functional/test_client_metadata.py           |   44 +
 tests/functional/test_s3.py                        |   94 +-
 tests/unit/test_args.py                            |    3 +-
 tests/unit/test_client.py                          |   68 +-
 tests/unit/test_utils.py                           |   18 +-
 30 files changed, 5817 insertions(+), 2127 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index c382b75..608d380 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: botocore
-Version: 1.4.60
+Version: 1.4.64
 Summary: Low-level, data-driven core of boto 3.
 Home-page: https://github.com/boto/botocore
 Author: Amazon Web Services
diff --git a/botocore.egg-info/PKG-INFO b/botocore.egg-info/PKG-INFO
index c382b75..608d380 100644
--- a/botocore.egg-info/PKG-INFO
+++ b/botocore.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: botocore
-Version: 1.4.60
+Version: 1.4.64
 Summary: Low-level, data-driven core of boto 3.
 Home-page: https://github.com/boto/botocore
 Author: Amazon Web Services
diff --git a/botocore.egg-info/SOURCES.txt b/botocore.egg-info/SOURCES.txt
index db71361..c7c1ce7 100644
--- a/botocore.egg-info/SOURCES.txt
+++ b/botocore.egg-info/SOURCES.txt
@@ -83,6 +83,9 @@ botocore/data/cloudfront/2016-08-20/waiters-2.json
 botocore/data/cloudfront/2016-09-07/paginators-1.json
 botocore/data/cloudfront/2016-09-07/service-2.json
 botocore/data/cloudfront/2016-09-07/waiters-2.json
+botocore/data/cloudfront/2016-09-29/paginators-1.json
+botocore/data/cloudfront/2016-09-29/service-2.json
+botocore/data/cloudfront/2016-09-29/waiters-2.json
 botocore/data/cloudhsm/2014-05-30/service-2.json
 botocore/data/cloudsearch/2011-02-01/service-2.json
 botocore/data/cloudsearch/2013-01-01/service-2.json
@@ -408,6 +411,7 @@ tests/functional/__init__.py
 tests/functional/test_alias.py
 tests/functional/test_apigateway.py
 tests/functional/test_client_class_names.py
+tests/functional/test_client_metadata.py
 tests/functional/test_cloudsearchdomain.py
 tests/functional/test_credentials.py
 tests/functional/test_iot_data.py
diff --git a/botocore/__init__.py b/botocore/__init__.py
index a43c69a..c7d4507 100644
--- a/botocore/__init__.py
+++ b/botocore/__init__.py
@@ -16,7 +16,7 @@ import os
 import re
 import logging
 
-__version__ = '1.4.60'
+__version__ = '1.4.64'
 
 
 class NullHandler(logging.Handler):
diff --git a/botocore/args.py b/botocore/args.py
index 6a5cd31..da6383f 100644
--- a/botocore/args.py
+++ b/botocore/args.py
@@ -20,7 +20,6 @@ import copy
 import logging
 
 import botocore.serialize
-from botocore.utils import fix_s3_host
 from botocore.signers import RequestSigner
 from botocore.config import Config
 from botocore.endpoint import EndpointCreator
@@ -50,6 +49,7 @@ class ClientArgsCreator(object):
         protocol = final_args['protocol']
         config_kwargs = final_args['config_kwargs']
         s3_config = final_args['s3_config']
+        partition = endpoint_config['metadata'].get('partition', None)
 
         event_emitter = copy.copy(self._event_emitter)
         signer = RequestSigner(
@@ -58,10 +58,7 @@ class ClientArgsCreator(object):
             endpoint_config['signature_version'],
             credentials, event_emitter)
 
-        # Add any additional s3 configuration for client
         config_kwargs['s3'] = s3_config
-        self._conditionally_unregister_fix_s3_host(endpoint_url, event_emitter)
-
         new_config = Config(**config_kwargs)
         endpoint_creator = EndpointCreator(event_emitter)
 
@@ -83,7 +80,8 @@ class ClientArgsCreator(object):
             'request_signer': signer,
             'service_model': service_model,
             'loader': self._loader,
-            'client_config': new_config
+            'client_config': new_config,
+            'partition': partition
         }
 
     def compute_client_args(self, service_model, client_config,
@@ -175,11 +173,6 @@ class ClientArgsCreator(object):
 
         return s3_configuration
 
-    def _conditionally_unregister_fix_s3_host(self, endpoint_url, emitter):
-        # If the user is providing a custom endpoint, we should not alter it.
-        if endpoint_url is not None:
-            emitter.unregister('before-sign.s3', fix_s3_host)
-
     def _convert_config_to_bool(self, config_dict, keys):
         # Make sure any further modifications to this section of the config
         # will not affect the scoped config by making a copy of it.
diff --git a/botocore/client.py b/botocore/client.py
index 18e7132..33de501 100644
--- a/botocore/client.py
+++ b/botocore/client.py
@@ -25,13 +25,14 @@ from botocore.hooks import first_non_none_response
 from botocore.model import ServiceModel
 from botocore.paginate import Paginator
 from botocore.utils import CachedProperty
-from botocore.utils import fix_s3_host
 from botocore.utils import get_service_module_name
-from botocore.utils import switch_to_virtual_host_style
 from botocore.utils import switch_host_s3_accelerate
-from botocore.utils import S3_ACCELERATE_ENDPOINT
 from botocore.utils import S3RegionRedirector
+from botocore.utils import fix_s3_host
+from botocore.utils import switch_to_virtual_host_style
+from botocore.utils import S3_ACCELERATE_WHITELIST
 from botocore.args import ClientArgsCreator
+from botocore.compat import urlsplit
 # Keep this imported.  There's pre-existing code that uses
 # "from botocore.client import Config".
 from botocore.config import Config
@@ -67,7 +68,7 @@ class ClientCreator(object):
             service_model, region_name, is_secure, endpoint_url,
             verify, credentials, scoped_config, client_config, endpoint_bridge)
         service_client = cls(**client_args)
-        self._create_s3_redirector(service_client, endpoint_bridge)
+        self._register_s3_events(service_client, endpoint_bridge, endpoint_url)
         return service_client
 
     def create_client_class(self, service_name, api_version=None):
@@ -114,10 +115,101 @@ class ClientCreator(object):
         self._event_emitter.register('needs-retry.%s' % endpoint_prefix,
                                      handler, unique_id=unique_id)
 
-    def _create_s3_redirector(self, client, endpoint_bridge):
+    def _register_s3_events(self, client, endpoint_bridge, endpoint_url):
         if client.meta.service_model.service_name != 's3':
             return
         S3RegionRedirector(endpoint_bridge, client).register()
+        self._set_s3_addressing_style(
+            endpoint_url, client.meta.config.s3, client.meta.events)
+        # Enable accelerate if the configuration is set to to true or the
+        # endpoint being used matches one of the accelerate endpoints.
+        if self._is_s3_accelerate(endpoint_url, client.meta.config.s3):
+            # Also make sure that the hostname gets switched to
+            # s3-accelerate.amazonaws.com
+            client.meta.events.register_first(
+                'request-created.s3', switch_host_s3_accelerate)
+
+    def _set_s3_addressing_style(self, endpoint_url, s3_config, event_emitter):
+        if s3_config is None:
+            s3_config = {}
+
+        addressing_style = self._get_s3_addressing_style(
+            endpoint_url, s3_config)
+        handler = self._get_s3_addressing_handler(
+            endpoint_url, s3_config, addressing_style)
+        if handler is not None:
+            event_emitter.register('before-sign.s3', handler)
+
+    def _get_s3_addressing_style(self, endpoint_url, s3_config):
+        # Use virtual host style addressing if accelerate is enabled or if
+        # the given endpoint url is an accelerate endpoint.
+        accelerate = s3_config.get('use_accelerate_endpoint', False)
+        if accelerate or self._is_s3_accelerate(endpoint_url, s3_config):
+            return 'virtual'
+
+        # If a particular addressing style is configured, use it.
+        configured_addressing_style = s3_config.get('addressing_style')
+        if configured_addressing_style:
+            return configured_addressing_style
+
+    def _get_s3_addressing_handler(self, endpoint_url, s3_config,
+                                   addressing_style):
+        # If virtual host style was configured, use it regardless of whether
+        # or not the bucket looks dns compatible.
+        if addressing_style == 'virtual':
+            logger.debug("Using S3 virtual host style addressing.")
+            return switch_to_virtual_host_style
+
+        # If path style is configured, no additional steps are needed. If
+        # endpoint_url was specified, don't default to virtual. We could
+        # potentially default provided endpoint urls to virtual hosted
+        # style, but for now it is avoided.
+        if addressing_style == 'path' or endpoint_url is not None:
+            logger.debug("Using S3 path style addressing.")
+            return None
+
+        logger.debug("Defaulting to S3 virtual host style addressing with "
+                     "path style addressing fallback.")
+
+        # For dual stack mode, we need to clear the default endpoint url in
+        # order to use the existing netloc if the bucket is dns compatible.
+        if s3_config.get('use_dualstack_endpoint', False):
+            return functools.partial(
+                fix_s3_host, default_endpoint_url=None)
+
+        # By default, try to use virtual style with path fallback.
+        return fix_s3_host
+
+    def _is_s3_accelerate(self, endpoint_url, s3_config):
+        # Accelerate has been explicitly configured.
+        if s3_config is not None and s3_config.get('use_accelerate_endpoint'):
+            return True
+
+        # Accelerate mode is turned on automatically if an endpoint url is
+        # provided that matches the accelerate scheme.
+        if endpoint_url is None:
+            return False
+
+        # Accelerate is only valid for Amazon endpoints.
+        netloc = urlsplit(endpoint_url).netloc
+        if not netloc.endswith('amazonaws.com'):
+            return False
+
+        # The first part of the url should always be s3-accelerate.
+        parts = netloc.split('.')
+        if parts[0] != 's3-accelerate':
+            return False
+
+        # Url parts between 's3-accelerate' and 'amazonaws.com' which
+        # represent different url features.
+        feature_parts = parts[1:-2]
+
+        # There should be no duplicate url parts.
+        if len(feature_parts) != len(set(feature_parts)):
+            return False
+
+        # Remaining parts must all be in the whitelist.
+        return all(p in S3_ACCELERATE_WHITELIST for p in feature_parts)
 
     def _get_client_args(self, service_model, region_name, is_secure,
                          endpoint_url, verify, credentials,
@@ -387,7 +479,7 @@ class BaseClient(object):
 
     def __init__(self, serializer, endpoint, response_parser,
                  event_emitter, request_signer, service_model, loader,
-                 client_config):
+                 client_config, partition):
         self._serializer = serializer
         self._endpoint = endpoint
         self._response_parser = response_parser
@@ -397,7 +489,7 @@ class BaseClient(object):
         self._client_config = client_config
         self.meta = ClientMeta(event_emitter, self._client_config,
                                endpoint.host, service_model,
-                               self._PY_TO_OP_NAME)
+                               self._PY_TO_OP_NAME, partition)
         self._register_handlers()
 
     def _register_handlers(self):
@@ -406,55 +498,6 @@ class BaseClient(object):
                                   self.meta.service_model.endpoint_prefix,
                                   self._request_signer.handler)
 
-        self._register_s3_specific_handlers()
-
-    def _register_s3_specific_handlers(self):
-        # Register all of the s3 specific handlers
-        if self.meta.config.s3 is None:
-            s3_addressing_style = None
-            s3_accelerate = None
-            s3_dualstack = None
-        else:
-            s3_addressing_style = self.meta.config.s3.get('addressing_style')
-            s3_accelerate = self.meta.config.s3.get('use_accelerate_endpoint')
-            s3_dualstack = self.meta.config.s3.get('use_dualstack_endpoint')
-
-        # Enable accelerate if the configuration is set to to true or the
-        # endpoint being used matches one of the Accelerate endpoints.
-        if s3_accelerate or S3_ACCELERATE_ENDPOINT in self._endpoint.host:
-            # Amazon S3 accelerate is being used then always use the virtual
-            # style of addressing because it is required.
-            self._force_virtual_style_s3_addressing()
-            # Also make sure that the hostname gets switched to
-            # s3-accelerate.amazonaws.com
-            self.meta.events.register_first(
-                'request-created.s3', switch_host_s3_accelerate)
-        elif s3_addressing_style:
-            # Otherwise go ahead with the style the user may have specified.
-            if s3_addressing_style == 'path':
-                self._force_path_style_s3_addressing()
-            elif s3_addressing_style == 'virtual':
-                self._force_virtual_style_s3_addressing()
-        elif s3_dualstack:
-            self.meta.events.unregister('before-sign.s3', fix_s3_host)
-            self.meta.events.register(
-                'before-sign.s3',
-                functools.partial(fix_s3_host, default_endpoint_url=None))
-
-    def _force_path_style_s3_addressing(self):
-        # Do not try to modify the host if path is specified. The
-        # ``fix_s3_host`` usually switches the addresing style to virtual.
-        self.meta.events.unregister('before-sign.s3', fix_s3_host)
-
-    def _force_virtual_style_s3_addressing(self):
-        # If the virtual host addressing style is being forced,
-        # switch the default fix_s3_host handler for the more general
-        # switch_to_virtual_host_style handler that does not have opt out
-        # cases (other than throwing an error if the name is DNS incompatible)
-        self.meta.events.unregister('before-sign.s3', fix_s3_host)
-        self.meta.events.register(
-            'before-sign.s3', switch_to_virtual_host_style)
-
     @property
     def _service_model(self):
         return self.meta.service_model
@@ -660,12 +703,13 @@ class ClientMeta(object):
     """
 
     def __init__(self, events, client_config, endpoint_url, service_model,
-                 method_to_api_mapping):
+                 method_to_api_mapping, partition):
         self.events = events
         self._client_config = client_config
         self._endpoint_url = endpoint_url
         self._service_model = service_model
         self._method_to_api_mapping = method_to_api_mapping
+        self._partition = partition
 
     @property
     def service_model(self):
@@ -686,3 +730,7 @@ class ClientMeta(object):
     @property
     def method_to_api_mapping(self):
         return self._method_to_api_mapping
+
+    @property
+    def partition(self):
+        return self._partition
diff --git a/botocore/data/acm/2015-12-08/service-2.json b/botocore/data/acm/2015-12-08/service-2.json
index 83d4f7a..a43e411 100644
--- a/botocore/data/acm/2015-12-08/service-2.json
+++ b/botocore/data/acm/2015-12-08/service-2.json
@@ -69,6 +69,20 @@
       ],
       "documentation":"<p>Retrieves an ACM Certificate and certificate chain for the certificate specified by an ARN. The chain is an ordered list of certificates that contains the root certificate, intermediate certificates of subordinate CAs, and the ACM Certificate. The certificate and certificate chain are base64 encoded. If you want to decode the certificate chain to see the individual certificate fields, you can use OpenSSL.</p> <note> <p>Currently, ACM Certificates can be used onl [...]
     },
+    "ImportCertificate":{
+      "name":"ImportCertificate",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ImportCertificateRequest"},
+      "output":{"shape":"ImportCertificateResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"LimitExceededException"}
+      ],
+      "documentation":"<p>Imports an SSL/TLS certificate into AWS Certificate Manager (ACM) to use with <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/acm-services.html\">ACM's integrated AWS services</a>.</p> <note> <p>ACM does not provide <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html\">managed renewal</a> for certificates that you import.</p> </note> <p>For more information about importing certificates into ACM, including the differences between  [...]
+    },
     "ListCertificates":{
       "name":"ListCertificates",
       "http":{
@@ -119,7 +133,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InvalidDomainValidationOptionsException"}
       ],
-      "documentation":"<p>Requests an ACM Certificate for use with other AWS services. To request an ACM Certificate, you must specify the fully qualified domain name (FQDN) for your site. You can also specify additional FQDNs if users can reach your site by using other names. For each domain name you specify, email is sent to the domain owner to request approval to issue the certificate. After receiving approval from the domain owner, the ACM Certificate is issued. For more information, [...]
+      "documentation":"<p>Requests an ACM Certificate for use with other AWS services. To request an ACM Certificate, you must specify the fully qualified domain name (FQDN) for your site. You can also specify additional FQDNs if users can reach your site by using other names. For each domain name you specify, email is sent to the domain owner to request approval to issue the certificate. After receiving approval from the domain owner, the ACM Certificate is issued. For more information, [...]
     },
     "ResendValidationEmail":{
       "name":"ResendValidationEmail",
@@ -163,34 +177,44 @@
     },
     "CertificateBody":{
       "type":"string",
-      "max":524288,
+      "max":32768,
       "min":1,
       "pattern":"-{5}BEGIN CERTIFICATE-{5}\\u000D?\\u000A([A-Za-z0-9/+]{64}\\u000D?\\u000A)*[A-Za-z0-9/+]{1,64}={0,2}\\u000D?\\u000A-{5}END CERTIFICATE-{5}(\\u000D?\\u000A)?"
     },
+    "CertificateBodyBlob":{
+      "type":"blob",
+      "max":32768,
+      "min":1
+    },
     "CertificateChain":{
       "type":"string",
       "max":2097152,
       "min":1,
       "pattern":"(-{5}BEGIN CERTIFICATE-{5}\\u000D?\\u000A([A-Za-z0-9/+]{64}\\u000D?\\u000A)*[A-Za-z0-9/+]{1,64}={0,2}\\u000D?\\u000A-{5}END CERTIFICATE-{5}\\u000D?\\u000A)*-{5}BEGIN CERTIFICATE-{5}\\u000D?\\u000A([A-Za-z0-9/+]{64}\\u000D?\\u000A)*[A-Za-z0-9/+]{1,64}={0,2}\\u000D?\\u000A-{5}END CERTIFICATE-{5}(\\u000D?\\u000A)?"
     },
+    "CertificateChainBlob":{
+      "type":"blob",
+      "max":2097152,
+      "min":1
+    },
     "CertificateDetail":{
       "type":"structure",
       "members":{
         "CertificateArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate. For more information about ARNs, see <a href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and AWS Service Namespaces</a>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate. For more information about ARNs, see <a href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and AWS Service Namespaces</a> in the <i>AWS General Reference</i>.</p>"
         },
         "DomainName":{
           "shape":"DomainNameString",
-          "documentation":"<p>The fully qualified domain name (FQDN) for the certificate, such as www.example.com or example.com.</p>"
+          "documentation":"<p>The fully qualified domain name for the certificate, such as www.example.com or example.com.</p>"
         },
         "SubjectAlternativeNames":{
           "shape":"DomainList",
-          "documentation":"<p>One or more domain names (subject alternative names) included in the certificate request. After the certificate is issued, this list includes the domain names bound to the public key contained in the certificate. The subject alternative names include the canonical domain name (CN) of the certificate and additional domain names that can be used to connect to the website.</p>"
+          "documentation":"<p>One or more domain names (subject alternative names) included in the certificate. This list contains the domain names that are bound to the public key that is contained in the certificate. The subject alternative names include the canonical domain name (CN) of the certificate and additional domain names that can be used to connect to the website.</p>"
         },
         "DomainValidationOptions":{
           "shape":"DomainValidationList",
-          "documentation":"<p>Contains information about the email address or addresses used for domain validation.</p>"
+          "documentation":"<p>Contains information about the email address or addresses used for domain validation. This field exists only when the certificate type is <code>AMAZON_ISSUED</code>.</p>"
         },
         "Serial":{
           "shape":"String",
@@ -198,19 +222,23 @@
         },
         "Subject":{
           "shape":"String",
-          "documentation":"<p>The X.500 distinguished name of the entity associated with the public key contained in the certificate.</p>"
+          "documentation":"<p>The name of the entity that is associated with the public key contained in the certificate.</p>"
         },
         "Issuer":{
           "shape":"String",
-          "documentation":"<p>The X.500 distinguished name of the CA that issued and signed the certificate.</p>"
+          "documentation":"<p>The name of the certificate authority that issued and signed the certificate.</p>"
         },
         "CreatedAt":{
           "shape":"TStamp",
-          "documentation":"<p>The time at which the certificate was requested.</p>"
+          "documentation":"<p>The time at which the certificate was requested. This value exists only when the certificate type is <code>AMAZON_ISSUED</code>.</p>"
         },
         "IssuedAt":{
           "shape":"TStamp",
-          "documentation":"<p>The time at which the certificate was issued.</p>"
+          "documentation":"<p>The time at which the certificate was issued. This value exists only when the certificate type is <code>AMAZON_ISSUED</code>.</p>"
+        },
+        "ImportedAt":{
+          "shape":"TStamp",
+          "documentation":"<p>The date and time at which the certificate was imported. This value exists only when the certificate type is <code>IMPORTED</code>.</p>"
         },
         "Status":{
           "shape":"CertificateStatus",
@@ -234,19 +262,23 @@
         },
         "KeyAlgorithm":{
           "shape":"KeyAlgorithm",
-          "documentation":"<p>The algorithm used to generate the key pair (the public and private key). Currently the only supported value is <code>RSA_2048</code>.</p>"
+          "documentation":"<p>The algorithm that was used to generate the key pair (the public and private key).</p>"
         },
         "SignatureAlgorithm":{
           "shape":"String",
-          "documentation":"<p>The algorithm used to generate a signature. Currently the only supported value is <code>SHA256WITHRSA</code>.</p>"
+          "documentation":"<p>The algorithm that was used to sign the certificate.</p>"
         },
         "InUseBy":{
           "shape":"InUseList",
-          "documentation":"<p>A list of ARNs for the resources that are using the certificate. An ACM Certificate can be used by multiple AWS resources.</p>"
+          "documentation":"<p>A list of ARNs for the AWS resources that are using the certificate. A certificate can be used by multiple AWS resources.</p>"
         },
         "FailureReason":{
           "shape":"FailureReason",
-          "documentation":"<p>The reason the certificate request failed. This value exists only when the structure's <code>Status</code> is <code>FAILED</code>. For more information, see <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/troubleshooting.html#troubleshooting-failed\">Certificate Request Failed</a> in the <i>AWS Certificate Manager User Guide</i>.</p>"
+          "documentation":"<p>The reason the certificate request failed. This value exists only when the certificate status is <code>FAILED</code>. For more information, see <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/troubleshooting.html#troubleshooting-failed\">Certificate Request Failed</a> in the <i>AWS Certificate Manager User Guide</i>.</p>"
+        },
+        "Type":{
+          "shape":"CertificateType",
+          "documentation":"<p>The source of the certificate. For certificates provided by ACM, this value is <code>AMAZON_ISSUED</code>. For certificates that you imported with <a>ImportCertificate</a>, this value is <code>IMPORTED</code>. ACM does not provide <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html\">managed renewal</a> for imported certificates. For more information about the differences between certificates that you import and those that ACM provides [...]
         }
       },
       "documentation":"<p>Contains detailed metadata about an ACM Certificate. This structure is returned in the response to a <a>DescribeCertificate</a> request.</p>"
@@ -285,6 +317,13 @@
       "type":"list",
       "member":{"shape":"CertificateSummary"}
     },
+    "CertificateType":{
+      "type":"string",
+      "enum":[
+        "IMPORTED",
+        "AMAZON_ISSUED"
+      ]
+    },
     "DeleteCertificateRequest":{
       "type":"structure",
       "required":["CertificateArn"],
@@ -414,6 +453,40 @@
       "min":1,
       "pattern":"\\w+"
     },
+    "ImportCertificateRequest":{
+      "type":"structure",
+      "required":[
+        "Certificate",
+        "PrivateKey"
+      ],
+      "members":{
+        "CertificateArn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Name (ARN)</a> of an imported certificate to replace. To import a new certificate, omit this field.</p>"
+        },
+        "Certificate":{
+          "shape":"CertificateBodyBlob",
+          "documentation":"<p>The certificate to import. It must meet the following requirements:</p> <ul> <li> <p>Must be PEM-encoded.</p> </li> <li> <p>Must contain a 1024-bit or 2048-bit RSA public key.</p> </li> <li> <p>Must be valid at the time of import. You cannot import a certificate before its validity period begins (the certificate's <code>NotBefore</code> date) or after it expires (the certificate's <code>NotAfter</code> date).</p> </li> </ul>"
+        },
+        "PrivateKey":{
+          "shape":"PrivateKeyBlob",
+          "documentation":"<p>The private key that matches the public key in the certificate. It must meet the following requirements:</p> <ul> <li> <p>Must be PEM-encoded.</p> </li> <li> <p>Must be unencrypted. You cannot import a private key that is protected by a password or passphrase.</p> </li> </ul>"
+        },
+        "CertificateChain":{
+          "shape":"CertificateChainBlob",
+          "documentation":"<p>The certificate chain. It must be PEM-encoded.</p>"
+        }
+      }
+    },
+    "ImportCertificateResponse":{
+      "type":"structure",
+      "members":{
+        "CertificateArn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Name (ARN)</a> of the imported certificate.</p>"
+        }
+      }
+    },
     "InUseList":{
       "type":"list",
       "member":{"shape":"String"}
@@ -454,6 +527,7 @@
       "type":"string",
       "enum":[
         "RSA_2048",
+        "RSA_1024",
         "EC_prime256v1"
       ]
     },
@@ -525,6 +599,12 @@
       "min":1,
       "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]*"
     },
+    "PrivateKeyBlob":{
+      "type":"blob",
+      "max":524288,
+      "min":1,
+      "sensitive":true
+    },
     "RemoveTagsFromCertificateRequest":{
       "type":"structure",
       "required":[
@@ -682,5 +762,5 @@
       "member":{"shape":"String"}
     }
   },
-  "documentation":"<fullname>AWS Certificate Manager</fullname> <p>Welcome to the AWS Certificate Manager (ACM) Command Reference. This guide provides descriptions, syntax, and usage examples for each ACM command. You can use AWS Certificate Manager to request ACM Certificates for your AWS-based websites and applications. For general information about using ACM and for more information about using the console, see the <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/acm-overview [...]
+  "documentation":"<fullname>AWS Certificate Manager</fullname> <p>Welcome to the AWS Certificate Manager (ACM) API documentation.</p> <p>You can use ACM to manage SSL/TLS certificates for your AWS-based websites and applications. For general information about using ACM, see the <a href=\"http://docs.aws.amazon.com/acm/latest/userguide/\"> <i>AWS Certificate Manager User Guide</i> </a>.</p>"
 }
diff --git a/botocore/data/cloudformation/2010-05-15/waiters-2.json b/botocore/data/cloudformation/2010-05-15/waiters-2.json
index 3636416..76a41f6 100644
--- a/botocore/data/cloudformation/2010-05-15/waiters-2.json
+++ b/botocore/data/cloudformation/2010-05-15/waiters-2.json
@@ -44,35 +44,17 @@
         },
         {
           "argument": "Stacks[].StackStatus",
-          "expected": "DELETE_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
           "expected": "DELETE_FAILED",
           "matcher": "pathAny",
           "state": "failure"
         },
         {
           "argument": "Stacks[].StackStatus",
-          "expected": "ROLLBACK_COMPLETE",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
           "expected": "ROLLBACK_FAILED",
           "matcher": "pathAny",
           "state": "failure"
         },
         {
-          "argument": "Stacks[].StackStatus",
-          "expected": "ROLLBACK_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
           "expected": "ValidationError",
           "matcher": "error",
           "state": "failure"
@@ -104,72 +86,18 @@
         },
         {
           "argument": "Stacks[].StackStatus",
-          "expected": "CREATE_COMPLETE",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
           "expected": "CREATE_FAILED",
           "matcher": "pathAny",
           "state": "failure"
         },
         {
           "argument": "Stacks[].StackStatus",
-          "expected": "CREATE_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "ROLLBACK_COMPLETE",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
           "expected": "ROLLBACK_FAILED",
           "matcher": "pathAny",
           "state": "failure"
         },
         {
           "argument": "Stacks[].StackStatus",
-          "expected": "ROLLBACK_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_COMPLETE",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_ROLLBACK_COMPLETE",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
           "expected": "UPDATE_ROLLBACK_FAILED",
           "matcher": "pathAny",
           "state": "failure"
@@ -202,29 +130,11 @@
         },
         {
           "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_ROLLBACK_COMPLETE",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
           "expected": "UPDATE_ROLLBACK_FAILED",
           "matcher": "pathAny",
           "state": "failure"
         },
         {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
-          "argument": "Stacks[].StackStatus",
-          "expected": "UPDATE_ROLLBACK_IN_PROGRESS",
-          "matcher": "pathAny",
-          "state": "failure"
-        },
-        {
           "expected": "ValidationError",
           "matcher": "error",
           "state": "failure"
diff --git a/botocore/data/cloudfront/2016-08-20/service-2.json b/botocore/data/cloudfront/2016-08-20/service-2.json
old mode 100755
new mode 100644
diff --git a/botocore/data/cloudfront/2016-09-29/paginators-1.json b/botocore/data/cloudfront/2016-09-29/paginators-1.json
new file mode 100644
index 0000000..51fbb90
--- /dev/null
+++ b/botocore/data/cloudfront/2016-09-29/paginators-1.json
@@ -0,0 +1,32 @@
+{
+  "pagination": {
+    "ListCloudFrontOriginAccessIdentities": {
+      "input_token": "Marker",
+      "output_token": "CloudFrontOriginAccessIdentityList.NextMarker",
+      "limit_key": "MaxItems",
+      "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated",
+      "result_key": "CloudFrontOriginAccessIdentityList.Items"
+    },
+    "ListDistributions": {
+      "input_token": "Marker",
+      "output_token": "DistributionList.NextMarker",
+      "limit_key": "MaxItems",
+      "more_results": "DistributionList.IsTruncated",
+      "result_key": "DistributionList.Items"
+    },
+    "ListInvalidations": {
+      "input_token": "Marker",
+      "output_token": "InvalidationList.NextMarker",
+      "limit_key": "MaxItems",
+      "more_results": "InvalidationList.IsTruncated",
+      "result_key": "InvalidationList.Items"
+    },
+    "ListStreamingDistributions": {
+      "input_token": "Marker",
+      "output_token": "StreamingDistributionList.NextMarker",
+      "limit_key": "MaxItems",
+      "more_results": "StreamingDistributionList.IsTruncated",
+      "result_key": "StreamingDistributionList.Items"
+    }
+  }
+}
diff --git a/botocore/data/cloudfront/2016-09-29/service-2.json b/botocore/data/cloudfront/2016-09-29/service-2.json
new file mode 100644
index 0000000..c920205
--- /dev/null
+++ b/botocore/data/cloudfront/2016-09-29/service-2.json
@@ -0,0 +1,3496 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2016-09-29",
+    "endpointPrefix":"cloudfront",
+    "globalEndpoint":"cloudfront.amazonaws.com",
+    "protocol":"rest-xml",
+    "serviceAbbreviation":"CloudFront",
+    "serviceFullName":"Amazon CloudFront",
+    "signatureVersion":"v4"
+  },
+  "operations":{
+    "CreateCloudFrontOriginAccessIdentity":{
+      "name":"CreateCloudFrontOriginAccessIdentity2016_09_29",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2016-09-29/origin-access-identity/cloudfront",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateCloudFrontOriginAccessIdentityRequest"},
+      "output":{"shape":"CreateCloudFrontOriginAccessIdentityResult"},
+      "errors":[
+        {"shape":"CloudFrontOriginAccessIdentityAlreadyExists"},
+        {"shape":"MissingBody"},
+        {"shape":"TooManyCloudFrontOriginAccessIdentities"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InconsistentQuantities"}
+      ],
+      "documentation":"<p>Creates a new origin access identity. If you're using Amazon S3 for your origin, you can use an origin access identity to require users to access your content using a CloudFront URL instead of the Amazon S3 URL. For more information about how to use origin access identities, see <a href=\"http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Gui [...]
+    },
+    "CreateDistribution":{
+      "name":"CreateDistribution2016_09_29",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2016-09-29/distribution",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateDistributionRequest"},
+      "output":{"shape":"CreateDistributionResult"},
+      "errors":[
+        {"shape":"CNAMEAlreadyExists"},
+        {"shape":"DistributionAlreadyExists"},
+        {"shape":"InvalidOrigin"},
+        {"shape":"InvalidOriginAccessIdentity"},
+        {"shape":"AccessDenied"},
+        {"shape":"TooManyTrustedSigners"},
+        {"shape":"TrustedSignerDoesNotExist"},
+        {"shape":"InvalidViewerCertificate"},
+        {"shape":"InvalidMinimumProtocolVersion"},
+        {"shape":"MissingBody"},
+        {"shape":"TooManyDistributionCNAMEs"},
+        {"shape":"TooManyDistributions"},
+        {"shape":"InvalidDefaultRootObject"},
+        {"shape":"InvalidRelativePath"},
+        {"shape":"InvalidErrorCode"},
+        {"shape":"InvalidResponseCode"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidRequiredProtocol"},
+        {"shape":"NoSuchOrigin"},
+        {"shape":"TooManyOrigins"},
+        {"shape":"TooManyCacheBehaviors"},
+        {"shape":"TooManyCookieNamesInWhiteList"},
+        {"shape":"InvalidForwardCookies"},
+        {"shape":"TooManyHeadersInForwardedValues"},
+        {"shape":"InvalidHeadersForS3Origin"},
+        {"shape":"InconsistentQuantities"},
+        {"shape":"TooManyCertificates"},
+        {"shape":"InvalidLocationCode"},
+        {"shape":"InvalidGeoRestrictionParameter"},
+        {"shape":"InvalidProtocolSettings"},
+        {"shape":"InvalidTTLOrder"},
+        {"shape":"InvalidWebACLId"},
+        {"shape":"TooManyOriginCustomHeaders"},
+        {"shape":"TooManyQueryStringParameters"},
+        {"shape":"InvalidQueryStringParameters"}
+      ],
+      "documentation":"<p>Creates a new web distribution. Send a <code>GET</code> request to the <code>/<i>CloudFront API version</i>/distribution</code>/<code>distribution ID</code> resource.</p>"
+    },
+    "CreateDistributionWithTags":{
+      "name":"CreateDistributionWithTags2016_09_29",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2016-09-29/distribution?WithTags",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateDistributionWithTagsRequest"},
+      "output":{"shape":"CreateDistributionWithTagsResult"},
+      "errors":[
+        {"shape":"CNAMEAlreadyExists"},
+        {"shape":"DistributionAlreadyExists"},
+        {"shape":"InvalidOrigin"},
+        {"shape":"InvalidOriginAccessIdentity"},
+        {"shape":"AccessDenied"},
+        {"shape":"TooManyTrustedSigners"},
+        {"shape":"TrustedSignerDoesNotExist"},
+        {"shape":"InvalidViewerCertificate"},
+        {"shape":"InvalidMinimumProtocolVersion"},
+        {"shape":"MissingBody"},
+        {"shape":"TooManyDistributionCNAMEs"},
+        {"shape":"TooManyDistributions"},
+        {"shape":"InvalidDefaultRootObject"},
+        {"shape":"InvalidRelativePath"},
+        {"shape":"InvalidErrorCode"},
+        {"shape":"InvalidResponseCode"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidRequiredProtocol"},
+        {"shape":"NoSuchOrigin"},
+        {"shape":"TooManyOrigins"},
+        {"shape":"TooManyCacheBehaviors"},
+        {"shape":"TooManyCookieNamesInWhiteList"},
+        {"shape":"InvalidForwardCookies"},
+        {"shape":"TooManyHeadersInForwardedValues"},
+        {"shape":"InvalidHeadersForS3Origin"},
+        {"shape":"InconsistentQuantities"},
+        {"shape":"TooManyCertificates"},
+        {"shape":"InvalidLocationCode"},
+        {"shape":"InvalidGeoRestrictionParameter"},
+        {"shape":"InvalidProtocolSettings"},
+        {"shape":"InvalidTTLOrder"},
+        {"shape":"InvalidWebACLId"},
+        {"shape":"TooManyOriginCustomHeaders"},
+        {"shape":"InvalidTagging"},
+        {"shape":"TooManyQueryStringParameters"},
+        {"shape":"InvalidQueryStringParameters"}
+      ],
+      "documentation":"<p>Create a new distribution with tags.</p>"
+    },
+    "CreateInvalidation":{
+      "name":"CreateInvalidation2016_09_29",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2016-09-29/distribution/{DistributionId}/invalidation",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateInvalidationRequest"},
+      "output":{"shape":"CreateInvalidationResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"MissingBody"},
+        {"shape":"InvalidArgument"},
+        {"shape":"NoSuchDistribution"},
+        {"shape":"BatchTooLarge"},
+        {"shape":"TooManyInvalidationsInProgress"},
+        {"shape":"InconsistentQuantities"}
+      ],
+      "documentation":"<p>Create a new invalidation. </p>"
+    },
+    "CreateStreamingDistribution":{
+      "name":"CreateStreamingDistribution2016_09_29",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2016-09-29/streaming-distribution",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateStreamingDistributionRequest"},
+      "output":{"shape":"CreateStreamingDistributionResult"},
+      "errors":[
+        {"shape":"CNAMEAlreadyExists"},
+        {"shape":"StreamingDistributionAlreadyExists"},
+        {"shape":"InvalidOrigin"},
+        {"shape":"InvalidOriginAccessIdentity"},
+        {"shape":"AccessDenied"},
+        {"shape":"TooManyTrustedSigners"},
+        {"shape":"TrustedSignerDoesNotExist"},
+        {"shape":"MissingBody"},
+        {"shape":"TooManyStreamingDistributionCNAMEs"},
+        {"shape":"TooManyStreamingDistributions"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InconsistentQuantities"}
+      ],
+      "documentation":"<p>Creates a new RMTP distribution. An RTMP distribution is similar to a web distribution, but an RTMP distribution streams media files using the Adobe Real-Time Messaging Protocol (RTMP) instead of serving files using HTTP. </p> <p>To create a new web distribution, submit a <code>POST</code> request to the <i>CloudFront API version</i>/distribution resource. The request body must include a document with a <i>StreamingDistributionConfig</i> element. The response ec [...]
+    },
+    "CreateStreamingDistributionWithTags":{
+      "name":"CreateStreamingDistributionWithTags2016_09_29",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2016-09-29/streaming-distribution?WithTags",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateStreamingDistributionWithTagsRequest"},
+      "output":{"shape":"CreateStreamingDistributionWithTagsResult"},
+      "errors":[
+        {"shape":"CNAMEAlreadyExists"},
+        {"shape":"StreamingDistributionAlreadyExists"},
+        {"shape":"InvalidOrigin"},
+        {"shape":"InvalidOriginAccessIdentity"},
+        {"shape":"AccessDenied"},
+        {"shape":"TooManyTrustedSigners"},
+        {"shape":"TrustedSignerDoesNotExist"},
+        {"shape":"MissingBody"},
+        {"shape":"TooManyStreamingDistributionCNAMEs"},
+        {"shape":"TooManyStreamingDistributions"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InconsistentQuantities"},
+        {"shape":"InvalidTagging"}
+      ],
+      "documentation":"<p>Create a new streaming distribution with tags.</p>"
+    },
+    "DeleteCloudFrontOriginAccessIdentity":{
+      "name":"DeleteCloudFrontOriginAccessIdentity2016_09_29",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2016-09-29/origin-access-identity/cloudfront/{Id}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteCloudFrontOriginAccessIdentityRequest"},
... 11985 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-botocore.git



More information about the Python-modules-commits mailing list