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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# Copyright (C) 2007-2017 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/>.
"""Interface describing the user management service."""
from public import public
from zope.interface import Attribute, Interface
@public
class AddressCreatingEvent:
"""An address is about to be created."""
def __init__(self, email):
self.email = email
@public
class AddressCreatedEvent:
"""An address was created."""
def __init__(self, address):
self.address = address
@public
class AddressDeletingEvent:
"""An address is about to be deleted."""
def __init__(self, address):
self.address = address
@public
class AddressDeletedEvent:
"""An address was deleted."""
def __init__(self, email):
self.email = email
@public
class IUserManager(Interface):
"""The global user management service."""
def create_user(email=None, display_name=None):
"""Create and return an `IUser`.
:param email: The text email address for the user being created.
:type email: str
:param display_name: The display name of the user.
:type display_name: str
:return: The newly created user, with the given email address and real
name, if given.
:rtype: `IUser`
:raises ExistingAddressError: when the email address is already
registered.
"""
def make_user(email, display_name=None):
"""Create a new user linked to an address object.
If ``email`` is already associated with an existing `IAddress`
object, use that, otherwise create a new `IAddress`. If the
address object already points to an `IUser` return it. If a new
`IUser` is created, link the address to the user.
:param email: The email address.
:type email: str
:param display_name: The display name.
:type display_name: str
:return: the IUser object that exists or was created.
:rtype: IUser
"""
def delete_user(user):
"""Delete the given user.
:param user: The user to delete.
:type user: `IUser`.
"""
def get_user(email):
"""Get the user that controls the given email address, or None.
:param email: The email address to look up.
:type email: str
:return: The user found or None.
:rtype: `IUser`.
"""
def get_user_by_id(user_id):
"""Get the user associated with the given id.
:param user_id: The user id.
:type user_id: `uuid.UUID`
:return: The user found or None.
:rtype: `IUser`.
"""
users = Attribute(
"""An iterator over all the `IUsers` managed by this user manager.""")
def create_address(email, display_name=None):
"""Create and return an address unlinked to any user.
:param email: The text email address for the address being created.
:type email: str
:param display_name: The display name associated with the address.
:type display_name: str
:return: The newly created address object, with the given email
address and display name, if given.
:rtype: `IAddress`
:raises ExistingAddressError: when the email address is already
registered.
"""
def delete_address(address):
"""Delete the given `IAddress` object.
If the `IAddress` is linked to a user, it is first unlinked before it
is deleted.
:param address: The address to delete.
:type address: `IAddress`.
"""
def get_address(email):
"""Find and return the `IAddress` matching an email address.
:param email: The text email address.
:type email: str
:return: The matching `IAddress` object, or None if no registered
`IAddress` matches the text address.
:rtype: `IAddress` or None
"""
addresses = Attribute(
"""An iterator over all the `IAddresses` managed by this manager.""")
members = Attribute(
"""An iterator of all the `IMembers` in the database.""")
server_owners = Attribute(
"""An iterator over all the `IUsers` who are server owners.""")
|