summaryrefslogtreecommitdiff
path: root/src/mailman/app/subscriptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/app/subscriptions.py')
-rw-r--r--src/mailman/app/subscriptions.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py
index 60f8cdebe..7949f83ee 100644
--- a/src/mailman/app/subscriptions.py
+++ b/src/mailman/app/subscriptions.py
@@ -17,7 +17,7 @@
"""Module stuff."""
-from __future__ import absolute_import, unicode_literals
+from __future__ import absolute_import, print_function, unicode_literals
__metaclass__ = type
__all__ = [
@@ -26,16 +26,17 @@ __all__ = [
]
-from flufl.password import generate
from operator import attrgetter
+from passlib.utils import generate_password as generate
from storm.expr import And, Or
from uuid import UUID
from zope.component import getUtility
-from zope.interface import implements
+from zope.interface import implementer
from mailman.app.membership import add_member, delete_member
from mailman.config import config
from mailman.core.constants import system_preferences
+from mailman.database.transaction import dbconnection
from mailman.interfaces.address import IEmailValidator
from mailman.interfaces.listmanager import (
IListManager, ListDeletedEvent, NoSuchListError)
@@ -61,11 +62,10 @@ def _membership_sort_key(member):
+@implementer(ISubscriptionService)
class SubscriptionService:
"""Subscription services for the REST API."""
- implements(ISubscriptionService)
-
__name__ = 'members'
def get_members(self):
@@ -90,9 +90,10 @@ class SubscriptionService:
sorted(by_role.get('member', []), key=address_of_member))
return all_members
- def get_member(self, member_id):
+ @dbconnection
+ def get_member(self, store, member_id):
"""See `ISubscriptionService`."""
- members = config.db.store.find(
+ members = store.find(
Member,
Member._member_id == member_id)
if members.count() == 0:
@@ -101,7 +102,9 @@ class SubscriptionService:
assert members.count() == 1, 'Too many matching members'
return members[0]
- def find_members(self, subscriber=None, fqdn_listname=None, role=None):
+ @dbconnection
+ def find_members(self, store,
+ subscriber=None, fqdn_listname=None, role=None):
"""See `ISubscriptionService`."""
# If `subscriber` is a user id, then we'll search for all addresses
# which are controlled by the user, otherwise we'll just search for
@@ -137,7 +140,7 @@ class SubscriptionService:
query.append(Member.mailing_list == fqdn_listname)
if role is not None:
query.append(Member.role == role)
- results = config.db.store.find(Member, And(*query))
+ results = store.find(Member, And(*query))
return sorted(results, key=_membership_sort_key)
def __iter__(self):