6
by Aaron Bentley
Use constants. |
1 |
import httplib |
6.1.5
by Aaron Bentley
Start working on GET. |
2 |
import simplejson |
3 |
from urlparse import urlunparse |
|
4 |
from urllib import ( |
|
5 |
quote, |
|
6 |
urlencode, |
|
7 |
)
|
|
8 |
||
6.1.1
by Aaron Bentley
Fix URLs etc. |
9 |
|
6.1.15
by Aaron Bentley
Test unsupported orders. |
10 |
class UnsupportedOrder(Exception): |
11 |
pass
|
|
12 |
||
6.1.1
by Aaron Bentley
Fix URLs etc. |
13 |
|
14 |
class GrackleClient: |
|
15 |
||
16 |
def __init__(self, host, port): |
|
17 |
self.host = host |
|
18 |
self.port = port |
|
6.1.5
by Aaron Bentley
Start working on GET. |
19 |
self.netloc = '%s:%d' % (host, port) |
20 |
||
6.1.12
by Aaron Bentley
archive_name -> archive_id |
21 |
def archive_url(self, archive_id, query): |
22 |
path = '/%s' % quote(archive_id) |
|
6.1.9
by Aaron Bentley
Test filtering by message-id. |
23 |
query_string = urlencode(query) |
24 |
return urlunparse(('http', self.netloc, path, '', query_string, '')) |
|
6.1.5
by Aaron Bentley
Start working on GET. |
25 |
|
26 |
def _get_connection(self): |
|
27 |
return httplib.HTTPConnection(self.host, self.port) |
|
28 |
||
6.1.12
by Aaron Bentley
archive_name -> archive_id |
29 |
def _verb_archive(self, verb, archive_id, query, body=None): |
30 |
url = self.archive_url(archive_id, query) |
|
6.1.5
by Aaron Bentley
Start working on GET. |
31 |
connection = self._get_connection() |
32 |
connection.request(verb, url, body) |
|
33 |
return connection.getresponse() |
|
34 |
||
6.1.12
by Aaron Bentley
archive_name -> archive_id |
35 |
def put_message(self, archive_id, key, file_obj): |
6.1.5
by Aaron Bentley
Start working on GET. |
36 |
response = self._verb_archive( |
6.1.12
by Aaron Bentley
archive_name -> archive_id |
37 |
'POST', archive_id, {'key': key}, file_obj.read()) |
6.1.1
by Aaron Bentley
Fix URLs etc. |
38 |
data = response.read() |
39 |
if response.status == httplib.BAD_REQUEST: |
|
40 |
raise Exception('wtf') |
|
41 |
elif response.status == httplib.CREATED: |
|
42 |
return
|
|
43 |
else: |
|
44 |
raise Exception('!!') |
|
6.1.5
by Aaron Bentley
Start working on GET. |
45 |
|
6.1.13
by Aaron Bentley
Implement memo/limit support. |
46 |
def get_messages(self, archive_id, message_ids=None, limit=None, |
6.1.14
by Aaron Bentley
Support order by date |
47 |
memo=None, order=None): |
6.1.5
by Aaron Bentley
Start working on GET. |
48 |
parameters = {} |
49 |
if message_ids is not None: |
|
6.1.7
by Aaron Bentley
Retrieve messages. |
50 |
parameters['message_ids'] = message_ids |
6.1.13
by Aaron Bentley
Implement memo/limit support. |
51 |
if limit is not None: |
52 |
parameters['limit'] = limit |
|
53 |
if memo is not None: |
|
54 |
parameters['memo'] = memo |
|
6.1.14
by Aaron Bentley
Support order by date |
55 |
if order is not None: |
56 |
parameters['order'] = order |
|
6.1.5
by Aaron Bentley
Start working on GET. |
57 |
query = {'parameters': simplejson.dumps(parameters)} |
6.1.12
by Aaron Bentley
archive_name -> archive_id |
58 |
response = self._verb_archive('GET', archive_id, query) |
6.1.15
by Aaron Bentley
Test unsupported orders. |
59 |
if response.status == httplib.BAD_REQUEST: |
60 |
raise UnsupportedOrder |
|
6.1.7
by Aaron Bentley
Retrieve messages. |
61 |
data = response.read() |
62 |
return simplejson.loads(data) |