68
83
archive = os.path.split(path)[1]
69
84
query = parse_qs(query_string)
70
85
parameters = simplejson.loads(query['parameters'][0])
71
messages = [m for m in self.server.messages[archive] if 'message_ids'
72
not in parameters or m['message_id'] in
73
parameters['message_ids']]
74
if 'order' in parameters:
75
if parameters['order'] not in SUPPORTED_ORDERS:
86
order = parameters.get('order')
87
messages = self.server.messages[archive]
88
if order is not None :
89
if order not in SUPPORTED_ORDERS:
76
90
self.send_response(httplib.BAD_REQUEST)
77
91
self.wfile.write('Unsupported order')
79
messages.sort(key=lambda m: m[parameters['order']])
93
elif order == 'thread_subject':
94
threaded = threaded_messages(messages)
96
threaded.sort(key=lambda t: t[0]['subject'])
97
for thread in threaded:
98
messages.extend(thread)
101
self.server.messages[archive], key=lambda m: m[order])
102
messages = [m for m in messages
103
if 'message_ids' not in parameters or
104
m['message_id'] in parameters['message_ids']]
80
105
self.send_response(httplib.OK)
81
106
self.end_headers()
82
107
limit = parameters.get('limit', 100)
168
193
messages.extend(response['messages'])
169
194
self.assertMessageIDs(['foo', 'bar'], messages)
171
def test_get_messages_date_order(self):
196
def get_messages_member_order_test(self, key):
172
197
client = GrackleClient('localhost', 8439)
173
198
with fake_grackle_service(client,
174
{'baz': [{'message_id': 'foo', 'date': '2011-03-25'},
175
{'message_id': 'bar', 'date': '2011-03-24'}]}):
199
{'baz': [{'message_id': 'foo', key: '2011-03-25'},
200
{'message_id': 'bar', key: '2011-03-24'}]}):
176
201
response = client.get_messages('baz')
177
202
self.assertIDOrder(['foo', 'bar'], response['messages'])
178
response = client.get_messages('baz', order='date')
203
response = client.get_messages('baz', order=key)
179
204
self.assertIDOrder(['bar', 'foo'], response['messages'])
206
def test_get_messages_date_order(self):
207
self.get_messages_member_order_test('date')
209
def test_get_messages_author_order(self):
210
self.get_messages_member_order_test('author')
212
def test_get_messages_subject_order(self):
213
self.get_messages_member_order_test('subject')
215
def test_get_messages_thread_subject_order(self):
216
client = GrackleClient('localhost', 8439)
217
with fake_grackle_service(client, {'baz': [
218
{'message_id': 'bar', 'subject': 'y'},
219
{'message_id': 'qux', 'subject': 'z'},
220
{'message_id': 'foo', 'subject': 'x', 'in_reply_to': 'qux'},
222
response = client.get_messages('baz')
223
self.assertIDOrder(['bar', 'qux', 'foo'], response['messages'])
224
response = client.get_messages('baz', order='subject')
225
self.assertIDOrder(['foo', 'bar', 'qux'], response['messages'])
226
response = client.get_messages('baz', order='thread_subject')
227
self.assertIDOrder(['bar', 'qux', 'foo'], response['messages'])
181
229
def test_get_messages_unsupported_order(self):
182
230
client = GrackleClient('localhost', 8439)
183
231
with fake_grackle_service(client,