summaryrefslogtreecommitdiff
path: root/src/mailman/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/model')
-rw-r--r--src/mailman/model/docs/pending.rst3
-rw-r--r--src/mailman/model/docs/requests.rst2
-rw-r--r--src/mailman/model/pending.py12
-rw-r--r--src/mailman/model/requests.py2
-rw-r--r--src/mailman/model/tests/test_pending.py2
5 files changed, 15 insertions, 6 deletions
diff --git a/src/mailman/model/docs/pending.rst b/src/mailman/model/docs/pending.rst
index 03eee3772..4accf5f3f 100644
--- a/src/mailman/model/docs/pending.rst
+++ b/src/mailman/model/docs/pending.rst
@@ -26,10 +26,9 @@ token that can be used in urls and such.
>>> from mailman.interfaces.pending import IPendable
>>> @implementer(IPendable)
... class SimplePendable(dict):
- ... pass
+ ... PEND_TYPE = 'subscription'
>>> subscription = SimplePendable(
- ... type='subscription',
... address='aperson@example.com',
... display_name='Anne Person',
... language='en',
diff --git a/src/mailman/model/docs/requests.rst b/src/mailman/model/docs/requests.rst
index 1e1eba35a..ad892a18b 100644
--- a/src/mailman/model/docs/requests.rst
+++ b/src/mailman/model/docs/requests.rst
@@ -124,6 +124,7 @@ an additional key which holds the name of the request type.
_request_type: held_message
bar : no
foo : yes
+ type : data
Iterating over requests
@@ -146,6 +147,7 @@ over by type.
_request_type: held_message
bar: no
foo: yes
+ type: data
Deleting requests
diff --git a/src/mailman/model/pending.py b/src/mailman/model/pending.py
index a98c9dfb8..54188c39f 100644
--- a/src/mailman/model/pending.py
+++ b/src/mailman/model/pending.py
@@ -79,7 +79,7 @@ class Pended(Model):
@implementer(IPendable)
class UnpendedPendable(dict):
- pass
+ PEND_TYPE = 'unpended'
@@ -114,6 +114,9 @@ class Pendings:
pending = Pended(
token=token,
expiration_date=now() + lifetime)
+ pendable_type = pendable.pop('type', pendable.PEND_TYPE)
+ pending.key_values.append(
+ PendedKeyValue(key='type', value=pendable_type))
for key, value in pendable.items():
# Both keys and values must be strings.
if isinstance(key, bytes):
@@ -141,7 +144,10 @@ class Pendings:
# Iter on PendedKeyValue entries that are associated with the pending
# object's ID. Watch out for type conversions.
for keyvalue in pending.key_values:
- value = json.loads(keyvalue.value)
+ if keyvalue.key == 'type':
+ value = keyvalue.value
+ else:
+ value = json.loads(keyvalue.value)
if isinstance(value, dict) and '__encoding__' in value:
value = value['value'].encode(value['__encoding__'])
pendable[keyvalue.key] = value
@@ -169,7 +175,7 @@ class Pendings:
pkv_alias_type = aliased(PendedKeyValue)
query = query.join(pkv_alias_type).filter(and_(
pkv_alias_type.key == 'type',
- pkv_alias_type.value == json.dumps(type)
+ pkv_alias_type.value == type
))
for pending in query:
yield pending.token, self.confirm(pending.token, expunge=False)
diff --git a/src/mailman/model/requests.py b/src/mailman/model/requests.py
index e984d0aea..f9cbf69b3 100644
--- a/src/mailman/model/requests.py
+++ b/src/mailman/model/requests.py
@@ -41,6 +41,8 @@ from zope.interface import implementer
class DataPendable(dict):
"""See `IPendable`."""
+ PEND_TYPE = 'data'
+
def update(self, mapping):
# Keys and values must be strings (unicodes, but bytes values are
# accepted for now). Any other types for keys are a programming
diff --git a/src/mailman/model/tests/test_pending.py b/src/mailman/model/tests/test_pending.py
index c97fdc1ce..b84885682 100644
--- a/src/mailman/model/tests/test_pending.py
+++ b/src/mailman/model/tests/test_pending.py
@@ -35,7 +35,7 @@ from zope.interface import implementer
@implementer(IPendable)
class SimplePendable(dict):
- pass
+ PEND_TYPE = 'simple'