Merge lp:~djfroofy/txaws/485533-reqestpayment into lp:txaws

Proposed by Drew Smathers
Status: Merged
Merged at revision: 76
Proposed branch: lp:~djfroofy/txaws/485533-reqestpayment
Merge into: lp:txaws
Diff against target: 176 lines (+121/-0)
4 files modified
txaws/s3/client.py (+24/-0)
txaws/s3/model.py (+24/-0)
txaws/s3/tests/test_client.py (+66/-0)
txaws/testing/payload.py (+7/-0)
To merge this branch: bzr merge lp:~djfroofy/txaws/485533-reqestpayment
Reviewer Review Type Date Requested Status
Jamu Kakar Approve
Review via email: mp+35895@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jamu Kakar (jkakar) wrote :

Nice work, +1! As before, I made some minor cosmetic changes before
merging.

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 21:57:56 +0000
@@ -221,6 +221,30 @@
221 return query.submit()221 return query.submit()
222222
223223
224 def put_request_payment(self, bucket, payer):
225 """
226 Set request payment configuration on bucket to payer.
227 """
228 data = model.RequestPayment(payer).to_xml()
229 query = self.query_factory(
230 action='PUT', creds=self.creds, endpoint=self.endpoint,
231 bucket=bucket, object_name='?requestPayment', data=data)
232 return query.submit()
233
234 def get_request_payment(self, bucket):
235 """
236 Get the request payment configuration on a bucket.
237 """
238 query = self.query_factory(
239 action='GET', creds=self.creds, endpoint=self.endpoint,
240 bucket=bucket, object_name='?requestPayment')
241 return query.submit().addCallback(self._parse_get_request_payment)
242
243
244 def _parse_get_request_payment(self, xml_bytes):
245 return model.RequestPayment.from_xml(xml_bytes).payer
246
247
224class Query(BaseQuery):248class Query(BaseQuery):
225 """A query for submission to the S3 service."""249 """A query for submission to the S3 service."""
226250
227251
=== modified file 'txaws/s3/model.py'
--- txaws/s3/model.py 2009-11-23 00:55:44 +0000
+++ txaws/s3/model.py 2010-09-17 21:57:56 +0000
@@ -1,3 +1,5 @@
1from txaws.util import XML
2
1class Bucket(object):3class Bucket(object):
2 """4 """
3 An Amazon S3 storage bucket.5 An Amazon S3 storage bucket.
@@ -49,3 +51,25 @@
49 S3 returns file chunks, 10 MB at a time, until the entire file is returned.51 S3 returns file chunks, 10 MB at a time, until the entire file is returned.
50 These chunks need to be assembled once they are all returned.52 These chunks need to be assembled once they are all returned.
51 """53 """
54
55class RequestPayment(object):
56
57 payer_choices = ('Requester', 'BucketOwner')
58
59 def __init__(self, payer):
60 if payer not in self.payer_choices:
61 raise ValueError('Invalid value for payer: `%s`. Must be one of %s' %
62 (payer, ','.join(self.payer_choices)))
63 self.payer = payer
64
65 def to_xml(self):
66 return ('<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">\n'
67 ' <Payer>%s</Payer>\n'
68 '</RequestPaymentConfiguration>' % self.payer)
69
70 @classmethod
71 def from_xml(cls, xml_bytes):
72 root = XML(xml_bytes)
73 return cls(root.findtext('Payer'))
74
75
5276
=== 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 21:57:56 +0000
@@ -2,6 +2,7 @@
22
3from txaws.credentials import AWSCredentials3from txaws.credentials import AWSCredentials
4from txaws.s3 import client4from txaws.s3 import client
5from txaws.s3 import model
5from txaws.service import AWSServiceEndpoint6from txaws.service import AWSServiceEndpoint
6from txaws.testing import payload7from txaws.testing import payload
7from txaws.testing.base import TXAWSTestCase8from txaws.testing.base import TXAWSTestCase
@@ -196,6 +197,64 @@
196 s3 = client.S3Client(creds, query_factory=StubQuery)197 s3 = client.S3Client(creds, query_factory=StubQuery)
197 return s3.delete_bucket("mybucket")198 return s3.delete_bucket("mybucket")
198199
200
201 def test_put_request_payment(self):
202
203 class StubQuery(client.Query):
204
205 def __init__(query, action, creds, endpoint, bucket=None,
206 object_name=None, data=None, content_type=None,
207 metadata=None):
208 super(StubQuery, query).__init__(
209 action=action, creds=creds, bucket=bucket,
210 object_name=object_name, data=data,
211 content_type=content_type, metadata=metadata)
212 self.assertEqual(action, "PUT")
213 self.assertEqual(creds.access_key, "foo")
214 self.assertEqual(creds.secret_key, "bar")
215 self.assertEqual(query.bucket, "mybucket")
216 self.assertEqual(query.object_name, "?requestPayment")
217 self.assertEqual(query.data, ('<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">\n'
218 ' <Payer>Requester</Payer>\n'
219 '</RequestPaymentConfiguration>'))
220 self.assertEqual(query.metadata, None)
221
222 def submit(query):
223 return succeed(None)
224
225 creds = AWSCredentials("foo", "bar")
226 s3 = client.S3Client(creds, query_factory=StubQuery)
227 return s3.put_request_payment("mybucket", "Requester")
228
229 def test_data_request_payment(self):
230
231 class StubQuery(client.Query):
232
233 def __init__(query, action, creds, endpoint, bucket=None,
234 object_name=None, data=None, content_type=None,
235 metadata=None):
236 super(StubQuery, query).__init__(
237 action=action, creds=creds, bucket=bucket,
238 object_name=object_name, data=data,
239 content_type=content_type, metadata=metadata)
240 self.assertEqual(action, "GET")
241 self.assertEqual(creds.access_key, "foo")
242 self.assertEqual(creds.secret_key, "bar")
243 self.assertEqual(query.bucket, "mybucket")
244 self.assertEqual(query.object_name, "?requestPayment")
245 self.assertEqual(query.metadata, None)
246
247 def submit(query):
248 return succeed(payload.sample_request_payment)
249
250 def check_request_payment(result):
251 self.assertEquals(result, 'Requester')
252
253 creds = AWSCredentials("foo", "bar")
254 s3 = client.S3Client(creds, query_factory=StubQuery)
255 return s3.get_request_payment("mybucket").addCallback(check_request_payment)
256
257
199 def test_put_object(self):258 def test_put_object(self):
200259
201 class StubQuery(client.Query):260 class StubQuery(client.Query):
@@ -474,3 +533,10 @@
474533
475 def test_content_md5(self):534 def test_content_md5(self):
476 self.assertEqual(calculate_md5("somedata"), "rvr3UC1SmUw7AZV2NqPN0g==")535 self.assertEqual(calculate_md5("somedata"), "rvr3UC1SmUw7AZV2NqPN0g==")
536
537 def test_request_payment_enum(self):
538 model.RequestPayment('Requester')
539 model.RequestPayment('BucketOwner')
540 self.assertRaises(ValueError, model.RequestPayment, 'Bob')
541
542
477543
=== modified file 'txaws/testing/payload.py'
--- txaws/testing/payload.py 2010-07-20 10:15:48 +0000
+++ txaws/testing/payload.py 2010-09-17 21:57:56 +0000
@@ -878,6 +878,13 @@
878</ListBucketResult>878</ListBucketResult>
879""" % (version.s3_api,)879""" % (version.s3_api,)
880880
881
882sample_request_payment = """\
883<?xml version="1.0" encoding="UTF-8"?>
884<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
885 <Payer>Requester</Payer>
886</RequestPaymentConfiguration>"""
887
881sample_s3_signature_mismatch = """\888sample_s3_signature_mismatch = """\
882<?xml version="1.0" encoding="UTF-8"?>889<?xml version="1.0" encoding="UTF-8"?>
883<Error>890<Error>

Subscribers

People subscribed via source and target branches