Setting tag plcapi-5.4-2
[plcapi.git] / PLC / Messages.py
1 #
2 # Functions for interacting with the messages table in the database
3 #
4 # Tony Mack <tmack@cs.princeton.edu>
5 # Copyright (C) 2006 The Trustees of Princeton University
6 #
7
8 from PLC.Parameter import Parameter
9 from PLC.Table import Row, Table
10 from PLC.Filter import Filter
11
12 class Message(Row):
13     """
14     Representation of a row in the messages table.
15     """
16
17     table_name = 'messages'
18     primary_key = 'message_id'
19     fields = {
20         'message_id': Parameter(str, "Message identifier"),
21         'subject': Parameter(str, "Message summary", nullok = True),
22         'template': Parameter(str, "Message template", nullok = True),
23         'enabled': Parameter(bool, "Message is enabled"),
24         }
25
26 class Messages(Table):
27     """
28     Representation of row(s) from the messages table in the database.
29     """
30
31     def __init__(self, api, message_filter = None, columns = None, enabled = None):
32         Table.__init__(self, api, Message, columns)
33
34         sql = "SELECT %s from messages WHERE True" % \
35               ", ".join(self.columns)
36
37         if enabled is not None:
38             sql += " AND enabled IS %s" % enabled
39
40         if message_filter is not None:
41             if isinstance(message_filter, (list, tuple, set, int, long)):
42                 message_filter = Filter(Message.fields, {'message_id': message_filter})
43                 sql += " AND (%s) %s" % message_filter.sql(api, "OR")
44             elif isinstance(message_filter, dict):
45                 message_filter = Filter(Message.fields, message_filter)
46                 sql += " AND (%s) %s" % message_filter.sql(api, "AND")
47             else:
48                 raise PLCInvalidArgument, "Wrong message filter %r"%message_filter
49
50         self.selectall(sql)