Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: third_party/gsutil/boto/boto/gs/bucket.py

Issue 10199002: Upgrade gsutil to 3.4 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/gsutil/boto/boto/gs/acl.py ('k') | third_party/gsutil/boto/boto/gs/connection.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/gsutil/boto/boto/gs/bucket.py
diff --git a/third_party/gsutil/20110627/boto/boto/gs/bucket.py b/third_party/gsutil/boto/boto/gs/bucket.py
similarity index 65%
rename from third_party/gsutil/20110627/boto/boto/gs/bucket.py
rename to third_party/gsutil/boto/boto/gs/bucket.py
index 601fc774416cfb6132b6c708405b90360d48e391..d9c764f19f08ee3dc86333be98a2315b0ea76a8e 100644
--- a/third_party/gsutil/20110627/boto/boto/gs/bucket.py
+++ b/third_party/gsutil/boto/boto/gs/bucket.py
@@ -24,17 +24,27 @@ from boto import handler
from boto.exception import InvalidAclError
from boto.gs.acl import ACL, CannedACLStrings
from boto.gs.acl import SupportedPermissions as GSPermissions
+from boto.gs.cors import Cors
from boto.gs.key import Key as GSKey
from boto.s3.acl import Policy
from boto.s3.bucket import Bucket as S3Bucket
import xml.sax
+# constants for http query args
+DEF_OBJ_ACL = 'defaultObjectAcl'
+STANDARD_ACL = 'acl'
+CORS_ARG = 'cors'
+
class Bucket(S3Bucket):
def __init__(self, connection=None, name=None, key_class=GSKey):
super(Bucket, self).__init__(connection, name, key_class)
def set_acl(self, acl_or_str, key_name='', headers=None, version_id=None):
+ """sets or changes a bucket's acl. We include a version_id argument
+ to support a polymorphic interface for callers, however,
+ version_id is not relevant for Google Cloud Storage buckets
+ and is therefore ignored here."""
if isinstance(acl_or_str, Policy):
raise InvalidAclError('Attempt to set S3 Policy on GS ACL')
elif isinstance(acl_or_str, ACL):
@@ -42,9 +52,20 @@ class Bucket(S3Bucket):
else:
self.set_canned_acl(acl_or_str, key_name, headers=headers)
- def get_acl(self, key_name='', headers=None, version_id=None):
+ def set_def_acl(self, acl_or_str, key_name='', headers=None):
+ """sets or changes a bucket's default object acl"""
+ if isinstance(acl_or_str, Policy):
+ raise InvalidAclError('Attempt to set S3 Policy on GS ACL')
+ elif isinstance(acl_or_str, ACL):
+ self.set_def_xml_acl(acl_or_str.to_xml(), key_name, headers=headers)
+ else:
+ self.set_def_canned_acl(acl_or_str, key_name, headers=headers)
+
+ def get_acl_helper(self, key_name, headers, query_args):
+ """provides common functionality for get_acl() and get_def_acl()"""
response = self.connection.make_request('GET', self.name, key_name,
- query_args='acl', headers=headers)
+ query_args=query_args,
+ headers=headers)
body = response.read()
if response.status == 200:
acl = ACL(self)
@@ -55,8 +76,20 @@ class Bucket(S3Bucket):
raise self.connection.provider.storage_response_error(
response.status, response.reason, body)
- def set_canned_acl(self, acl_str, key_name='', headers=None,
- version_id=None):
+ def get_acl(self, key_name='', headers=None, version_id=None):
+ """returns a bucket's acl. We include a version_id argument
+ to support a polymorphic interface for callers, however,
+ version_id is not relevant for Google Cloud Storage buckets
+ and is therefore ignored here."""
+ return self.get_acl_helper(key_name, headers, STANDARD_ACL)
+
+ def get_def_acl(self, key_name='', headers=None):
+ """returns a bucket's default object acl"""
+ return self.get_acl_helper(key_name, headers, DEF_OBJ_ACL)
+
+ def set_canned_acl_helper(self, acl_str, key_name, headers, query_args):
+ """provides common functionality for set_canned_acl() and
+ set_def_canned_acl()"""
assert acl_str in CannedACLStrings
if headers:
@@ -64,9 +97,6 @@ class Bucket(S3Bucket):
else:
headers={self.connection.provider.acl_header: acl_str}
- query_args='acl'
- if version_id:
- query_args += '&versionId=%s' % version_id
response = self.connection.make_request('PUT', self.name, key_name,
headers=headers, query_args=query_args)
body = response.read()
@@ -74,6 +104,54 @@ class Bucket(S3Bucket):
raise self.connection.provider.storage_response_error(
response.status, response.reason, body)
+ def set_canned_acl(self, acl_str, key_name='', headers=None,
+ version_id=None):
+ """sets or changes a bucket's acl to a predefined (canned) value.
+ We include a version_id argument to support a polymorphic
+ interface for callers, however, version_id is not relevant for
+ Google Cloud Storage buckets and is therefore ignored here."""
+ return self.set_canned_acl_helper(acl_str, key_name, headers,
+ STANDARD_ACL)
+
+ def set_def_canned_acl(self, acl_str, key_name='', headers=None):
+ """sets or changes a bucket's default object acl to a predefined
+ (canned) value"""
+ return self.set_canned_acl_helper(acl_str, key_name, headers,
+ query_args=DEF_OBJ_ACL)
+
+ def set_def_xml_acl(self, acl_str, key_name='', headers=None):
+ """sets or changes a bucket's default object"""
+ return self.set_xml_acl(acl_str, key_name, headers,
+ query_args=DEF_OBJ_ACL)
+
+ def get_cors(self, headers=None):
+ """returns a bucket's CORS XML"""
+ response = self.connection.make_request('GET', self.name,
+ query_args=CORS_ARG,
+ headers=headers)
+ body = response.read()
+ if response.status == 200:
+ # Success - parse XML and return Cors object.
+ cors = Cors()
+ h = handler.XmlHandler(cors, self)
+ xml.sax.parseString(body, h)
+ return cors
+ else:
+ raise self.connection.provider.storage_response_error(
+ response.status, response.reason, body)
+
+ def set_cors(self, cors, headers=None):
+ """sets or changes a bucket's CORS XML."""
+ cors_xml = cors.encode('ISO-8859-1')
+ response = self.connection.make_request('PUT', self.name,
+ data=cors_xml,
+ query_args=CORS_ARG,
+ headers=headers)
+ body = response.read()
+ if response.status != 200:
+ raise self.connection.provider.storage_response_error(
+ response.status, response.reason, body)
+
# Method with same signature as boto.s3.bucket.Bucket.add_email_grant(),
# to allow polymorphic treatment at application layer.
def add_email_grant(self, permission, email_address,
@@ -190,3 +268,19 @@ class Bucket(S3Bucket):
def list_grants(self, headers=None):
acl = self.get_acl(headers=headers)
return acl.entries
+
+ def disable_logging(self, headers=None):
+ xml_str = '<?xml version="1.0" encoding="UTF-8"?><Logging/>'
+ self.set_subresource('logging', xml_str, headers=headers)
+
+ def enable_logging(self, target_bucket, target_prefix=None, headers=None):
+ if isinstance(target_bucket, Bucket):
+ target_bucket = target_bucket.name
+ xml_str = '<?xml version="1.0" encoding="UTF-8"?><Logging>'
+ xml_str = (xml_str + '<LogBucket>%s</LogBucket>' % target_bucket)
+ if target_prefix:
+ xml_str = (xml_str +
+ '<LogObjectPrefix>%s</LogObjectPrefix>' % target_prefix)
+ xml_str = xml_str + '</Logging>'
+
+ self.set_subresource('logging', xml_str, headers=headers)
« no previous file with comments | « third_party/gsutil/boto/boto/gs/acl.py ('k') | third_party/gsutil/boto/boto/gs/connection.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698