diff options
| author | Stephen A. Goss | 2011-08-19 17:08:28 -0700 |
|---|---|---|
| committer | Stephen A. Goss | 2011-08-19 17:08:28 -0700 |
| commit | 5ab205f5158fab7cc8daaf68e46aba4c281725b5 (patch) | |
| tree | 22c822b4ad4c9c15d11f6566339353a219e71566 /src | |
| parent | 545735d6dc0efb76b88f3f0634966f97d833dc41 (diff) | |
| download | mailman-5ab205f5158fab7cc8daaf68e46aba4c281725b5.tar.gz mailman-5ab205f5158fab7cc8daaf68e46aba4c281725b5.tar.zst mailman-5ab205f5158fab7cc8daaf68e46aba4c281725b5.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/interfaces/listmanager.py | 7 | ||||
| -rw-r--r-- | src/mailman/model/listmanager.py | 5 | ||||
| -rw-r--r-- | src/mailman/rest/docs/lists.rst | 18 | ||||
| -rw-r--r-- | src/mailman/rest/domains.py | 9 | ||||
| -rw-r--r-- | src/mailman/rest/lists.py | 20 | ||||
| -rw-r--r-- | src/mailman/rest/root.py | 5 |
6 files changed, 61 insertions, 3 deletions
diff --git a/src/mailman/interfaces/listmanager.py b/src/mailman/interfaces/listmanager.py index c1b7721a9..88060ce83 100644 --- a/src/mailman/interfaces/listmanager.py +++ b/src/mailman/interfaces/listmanager.py @@ -140,3 +140,10 @@ class IListManager(Interface): :return: The list of all known mailing lists. :rtype: list of `IMailingList` """ + + def get_lists_for_domain(): + """The list of all mailing lists for a particular domain. + + :return: The mailing lists for a particular domain. + :rtype: list of `IMailingList` + """ diff --git a/src/mailman/model/listmanager.py b/src/mailman/model/listmanager.py index 16185e670..67b204b2a 100644 --- a/src/mailman/model/listmanager.py +++ b/src/mailman/model/listmanager.py @@ -102,3 +102,8 @@ class ListManager: """See `IListManager`.""" # lazr.restful will not allow this to be a generator. return list(self.mailing_lists) + + def get_lists_for_domain(self, domain): + """See `IListManager`.""" + return list(config.db.store.find(MailingList, MailingList.mail_host == domain)) + diff --git a/src/mailman/rest/docs/lists.rst b/src/mailman/rest/docs/lists.rst index fd96507c3..a8b100a1b 100644 --- a/src/mailman/rest/docs/lists.rst +++ b/src/mailman/rest/docs/lists.rst @@ -30,6 +30,24 @@ Create a mailing list in a domain and it's accessible via the API. start: 0 total_size: 1 +You can also query for lists from a particular domain. + + >>> dump_json('http://localhost:9001/3.0/domains/example.com/lists') + entry 0: + fqdn_listname: test-one@example.com + http_etag: "..." + list_name: test-one + mail_host: example.com + real_name: Test-one + self_link: http://localhost:9001/3.0/lists/test-one@example.com + http_etag: "..." + start: 0 + total_size: 1 + + >>> dump_json('http://localhost:9001/3.0/domains/other.com/lists') + http_etag: "..." + start: 0 + total_size: 0 Creating lists via the API ========================== diff --git a/src/mailman/rest/domains.py b/src/mailman/rest/domains.py index 780380270..1f4077e0c 100644 --- a/src/mailman/rest/domains.py +++ b/src/mailman/rest/domains.py @@ -33,6 +33,7 @@ from mailman.interfaces.domain import ( BadDomainSpecificationError, IDomainManager) from mailman.rest.helpers import CollectionMixin, etag, no_content, path_to from mailman.rest.validator import Validator +from mailman.rest.lists import ListsForDomain @@ -79,6 +80,14 @@ class ADomain(_DomainBase): return http.not_found() return no_content() + @resource.child() + def lists(self, request, segments): + """/<api>/domains/<domain>/lists""" + if len(segments) == 0: + return ListsForDomain(self._domain) + else: + return http.bad_request() + class AllDomains(_DomainBase): """The domains.""" diff --git a/src/mailman/rest/lists.py b/src/mailman/rest/lists.py index 2c2f58da1..8e8242ee8 100644 --- a/src/mailman/rest/lists.py +++ b/src/mailman/rest/lists.py @@ -24,6 +24,7 @@ __all__ = [ 'AList', 'AllLists', 'ListConfiguration', + 'ListsForDomain', ] @@ -207,4 +208,21 @@ class MembersOfList(MemberCollection): roster = self._mlist.get_roster(self._role) address_of_member = attrgetter('address.email') return list(sorted(roster.members, key=address_of_member)) - + + +class ListsForDomain(_ListBase): + """The mailing lists for a particular domain.""" + + def __init__(self, domain): + self._domain = domain + + @resource.GET() + def collection(self, request): + """/<api>/domains/<domain>/lists""" + resource = self._make_collection(request) + return http.ok([], etag(resource)) + + def _get_collection(self, request): + """See `CollectionMixin`.""" + return getUtility(IListManager).get_lists_for_domain(self._domain) + diff --git a/src/mailman/rest/root.py b/src/mailman/rest/root.py index cd4c8ceef..e4e1433f2 100644 --- a/src/mailman/rest/root.py +++ b/src/mailman/rest/root.py @@ -98,8 +98,9 @@ class TopLevel(resource.Resource): """ if len(segments) == 0: return AllDomains() - elif len(segments) == 1: - return ADomain(segments[0]), [] + elif len(segments) >= 1: + domain = segments.pop(0) + return ADomain(domain), segments else: return http.bad_request() |
