~unity-2d-team/unity-2d/Shell-MultiMonitor

« back to all changes in this revision

Viewing changes to grackle/model.py

  • Committer: William Grant
  • Date: 2012-01-23 02:43:10 UTC
  • Revision ID: william.grant@canonical.com-20120123024310-ybh2zasa4x6lbky2
Some flexibility in formatting.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
import dateutil.tz
19
19
import email.parser
20
20
from email.utils import parsedate_tz
 
21
import functools
21
22
import logging
22
23
import time
23
24
import uuid
121
122
    return memo, start, finish
122
123
 
123
124
 
124
 
def _format_message(message):
125
 
    return {
126
 
        'date': message.get('date'),
127
 
        'from': message.get('from'),
128
 
        'subject': message.get('subject'),
129
 
        'message-id': message.get('message-id'),
130
 
        'content': message.get('content'),
131
 
        }
 
125
LEGAL_HEADERS = set([
 
126
    'date', 'from', 'subject', 'message-id',
 
127
    ])
 
128
 
 
129
 
 
130
def _format_message(want, message):
 
131
    data = {}
 
132
    for key in want:
 
133
        data[key] = message.get(key)
 
134
    return data
 
135
 
 
136
 
 
137
def _format_all(headers):
 
138
    assert not set(headers).difference(LEGAL_HEADERS)
 
139
    want = list(headers) + ['content']
 
140
    return want, functools.partial(_format_message, want)
 
141
 
 
142
 
 
143
FORMATS = {
 
144
    'all': _format_all,
 
145
    }
132
146
 
133
147
 
134
148
class CassandraConnection(object):
173
187
            return sequence[1:]
174
188
 
175
189
    def get_messages(self, archive_uuid, order, count, memo, backward=False,
176
 
                     start_date=None, finish_date=None):
 
190
                     start_date=None, finish_date=None, format='all',
 
191
                     headers=['from', 'date', 'subject', 'message-id']):
177
192
        if order in ("date", "-date"):
178
193
            reversed = order[0] == '-'
179
194
        else:
205
220
 
206
221
        # We've narrowed down the message references. Fetch the messages.
207
222
        ids = [v for k, v in pairs]
208
 
        messages = self.messages.multiget(
209
 
            ids, columns=['date', 'from', 'subject', 'message-id', 'content'])
 
223
 
 
224
        wanted_cols, func = FORMATS[format](headers)
 
225
        messages = self.messages.multiget(ids, columns=wanted_cols)
210
226
 
211
227
        return (
212
228
            str(pairs[0][0]),
213
 
            [_format_message(messages[id]) for id in ids],
 
229
            [func(messages[id]) for id in ids],
214
230
            str(pairs[-1][0]),
215
231
            )