summaryrefslogtreecommitdiff
path: root/src/mailman/model/requests.py
diff options
context:
space:
mode:
authorBarry Warsaw2014-11-02 14:55:10 -0500
committerBarry Warsaw2014-11-02 14:55:10 -0500
commitdfc451f81ccc8b0947fb3fa42e94c55026984cf8 (patch)
treec9834271a2dc7fd7d998e5dd211a0ef047f8085e /src/mailman/model/requests.py
parent0b1ee6fc8d224291c68c964a1af6b481921a13b3 (diff)
parent1d9f6970b9a26ee576838b53f485b96365e3a6c2 (diff)
downloadmailman-dfc451f81ccc8b0947fb3fa42e94c55026984cf8.tar.gz
mailman-dfc451f81ccc8b0947fb3fa42e94c55026984cf8.tar.zst
mailman-dfc451f81ccc8b0947fb3fa42e94c55026984cf8.zip
Diffstat (limited to 'src/mailman/model/requests.py')
-rw-r--r--src/mailman/model/requests.py41
1 files changed, 25 insertions, 16 deletions
diff --git a/src/mailman/model/requests.py b/src/mailman/model/requests.py
index f3ad54797..6b130196d 100644
--- a/src/mailman/model/requests.py
+++ b/src/mailman/model/requests.py
@@ -26,7 +26,8 @@ __all__ = [
from cPickle import dumps, loads
from datetime import timedelta
-from storm.locals import AutoReload, Int, RawStr, Reference, Unicode
+from sqlalchemy import Column, ForeignKey, Integer, LargeBinary, Unicode
+from sqlalchemy.orm import relationship
from zope.component import getUtility
from zope.interface import implementer
@@ -68,25 +69,25 @@ class ListRequests:
@property
@dbconnection
def count(self, store):
- return store.find(_Request, mailing_list=self.mailing_list).count()
+ return store.query(_Request).filter_by(
+ mailing_list=self.mailing_list).count()
@dbconnection
def count_of(self, store, request_type):
- return store.find(
- _Request,
+ return store.query(_Request).filter_by(
mailing_list=self.mailing_list, request_type=request_type).count()
@property
@dbconnection
def held_requests(self, store):
- results = store.find(_Request, mailing_list=self.mailing_list)
+ results = store.query(_Request).filter_by(
+ mailing_list=self.mailing_list)
for request in results:
yield request
@dbconnection
def of_type(self, store, request_type):
- results = store.find(
- _Request,
+ results = store.query(_Request).filter_by(
mailing_list=self.mailing_list, request_type=request_type)
for request in results:
yield request
@@ -104,11 +105,15 @@ class ListRequests:
data_hash = token
request = _Request(key, request_type, self.mailing_list, data_hash)
store.add(request)
+ # XXX The caller needs a valid id immediately, so flush the changes
+ # now to the SA transaction context. Otherwise .id would not be
+ # valid. Hopefully this has no unintended side-effects.
+ store.flush()
return request.id
@dbconnection
def get_request(self, store, request_id, request_type=None):
- result = store.get(_Request, request_id)
+ result = store.query(_Request).get(request_id)
if result is None:
return None
if request_type is not None and result.request_type != request_type:
@@ -117,6 +122,8 @@ class ListRequests:
return result.key, None
pendable = getUtility(IPendings).confirm(
result.data_hash, expunge=False)
+ if pendable is None:
+ return None
data = dict()
# Unpickle any non-Unicode values.
for key, value in pendable.items():
@@ -130,25 +137,27 @@ class ListRequests:
@dbconnection
def delete_request(self, store, request_id):
- request = store.get(_Request, request_id)
+ request = store.query(_Request).get(request_id)
if request is None:
raise KeyError(request_id)
# Throw away the pended data.
getUtility(IPendings).confirm(request.data_hash)
- store.remove(request)
+ store.delete(request)
class _Request(Model):
"""Table for mailing list hold requests."""
- id = Int(primary=True, default=AutoReload)
- key = Unicode()
- request_type = Enum(RequestType)
- data_hash = RawStr()
+ __tablename__ = '_request'
+
+ id = Column(Integer, primary_key=True)
+ key = Column(Unicode)
+ request_type = Column(Enum(RequestType))
+ data_hash = Column(LargeBinary)
- mailing_list_id = Int()
- mailing_list = Reference(mailing_list_id, 'MailingList.id')
+ mailing_list_id = Column(Integer, ForeignKey('mailinglist.id'), index=True)
+ mailing_list = relationship('MailingList')
def __init__(self, key, request_type, mailing_list, data_hash):
super(_Request, self).__init__()