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.
"""
- 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):
+ 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))
+
+ def delete(self, commit = True):
+ AlchemyObj.delete(self, dict(self))
+
+class Messages(list):
"""
Representation of row(s) from the messages table in the database.
"""
def __init__(self, api, message_filter = None, columns = None, enabled = None):
- Table.__init__(self, api, Message, columns)
-
- sql = "SELECT %s from messages WHERE True" % \
- ", ".join(self.columns)
-
- if enabled is not None:
- sql += " AND enabled IS %s" % enabled
-
- if message_filter is not None:
- if isinstance(message_filter, (list, tuple, set, int, long)):
- message_filter = Filter(Message.fields, {'message_id': message_filter})
- sql += " AND (%s) %s" % message_filter.sql(api, "OR")
- elif isinstance(message_filter, dict):
- message_filter = Filter(Message.fields, message_filter)
- sql += " AND (%s) %s" % message_filter.sql(api, "AND")
- else:
- raise PLCInvalidArgument, "Wrong message filter %r"%message_filter
-
- self.selectall(sql)
+ 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)