diff options
Diffstat (limited to 'src/mailman/rest')
| -rw-r--r-- | src/mailman/rest/adapters.py | 47 | ||||
| -rw-r--r-- | src/mailman/rest/configuration.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/configure.zcml | 7 | ||||
| -rw-r--r-- | src/mailman/rest/docs/domains.txt | 8 | ||||
| -rw-r--r-- | src/mailman/rest/root.py | 7 | ||||
| -rw-r--r-- | src/mailman/rest/urls.py | 7 | ||||
| -rw-r--r-- | src/mailman/rest/webservice.py | 6 |
7 files changed, 70 insertions, 14 deletions
diff --git a/src/mailman/rest/adapters.py b/src/mailman/rest/adapters.py new file mode 100644 index 000000000..611e1f976 --- /dev/null +++ b/src/mailman/rest/adapters.py @@ -0,0 +1,47 @@ +# Copyright (C) 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/>. + +"""Module stuff.""" + +from __future__ import absolute_import, unicode_literals + +__metaclass__ = type +__all__ = [ + 'DomainSet', + ] + + +from zope.interface import implements + +from mailman.interfaces.domain import IDomainSet + + + +class DomainSet: + """Sets of known domains.""" + + implements(IDomainSet) + + __name__ = 'domains' + + def __init__(self, config): + self._config = config + + def __iter__(self): + """See `IDomainSet`.""" + domains = self._config.domains + return [domains[domain] for domain in sorted(domains)] diff --git a/src/mailman/rest/configuration.py b/src/mailman/rest/configuration.py index 19ad6a09d..af1f90551 100644 --- a/src/mailman/rest/configuration.py +++ b/src/mailman/rest/configuration.py @@ -42,6 +42,8 @@ class AdminWebServiceConfiguration: @property def view_permission(self): + if config.webservice.view_permission.lower() == 'none': + return None return config.webservice.view_permission path_override = None diff --git a/src/mailman/rest/configure.zcml b/src/mailman/rest/configure.zcml index 70155bf67..c6d32ac58 100644 --- a/src/mailman/rest/configure.zcml +++ b/src/mailman/rest/configure.zcml @@ -9,6 +9,7 @@ <include package="lazr.restful" file="configure.zcml"/> <webservice:register module="mailman.interfaces.system" /> + <webservice:register module="mailman.interfaces.domain" /> <adapter for="zope.interface.Interface @@ -17,6 +18,12 @@ factory="mailman.rest.urls.AbsoluteURLMapper" /> + <adapter + for="mailman.config.config.IConfiguration" + provides="mailman.interfaces.domain.IDomainSet" + factory="mailman.rest.adapters.DomainSet" + /> + <utility factory="mailman.rest.configuration.AdminWebServiceConfiguration" provides="lazr.restful.interfaces.IWebServiceConfiguration"> diff --git a/src/mailman/rest/docs/domains.txt b/src/mailman/rest/docs/domains.txt new file mode 100644 index 000000000..e3ea902bc --- /dev/null +++ b/src/mailman/rest/docs/domains.txt @@ -0,0 +1,8 @@ +======= +Domains +======= + +The REST API can be queried for the set of known domains. + + >>> dump_json('http://localhost:8001/3.0/domains') + XXX diff --git a/src/mailman/rest/root.py b/src/mailman/rest/root.py index 620739287..a6dc26248 100644 --- a/src/mailman/rest/root.py +++ b/src/mailman/rest/root.py @@ -41,13 +41,6 @@ from mailman.core.system import system class AdminWebServiceRootResource(ServiceRootResource): """The root of the Mailman RESTful admin web service.""" - def get(self, name): - """See `IHasGet`.""" - top_level = { - 'sys': system, - } - return top_level.get(name) - class AdminWebServiceRootAbsoluteURL: """A basic implementation of `IAbsoluteURL` for the root object.""" diff --git a/src/mailman/rest/urls.py b/src/mailman/rest/urls.py index cdd921d4e..5d8d7930b 100644 --- a/src/mailman/rest/urls.py +++ b/src/mailman/rest/urls.py @@ -69,7 +69,8 @@ class AbsoluteURLMapper: # Special cases. if isinstance(ob, AdminWebServiceApplication): return '' - urls = { - system: 'system', - } + urls = dict( + system='system', + domains='domains', + ) return urls[ob] diff --git a/src/mailman/rest/webservice.py b/src/mailman/rest/webservice.py index bf1012203..a76ad3863 100644 --- a/src/mailman/rest/webservice.py +++ b/src/mailman/rest/webservice.py @@ -35,14 +35,13 @@ import logging from wsgiref.simple_server import WSGIServer, WSGIRequestHandler from lazr.restful.publisher import WebServiceRequestTraversal -from pkg_resources import resource_string -from zope.configuration import xmlconfig from zope.interface import implements from zope.publisher.browser import BrowserRequest from zope.publisher.publish import publish from mailman.config import config from mailman.core.system import system +from mailman.interfaces.domain import IDomainSet from mailman.interfaces.rest import IResolvePathNames from mailman.rest.publication import AdminWebServicePublication @@ -84,6 +83,7 @@ class AdminWebServiceApplication: """Maps root names to resources.""" top_level = dict( system=system, + domains=IDomainSet(config), ) return top_level.get(name) @@ -99,8 +99,6 @@ class AdminWebServiceWSGIRequestHandler(WSGIRequestHandler): def make_server(): """Create the WSGI admin REST server.""" - zcml = resource_string('mailman.rest', 'configure.zcml') - xmlconfig.string(zcml) host = config.webservice.hostname port = int(config.webservice.port) server = WSGIServer((host, port), AdminWebServiceWSGIRequestHandler) |
