diff options
Diffstat (limited to 'Mailman/database')
| -rw-r--r-- | Mailman/database/messagestore.py | 8 | ||||
| -rw-r--r-- | Mailman/database/model/requests.py | 22 |
2 files changed, 23 insertions, 7 deletions
diff --git a/Mailman/database/messagestore.py b/Mailman/database/messagestore.py index eb29fcfb4..bbaa6976b 100644 --- a/Mailman/database/messagestore.py +++ b/Mailman/database/messagestore.py @@ -48,15 +48,11 @@ class MessageStore: def add(self, message): # Ensure that the message has the requisite headers. message_ids = message.get_all('message-id', []) - dates = message.get_all('date', []) - if not (len(message_ids) == 1 and len(dates) == 1): - raise ValueError( - 'Exactly one Message-ID and one Date header required') + if len(message_ids) <> 1: + raise ValueError('Exactly one Message-ID header required') # Calculate and insert the X-List-ID-Hash. message_id = message_ids[0] - date = dates[0] shaobj = hashlib.sha1(message_id) - shaobj.update(date) hash32 = base64.b32encode(shaobj.digest()) del message['X-List-ID-Hash'] message['X-List-ID-Hash'] = hash32 diff --git a/Mailman/database/model/requests.py b/Mailman/database/model/requests.py index 59013452b..b0aa0d8d0 100644 --- a/Mailman/database/model/requests.py +++ b/Mailman/database/model/requests.py @@ -52,11 +52,22 @@ class ListRequests: results = _Request.select_by(mailing_list=self.mailing_list._data) return len(results) + def count_of(self, request_type): + results = _Request.select_by(mailing_list=self.mailing_list._data, + type=request_type) + return len(results) + @property def held_requests(self): results = _Request.select_by(mailing_list=self.mailing_list._data) for request in results: - yield request.id, request.type + yield request + + def of_type(self, request_type): + results = _Request.select_by(mailing_list=self.mailing_list._data, + type=request_type) + for request in results: + yield request def hold_request(self, request_type, key, data=None): if request_type not in RequestType: @@ -72,6 +83,15 @@ 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, +## 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, data_hash=data_hash) |
