summaryrefslogtreecommitdiff
path: root/Mailman/database/model/requests.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/database/model/requests.py')
-rw-r--r--Mailman/database/model/requests.py73
1 files changed, 35 insertions, 38 deletions
diff --git a/Mailman/database/model/requests.py b/Mailman/database/model/requests.py
index 037483c1a..64fff7c48 100644
--- a/Mailman/database/model/requests.py
+++ b/Mailman/database/model/requests.py
@@ -18,17 +18,15 @@
"""Implementations of the IRequests and IListRequests interfaces."""
from datetime import timedelta
-from elixir import *
+from storm.locals import *
from zope.interface import implements
from Mailman.configuration import config
-from Mailman.database.types import EnumType
+from Mailman.database import Model
+from Mailman.database.types import Enum
from Mailman.interfaces import IListRequests, IPendable, IRequests, RequestType
-MAILINGLIST_KIND = 'Mailman.database.model.mailinglist.MailingList'
-
-
__metaclass__ = type
__all__ = [
'Requests',
@@ -49,21 +47,25 @@ class ListRequests:
@property
def count(self):
- return _Request.query.filter_by(mailing_list=self.mailing_list).count()
+ return config.db.store.find(
+ _Request, mailing_list=self.mailing_list).count()
def count_of(self, request_type):
- return _Request.query.filter_by(mailing_list=self.mailing_list,
- type=request_type).count()
+ return config.db.store.find(
+ _Request,
+ mailing_list=self.mailing_list, request_type=request_type).count()
@property
def held_requests(self):
- results = _Request.query.filter_by(mailing_list=self.mailing_list)
+ results = config.db.store.find(
+ _Request, mailing_list=self.mailing_list)
for request in results:
yield request
def of_type(self, request_type):
- results = _Request.query.filter_by(mailing_list=self.mailing_list,
- type=request_type)
+ results = config.db.store.find(
+ _Request,
+ mailing_list=self.mailing_list, request_type=request_type)
for request in results:
yield request
@@ -81,25 +83,12 @@ class ListRequests:
pendable.update(data)
token = config.db.pendings.add(pendable, timedelta(days=5000))
data_hash = token
- # XXX This would be a good other way to do it, but it causes the
- # select_by()'s in .count and .held_requests() to fail, even with
- # flush()'s.
-## result = _Request.table.insert().execute(
-## key=key, type=request_type,
-## mailing_list=self.mailing_list,
-## data_hash=data_hash)
-## row_id = result.last_inserted_ids()[0]
-## return row_id
- result = _Request(key=key, type=request_type,
- mailing_list=self.mailing_list,
- data_hash=data_hash)
- # XXX We need a handle on last_inserted_ids() instead of requiring a
- # flush of the database to get a valid id.
- config.db.flush()
- return result.id
+ request = _Request(key, request_type, self.mailing_list, data_hash)
+ config.db.store.add(request)
+ return request.id
def get_request(self, request_id):
- result = _Request.get(request_id)
+ result = config.db.store.get(_Request, request_id)
if result is None:
return None
if result.data_hash is None:
@@ -110,12 +99,12 @@ class ListRequests:
return result.key, data
def delete_request(self, request_id):
- result = _Request.get(request_id)
- if result is None:
+ request = config.db.store.get(_Request, request_id)
+ if request is None:
raise KeyError(request_id)
# Throw away the pended data.
- config.db.pendings.confirm(result.data_hash)
- result.delete()
+ config.db.pendings.confirm(request.data_hash)
+ config.db.store.remove(request)
@@ -127,11 +116,19 @@ class Requests:
-class _Request(Entity):
+class _Request(Model):
"""Table for mailing list hold requests."""
- key = Field(Unicode)
- type = Field(EnumType)
- data_hash = Field(Unicode)
- # Relationships
- mailing_list = ManyToOne(MAILINGLIST_KIND)
+ id = Int(primary=True, default=AutoReload)
+ key = Unicode()
+ request_type = Enum()
+ data_hash = RawStr()
+
+ mailing_list_id = Int()
+ mailing_list = Reference(mailing_list_id, 'MailingList.id')
+
+ def __init__(self, key, request_type, mailing_list, data_hash):
+ self.key = key
+ self.request_type = request_type
+ self.mailing_list = mailing_list
+ self.data_hash = data_hash