diff options
| author | Abhilash Raj | 2014-09-13 22:48:48 +0530 |
|---|---|---|
| committer | Abhilash Raj | 2014-09-13 22:48:48 +0530 |
| commit | f8212e1d9d32f29039b620d8805f1a53f579dd34 (patch) | |
| tree | e76202f651694fa333d9acf2d8531094851c81c0 /src/mailman/model/pending.py | |
| parent | a9b38e7643ac7dd8d526af22a6e3e9ea73933f59 (diff) | |
| download | mailman-f8212e1d9d32f29039b620d8805f1a53f579dd34.tar.gz mailman-f8212e1d9d32f29039b620d8805f1a53f579dd34.tar.zst mailman-f8212e1d9d32f29039b620d8805f1a53f579dd34.zip | |
Diffstat (limited to 'src/mailman/model/pending.py')
| -rw-r--r-- | src/mailman/model/pending.py | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/mailman/model/pending.py b/src/mailman/model/pending.py index 0c41a4ac6..30aae074c 100644 --- a/src/mailman/model/pending.py +++ b/src/mailman/model/pending.py @@ -31,7 +31,8 @@ import random import hashlib from lazr.config import as_timedelta -from sqlalchemy import Column, Integer, Unicode, ForeignKey, DateTime +from sqlalchemy import ( + Column, Integer, Unicode, ForeignKey, DateTime, LargeBinary) from sqlalchemy.orm import relationship from zope.interface import implementer from zope.interface.verify import verifyObject @@ -75,7 +76,7 @@ class Pended(Model): self.expiration_date = expiration_date id = Column(Integer, primary_key=True) - token = Column(Unicode) # TODO : was RawStr() + token = Column(LargeBinary) # TODO : was RawStr() expiration_date = Column(DateTime) key_values = relationship('PendedKeyValue') @@ -109,7 +110,7 @@ class Pendings: token = hashlib.sha1(repr(x)).hexdigest() # In practice, we'll never get a duplicate, but we'll be anal # about checking anyway. - if store.find(Pended, token=token).count() == 0: + if store.query(Pended).filter_by(token=token).count() == 0: break else: raise AssertionError('Could not find a valid pendings token') @@ -133,7 +134,7 @@ class Pendings: value = ('mailman.model.pending.unpack_list\1' + '\2'.join(value)) keyval = PendedKeyValue(key=key, value=value) - pending.key_values.add(keyval) + pending.key_values.append(keyval) store.add(pending) return token @@ -141,7 +142,7 @@ class Pendings: def confirm(self, store, token, expunge=True): # Token can come in as a unicode, but it's stored in the database as # bytes. They must be ascii. - pendings = store.find(Pended, token=str(token)) + pendings = store.query(Pended).filter_by(token=str(token)) if pendings.count() == 0: return None assert pendings.count() == 1, ( @@ -150,7 +151,7 @@ class Pendings: pendable = UnpendedPendable() # Find all PendedKeyValue entries that are associated with the pending # object's ID. Watch out for type conversions. - for keyvalue in store.find(PendedKeyValue, + for keyvalue in store.query(PendedKeyValue).filter( PendedKeyValue.pended_id == pending.id): if keyvalue.value is not None and '\1' in keyvalue.value: type_name, value = keyvalue.value.split('\1', 1) @@ -158,23 +159,23 @@ class Pendings: else: pendable[keyvalue.key] = keyvalue.value if expunge: - store.remove(keyvalue) + store.delete(keyvalue) if expunge: - store.remove(pending) + store.delete(pending) return pendable @dbconnection def evict(self, store): right_now = now() - for pending in store.find(Pended): + for pending in store.query(Pended).all(): if pending.expiration_date < right_now: # Find all PendedKeyValue entries that are associated with the # pending object's ID. - q = store.find(PendedKeyValue, + q = store.query(PendedKeyValue).filter( PendedKeyValue.pended_id == pending.id) for keyvalue in q: - store.remove(keyvalue) - store.remove(pending) + store.delete(keyvalue) + store.delete(pending) |
