summaryrefslogtreecommitdiff
path: root/mailman/interfaces/database.py
diff options
context:
space:
mode:
authorBarry Warsaw2008-02-27 01:26:18 -0500
committerBarry Warsaw2008-02-27 01:26:18 -0500
commita1c73f6c305c7f74987d99855ba59d8fa823c253 (patch)
tree65696889450862357c9e05c8e9a589f1bdc074ac /mailman/interfaces/database.py
parent3f31f8cce369529d177cfb5a7c66346ec1e12130 (diff)
downloadmailman-a1c73f6c305c7f74987d99855ba59d8fa823c253.tar.gz
mailman-a1c73f6c305c7f74987d99855ba59d8fa823c253.tar.zst
mailman-a1c73f6c305c7f74987d99855ba59d8fa823c253.zip
Diffstat (limited to 'mailman/interfaces/database.py')
-rw-r--r--mailman/interfaces/database.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/mailman/interfaces/database.py b/mailman/interfaces/database.py
new file mode 100644
index 000000000..0bacdaa3a
--- /dev/null
+++ b/mailman/interfaces/database.py
@@ -0,0 +1,83 @@
+# Copyright (C) 2007-2008 by the Free Software Foundation, Inc.
+#
+# This program 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 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+"""Interfaces for database interaction.
+
+By providing an object with this interface and declaring it in a package
+setup.py file as an entry point in the 'mailman.database' group with the name
+'initializer', you can distribute entirely different database layers for
+Mailman's back end.
+"""
+
+from zope.interface import Interface, Attribute
+
+from mailman.Version import DATABASE_SCHEMA_VERSION
+from mailman.interfaces.errors import MailmanError
+
+
+
+class DatabaseError(MailmanError):
+ """A problem with the database occurred."""
+
+
+class SchemaVersionMismatchError(DatabaseError):
+ """The database schema version number did not match what was expected."""
+
+ def __init__(self, got):
+ self._got = got
+
+ def __str__(self):
+ return (
+ 'Incompatible database schema version (got: %d, expected: %d)'
+ % (self._got, DATABASE_SCHEMA_VERSION))
+
+
+
+class IDatabase(Interface):
+ """Database layer interface."""
+
+ def initialize(debug=None):
+ """Initialize the database layer, using whatever means necessary.
+
+ :param debug: When None (the default), the configuration file
+ determines whether the database layer should have increased
+ debugging or not. When True or False, this overrides the
+ configuration file setting.
+ """
+
+ def _reset():
+ """Reset the database to its pristine state.
+
+ This is only used by the test framework.
+ """
+
+ # XXX Eventually we probably need to support a transaction manager
+ # interface, e.g. begin(), commit(), abort(). We will probably also need
+ # to support a shutdown() method for cleanly disconnecting from the
+ # database.sy
+
+ list_manager = Attribute(
+ """The IListManager instance provided by the database layer.""")
+
+ user_manager = Attribute(
+ """The IUserManager instance provided by the database layer.""")
+
+ message_store = Attribute(
+ """The IMessageStore instance provided by the database layer.""")
+
+ pendings = Attribute(
+ """The IPending instance provided by the database layer.""")