Index: boto/gs/connection.py |
diff --git a/boto/gs/connection.py b/boto/gs/connection.py |
index ec81f32f2d8ec6a4332eeccd3c578f8f5dc7505d..cf79ed7224b0c3b1aa67d3b6b3cd3720f7855034 100755 |
--- a/boto/gs/connection.py |
+++ b/boto/gs/connection.py |
@@ -19,9 +19,14 @@ |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
# IN THE SOFTWARE. |
+from boto.gs.bucket import Bucket |
from boto.s3.connection import S3Connection |
from boto.s3.connection import SubdomainCallingFormat |
-from boto.gs.bucket import Bucket |
+from boto.s3.connection import check_lowercase_bucketname |
+ |
+class Location: |
+ DEFAULT = '' # US |
+ EU = 'EU' |
class GSConnection(S3Connection): |
@@ -37,3 +42,51 @@ class GSConnection(S3Connection): |
is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, |
host, debug, https_connection_factory, calling_format, path, |
"google", Bucket) |
+ |
+ def create_bucket(self, bucket_name, headers=None, |
+ location=Location.DEFAULT, policy=None): |
+ """ |
+ Creates a new bucket. By default it's located in the USA. You can |
+ pass Location.EU to create an European bucket. You can also pass |
+ a LocationConstraint, which (in addition to locating the bucket |
+ in the specified location) informs Google that Google services |
+ must not copy data out of that location. |
+ |
+ :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: :class:`boto.gs.connection.Location` |
+ :param location: The location of the new bucket |
+ |
+ :type policy: :class:`boto.s3.acl.CannedACLStrings` |
+ :param policy: A canned ACL policy that will be applied to the new key in S3. |
+ |
+ """ |
+ check_lowercase_bucketname(bucket_name) |
+ |
+ if policy: |
+ if headers: |
+ headers[self.provider.acl_header] = policy |
+ else: |
+ headers = {self.provider.acl_header : policy} |
+ if not location: |
+ data = '' |
+ else: |
+ data = ('<CreateBucketConfiguration>' |
+ '<LocationConstraint>%s</LocationConstraint>' |
+ '</CreateBucketConfiguration>' % location) |
+ 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) |
+ |