1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# Copyright (C) 2007 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
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 flush():
"""Flush current database changes."""
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.""")
|