summaryrefslogtreecommitdiff
path: root/src/mailman/model/autorespond.py
diff options
context:
space:
mode:
authorBarry Warsaw2009-10-10 11:18:56 -0400
committerBarry Warsaw2009-10-10 11:18:56 -0400
commit857b8cbc8acd8caec21311de9c41357a79039e8c (patch)
tree235eb8bcbf771e5471958f499e2b9015f34ecc51 /src/mailman/model/autorespond.py
parent37332636e899c023fb31384413578346086c7692 (diff)
downloadmailman-857b8cbc8acd8caec21311de9c41357a79039e8c.tar.gz
mailman-857b8cbc8acd8caec21311de9c41357a79039e8c.tar.zst
mailman-857b8cbc8acd8caec21311de9c41357a79039e8c.zip
Diffstat (limited to 'src/mailman/model/autorespond.py')
-rw-r--r--src/mailman/model/autorespond.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/mailman/model/autorespond.py b/src/mailman/model/autorespond.py
new file mode 100644
index 000000000..0a84f30e3
--- /dev/null
+++ b/src/mailman/model/autorespond.py
@@ -0,0 +1,93 @@
+# Copyright (C) 2009 by the Free Software Foundation, Inc.
+#
+# This file is part of GNU Mailman.
+#
+# GNU Mailman is free software: you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
+
+"""Module stuff."""
+
+from __future__ import absolute_import, unicode_literals
+
+__metaclass__ = type
+__all__ = [
+ 'AutoResponseRecord',
+ 'AutoResponseSet',
+ ]
+
+
+from storm.locals import And, Date, Desc, Int, Reference
+from zope.interface import implements
+
+from mailman.config import config
+from mailman.database.model import Model
+from mailman.database.types import Enum
+from mailman.interfaces.autorespond import (
+ IAutoResponseRecord, IAutoResponseSet, Response)
+from mailman.interfaces.mailinglist import IMailingList
+from mailman.utilities.datetime import today
+
+
+
+class AutoResponseRecord(Model):
+ implements(IAutoResponseRecord)
+
+ id = Int(primary=True)
+
+ address_id = Int()
+ address = Reference(address_id, 'Address.id')
+
+ mailing_list_id = Int()
+ mailing_list = Reference(mailing_list_id, 'MailingList.id')
+
+ response_type = Enum()
+ date_sent = Date()
+
+ def __init__(self, mailing_list, address, response_type):
+ self.mailing_list = mailing_list
+ self.address = address
+ self.response_type = response_type
+ self.date_sent = today()
+
+
+
+class AutoResponseSet:
+ implements(IAutoResponseSet)
+
+ def __init__(self, mailing_list):
+ self._mailing_list = mailing_list
+
+ def todays_count(self, address, response_type):
+ """See `IAutoResponseSet`."""
+ return config.db.store.find(
+ AutoResponseRecord,
+ And(AutoResponseRecord.address == address,
+ AutoResponseRecord.mailing_list == self._mailing_list,
+ AutoResponseRecord.response_type == response_type,
+ AutoResponseRecord.date_sent == today())).count()
+
+ def response_sent(self, address, response_type):
+ """See `IAutoResponseSet`."""
+ response = AutoResponseRecord(
+ self._mailing_list, address, response_type)
+ config.db.store.add(response)
+
+ def last_response(self, address, response_type):
+ """See `IAutoResponseSet`."""
+ results = config.db.store.find(
+ AutoResponseRecord,
+ And(AutoResponseRecord.address == address,
+ AutoResponseRecord.mailing_list == self._mailing_list,
+ AutoResponseRecord.response_type == response_type)
+ ).order_by(Desc(AutoResponseRecord.date_sent))
+ return (None if results.count() == 0 else results.first())