diff options
Diffstat (limited to 'src/mailman/model')
| -rw-r--r-- | src/mailman/model/docs/pending.rst | 3 | ||||
| -rw-r--r-- | src/mailman/model/docs/requests.rst | 2 | ||||
| -rw-r--r-- | src/mailman/model/pending.py | 12 | ||||
| -rw-r--r-- | src/mailman/model/requests.py | 2 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_pending.py | 2 |
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' |
