Merge lp:~djfroofy/txaws/640098-amazon-headers into lp:txaws

Proposed by Drew Smathers
Status: Merged
Merged at revision: 73
Proposed branch: lp:~djfroofy/txaws/640098-amazon-headers
Merge into: lp:txaws
Diff against target: 110 lines (+15/-9)
2 files modified
txaws/s3/client.py (+6/-3)
txaws/s3/tests/test_client.py (+9/-6)
To merge this branch: bzr merge lp:~djfroofy/txaws/640098-amazon-headers
Reviewer Review Type Date Requested Status
Jamu Kakar Approve
Review via email: mp+35880@code.launchpad.net

Description of the change

This allows passing amazon headers (e.g. {'acl':'public-read'}) through s3 client put_object().

To post a comment you must log in.
Revision history for this message
Jamu Kakar (jkakar) wrote :

Thanks for this, sorry for taking so long to review and merge it.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'txaws/s3/client.py'
--- txaws/s3/client.py 2009-11-23 00:55:44 +0000
+++ txaws/s3/client.py 2010-09-17 20:53:26 +0000
@@ -178,7 +178,7 @@
178 common_prefixes)178 common_prefixes)
179179
180 def put_object(self, bucket, object_name, data, content_type=None,180 def put_object(self, bucket, object_name, data, content_type=None,
181 metadata={}):181 metadata={}, amz_headers={}):
182 """182 """
183 Put an object in a bucket.183 Put an object in a bucket.
184184
@@ -187,7 +187,7 @@
187 query = self.query_factory(187 query = self.query_factory(
188 action="PUT", creds=self.creds, endpoint=self.endpoint,188 action="PUT", creds=self.creds, endpoint=self.endpoint,
189 bucket=bucket, object_name=object_name, data=data,189 bucket=bucket, object_name=object_name, data=data,
190 content_type=content_type, metadata=metadata)190 content_type=content_type, metadata=metadata, amz_headers=amz_headers)
191 return query.submit()191 return query.submit()
192192
193 def get_object(self, bucket, object_name):193 def get_object(self, bucket, object_name):
@@ -225,13 +225,14 @@
225 """A query for submission to the S3 service."""225 """A query for submission to the S3 service."""
226226
227 def __init__(self, bucket=None, object_name=None, data="",227 def __init__(self, bucket=None, object_name=None, data="",
228 content_type=None, metadata={}, *args, **kwargs):228 content_type=None, metadata={}, amz_headers={}, *args, **kwargs):
229 super(Query, self).__init__(*args, **kwargs)229 super(Query, self).__init__(*args, **kwargs)
230 self.bucket = bucket230 self.bucket = bucket
231 self.object_name = object_name231 self.object_name = object_name
232 self.data = data232 self.data = data
233 self.content_type = content_type233 self.content_type = content_type
234 self.metadata = metadata234 self.metadata = metadata
235 self.amz_headers = amz_headers
235 self.date = datetimeToString()236 self.date = datetimeToString()
236 if not self.endpoint or not self.endpoint.host:237 if not self.endpoint or not self.endpoint.host:
237 self.endpoint = AWSServiceEndpoint(S3_ENDPOINT)238 self.endpoint = AWSServiceEndpoint(S3_ENDPOINT)
@@ -257,6 +258,8 @@
257 "Date": self.date}258 "Date": self.date}
258 for key, value in self.metadata.iteritems():259 for key, value in self.metadata.iteritems():
259 headers["x-amz-meta-" + key] = value260 headers["x-amz-meta-" + key] = value
261 for key, value in self.amz_headers.iteritems():
262 headers["x-amz-" + key] = value
260 # Before we check if the content type is set, let's see if we can set263 # Before we check if the content type is set, let's see if we can set
261 # it by guessing the the mimetype.264 # it by guessing the the mimetype.
262 self.set_content_type()265 self.set_content_type()
263266
=== modified file 'txaws/s3/tests/test_client.py'
--- txaws/s3/tests/test_client.py 2009-11-23 00:55:44 +0000
+++ txaws/s3/tests/test_client.py 2010-09-17 20:53:26 +0000
@@ -202,11 +202,12 @@
202202
203 def __init__(query, action, creds, endpoint, bucket=None,203 def __init__(query, action, creds, endpoint, bucket=None,
204 object_name=None, data=None, content_type=None,204 object_name=None, data=None, content_type=None,
205 metadata=None):205 metadata=None, amz_headers=None):
206 super(StubQuery, query).__init__(206 super(StubQuery, query).__init__(
207 action=action, creds=creds, bucket=bucket,207 action=action, creds=creds, bucket=bucket,
208 object_name=object_name, data=data,208 object_name=object_name, data=data,
209 content_type=content_type, metadata=metadata)209 content_type=content_type, metadata=metadata,
210 amz_headers=amz_headers)
210 self.assertEqual(action, "PUT")211 self.assertEqual(action, "PUT")
211 self.assertEqual(creds.access_key, "foo")212 self.assertEqual(creds.access_key, "foo")
212 self.assertEqual(creds.secret_key, "bar")213 self.assertEqual(creds.secret_key, "bar")
@@ -215,6 +216,7 @@
215 self.assertEqual(query.data, "some data")216 self.assertEqual(query.data, "some data")
216 self.assertEqual(query.content_type, "text/plain")217 self.assertEqual(query.content_type, "text/plain")
217 self.assertEqual(query.metadata, {"key": "some meta data"})218 self.assertEqual(query.metadata, {"key": "some meta data"})
219 self.assertEqual(query.amz_headers, {"acl": "public-read"})
218220
219 def submit(query):221 def submit(query):
220 return succeed(None)222 return succeed(None)
@@ -223,7 +225,7 @@
223 s3 = client.S3Client(creds, query_factory=StubQuery)225 s3 = client.S3Client(creds, query_factory=StubQuery)
224 return s3.put_object(226 return s3.put_object(
225 "mybucket", "objectname", "some data", content_type="text/plain",227 "mybucket", "objectname", "some data", content_type="text/plain",
226 metadata={"key": "some meta data"})228 metadata={"key": "some meta data"}, amz_headers={'acl':'public-read'})
227229
228 def test_get_object(self):230 def test_get_object(self):
229231
@@ -231,7 +233,7 @@
231233
232 def __init__(query, action, creds, endpoint, bucket=None,234 def __init__(query, action, creds, endpoint, bucket=None,
233 object_name=None, data=None, content_type=None,235 object_name=None, data=None, content_type=None,
234 metadata=None):236 metadata=None, amz_headers=None):
235 super(StubQuery, query).__init__(237 super(StubQuery, query).__init__(
236 action=action, creds=creds, bucket=bucket,238 action=action, creds=creds, bucket=bucket,
237 object_name=object_name, data=data,239 object_name=object_name, data=data,
@@ -400,7 +402,7 @@
400 request = client.Query(402 request = client.Query(
401 action="PUT", bucket="somebucket", object_name="object/name/here",403 action="PUT", bucket="somebucket", object_name="object/name/here",
402 data=DATA, content_type="text/plain", metadata={"foo": "bar"},404 data=DATA, content_type="text/plain", metadata={"foo": "bar"},
403 creds=self.creds, endpoint=self.endpoint)405 amz_headers={"acl":"public-read"}, creds=self.creds, endpoint=self.endpoint)
404 request.sign = lambda headers: "TESTINGSIG="406 request.sign = lambda headers: "TESTINGSIG="
405 self.assertEqual(request.action, "PUT")407 self.assertEqual(request.action, "PUT")
406 headers = request.get_headers()408 headers = request.get_headers()
@@ -411,7 +413,8 @@
411 "Content-Type": "text/plain",413 "Content-Type": "text/plain",
412 "Content-Length": len(DATA),414 "Content-Length": len(DATA),
413 "Content-MD5": DIGEST,415 "Content-MD5": DIGEST,
414 "x-amz-meta-foo": "bar"})416 "x-amz-meta-foo": "bar",
417 "x-amz-acl": "public-read"})
415 self.assertEqual(request.data, "objectData")418 self.assertEqual(request.data, "objectData")
416419
417 def test_bucket_query(self):420 def test_bucket_query(self):

Subscribers

People subscribed via source and target branches