Index: third_party/boto/boto/gs/connection.py |
diff --git a/third_party/boto/boto/gs/connection.py b/third_party/boto/boto/gs/connection.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..6d5e00afea629e24d7f464632fc721f0691d1c0c |
--- /dev/null |
+++ b/third_party/boto/boto/gs/connection.py |
@@ -0,0 +1,103 @@ |
+# Copyright 2010 Google 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. |
+ |
+from boto.gs.bucket import Bucket |
+from boto.s3.connection import S3Connection |
+from boto.s3.connection import SubdomainCallingFormat |
+from boto.s3.connection import check_lowercase_bucketname |
+ |
+class Location: |
+ DEFAULT = 'US' |
+ EU = 'EU' |
+ |
+class GSConnection(S3Connection): |
+ |
+ DefaultHost = 'storage.googleapis.com' |
+ QueryString = 'Signature=%s&Expires=%d&AWSAccessKeyId=%s' |
+ |
+ def __init__(self, gs_access_key_id=None, gs_secret_access_key=None, |
+ is_secure=True, port=None, proxy=None, proxy_port=None, |
+ proxy_user=None, proxy_pass=None, |
+ host=DefaultHost, debug=0, https_connection_factory=None, |
+ calling_format=SubdomainCallingFormat(), path='/', |
+ suppress_consec_slashes=True): |
+ S3Connection.__init__(self, gs_access_key_id, gs_secret_access_key, |
+ is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, |
+ host, debug, https_connection_factory, calling_format, path, |
+ "google", Bucket, |
+ suppress_consec_slashes=suppress_consec_slashes) |
+ |
+ def create_bucket(self, bucket_name, headers=None, |
+ location=Location.DEFAULT, policy=None, |
+ storage_class='STANDARD'): |
+ """ |
+ 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 for where the bucket should be located, and |
+ a StorageClass describing how the data should be stored. |
+ |
+ :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 GCS. |
+ |
+ :type location: :class:`boto.gs.connection.Location` |
+ :param location: The location of the new bucket. |
+ |
+ :type policy: :class:`boto.gs.acl.CannedACLStrings` |
+ :param policy: A canned ACL policy that will be applied to the new key |
+ in GCS. |
+ |
+ :type storage_class: string |
+ :param storage_class: Either 'STANDARD' or 'DURABLE_REDUCED_AVAILABILITY'. |
+ |
+ """ |
+ 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: |
+ location = Location.DEFAULT |
+ location_elem = ('<LocationConstraint>%s</LocationConstraint>' |
+ % location) |
+ if storage_class: |
+ storage_class_elem = ('<StorageClass>%s</StorageClass>' |
+ % storage_class) |
+ else: |
+ storage_class_elem = '' |
+ data = ('<CreateBucketConfiguration>%s%s</CreateBucketConfiguration>' |
+ % (location_elem, storage_class_elem)) |
+ 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) |
+ |