# Tony Mack <tmack@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: Messages.py,v 1.3 2006/11/10 17:06:35 mlhuang Exp $
-#
from PLC.Parameter import Parameter
from PLC.Table import Row, Table
+from PLC.Filter import Filter
+from PLC.Storage.AlchemyObject import AlchemyObj
-class Message(Row):
+class Message(AlchemyObj):
"""
- Representation of a row in the messages table.
+ Representation of a row in the messages table.
"""
-
- table_name = 'messages'
- primary_key = 'message_id'
+
+ tablename = 'messages'
fields = {
- 'message_id': Parameter(str, "Message identifier"),
+ 'message_id': Parameter(str, "Message identifier", primary_key=True),
'subject': Parameter(str, "Message summary", nullok = True),
'template': Parameter(str, "Message template", nullok = True),
'enabled': Parameter(bool, "Message is enabled"),
}
-
-class Messages(Table):
- """
- Representation of row(s) from the messages table in the database.
- """
- def __init__(self, api, message_ids, enabled = None):
- Table.__init__(self, api, Message)
-
- sql = "SELECT %s from messages WHERE True" % \
- ", ".join(Message.fields)
+ def sync(self, commit=True, validate=True):
+ AlchemyObj.sync(self, commit, validate)
+ if 'message_id' not in self:
+ # Before a new slice is added, delete expired slices
+ #expired = Slices(self.api, expires = -int(time.time()))
+ #for slice in expired:
+ # slice.delete(commit)
+ AlchemyObj.insert(self, dict(self))
+ else:
+ AlchemyObj.update(self, {'message_id': self['message_id']}, dict(self))
- if message_ids:
- sql += " AND message_id IN (%s)" % ", ".join(map(api.db.quote, message_ids))
+ def delete(self, commit = True):
+ assert 'message_id' in self
+ AlchemyObj.delete(self, dict(self))
- if enabled is not None:
- sql += " AND enabled IS %s" % enabled
+class Messages(list):
+ """
+ Representation of row(s) from the messages table in the database.
+ """
- self.selectall(sql)
+ def __init__(self, api, message_filter = None, columns = None, enabled = None):
+ if not message_filter:
+ messages = Message().select()
+ if isinstance(message_filter, (list, tuple, set, int, long)):
+ messages = Message().select(filter={'message_id': message_filter})
+ elif isinstance(message_filter, dict):
+ messages = Message().select(filter=message_filter)
+ else:
+ raise PLCInvalidArgument, "Wrong message filter %r"%message_filter
+
+ for message in messages:
+ self.append(message)