diff options
Diffstat (limited to 'src/mailman/interfaces/requests.py')
| -rw-r--r-- | src/mailman/interfaces/requests.py | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/mailman/interfaces/requests.py b/src/mailman/interfaces/requests.py new file mode 100644 index 000000000..e3e316fa0 --- /dev/null +++ b/src/mailman/interfaces/requests.py @@ -0,0 +1,115 @@ +# Copyright (C) 2007-2009 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/>. + +"""Interfaces for the request database. + +The request database handles events that must be approved by the list +moderators, such as subscription requests and held messages. +""" + +from __future__ import absolute_import, unicode_literals + +__metaclass__ = type +__all__ = [ + 'IListRequests', + 'IRequests', + 'RequestType', + ] + + +from munepy import Enum +from zope.interface import Interface, Attribute + + + +class RequestType(Enum): + held_message = 1 + subscription = 2 + unsubscription = 3 + + + +class IListRequests(Interface): + """Held requests for a specific mailing list.""" + + mailing_list = Attribute( + """The IMailingList for these requests.""") + + count = Attribute( + """The total number of requests held for the mailing list.""") + + def count_of(request_type): + """The total number of requests held of the given request type. + + :param request_type: A `RequestType` enum value. + :return: An integer. + """ + + def hold_request(request_type, key, data=None): + """Hold some data for moderator approval. + + :param request_type: A `RequestType` enum value. + :param key: The key piece of request data being held. + :param data: Additional optional data in the form of a dictionary that + is associated with the held request. + :return: A unique id for this held request. + """ + + held_requests = Attribute( + """An iterator over the held requests. + + Returned items have two attributes: + * `id` is the held request's unique id; + * `type` is a `RequestType` enum value. + """) + + def of_type(request_type): + """An iterator over the held requests of the given type. + + Returned items have two attributes: + * `id` is the held request's unique id; + * `type` is a `RequestType` enum value. + + Only items with a matching `type' are returned. + """ + + def get_request(request_id): + """Get the data associated with the request id, or None. + + :param request_id: The unique id for the request. + :return: A 2-tuple of the key and data originally held, or None if the + `request_id` is not in the database. + """ + + def delete_request(request_id): + """Delete the request associated with the id. + + :param request_id: The unique id for the request. + :raises KeyError: If `request_id` is not in the database. + """ + + + +class IRequests(Interface): + """The requests database.""" + + def get_list_requests(mailing_list): + """Return the `IListRequests` object for the given mailing list. + + :param mailing_list: An `IMailingList`. + :return: An `IListRequests` object for the mailing list. + """ |
