~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-22 11:01:25 UTC
  • Revision ID: william.grant@canonical.com-20120122110125-gd5wzvh60fnm5mrj
Template messages yay.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
    TIME_UUID_TYPE,
29
29
    )
30
30
 
31
 
from grackle.server.cassandra import workaround_1779
32
 
 
33
 
 
34
 
def create_schema(host, keyspace, clobber=False):
 
31
from grackle.cassandra import workaround_1779
 
32
 
 
33
 
 
34
def create_schema(host, keyspace, clobber=False, create_keyspace=False):
35
35
    mgr = SystemManager(host)
36
36
 
 
37
    if create_keyspace:
 
38
        mgr.create_keyspace(keyspace, replication_factor=1)
 
39
 
37
40
    if clobber:
38
41
        for cf in mgr.get_keyspace_column_families(keyspace):
39
42
            mgr.drop_column_family(keyspace, cf)
51
54
        mgr.close()
52
55
 
53
56
 
 
57
def _parse_message(message):
 
58
    """Get a date and dict of an RFC822 message."""
 
59
    parsed = email.parser.Parser().parsestr(message)
 
60
    message_dict = {}
 
61
 
 
62
    for key in ('from', 'to', 'subject', 'message-id'):
 
63
        value = parsed.get(key, None)
 
64
        if value is not None:
 
65
            message_dict[key] = value
 
66
 
 
67
    date = parsed.get('date')
 
68
    if date is not None:
 
69
        try:
 
70
            pdate = parsedate_tz(date)
 
71
            date = datetime.datetime(
 
72
                *pdate[:6],
 
73
                tzinfo=dateutil.tz.tzoffset('', pdate[9]))
 
74
        except ValueError:
 
75
            pass
 
76
    message_dict['date'] = date.isoformat() if date is not None else None
 
77
 
 
78
    return date, message_dict
 
79
 
 
80
 
54
81
class CassandraConnection(object):
55
82
 
56
83
    def __init__(self, keyspace, host):
68
95
 
69
96
    def add_message(self, archive_uuid, message):
70
97
        message_uuid = uuid.uuid4()
71
 
        parsed = email.parser.Parser().parsestr(message)
72
 
        date = parsed.get('date')
73
 
        if date is not None:
74
 
            try:
75
 
                pdate = parsedate_tz(date)
76
 
                date = datetime.datetime(
77
 
                    *pdate[:6],
78
 
                    tzinfo=dateutil.tz.tzoffset('', pdate[9]))
79
 
            except ValueError:
80
 
                pass
81
 
        self.messages.insert(
82
 
            message_uuid,
83
 
            {'date_created': datetime.datetime.utcnow().isoformat() + 'Z',
84
 
             'content': message,
85
 
             'from': parsed.get('From'),
86
 
             'to': parsed.get('To'),
87
 
             'subject': parsed.get('Subject'),
88
 
             'date': date.isoformat() if date is not None else None,
89
 
             'message_id': parsed.get('Message-ID'),
90
 
             })
 
98
        message_date, message_dict = _parse_message(message)
 
99
        message_dict['content'] = message
 
100
        message_dict['date_created'] = (
 
101
            datetime.datetime.utcnow().isoformat() + 'Z')
 
102
        self.messages.insert(message_uuid, message_dict)
91
103
        self.archive_messages.insert(
92
104
            archive_uuid,
93
 
            {date.astimezone(dateutil.tz.tzutc()): message_uuid})
 
105
            {message_date.astimezone(dateutil.tz.tzutc()): message_uuid})
94
106
        logging.debug(
95
 
            'Imported %s into %s' % (parsed.get('Message-ID'), archive_uuid))
 
107
            'Imported %s into %s'
 
108
            % (message_dict.get('message-id', None), archive_uuid))
96
109
        return message_uuid
97
110
 
98
111
    def _format_message(self, message):
99
112
        return {
100
 
            'date': message['date'],
101
 
            'from': message['from'],
102
 
            'subject': message['subject'],
 
113
            'date': message.get('date'),
 
114
            'from': message.get('from'),
 
115
            'subject': message.get('subject'),
103
116
            }
104
117
 
105
118
    def get_messages(self, archive_uuid, order, count, start):