summaryrefslogtreecommitdiff
path: root/src/mailman/model/pending.py
diff options
context:
space:
mode:
authorAbhilash Raj2014-09-13 22:48:48 +0530
committerAbhilash Raj2014-09-13 22:48:48 +0530
commitf8212e1d9d32f29039b620d8805f1a53f579dd34 (patch)
treee76202f651694fa333d9acf2d8531094851c81c0 /src/mailman/model/pending.py
parenta9b38e7643ac7dd8d526af22a6e3e9ea73933f59 (diff)
downloadmailman-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.py25
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)