diff env/lib/python3.7/site-packages/boto/iam/connection.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/boto/iam/connection.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1932 +0,0 @@
-# Copyright (c) 2010-2011 Mitch Garnaat http://garnaat.org/
-# Copyright (c) 2010-2011, Eucalyptus Systems, Inc.
-#
-# 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.
-import boto
-import boto.jsonresponse
-from boto.compat import json, six
-from boto.resultset import ResultSet
-from boto.iam.summarymap import SummaryMap
-from boto.connection import AWSQueryConnection
-
-DEFAULT_POLICY_DOCUMENTS = {
-    'default': {
-        'Statement': [
-            {
-                'Principal': {
-                    'Service': ['ec2.amazonaws.com']
-                },
-                'Effect': 'Allow',
-                'Action': ['sts:AssumeRole']
-            }
-        ]
-    },
-    'amazonaws.com.cn': {
-        'Statement': [
-            {
-                'Principal': {
-                    'Service': ['ec2.amazonaws.com.cn']
-                },
-                'Effect': 'Allow',
-                'Action': ['sts:AssumeRole']
-            }
-        ]
-    },
-}
-# For backward-compatibility, we'll preserve this here.
-ASSUME_ROLE_POLICY_DOCUMENT = json.dumps(DEFAULT_POLICY_DOCUMENTS['default'])
-
-
-class IAMConnection(AWSQueryConnection):
-
-    APIVersion = '2010-05-08'
-
-    def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
-                 is_secure=True, port=None, proxy=None, proxy_port=None,
-                 proxy_user=None, proxy_pass=None, host='iam.amazonaws.com',
-                 debug=0, https_connection_factory=None, path='/',
-                 security_token=None, validate_certs=True, profile_name=None):
-        super(IAMConnection, self).__init__(aws_access_key_id,
-                                            aws_secret_access_key,
-                                            is_secure, port, proxy,
-                                            proxy_port, proxy_user, proxy_pass,
-                                            host, debug, https_connection_factory,
-                                            path, security_token,
-                                            validate_certs=validate_certs,
-                                            profile_name=profile_name)
-
-    def _required_auth_capability(self):
-        return ['hmac-v4']
-
-    def get_response(self, action, params, path='/', parent=None,
-                     verb='POST', list_marker='Set'):
-        """
-        Utility method to handle calls to IAM and parsing of responses.
-        """
-        if not parent:
-            parent = self
-        response = self.make_request(action, params, path, verb)
-        body = response.read()
-        boto.log.debug(body)
-        if response.status == 200:
-            if body:
-                e = boto.jsonresponse.Element(list_marker=list_marker,
-                                              pythonize_name=True)
-                h = boto.jsonresponse.XmlHandler(e, parent)
-                h.parse(body)
-                return e
-            else:
-                # Support empty responses, e.g. deleting a SAML provider
-                # according to the official documentation.
-                return {}
-        else:
-            boto.log.error('%s %s' % (response.status, response.reason))
-            boto.log.error('%s' % body)
-            raise self.ResponseError(response.status, response.reason, body)
-
-    #
-    # Group methods
-    #
-
-    def get_all_groups(self, path_prefix='/', marker=None, max_items=None):
-        """
-        List the groups that have the specified path prefix.
-
-        :type path_prefix: string
-        :param path_prefix: If provided, only groups whose paths match
-            the provided prefix will be returned.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {}
-        if path_prefix:
-            params['PathPrefix'] = path_prefix
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListGroups', params,
-                                 list_marker='Groups')
-
-    def get_group(self, group_name, marker=None, max_items=None):
-        """
-        Return a list of users that are in the specified group.
-
-        :type group_name: string
-        :param group_name: The name of the group whose information should
-                           be returned.
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {'GroupName': group_name}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('GetGroup', params, list_marker='Users')
-
-    def create_group(self, group_name, path='/'):
-        """
-        Create a group.
-
-        :type group_name: string
-        :param group_name: The name of the new group
-
-        :type path: string
-        :param path: The path to the group (Optional).  Defaults to /.
-
-        """
-        params = {'GroupName': group_name,
-                  'Path': path}
-        return self.get_response('CreateGroup', params)
-
-    def delete_group(self, group_name):
-        """
-        Delete a group. The group must not contain any Users or
-        have any attached policies
-
-        :type group_name: string
-        :param group_name: The name of the group to delete.
-
-        """
-        params = {'GroupName': group_name}
-        return self.get_response('DeleteGroup', params)
-
-    def update_group(self, group_name, new_group_name=None, new_path=None):
-        """
-        Updates name and/or path of the specified group.
-
-        :type group_name: string
-        :param group_name: The name of the new group
-
-        :type new_group_name: string
-        :param new_group_name: If provided, the name of the group will be
-            changed to this name.
-
-        :type new_path: string
-        :param new_path: If provided, the path of the group will be
-            changed to this path.
-
-        """
-        params = {'GroupName': group_name}
-        if new_group_name:
-            params['NewGroupName'] = new_group_name
-        if new_path:
-            params['NewPath'] = new_path
-        return self.get_response('UpdateGroup', params)
-
-    def add_user_to_group(self, group_name, user_name):
-        """
-        Add a user to a group
-
-        :type group_name: string
-        :param group_name: The name of the group
-
-        :type user_name: string
-        :param user_name: The to be added to the group.
-
-        """
-        params = {'GroupName': group_name,
-                  'UserName': user_name}
-        return self.get_response('AddUserToGroup', params)
-
-    def remove_user_from_group(self, group_name, user_name):
-        """
-        Remove a user from a group.
-
-        :type group_name: string
-        :param group_name: The name of the group
-
-        :type user_name: string
-        :param user_name: The user to remove from the group.
-
-        """
-        params = {'GroupName': group_name,
-                  'UserName': user_name}
-        return self.get_response('RemoveUserFromGroup', params)
-
-    def put_group_policy(self, group_name, policy_name, policy_json):
-        """
-        Adds or updates the specified policy document for the specified group.
-
-        :type group_name: string
-        :param group_name: The name of the group the policy is associated with.
-
-        :type policy_name: string
-        :param policy_name: The policy document to get.
-
-        :type policy_json: string
-        :param policy_json: The policy document.
-
-        """
-        params = {'GroupName': group_name,
-                  'PolicyName': policy_name,
-                  'PolicyDocument': policy_json}
-        return self.get_response('PutGroupPolicy', params, verb='POST')
-
-    def get_all_group_policies(self, group_name, marker=None, max_items=None):
-        """
-        List the names of the policies associated with the specified group.
-
-        :type group_name: string
-        :param group_name: The name of the group the policy is associated with.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {'GroupName': group_name}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListGroupPolicies', params,
-                                 list_marker='PolicyNames')
-
-    def get_group_policy(self, group_name, policy_name):
-        """
-        Retrieves the specified policy document for the specified group.
-
-        :type group_name: string
-        :param group_name: The name of the group the policy is associated with.
-
-        :type policy_name: string
-        :param policy_name: The policy document to get.
-
-        """
-        params = {'GroupName': group_name,
-                  'PolicyName': policy_name}
-        return self.get_response('GetGroupPolicy', params, verb='POST')
-
-    def delete_group_policy(self, group_name, policy_name):
-        """
-        Deletes the specified policy document for the specified group.
-
-        :type group_name: string
-        :param group_name: The name of the group the policy is associated with.
-
-        :type policy_name: string
-        :param policy_name: The policy document to delete.
-
-        """
-        params = {'GroupName': group_name,
-                  'PolicyName': policy_name}
-        return self.get_response('DeleteGroupPolicy', params, verb='POST')
-
-    def get_all_users(self, path_prefix='/', marker=None, max_items=None):
-        """
-        List the users that have the specified path prefix.
-
-        :type path_prefix: string
-        :param path_prefix: If provided, only users whose paths match
-            the provided prefix will be returned.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {'PathPrefix': path_prefix}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListUsers', params, list_marker='Users')
-
-    #
-    # User methods
-    #
-
-    def create_user(self, user_name, path='/'):
-        """
-        Create a user.
-
-        :type user_name: string
-        :param user_name: The name of the new user
-
-        :type path: string
-        :param path: The path in which the user will be created.
-            Defaults to /.
-
-        """
-        params = {'UserName': user_name,
-                  'Path': path}
-        return self.get_response('CreateUser', params)
-
-    def delete_user(self, user_name):
-        """
-        Delete a user including the user's path, GUID and ARN.
-
-        If the user_name is not specified, the user_name is determined
-        implicitly based on the AWS Access Key ID used to sign the request.
-
-        :type user_name: string
-        :param user_name: The name of the user to delete.
-
-        """
-        params = {'UserName': user_name}
-        return self.get_response('DeleteUser', params)
-
-    def get_user(self, user_name=None):
-        """
-        Retrieve information about the specified user.
-
-        If the user_name is not specified, the user_name is determined
-        implicitly based on the AWS Access Key ID used to sign the request.
-
-        :type user_name: string
-        :param user_name: The name of the user to retrieve.
-            If not specified, defaults to user making request.
-        """
-        params = {}
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('GetUser', params)
-
-    def update_user(self, user_name, new_user_name=None, new_path=None):
-        """
-        Updates name and/or path of the specified user.
-
-        :type user_name: string
-        :param user_name: The name of the user
-
-        :type new_user_name: string
-        :param new_user_name: If provided, the username of the user will be
-            changed to this username.
-
-        :type new_path: string
-        :param new_path: If provided, the path of the user will be
-            changed to this path.
-
-        """
-        params = {'UserName': user_name}
-        if new_user_name:
-            params['NewUserName'] = new_user_name
-        if new_path:
-            params['NewPath'] = new_path
-        return self.get_response('UpdateUser', params)
-
-    def get_all_user_policies(self, user_name, marker=None, max_items=None):
-        """
-        List the names of the policies associated with the specified user.
-
-        :type user_name: string
-        :param user_name: The name of the user the policy is associated with.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {'UserName': user_name}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListUserPolicies', params,
-                                 list_marker='PolicyNames')
-
-    def put_user_policy(self, user_name, policy_name, policy_json):
-        """
-        Adds or updates the specified policy document for the specified user.
-
-        :type user_name: string
-        :param user_name: The name of the user the policy is associated with.
-
-        :type policy_name: string
-        :param policy_name: The policy document to get.
-
-        :type policy_json: string
-        :param policy_json: The policy document.
-
-        """
-        params = {'UserName': user_name,
-                  'PolicyName': policy_name,
-                  'PolicyDocument': policy_json}
-        return self.get_response('PutUserPolicy', params, verb='POST')
-
-    def get_user_policy(self, user_name, policy_name):
-        """
-        Retrieves the specified policy document for the specified user.
-
-        :type user_name: string
-        :param user_name: The name of the user the policy is associated with.
-
-        :type policy_name: string
-        :param policy_name: The policy document to get.
-
-        """
-        params = {'UserName': user_name,
-                  'PolicyName': policy_name}
-        return self.get_response('GetUserPolicy', params, verb='POST')
-
-    def delete_user_policy(self, user_name, policy_name):
-        """
-        Deletes the specified policy document for the specified user.
-
-        :type user_name: string
-        :param user_name: The name of the user the policy is associated with.
-
-        :type policy_name: string
-        :param policy_name: The policy document to delete.
-
-        """
-        params = {'UserName': user_name,
-                  'PolicyName': policy_name}
-        return self.get_response('DeleteUserPolicy', params, verb='POST')
-
-    def get_groups_for_user(self, user_name, marker=None, max_items=None):
-        """
-        List the groups that a specified user belongs to.
-
-        :type user_name: string
-        :param user_name: The name of the user to list groups for.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {'UserName': user_name}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListGroupsForUser', params,
-                                 list_marker='Groups')
-
-    #
-    # Access Keys
-    #
-
-    def get_all_access_keys(self, user_name, marker=None, max_items=None):
-        """
-        Get all access keys associated with an account.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-        """
-        params = {'UserName': user_name}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListAccessKeys', params,
-                                 list_marker='AccessKeyMetadata')
-
-    def create_access_key(self, user_name=None):
-        """
-        Create a new AWS Secret Access Key and corresponding AWS Access Key ID
-        for the specified user.  The default status for new keys is Active
-
-        If the user_name is not specified, the user_name is determined
-        implicitly based on the AWS Access Key ID used to sign the request.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        """
-        params = {'UserName': user_name}
-        return self.get_response('CreateAccessKey', params)
-
-    def update_access_key(self, access_key_id, status, user_name=None):
-        """
-        Changes the status of the specified access key from Active to Inactive
-        or vice versa.  This action can be used to disable a user's key as
-        part of a key rotation workflow.
-
-        If the user_name is not specified, the user_name is determined
-        implicitly based on the AWS Access Key ID used to sign the request.
-
-        :type access_key_id: string
-        :param access_key_id: The ID of the access key.
-
-        :type status: string
-        :param status: Either Active or Inactive.
-
-        :type user_name: string
-        :param user_name: The username of user (optional).
-
-        """
-        params = {'AccessKeyId': access_key_id,
-                  'Status': status}
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('UpdateAccessKey', params)
-
-    def delete_access_key(self, access_key_id, user_name=None):
-        """
-        Delete an access key associated with a user.
-
-        If the user_name is not specified, it is determined implicitly based
-        on the AWS Access Key ID used to sign the request.
-
-        :type access_key_id: string
-        :param access_key_id: The ID of the access key to be deleted.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        """
-        params = {'AccessKeyId': access_key_id}
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('DeleteAccessKey', params)
-
-    #
-    # Signing Certificates
-    #
-
-    def get_all_signing_certs(self, marker=None, max_items=None,
-                              user_name=None):
-        """
-        Get all signing certificates associated with an account.
-
-        If the user_name is not specified, it is determined implicitly based
-        on the AWS Access Key ID used to sign the request.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        """
-        params = {}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('ListSigningCertificates',
-                                 params, list_marker='Certificates')
-
-    def update_signing_cert(self, cert_id, status, user_name=None):
-        """
-        Change the status of the specified signing certificate from
-        Active to Inactive or vice versa.
-
-        If the user_name is not specified, it is determined implicitly based
-        on the AWS Access Key ID used to sign the request.
-
-        :type cert_id: string
-        :param cert_id: The ID of the signing certificate
-
-        :type status: string
-        :param status: Either Active or Inactive.
-
-        :type user_name: string
-        :param user_name: The username of the user
-        """
-        params = {'CertificateId': cert_id,
-                  'Status': status}
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('UpdateSigningCertificate', params)
-
-    def upload_signing_cert(self, cert_body, user_name=None):
-        """
-        Uploads an X.509 signing certificate and associates it with
-        the specified user.
-
-        If the user_name is not specified, it is determined implicitly based
-        on the AWS Access Key ID used to sign the request.
-
-        :type cert_body: string
-        :param cert_body: The body of the signing certificate.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        """
-        params = {'CertificateBody': cert_body}
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('UploadSigningCertificate', params,
-                                 verb='POST')
-
-    def delete_signing_cert(self, cert_id, user_name=None):
-        """
-        Delete a signing certificate associated with a user.
-
-        If the user_name is not specified, it is determined implicitly based
-        on the AWS Access Key ID used to sign the request.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        :type cert_id: string
-        :param cert_id: The ID of the certificate.
-
-        """
-        params = {'CertificateId': cert_id}
-        if user_name:
-            params['UserName'] = user_name
-        return self.get_response('DeleteSigningCertificate', params)
-
-    #
-    # Server Certificates
-    #
-
-    def list_server_certs(self, path_prefix='/',
-                          marker=None, max_items=None):
-        """
-        Lists the server certificates that have the specified path prefix.
-        If none exist, the action returns an empty list.
-
-        :type path_prefix: string
-        :param path_prefix: If provided, only certificates whose paths match
-            the provided prefix will be returned.
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-
-        """
-        params = {}
-        if path_prefix:
-            params['PathPrefix'] = path_prefix
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListServerCertificates',
-                                 params,
-                                 list_marker='ServerCertificateMetadataList')
-
-    # Preserves backwards compatibility.
-    # TODO: Look into deprecating this eventually?
-    get_all_server_certs = list_server_certs
-
-    def update_server_cert(self, cert_name, new_cert_name=None,
-                           new_path=None):
-        """
-        Updates the name and/or the path of the specified server certificate.
-
-        :type cert_name: string
-        :param cert_name: The name of the server certificate that you want
-            to update.
-
-        :type new_cert_name: string
-        :param new_cert_name: The new name for the server certificate.
-            Include this only if you are updating the
-            server certificate's name.
-
-        :type new_path: string
-        :param new_path: If provided, the path of the certificate will be
-                         changed to this path.
-        """
-        params = {'ServerCertificateName': cert_name}
-        if new_cert_name:
-            params['NewServerCertificateName'] = new_cert_name
-        if new_path:
-            params['NewPath'] = new_path
-        return self.get_response('UpdateServerCertificate', params)
-
-    def upload_server_cert(self, cert_name, cert_body, private_key,
-                           cert_chain=None, path=None):
-        """
-        Uploads a server certificate entity for the AWS Account.
-        The server certificate entity includes a public key certificate,
-        a private key, and an optional certificate chain, which should
-        all be PEM-encoded.
-
-        :type cert_name: string
-        :param cert_name: The name for the server certificate. Do not
-            include the path in this value.
-
-        :type cert_body: string
-        :param cert_body: The contents of the public key certificate
-            in PEM-encoded format.
-
-        :type private_key: string
-        :param private_key: The contents of the private key in
-            PEM-encoded format.
-
-        :type cert_chain: string
-        :param cert_chain: The contents of the certificate chain. This
-            is typically a concatenation of the PEM-encoded
-            public key certificates of the chain.
-
-        :type path: string
-        :param path: The path for the server certificate.
-        """
-        params = {'ServerCertificateName': cert_name,
-                  'CertificateBody': cert_body,
-                  'PrivateKey': private_key}
-        if cert_chain:
-            params['CertificateChain'] = cert_chain
-        if path:
-            params['Path'] = path
-        return self.get_response('UploadServerCertificate', params,
-                                 verb='POST')
-
-    def get_server_certificate(self, cert_name):
-        """
-        Retrieves information about the specified server certificate.
-
-        :type cert_name: string
-        :param cert_name: The name of the server certificate you want
-            to retrieve information about.
-
-        """
-        params = {'ServerCertificateName': cert_name}
-        return self.get_response('GetServerCertificate', params)
-
-    def delete_server_cert(self, cert_name):
-        """
-        Delete the specified server certificate.
-
-        :type cert_name: string
-        :param cert_name: The name of the server certificate you want
-            to delete.
-
-        """
-        params = {'ServerCertificateName': cert_name}
-        return self.get_response('DeleteServerCertificate', params)
-
-    #
-    # MFA Devices
-    #
-
-    def get_all_mfa_devices(self, user_name, marker=None, max_items=None):
-        """
-        Get all MFA devices associated with an account.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        :type marker: string
-        :param marker: Use this only when paginating results and only
-            in follow-up request after you've received a response
-            where the results are truncated.  Set this to the value of
-            the Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this only when paginating results to indicate
-            the maximum number of groups you want in the response.
-
-        """
-        params = {'UserName': user_name}
-        if marker:
-            params['Marker'] = marker
-        if max_items:
-            params['MaxItems'] = max_items
-        return self.get_response('ListMFADevices',
-                                 params, list_marker='MFADevices')
-
-    def enable_mfa_device(self, user_name, serial_number,
-                          auth_code_1, auth_code_2):
-        """
-        Enables the specified MFA device and associates it with the
-        specified user.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        :type serial_number: string
-        :param serial_number: The serial number which uniquely identifies
-            the MFA device.
-
-        :type auth_code_1: string
-        :param auth_code_1: An authentication code emitted by the device.
-
-        :type auth_code_2: string
-        :param auth_code_2: A subsequent authentication code emitted
-            by the device.
-
-        """
-        params = {'UserName': user_name,
-                  'SerialNumber': serial_number,
-                  'AuthenticationCode1': auth_code_1,
-                  'AuthenticationCode2': auth_code_2}
-        return self.get_response('EnableMFADevice', params)
-
-    def deactivate_mfa_device(self, user_name, serial_number):
-        """
-        Deactivates the specified MFA device and removes it from
-        association with the user.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        :type serial_number: string
-        :param serial_number: The serial number which uniquely identifies
-            the MFA device.
-
-        """
-        params = {'UserName': user_name,
-                  'SerialNumber': serial_number}
-        return self.get_response('DeactivateMFADevice', params)
-
-    def resync_mfa_device(self, user_name, serial_number,
-                          auth_code_1, auth_code_2):
-        """
-        Syncronizes the specified MFA device with the AWS servers.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        :type serial_number: string
-        :param serial_number: The serial number which uniquely identifies
-            the MFA device.
-
-        :type auth_code_1: string
-        :param auth_code_1: An authentication code emitted by the device.
-
-        :type auth_code_2: string
-        :param auth_code_2: A subsequent authentication code emitted
-            by the device.
-
-        """
-        params = {'UserName': user_name,
-                  'SerialNumber': serial_number,
-                  'AuthenticationCode1': auth_code_1,
-                  'AuthenticationCode2': auth_code_2}
-        return self.get_response('ResyncMFADevice', params)
-
-    #
-    # Login Profiles
-    #
-
-    def get_login_profiles(self, user_name):
-        """
-        Retrieves the login profile for the specified user.
-
-        :type user_name: string
-        :param user_name: The username of the user
-
-        """
-        params = {'UserName': user_name}
-        return self.get_response('GetLoginProfile', params)
-
-    def create_login_profile(self, user_name, password):
-        """
-        Creates a login profile for the specified user, give the user the
-        ability to access AWS services and the AWS Management Console.
-
-        :type user_name: string
-        :param user_name: The name of the user
-
-        :type password: string
-        :param password: The new password for the user
-
-        """
-        params = {'UserName': user_name,
-                  'Password': password}
-        return self.get_response('CreateLoginProfile', params)
-
-    def delete_login_profile(self, user_name):
-        """
-        Deletes the login profile associated with the specified user.
-
-        :type user_name: string
-        :param user_name: The name of the user to delete.
-
-        """
-        params = {'UserName': user_name}
-        return self.get_response('DeleteLoginProfile', params)
-
-    def update_login_profile(self, user_name, password):
-        """
-        Resets the password associated with the user's login profile.
-
-        :type user_name: string
-        :param user_name: The name of the user
-
-        :type password: string
-        :param password: The new password for the user
-
-        """
-        params = {'UserName': user_name,
-                  'Password': password}
-        return self.get_response('UpdateLoginProfile', params)
-
-    def create_account_alias(self, alias):
-        """
-        Creates a new alias for the AWS account.
-
-        For more information on account id aliases, please see
-        http://goo.gl/ToB7G
-
-        :type alias: string
-        :param alias: The alias to attach to the account.
-        """
-        params = {'AccountAlias': alias}
-        return self.get_response('CreateAccountAlias', params)
-
-    def delete_account_alias(self, alias):
-        """
-        Deletes an alias for the AWS account.
-
-        For more information on account id aliases, please see
-        http://goo.gl/ToB7G
-
-        :type alias: string
-        :param alias: The alias to remove from the account.
-        """
-        params = {'AccountAlias': alias}
-        return self.get_response('DeleteAccountAlias', params)
-
-    def get_account_alias(self):
-        """
-        Get the alias for the current account.
-
-        This is referred to in the docs as list_account_aliases,
-        but it seems you can only have one account alias currently.
-
-        For more information on account id aliases, please see
-        http://goo.gl/ToB7G
-        """
-        return self.get_response('ListAccountAliases', {},
-                                 list_marker='AccountAliases')
-
-    def get_signin_url(self, service='ec2'):
-        """
-        Get the URL where IAM users can use their login profile to sign in
-        to this account's console.
-
-        :type service: string
-        :param service: Default service to go to in the console.
-        """
-        alias = self.get_account_alias()
-
-        if not alias:
-            raise Exception('No alias associated with this account.  Please use iam.create_account_alias() first.')
-
-        resp = alias.get('list_account_aliases_response', {})
-        result = resp.get('list_account_aliases_result', {})
-        aliases = result.get('account_aliases', [])
-
-        if not len(aliases):
-            raise Exception('No alias associated with this account.  Please use iam.create_account_alias() first.')
-
-        # We'll just use the first one we find.
-        alias = aliases[0]
-
-        if self.host == 'iam.us-gov.amazonaws.com':
-            return "https://%s.signin.amazonaws-us-gov.com/console/%s" % (
-                alias,
-                service
-            )
-        elif self.host.endswith('amazonaws.com.cn'):
-            return "https://%s.signin.amazonaws.cn/console/%s" % (
-                alias,
-                service
-            )
-        else:
-            return "https://%s.signin.aws.amazon.com/console/%s" % (
-                alias,
-                service
-            )
-
-    def get_account_summary(self):
-        """
-        Get the alias for the current account.
-
-        This is referred to in the docs as list_account_aliases,
-        but it seems you can only have one account alias currently.
-
-        For more information on account id aliases, please see
-        http://goo.gl/ToB7G
-        """
-        return self.get_object('GetAccountSummary', {}, SummaryMap)
-
-    #
-    # IAM Roles
-    #
-
-    def add_role_to_instance_profile(self, instance_profile_name, role_name):
-        """
-        Adds the specified role to the specified instance profile.
-
-        :type instance_profile_name: string
-        :param instance_profile_name: Name of the instance profile to update.
-
-        :type role_name: string
-        :param role_name: Name of the role to add.
-        """
-        return self.get_response('AddRoleToInstanceProfile',
-                                 {'InstanceProfileName': instance_profile_name,
-                                  'RoleName': role_name})
-
-    def create_instance_profile(self, instance_profile_name, path=None):
-        """
-        Creates a new instance profile.
-
-        :type instance_profile_name: string
-        :param instance_profile_name: Name of the instance profile to create.
-
-        :type path: string
-        :param path: The path to the instance profile.
-        """
-        params = {'InstanceProfileName': instance_profile_name}
-        if path is not None:
-            params['Path'] = path
-        return self.get_response('CreateInstanceProfile', params)
-
-    def _build_policy(self, assume_role_policy_document=None):
-        if assume_role_policy_document is not None:
-            if isinstance(assume_role_policy_document, six.string_types):
-                # Historically, they had to pass a string. If it's a string,
-                # assume the user has already handled it.
-                return assume_role_policy_document
-        else:
-
-            for tld, policy in DEFAULT_POLICY_DOCUMENTS.items():
-                if tld is 'default':
-                    # Skip the default. We'll fall back to it if we don't find
-                    # anything.
-                    continue
-
-                if self.host and self.host.endswith(tld):
-                    assume_role_policy_document = policy
-                    break
-
-            if not assume_role_policy_document:
-                assume_role_policy_document = DEFAULT_POLICY_DOCUMENTS['default']
-
-        # Dump the policy (either user-supplied ``dict`` or one of the defaults)
-        return json.dumps(assume_role_policy_document)
-
-    def create_role(self, role_name, assume_role_policy_document=None, path=None):
-        """
-        Creates a new role for your AWS account.
-
-        The policy grants permission to an EC2 instance to assume the role.
-        The policy is URL-encoded according to RFC 3986. Currently, only EC2
-        instances can assume roles.
-
-        :type role_name: string
-        :param role_name: Name of the role to create.
-
-        :type assume_role_policy_document: ``string`` or ``dict``
-        :param assume_role_policy_document: The policy that grants an entity
-            permission to assume the role.
-
-        :type path: string
-        :param path: The path to the role.
-        """
-        params = {
-            'RoleName': role_name,
-            'AssumeRolePolicyDocument': self._build_policy(
-                assume_role_policy_document
-            ),
-        }
-        if path is not None:
-            params['Path'] = path
-        return self.get_response('CreateRole', params)
-
-    def delete_instance_profile(self, instance_profile_name):
-        """
-        Deletes the specified instance profile. The instance profile must not
-        have an associated role.
-
-        :type instance_profile_name: string
-        :param instance_profile_name: Name of the instance profile to delete.
-        """
-        return self.get_response(
-            'DeleteInstanceProfile',
-            {'InstanceProfileName': instance_profile_name})
-
-    def delete_role(self, role_name):
-        """
-        Deletes the specified role. The role must not have any policies
-        attached.
-
-        :type role_name: string
-        :param role_name: Name of the role to delete.
-        """
-        return self.get_response('DeleteRole', {'RoleName': role_name})
-
-    def delete_role_policy(self, role_name, policy_name):
-        """
-        Deletes the specified policy associated with the specified role.
-
-        :type role_name: string
-        :param role_name: Name of the role associated with the policy.
-
-        :type policy_name: string
-        :param policy_name: Name of the policy to delete.
-        """
-        return self.get_response(
-            'DeleteRolePolicy',
-            {'RoleName': role_name, 'PolicyName': policy_name})
-
-    def get_instance_profile(self, instance_profile_name):
-        """
-        Retrieves information about the specified instance profile, including
-        the instance profile's path, GUID, ARN, and role.
-
-        :type instance_profile_name: string
-        :param instance_profile_name: Name of the instance profile to get
-            information about.
-        """
-        return self.get_response('GetInstanceProfile',
-                                 {'InstanceProfileName': instance_profile_name})
-
-    def get_role(self, role_name):
-        """
-        Retrieves information about the specified role, including the role's
-        path, GUID, ARN, and the policy granting permission to EC2 to assume
-        the role.
-
-        :type role_name: string
-        :param role_name: Name of the role associated with the policy.
-        """
-        return self.get_response('GetRole', {'RoleName': role_name})
-
-    def get_role_policy(self, role_name, policy_name):
-        """
-        Retrieves the specified policy document for the specified role.
-
-        :type role_name: string
-        :param role_name: Name of the role associated with the policy.
-
-        :type policy_name: string
-        :param policy_name: Name of the policy to get.
-        """
-        return self.get_response('GetRolePolicy',
-                                 {'RoleName': role_name,
-                                  'PolicyName': policy_name})
-
-    def list_instance_profiles(self, path_prefix=None, marker=None,
-                               max_items=None):
-        """
-        Lists the instance profiles that have the specified path prefix. If
-        there are none, the action returns an empty list.
-
-        :type path_prefix: string
-        :param path_prefix: The path prefix for filtering the results. For
-            example: /application_abc/component_xyz/, which would get all
-            instance profiles whose path starts with
-            /application_abc/component_xyz/.
-
-        :type marker: string
-        :param marker: Use this parameter only when paginating results, and
-            only in a subsequent request after you've received a response
-            where the results are truncated. Set it to the value of the
-            Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this parameter only when paginating results to
-            indicate the maximum number of user names you want in the response.
-        """
-        params = {}
-        if path_prefix is not None:
-            params['PathPrefix'] = path_prefix
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-
-        return self.get_response('ListInstanceProfiles', params,
-                                 list_marker='InstanceProfiles')
-
-    def list_instance_profiles_for_role(self, role_name, marker=None,
-                                        max_items=None):
-        """
-        Lists the instance profiles that have the specified associated role. If
-        there are none, the action returns an empty list.
-
-        :type role_name: string
-        :param role_name: The name of the role to list instance profiles for.
-
-        :type marker: string
-        :param marker: Use this parameter only when paginating results, and
-            only in a subsequent request after you've received a response
-            where the results are truncated. Set it to the value of the
-            Marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this parameter only when paginating results to
-            indicate the maximum number of user names you want in the response.
-        """
-        params = {'RoleName': role_name}
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-        return self.get_response('ListInstanceProfilesForRole', params,
-                                 list_marker='InstanceProfiles')
-
-    def list_role_policies(self, role_name, marker=None, max_items=None):
-        """
-        Lists the names of the policies associated with the specified role. If
-        there are none, the action returns an empty list.
-
-        :type role_name: string
-        :param role_name: The name of the role to list policies for.
-
-        :type marker: string
-        :param marker: Use this parameter only when paginating results, and
-            only in a subsequent request after you've received a response
-            where the results are truncated. Set it to the value of the
-            marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this parameter only when paginating results to
-            indicate the maximum number of user names you want in the response.
-        """
-        params = {'RoleName': role_name}
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-        return self.get_response('ListRolePolicies', params,
-                                 list_marker='PolicyNames')
-
-    def list_roles(self, path_prefix=None, marker=None, max_items=None):
-        """
-        Lists the roles that have the specified path prefix. If there are none,
-        the action returns an empty list.
-
-        :type path_prefix: string
-        :param path_prefix: The path prefix for filtering the results.
-
-        :type marker: string
-        :param marker: Use this parameter only when paginating results, and
-            only in a subsequent request after you've received a response
-            where the results are truncated. Set it to the value of the
-            marker element in the response you just received.
-
-        :type max_items: int
-        :param max_items: Use this parameter only when paginating results to
-            indicate the maximum number of user names you want in the response.
-        """
-        params = {}
-        if path_prefix is not None:
-            params['PathPrefix'] = path_prefix
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-        return self.get_response('ListRoles', params, list_marker='Roles')
-
-    def put_role_policy(self, role_name, policy_name, policy_document):
-        """
-        Adds (or updates) a policy document associated with the specified role.
-
-        :type role_name: string
-        :param role_name: Name of the role to associate the policy with.
-
-        :type policy_name: string
-        :param policy_name: Name of the policy document.
-
-        :type policy_document: string
-        :param policy_document: The policy document.
-        """
-        return self.get_response('PutRolePolicy',
-                                 {'RoleName': role_name,
-                                  'PolicyName': policy_name,
-                                  'PolicyDocument': policy_document})
-
-    def remove_role_from_instance_profile(self, instance_profile_name,
-                                          role_name):
-        """
-        Removes the specified role from the specified instance profile.
-
-        :type instance_profile_name: string
-        :param instance_profile_name: Name of the instance profile to update.
-
-        :type role_name: string
-        :param role_name: Name of the role to remove.
-        """
-        return self.get_response('RemoveRoleFromInstanceProfile',
-                                 {'InstanceProfileName': instance_profile_name,
-                                  'RoleName': role_name})
-
-    def update_assume_role_policy(self, role_name, policy_document):
-        """
-        Updates the policy that grants an entity permission to assume a role.
-        Currently, only an Amazon EC2 instance can assume a role.
-
-        :type role_name: string
-        :param role_name: Name of the role to update.
-
-        :type policy_document: string
-        :param policy_document: The policy that grants an entity permission to
-            assume the role.
-        """
-        return self.get_response('UpdateAssumeRolePolicy',
-                                 {'RoleName': role_name,
-                                  'PolicyDocument': policy_document})
-
-    def create_saml_provider(self, saml_metadata_document, name):
-        """
-        Creates an IAM entity to describe an identity provider (IdP)
-        that supports SAML 2.0.
-
-        The SAML provider that you create with this operation can be
-        used as a principal in a role's trust policy to establish a
-        trust relationship between AWS and a SAML identity provider.
-        You can create an IAM role that supports Web-based single
-        sign-on (SSO) to the AWS Management Console or one that
-        supports API access to AWS.
-
-        When you create the SAML provider, you upload an a SAML
-        metadata document that you get from your IdP and that includes
-        the issuer's name, expiration information, and keys that can
-        be used to validate the SAML authentication response
-        (assertions) that are received from the IdP. You must generate
-        the metadata document using the identity management software
-        that is used as your organization's IdP.
-        This operation requires `Signature Version 4`_.
-        For more information, see `Giving Console Access Using SAML`_
-        and `Creating Temporary Security Credentials for SAML
-        Federation`_ in the Using Temporary Credentials guide.
-
-        :type saml_metadata_document: string
-        :param saml_metadata_document: An XML document generated by an identity
-            provider (IdP) that supports SAML 2.0. The document includes the
-            issuer's name, expiration information, and keys that can be used to
-            validate the SAML authentication response (assertions) that are
-            received from the IdP. You must generate the metadata document
-            using the identity management software that is used as your
-            organization's IdP.
-        For more information, see `Creating Temporary Security Credentials for
-            SAML Federation`_ in the Using Temporary Security Credentials
-            guide.
-
-        :type name: string
-        :param name: The name of the provider to create.
-
-        """
-        params = {
-            'SAMLMetadataDocument': saml_metadata_document,
-            'Name': name,
-        }
-        return self.get_response('CreateSAMLProvider', params)
-
-    def list_saml_providers(self):
-        """
-        Lists the SAML providers in the account.
-        This operation requires `Signature Version 4`_.
-        """
-        return self.get_response('ListSAMLProviders', {}, list_marker='SAMLProviderList')
-
-    def get_saml_provider(self, saml_provider_arn):
-        """
-        Returns the SAML provider metadocument that was uploaded when
-        the provider was created or updated.
-        This operation requires `Signature Version 4`_.
-
-        :type saml_provider_arn: string
-        :param saml_provider_arn: The Amazon Resource Name (ARN) of the SAML
-            provider to get information about.
-
-        """
-        params = {'SAMLProviderArn': saml_provider_arn}
-        return self.get_response('GetSAMLProvider', params)
-
-    def update_saml_provider(self, saml_provider_arn, saml_metadata_document):
-        """
-        Updates the metadata document for an existing SAML provider.
-        This operation requires `Signature Version 4`_.
-
-        :type saml_provider_arn: string
-        :param saml_provider_arn: The Amazon Resource Name (ARN) of the SAML
-            provider to update.
-
-        :type saml_metadata_document: string
-        :param saml_metadata_document: An XML document generated by an identity
-            provider (IdP) that supports SAML 2.0. The document includes the
-            issuer's name, expiration information, and keys that can be used to
-            validate the SAML authentication response (assertions) that are
-            received from the IdP. You must generate the metadata document
-            using the identity management software that is used as your
-            organization's IdP.
-
-        """
-        params = {
-            'SAMLMetadataDocument': saml_metadata_document,
-            'SAMLProviderArn': saml_provider_arn,
-        }
-        return self.get_response('UpdateSAMLProvider', params)
-
-    def delete_saml_provider(self, saml_provider_arn):
-        """
-        Deletes a SAML provider.
-
-        Deleting the provider does not update any roles that reference
-        the SAML provider as a principal in their trust policies. Any
-        attempt to assume a role that references a SAML provider that
-        has been deleted will fail.
-        This operation requires `Signature Version 4`_.
-
-        :type saml_provider_arn: string
-        :param saml_provider_arn: The Amazon Resource Name (ARN) of the SAML
-            provider to delete.
-
-        """
-        params = {'SAMLProviderArn': saml_provider_arn}
-        return self.get_response('DeleteSAMLProvider', params)
-
-    #
-    # IAM Reports
-    #
-
-    def generate_credential_report(self):
-        """
-        Generates a credential report for an account
-
-        A new credential report can only be generated every 4 hours. If one
-        hasn't been generated in the last 4 hours then get_credential_report
-        will error when called
-        """
-        params = {}
-        return self.get_response('GenerateCredentialReport', params)
-
-    def get_credential_report(self):
-        """
-        Retrieves a credential report for an account
-
-        A report must have been generated in the last 4 hours to succeed.
-        The report is returned as a base64 encoded blob within the response.
-        """
-        params = {}
-        return self.get_response('GetCredentialReport', params)
-
-    def create_virtual_mfa_device(self, path, device_name):
-        """
-        Creates a new virtual MFA device for the AWS account.
-
-        After creating the virtual MFA, use enable-mfa-device to
-        attach the MFA device to an IAM user.
-
-        :type path: string
-        :param path: The path for the virtual MFA device.
-
-        :type device_name: string
-        :param device_name: The name of the virtual MFA device.
-            Used with path to uniquely identify a virtual MFA device.
-
-        """
-        params = {
-            'Path': path,
-            'VirtualMFADeviceName': device_name
-        }
-        return self.get_response('CreateVirtualMFADevice', params)
-
-    #
-    # IAM password policy
-    #
-
-    def get_account_password_policy(self):
-        """
-        Returns the password policy for the AWS account.
-        """
-        params = {}
-        return self.get_response('GetAccountPasswordPolicy', params)
-
-    def delete_account_password_policy(self):
-        """
-        Delete the password policy currently set for the AWS account.
-        """
-        params = {}
-        return self.get_response('DeleteAccountPasswordPolicy', params)
-
-    def update_account_password_policy(self, allow_users_to_change_password=None,
-                                        hard_expiry=None, max_password_age=None ,
-                                        minimum_password_length=None ,
-                                        password_reuse_prevention=None,
-                                        require_lowercase_characters=None,
-                                        require_numbers=None, require_symbols=None ,
-                                        require_uppercase_characters=None):
-        """
-        Update the password policy for the AWS account.
-
-        Notes: unset parameters will be reset to Amazon default settings!
-            Most of the password policy settings are enforced the next time your users
-            change their passwords. When you set minimum length and character type
-            requirements, they are enforced the next time your users change their
-            passwords - users are not forced to change their existing passwords, even
-            if the pre-existing passwords do not adhere to the updated password
-            policy. When you set a password expiration period, the expiration period
-            is enforced immediately.
-
-        :type allow_users_to_change_password: bool
-        :param allow_users_to_change_password: Allows all IAM users in your account
-            to use the AWS Management Console to change their own passwords.
-
-        :type hard_expiry: bool
-        :param hard_expiry: Prevents IAM users from setting a new password after
-            their password has expired.
-
-        :type max_password_age: int
-        :param max_password_age: The number of days that an IAM user password is valid.
-
-        :type minimum_password_length: int
-        :param minimum_password_length: The minimum number of characters allowed in
-            an IAM user password.
-
-        :type password_reuse_prevention: int
-        :param password_reuse_prevention: Specifies the number of previous passwords
-            that IAM users are prevented from reusing.
-
-        :type require_lowercase_characters: bool
-        :param require_lowercase_characters: Specifies whether IAM user passwords
-            must contain at least one lowercase character from the ISO basic Latin
-            alphabet (``a`` to ``z``).
-
-        :type require_numbers: bool
-        :param require_numbers: Specifies whether IAM user passwords must contain at
-            least one numeric character (``0`` to ``9``).
-
-        :type require_symbols: bool
-        :param require_symbols: Specifies whether IAM user passwords must contain at
-            least one of the following non-alphanumeric characters:
-            ``! @ # $ % ^ & * ( ) _ + - = [ ] { } | '``
-
-        :type require_uppercase_characters: bool
-        :param require_uppercase_characters: Specifies whether IAM user passwords
-            must contain at least one uppercase character from the ISO basic Latin
-            alphabet (``A`` to ``Z``).
-        """
-        params = {}
-        if allow_users_to_change_password is not None and type(allow_users_to_change_password) is bool:
-            params['AllowUsersToChangePassword'] = str(allow_users_to_change_password).lower()
-        if hard_expiry is not None and type(allow_users_to_change_password) is bool:
-            params['HardExpiry'] = str(hard_expiry).lower()
-        if max_password_age is not None:
-            params['MaxPasswordAge'] = max_password_age
-        if minimum_password_length is not None:
-            params['MinimumPasswordLength'] = minimum_password_length
-        if password_reuse_prevention is not None:
-            params['PasswordReusePrevention'] = password_reuse_prevention
-        if require_lowercase_characters is not None and type(allow_users_to_change_password) is bool:
-            params['RequireLowercaseCharacters'] = str(require_lowercase_characters).lower()
-        if require_numbers is not None and type(allow_users_to_change_password) is bool:
-            params['RequireNumbers'] = str(require_numbers).lower()
-        if require_symbols is not None and type(allow_users_to_change_password) is bool:
-            params['RequireSymbols'] = str(require_symbols).lower()
-        if require_uppercase_characters is not None and type(allow_users_to_change_password) is bool:
-            params['RequireUppercaseCharacters'] = str(require_uppercase_characters).lower()
-        return self.get_response('UpdateAccountPasswordPolicy', params)
-
-    def create_policy(self, policy_name, policy_document, path='/',
-                      description=None):
-        """
-        Create a policy.
-
-        :type policy_name: string
-        :param policy_name: The name of the new policy
-
-        :type policy_document string
-        :param policy_document: The document of the new policy
-
-        :type path: string
-        :param path: The path in which the policy will be created.
-            Defaults to /.
-
-        :type description: string
-        :param path: A description of the new policy.
-
-        """
-        params = {'PolicyName': policy_name,
-                  'PolicyDocument': policy_document,
-                  'Path': path}
-        if description is not None:
-            params['Description'] = str(description)
-
-        return self.get_response('CreatePolicy', params)
-
-    def create_policy_version(
-            self,
-            policy_arn,
-            policy_document,
-            set_as_default=None):
-        """
-        Create a policy version.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy
-
-        :type policy_document string
-        :param policy_document: The document of the new policy version
-
-        :type set_as_default: bool
-        :param set_as_default: Sets the policy version as default
-            Defaults to None.
-
-        """
-        params = {'PolicyArn': policy_arn,
-                  'PolicyDocument': policy_document}
-        if type(set_as_default) == bool:
-            params['SetAsDefault'] = str(set_as_default).lower()
-        return self.get_response('CreatePolicyVersion', params)
-
-    def delete_policy(self, policy_arn):
-        """
-        Delete a policy.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to delete
-
-        """
-        params = {'PolicyArn': policy_arn}
-        return self.get_response('DeletePolicy', params)
-
-    def delete_policy_version(self, policy_arn, version_id):
-        """
-        Delete a policy version.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to delete a version from
-
-        :type version_id: string
-        :param version_id: The id of the version to delete
-
-        """
-        params = {'PolicyArn': policy_arn,
-                  'VersionId': version_id}
-        return self.get_response('DeletePolicyVersion', params)
-
-    def get_policy(self, policy_arn):
-        """
-        Get policy information.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to get information for
-
-        """
-        params = {'PolicyArn': policy_arn}
-        return self.get_response('GetPolicy', params)
-
-    def get_policy_version(self, policy_arn, version_id):
-        """
-        Get policy information.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to get information for a
-            specific version
-
-        :type version_id: string
-        :param version_id: The id of the version to get information for
-
-        """
-        params = {'PolicyArn': policy_arn,
-                  'VersionId': version_id}
-        return self.get_response('GetPolicyVersion', params)
-
-    def list_policies(self, marker=None, max_items=None, only_attached=None,
-                      path_prefix=None, scope=None):
-        """
-        List policies of account.
-
-        :type marker: string
-        :param marker: A marker used for pagination (received from previous
-            accesses)
-
-        :type max_items: int
-        :param max_items: Send only max_items; allows paginations
-
-        :type only_attached: bool
-        :param only_attached: Send only policies attached to other resources
-
-        :type path_prefix: string
-        :param path_prefix: Send only items prefixed by this path
-
-        :type scope: string
-        :param scope: AWS|Local.  Choose between AWS policies or your own
-        """
-        params = {}
-        if path_prefix is not None:
-            params['PathPrefix'] = path_prefix
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-        if type(only_attached) == bool:
-            params['OnlyAttached'] = str(only_attached).lower()
-        if scope is not None:
-            params['Scope'] = scope
-        return self.get_response(
-            'ListPolicies',
-            params,
-            list_marker='Policies')
-
-    def list_policy_versions(self, policy_arn, marker=None, max_items=None):
-        """
-        List policy versions.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to get versions of
-
-        :type marker: string
-        :param marker: A marker used for pagination (received from previous
-            accesses)
-
-        :type max_items: int
-        :param max_items: Send only max_items; allows paginations
-
-        """
-        params = {'PolicyArn': policy_arn}
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-        return self.get_response(
-            'ListPolicyVersions',
-            params,
-            list_marker='Versions')
-
-    def set_default_policy_version(self, policy_arn, version_id):
-        """
-        Set default policy version.
-
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to set the default version
-            for
-
-        :type version_id: string
-        :param version_id: The id of the version to set as default
-        """
-        params = {'PolicyArn': policy_arn,
-                  'VersionId': version_id}
-        return self.get_response('SetDefaultPolicyVersion', params)
-
-    def list_entities_for_policy(self, policy_arn, path_prefix=None,
-                                 marker=None, max_items=None,
-                                 entity_filter=None):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to get entities for
-
-        :type marker: string
-        :param marker: A marker used for pagination (received from previous
-            accesses)
-
-        :type max_items: int
-        :param max_items: Send only max_items; allows paginations
-
-        :type path_prefix: string
-        :param path_prefix: Send only items prefixed by this path
-
-        :type entity_filter: string
-        :param entity_filter: Which entity type of User | Role | Group |
-            LocalManagedPolicy | AWSManagedPolicy to return
-
-        """
-        params = {'PolicyArn': policy_arn}
-        if marker is not None:
-            params['Marker'] = marker
-        if max_items is not None:
-            params['MaxItems'] = max_items
-        if path_prefix is not None:
-            params['PathPrefix'] = path_prefix
-        if entity_filter is not None:
-            params['EntityFilter'] = entity_filter
-        return self.get_response('ListEntitiesForPolicy', params,
-                                 list_marker=('PolicyGroups',
-                                              'PolicyUsers',
-                                              'PolicyRoles'))
-
-    def attach_group_policy(self, policy_arn, group_name):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to attach
-
-        :type group_name: string
-        :param group_name: Group to attach the policy to
-
-        """
-        params = {'PolicyArn': policy_arn, 'GroupName': group_name}
-        return self.get_response('AttachGroupPolicy', params)
-
-    def attach_role_policy(self, policy_arn, role_name):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to attach
-
-        :type role_name: string
-        :param role_name: Role to attach the policy to
-
-        """
-        params = {'PolicyArn': policy_arn, 'RoleName': role_name}
-        return self.get_response('AttachRolePolicy', params)
-
-    def attach_user_policy(self, policy_arn, user_name):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to attach
-
-        :type user_name: string
-        :param user_name: User to attach the policy to
-
-        """
-        params = {'PolicyArn': policy_arn, 'UserName': user_name}
-        return self.get_response('AttachUserPolicy', params)
-
-    def detach_group_policy(self, policy_arn, group_name):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to detach
-
-        :type group_name: string
-        :param group_name: Group to detach the policy from
-
-        """
-        params = {'PolicyArn': policy_arn, 'GroupName': group_name}
-        return self.get_response('DetachGroupPolicy', params)
-
-    def detach_role_policy(self, policy_arn, role_name):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to detach
-
-        :type role_name: string
-        :param role_name: Role to detach the policy from
-
-        """
-        params = {'PolicyArn': policy_arn, 'RoleName': role_name}
-        return self.get_response('DetachRolePolicy', params)
-
-    def detach_user_policy(self, policy_arn, user_name):
-        """
-        :type policy_arn: string
-        :param policy_arn: The ARN of the policy to detach
-
-        :type user_name: string
-        :param user_name: User to detach the policy from
-
-        """
-        params = {'PolicyArn': policy_arn, 'UserName': user_name}
-        return self.get_response('DetachUserPolicy', params)