diff options
| author | Barry Warsaw | 2007-11-10 13:14:51 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2007-11-10 13:14:51 -0500 |
| commit | 58b8ca1c929c5bc0ea1b36fb5e6e683a8830e963 (patch) | |
| tree | 4d87cdececa390c0bcc1460f60c6102e0e81f87d /Mailman/database/messagestore.py | |
| parent | 3d7b9702e4ff97f86025f8d7ae9b29220f5bf264 (diff) | |
| download | mailman-58b8ca1c929c5bc0ea1b36fb5e6e683a8830e963.tar.gz mailman-58b8ca1c929c5bc0ea1b36fb5e6e683a8830e963.tar.zst mailman-58b8ca1c929c5bc0ea1b36fb5e6e683a8830e963.zip | |
Diffstat (limited to 'Mailman/database/messagestore.py')
| -rw-r--r-- | Mailman/database/messagestore.py | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/Mailman/database/messagestore.py b/Mailman/database/messagestore.py index 87f2fc828..7c90918ac 100644 --- a/Mailman/database/messagestore.py +++ b/Mailman/database/messagestore.py @@ -68,10 +68,9 @@ class MessageStore: # providing a unique serial number, but to get this information, we # have to use a straight insert instead of relying on Elixir to create # the object. - result = Message.table.insert().execute( - hash=hash32, path=relpath, message_id=message_id) + row = Message(hash=hash32, path=relpath, message_id=message_id) # Add the additional header. - seqno = result.last_inserted_ids()[0] + seqno = row.id del message['X-List-Sequence-Number'] message['X-List-Sequence-Number'] = str(seqno) # Now calculate the full file system path. @@ -97,11 +96,21 @@ class MessageStore: return pickle.load(fp) def get_messages_by_message_id(self, message_id): - for msgrow in Message.query.filter_by(message_id=message_id): + # Avoid circular imports. + from Mailman.database.model.message import Message + for msgrow in config.db.store.find(Message, message_id=message_id): yield self._msgobj(msgrow) def get_messages_by_hash(self, hash): - for msgrow in Message.query.filter_by(hash=hash): + # Avoid circular imports. + from Mailman.database.model.message import Message + # It's possible the hash came from a message header, in which case it + # will be a Unicode. However when coming from source code, it will + # always be an 8-string. Coerce to the latter if necessary; it must + # be US-ASCII. + if isinstance(hash, unicode): + hash = hash.encode('ascii') + for msgrow in config.db.store.find(Message, hash=hash): yield self._msgobj(msgrow) def _getmsg(self, global_id): @@ -110,7 +119,9 @@ class MessageStore: seqno = int(seqno) except ValueError: return None - messages = Message.query.filter_by(id=seqno) + # Avoid circular imports. + from Mailman.database.model.message import Message + messages = config.db.store.find(Message, id=seqno) if messages.count() == 0: return None assert messages.count() == 1, 'Multiple id matches' @@ -126,11 +137,13 @@ class MessageStore: @property def messages(self): - for msgrow in Message.query.filter_by().all(): + # Avoid circular imports. + from Mailman.database.model.message import Message + for msgrow in config.db.store.find(Message): yield self._msgobj(msgrow) def delete_message(self, global_id): msgrow = self._getmsg(global_id) if msgrow is None: raise KeyError(global_id) - msgrow.delete() + config.db.store.remove(msgrow) |
