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

Side by Side Diff: boto/gs/bucket.py

Issue 8669001: Pull in upstream boto from github at bcb719937de9ac2851e632d62b777352029a6d55 (Closed) Base URL: svn://svn.chromium.org/boto
Patch Set: Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « boto/gs/acl.py ('k') | boto/mturk/connection.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2010 Google Inc. 1 # Copyright 2010 Google Inc.
2 # 2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a 3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the 4 # copy of this software and associated documentation files (the
5 # "Software"), to deal in the Software without restriction, including 5 # "Software"), to deal in the Software without restriction, including
6 # without limitation the rights to use, copy, modify, merge, publish, dis- 6 # without limitation the rights to use, copy, modify, merge, publish, dis-
7 # tribute, sublicense, and/or sell copies of the Software, and to permit 7 # tribute, sublicense, and/or sell copies of the Software, and to permit
8 # persons to whom the Software is furnished to do so, subject to the fol- 8 # persons to whom the Software is furnished to do so, subject to the fol-
9 # lowing conditions: 9 # lowing conditions:
10 # 10 #
(...skipping 11 matching lines...) Expand all
22 import boto 22 import boto
23 from boto import handler 23 from boto import handler
24 from boto.exception import InvalidAclError 24 from boto.exception import InvalidAclError
25 from boto.gs.acl import ACL, CannedACLStrings 25 from boto.gs.acl import ACL, CannedACLStrings
26 from boto.gs.acl import SupportedPermissions as GSPermissions 26 from boto.gs.acl import SupportedPermissions as GSPermissions
27 from boto.gs.key import Key as GSKey 27 from boto.gs.key import Key as GSKey
28 from boto.s3.acl import Policy 28 from boto.s3.acl import Policy
29 from boto.s3.bucket import Bucket as S3Bucket 29 from boto.s3.bucket import Bucket as S3Bucket
30 import xml.sax 30 import xml.sax
31 31
32 # constants for default object ACL and standard acl in http query args
33 DEF_OBJ_ACL = 'defaultObjectAcl'
34 STANDARD_ACL = 'acl'
35
32 class Bucket(S3Bucket): 36 class Bucket(S3Bucket):
33 37
34 def __init__(self, connection=None, name=None, key_class=GSKey): 38 def __init__(self, connection=None, name=None, key_class=GSKey):
35 super(Bucket, self).__init__(connection, name, key_class) 39 super(Bucket, self).__init__(connection, name, key_class)
36 40
37 def set_acl(self, acl_or_str, key_name='', headers=None, version_id=None): 41 def set_acl(self, acl_or_str, key_name='', headers=None, version_id=None):
42 """sets or changes a bucket's acl. We include a version_id argument
43 to support a polymorphic interface for callers, however,
44 version_id is not relevant for Google Cloud Storage buckets
45 and is therefore ignored here."""
38 if isinstance(acl_or_str, Policy): 46 if isinstance(acl_or_str, Policy):
39 raise InvalidAclError('Attempt to set S3 Policy on GS ACL') 47 raise InvalidAclError('Attempt to set S3 Policy on GS ACL')
40 elif isinstance(acl_or_str, ACL): 48 elif isinstance(acl_or_str, ACL):
41 self.set_xml_acl(acl_or_str.to_xml(), key_name, headers=headers) 49 self.set_xml_acl(acl_or_str.to_xml(), key_name, headers=headers)
42 else: 50 else:
43 self.set_canned_acl(acl_or_str, key_name, headers=headers) 51 self.set_canned_acl(acl_or_str, key_name, headers=headers)
44 52
45 def get_acl(self, key_name='', headers=None, version_id=None): 53 def set_def_acl(self, acl_or_str, key_name='', headers=None):
54 """sets or changes a bucket's default object acl"""
55 if isinstance(acl_or_str, Policy):
56 raise InvalidAclError('Attempt to set S3 Policy on GS ACL')
57 elif isinstance(acl_or_str, ACL):
58 self.set_def_xml_acl(acl_or_str.to_xml(), key_name, headers=headers)
59 else:
60 self.set_def_canned_acl(acl_or_str, key_name, headers=headers)
61
62 def get_acl_helper(self, key_name, headers, query_args):
63 """provides common functionality for get_acl() and get_def_acl()"""
46 response = self.connection.make_request('GET', self.name, key_name, 64 response = self.connection.make_request('GET', self.name, key_name,
47 query_args='acl', headers=headers) 65 query_args=query_args,
66 headers=headers)
48 body = response.read() 67 body = response.read()
49 if response.status == 200: 68 if response.status == 200:
50 acl = ACL(self) 69 acl = ACL(self)
51 h = handler.XmlHandler(acl, self) 70 h = handler.XmlHandler(acl, self)
52 xml.sax.parseString(body, h) 71 xml.sax.parseString(body, h)
53 return acl 72 return acl
54 else: 73 else:
55 raise self.connection.provider.storage_response_error( 74 raise self.connection.provider.storage_response_error(
56 response.status, response.reason, body) 75 response.status, response.reason, body)
57 76
58 def set_canned_acl(self, acl_str, key_name='', headers=None, 77 def get_acl(self, key_name='', headers=None, version_id=None):
59 version_id=None): 78 """returns a bucket's acl. We include a version_id argument
79 to support a polymorphic interface for callers, however,
80 version_id is not relevant for Google Cloud Storage buckets
81 and is therefore ignored here."""
82 return self.get_acl_helper(key_name, headers, STANDARD_ACL)
83
84 def get_def_acl(self, key_name='', headers=None):
85 """returns a bucket's default object acl"""
86 return self.get_acl_helper(key_name, headers, DEF_OBJ_ACL)
87
88 def set_canned_acl_helper(self, acl_str, key_name, headers, query_args):
89 """provides common functionality for set_canned_acl() and
90 set_def_canned_acl()"""
60 assert acl_str in CannedACLStrings 91 assert acl_str in CannedACLStrings
61 92
62 if headers: 93 if headers:
63 headers[self.connection.provider.acl_header] = acl_str 94 headers[self.connection.provider.acl_header] = acl_str
64 else: 95 else:
65 headers={self.connection.provider.acl_header: acl_str} 96 headers={self.connection.provider.acl_header: acl_str}
66 97
67 query_args='acl'
68 if version_id:
69 query_args += '&versionId=%s' % version_id
70 response = self.connection.make_request('PUT', self.name, key_name, 98 response = self.connection.make_request('PUT', self.name, key_name,
71 headers=headers, query_args=query_args) 99 headers=headers, query_args=query_args)
72 body = response.read() 100 body = response.read()
73 if response.status != 200: 101 if response.status != 200:
74 raise self.connection.provider.storage_response_error( 102 raise self.connection.provider.storage_response_error(
75 response.status, response.reason, body) 103 response.status, response.reason, body)
76 104
105 def set_canned_acl(self, acl_str, key_name='', headers=None,
106 version_id=None):
107 """sets or changes a bucket's acl to a predefined (canned) value.
108 We include a version_id argument to support a polymorphic
109 interface for callers, however, version_id is not relevant for
110 Google Cloud Storage buckets and is therefore ignored here."""
111 return self.set_canned_acl_helper(acl_str, key_name, headers,
112 STANDARD_ACL)
113
114 def set_def_canned_acl(self, acl_str, key_name='', headers=None):
115 """sets or changes a bucket's default object acl to a predefined
116 (canned) value"""
117 return self.set_canned_acl_helper(acl_str, key_name, headers,
118 query_args=DEF_OBJ_ACL)
119
120 def set_def_xml_acl(self, acl_str, key_name='', headers=None):
121 """sets or changes a bucket's default object"""
122 return self.set_xml_acl(acl_str, key_name, headers,
123 query_args=DEF_OBJ_ACL)
124
77 # Method with same signature as boto.s3.bucket.Bucket.add_email_grant(), 125 # Method with same signature as boto.s3.bucket.Bucket.add_email_grant(),
78 # to allow polymorphic treatment at application layer. 126 # to allow polymorphic treatment at application layer.
79 def add_email_grant(self, permission, email_address, 127 def add_email_grant(self, permission, email_address,
80 recursive=False, headers=None): 128 recursive=False, headers=None):
81 """ 129 """
82 Convenience method that provides a quick way to add an email grant 130 Convenience method that provides a quick way to add an email grant
83 to a bucket. This method retrieves the current ACL, creates a new 131 to a bucket. This method retrieves the current ACL, creates a new
84 grant based on the parameters passed in, adds that grant to the ACL 132 grant based on the parameters passed in, adds that grant to the ACL
85 and then PUT's the new ACL back to GS. 133 and then PUT's the new ACL back to GS.
86 134
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 xml_str = (xml_str + '<LogBucket>%s</LogBucket>' % target_bucket) 251 xml_str = (xml_str + '<LogBucket>%s</LogBucket>' % target_bucket)
204 if target_prefix: 252 if target_prefix:
205 xml_str = (xml_str + 253 xml_str = (xml_str +
206 '<LogObjectPrefix>%s</LogObjectPrefix>' % target_prefix) 254 '<LogObjectPrefix>%s</LogObjectPrefix>' % target_prefix)
207 if canned_acl: 255 if canned_acl:
208 xml_str = (xml_str + 256 xml_str = (xml_str +
209 '<PredefinedAcl>%s</PredefinedAcl>' % canned_acl) 257 '<PredefinedAcl>%s</PredefinedAcl>' % canned_acl)
210 xml_str = xml_str + '</Logging>' 258 xml_str = xml_str + '</Logging>'
211 259
212 self.set_subresource('logging', xml_str, headers=headers) 260 self.set_subresource('logging', xml_str, headers=headers)
OLDNEW
« no previous file with comments | « boto/gs/acl.py ('k') | boto/mturk/connection.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698