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
1=== modified file 'txaws/s3/client.py'
2--- txaws/s3/client.py 2009-11-23 00:55:44 +0000
3+++ txaws/s3/client.py 2010-09-17 20:53:26 +0000
4@@ -178,7 +178,7 @@
5 common_prefixes)
6
7 def put_object(self, bucket, object_name, data, content_type=None,
8- metadata={}):
9+ metadata={}, amz_headers={}):
10 """
11 Put an object in a bucket.
12
13@@ -187,7 +187,7 @@
14 query = self.query_factory(
15 action="PUT", creds=self.creds, endpoint=self.endpoint,
16 bucket=bucket, object_name=object_name, data=data,
17- content_type=content_type, metadata=metadata)
18+ content_type=content_type, metadata=metadata, amz_headers=amz_headers)
19 return query.submit()
20
21 def get_object(self, bucket, object_name):
22@@ -225,13 +225,14 @@
23 """A query for submission to the S3 service."""
24
25 def __init__(self, bucket=None, object_name=None, data="",
26- content_type=None, metadata={}, *args, **kwargs):
27+ content_type=None, metadata={}, amz_headers={}, *args, **kwargs):
28 super(Query, self).__init__(*args, **kwargs)
29 self.bucket = bucket
30 self.object_name = object_name
31 self.data = data
32 self.content_type = content_type
33 self.metadata = metadata
34+ self.amz_headers = amz_headers
35 self.date = datetimeToString()
36 if not self.endpoint or not self.endpoint.host:
37 self.endpoint = AWSServiceEndpoint(S3_ENDPOINT)
38@@ -257,6 +258,8 @@
39 "Date": self.date}
40 for key, value in self.metadata.iteritems():
41 headers["x-amz-meta-" + key] = value
42+ for key, value in self.amz_headers.iteritems():
43+ headers["x-amz-" + key] = value
44 # Before we check if the content type is set, let's see if we can set
45 # it by guessing the the mimetype.
46 self.set_content_type()
47
48=== modified file 'txaws/s3/tests/test_client.py'
49--- txaws/s3/tests/test_client.py 2009-11-23 00:55:44 +0000
50+++ txaws/s3/tests/test_client.py 2010-09-17 20:53:26 +0000
51@@ -202,11 +202,12 @@
52
53 def __init__(query, action, creds, endpoint, bucket=None,
54 object_name=None, data=None, content_type=None,
55- metadata=None):
56+ metadata=None, amz_headers=None):
57 super(StubQuery, query).__init__(
58 action=action, creds=creds, bucket=bucket,
59 object_name=object_name, data=data,
60- content_type=content_type, metadata=metadata)
61+ content_type=content_type, metadata=metadata,
62+ amz_headers=amz_headers)
63 self.assertEqual(action, "PUT")
64 self.assertEqual(creds.access_key, "foo")
65 self.assertEqual(creds.secret_key, "bar")
66@@ -215,6 +216,7 @@
67 self.assertEqual(query.data, "some data")
68 self.assertEqual(query.content_type, "text/plain")
69 self.assertEqual(query.metadata, {"key": "some meta data"})
70+ self.assertEqual(query.amz_headers, {"acl": "public-read"})
71
72 def submit(query):
73 return succeed(None)
74@@ -223,7 +225,7 @@
75 s3 = client.S3Client(creds, query_factory=StubQuery)
76 return s3.put_object(
77 "mybucket", "objectname", "some data", content_type="text/plain",
78- metadata={"key": "some meta data"})
79+ metadata={"key": "some meta data"}, amz_headers={'acl':'public-read'})
80
81 def test_get_object(self):
82
83@@ -231,7 +233,7 @@
84
85 def __init__(query, action, creds, endpoint, bucket=None,
86 object_name=None, data=None, content_type=None,
87- metadata=None):
88+ metadata=None, amz_headers=None):
89 super(StubQuery, query).__init__(
90 action=action, creds=creds, bucket=bucket,
91 object_name=object_name, data=data,
92@@ -400,7 +402,7 @@
93 request = client.Query(
94 action="PUT", bucket="somebucket", object_name="object/name/here",
95 data=DATA, content_type="text/plain", metadata={"foo": "bar"},
96- creds=self.creds, endpoint=self.endpoint)
97+ amz_headers={"acl":"public-read"}, creds=self.creds, endpoint=self.endpoint)
98 request.sign = lambda headers: "TESTINGSIG="
99 self.assertEqual(request.action, "PUT")
100 headers = request.get_headers()
101@@ -411,7 +413,8 @@
102 "Content-Type": "text/plain",
103 "Content-Length": len(DATA),
104 "Content-MD5": DIGEST,
105- "x-amz-meta-foo": "bar"})
106+ "x-amz-meta-foo": "bar",
107+ "x-amz-acl": "public-read"})
108 self.assertEqual(request.data, "objectData")
109
110 def test_bucket_query(self):

Subscribers

People subscribed via source and target branches