summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBarry Warsaw2015-09-20 15:43:28 -0400
committerBarry Warsaw2015-09-23 16:27:20 -0400
commitdfc1cff78e820cc13b0c3a7df3d7f4326c62704f (patch)
treed0244a098a1368f80e4d494240bb5c50a4be4fa4 /src
parent4f1fba02f119053a54fcd192b03c2bb78b596f52 (diff)
downloadmailman-dfc1cff78e820cc13b0c3a7df3d7f4326c62704f.tar.gz
mailman-dfc1cff78e820cc13b0c3a7df3d7f4326c62704f.tar.zst
mailman-dfc1cff78e820cc13b0c3a7df3d7f4326c62704f.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman/interfaces/usermanager.py3
-rw-r--r--src/mailman/model/docs/usermanager.rst44
-rw-r--r--src/mailman/model/usermanager.py9
3 files changed, 55 insertions, 1 deletions
diff --git a/src/mailman/interfaces/usermanager.py b/src/mailman/interfaces/usermanager.py
index 5f3a324cc..da2f460df 100644
--- a/src/mailman/interfaces/usermanager.py
+++ b/src/mailman/interfaces/usermanager.py
@@ -126,3 +126,6 @@ class IUserManager(Interface):
members = Attribute(
"""An iterator of all the `IMembers` in the database.""")
+
+ server_owners = Attribute(
+ """An iterator over all the `IUsers` who are server owners.""")
diff --git a/src/mailman/model/docs/usermanager.rst b/src/mailman/model/docs/usermanager.rst
index 8e40b621e..a98f88670 100644
--- a/src/mailman/model/docs/usermanager.rst
+++ b/src/mailman/model/docs/usermanager.rst
@@ -201,3 +201,47 @@ The user has a single unverified address object.
>>> for address in cris.addresses:
... print(repr(address))
<Address: Cris Person <cris@example.com> [not verified] at ...>
+
+
+Server owners
+=============
+
+Some users are designated as *server owners*. At first there are no server
+owners.
+
+ >>> len(list(user_manager.server_owners))
+ 0
+
+Dan is made a server owner.
+
+ >>> user_4.is_server_owner = True
+ >>> owners = list(user_manager.server_owners)
+ >>> len(owners)
+ 1
+ >>> owners[0]
+ <User "Dan Person" (...) at ...>
+
+Now Ben and Claire are also made server owners.
+
+ >>> user_2.is_server_owner = True
+ >>> user_3.is_server_owner = True
+ >>> owners = list(user_manager.server_owners)
+ >>> len(owners)
+ 3
+ >>> from operator import attrgetter
+ >>> for user in sorted(owners, key=attrgetter('display_name')):
+ ... print(user)
+ <User "Ben Person" (...) at ...>
+ <User "Claire Person" (...) at ...>
+ <User "Dan Person" (...) at ...>
+
+Clair retires as a server owner.
+
+ >>> user_3.is_server_owner = False
+ >>> owners = list(user_manager.server_owners)
+ >>> len(owners)
+ 2
+ >>> for user in sorted(owners, key=attrgetter('display_name')):
+ ... print(user)
+ <User "Ben Person" (...) at ...>
+ <User "Dan Person" (...) at ...>
diff --git a/src/mailman/model/usermanager.py b/src/mailman/model/usermanager.py
index 3d7777099..5d63a2146 100644
--- a/src/mailman/model/usermanager.py
+++ b/src/mailman/model/usermanager.py
@@ -141,4 +141,11 @@ class UserManager:
def members(self, store):
"""See `IUserManager."""
for member in store.query(Member).all():
- yield member
+ yield member
+
+ @property
+ @dbconnection
+ def server_owners(self, store):
+ """ See `IUserManager."""
+ users = store.query(User).filter_by(is_server_owner=True)
+ yield from users