Merge remote-tracking branch 'origin/pycurl' into planetlab-4_0-branch
[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 # $Id: Messages.py 5574 2007-10-25 20:33:17Z thierry $
8 #
9
10 from PLC.Parameter import Parameter
11 from PLC.Table import Row, Table
12 from PLC.Filter import Filter
13
14 class Message(Row):
15     """
16     Representation of a row in the messages table. 
17     """
18     
19     table_name = 'messages'
20     primary_key = 'message_id'
21     fields = {
22         'message_id': Parameter(str, "Message identifier"),
23         'subject': Parameter(str, "Message summary", nullok = True),
24         'template': Parameter(str, "Message template", nullok = True),
25         'enabled': Parameter(bool, "Message is enabled"),
26         }
27     
28 class Messages(Table):
29     """
30     Representation of row(s) from the messages table in the database. 
31     """
32
33     def __init__(self, api, message_filter = None, columns = None, enabled = None):
34         Table.__init__(self, api, Message, columns)
35     
36         sql = "SELECT %s from messages WHERE True" % \
37               ", ".join(self.columns)
38
39         if enabled is not None:
40             sql += " AND enabled IS %s" % enabled
41
42         if message_filter is not None:
43             if isinstance(message_filter, (list, tuple, set)):
44                 message_filter = Filter(Message.fields, {'message_id': message_filter})
45                 sql += " AND (%s) %s" % message_filter.sql(api, "OR")
46             elif isinstance(message_filter, dict):
47                 message_filter = Filter(Message.fields, message_filter)
48                 sql += " AND (%s) %s" % message_filter.sql(api, "AND")
49
50         self.selectall(sql)