'Creates a new located bucket. By default it\'s in the USA. You can pass
Location.EU to create a European bucket (S3) or European Union bucket
(GCS).
:type bucket_name: string
:param bucket_name: The name of the new bucket
:type headers: dict
:param headers: Additional headers to pass along with the request to AWS.
:type location: str
:param location: The location of the new bucket.  You can use one of the
constants in :class:`boto.s3.connection.Location` (e.g. Location.EU,
Location.USWest, etc.).
:type policy: :class:`boto.s3.acl.CannedACLStrings`
:param policy: A canned ACL policy that will be applied to the
new key in S3.'

def create_bucket(self, bucket_name, headers=None, location=Location.DEFAULT, policy=None):

    check_lowercase_bucketname(bucket_name)
    if policy:
        if headers:
            headers[self.provider.acl_header] = policy
        else:
            headers = {self.provider.acl_header: policy}
    if (location == Location.DEFAULT):
        data = ''
    else:
        data = (('<CreateBucketConfiguration><LocationConstraint>' + location) + '</LocationConstraint></CreateBucketConfiguration>')
    response = self.make_request('PUT', bucket_name, headers=headers, data=data)
    body = response.read()
    if (response.status == 409):
        raise self.provider.storage_create_error(response.status, response.reason, body)
    if (response.status == 200):
        return self.bucket_class(self, bucket_name)
    else:
        raise self.provider.storage_response_error(response.status, response.reason, body)
