------------------------------------------------------------
revno: 6754
committer: Barry Warsaw <[email protected]>
branch nick: 3.0
timestamp: Sun 2009-07-26 21:23:02 -0400
message:
Move BadDomainSpecificationError to domain.txt interface. Try to set this to
return an HTTP 400 error, though it does not seem to work.
Expose list creation through the API.
modified:
src/mailman/app/lifecycle.py
src/mailman/bin/create_list.py
src/mailman/bin/import.py
src/mailman/core/errors.py
src/mailman/database/domain.py
src/mailman/database/listmanager.py
src/mailman/interfaces/domain.py
src/mailman/interfaces/listmanager.py
src/mailman/rest/docs/lists.txt
--
lp:mailman
https://code.launchpad.net/~mailman-coders/mailman/3.0
Your team Mailman Checkins is subscribed to branch lp:mailman.
To unsubscribe from this branch go to
https://code.launchpad.net/~mailman-coders/mailman/3.0/+edit-subscription.
=== modified file 'src/mailman/app/lifecycle.py'
--- src/mailman/app/lifecycle.py 2009-07-17 02:36:06 +0000
+++ src/mailman/app/lifecycle.py 2009-07-27 01:23:02 +0000
@@ -31,9 +31,9 @@
import logging
from mailman.config import config
-from mailman.core import errors
from mailman.email.validate import validate
-from mailman.interfaces.domain import IDomainManager
+from mailman.interfaces.domain import (
+ BadDomainSpecificationError, IDomainManager)
from mailman.interfaces.member import MemberRole
from mailman.utilities.modules import call_name
@@ -50,7 +50,7 @@
# pylint: disable-msg=W0612
listname, domain = fqdn_listname.split('@', 1)
if domain not in IDomainManager(config):
- raise errors.BadDomainSpecificationError(domain)
+ raise BadDomainSpecificationError(domain)
mlist = config.db.list_manager.create(fqdn_listname)
for style in config.style_manager.lookup(mlist):
style.apply(mlist)
=== modified file 'src/mailman/bin/create_list.py'
--- src/mailman/bin/create_list.py 2009-02-13 01:36:21 +0000
+++ src/mailman/bin/create_list.py 2009-07-27 01:23:02 +0000
@@ -23,6 +23,7 @@
from mailman.config import config
from mailman.core import errors
from mailman.email.message import UserNotification
+from mailman.interfaces.domain import BadDomainSpecificationError
from mailman.interfaces.listmanager import ListAlreadyExistsError
from mailman.options import SingleMailingListOptions
@@ -104,7 +105,7 @@
options.parser.error(_('Illegal list name: $fqdn_listname'))
except ListAlreadyExistsError:
options.parser.error(_('List already exists: $fqdn_listname'))
- except errors.BadDomainSpecificationError, domain:
+ except BadDomainSpecificationError, domain:
options.parser.error(_('Undefined domain: $domain'))
config.db.commit()
=== modified file 'src/mailman/bin/import.py'
--- src/mailman/bin/import.py 2009-01-01 22:16:51 +0000
+++ src/mailman/bin/import.py 2009-07-27 01:23:02 +0000
@@ -26,13 +26,13 @@
from xml.parsers.expat import ExpatError
from mailman import Defaults
-from mailman import errors
from mailman import MemberAdaptor
from mailman import Utils
from mailman import passwords
from mailman.MailList import MailList
from mailman.i18n import _
from mailman.initialize import initialize
+from mailman.interfaces.domain import BadDomainSpecificationError
from mailman.version import MAILMAN_VERSION
@@ -202,7 +202,7 @@
print _('Creating mailing list: $fqdn_listname')
mlist.Create(fqdn_listname, list_config['owner'][0],
list_config['password'])
- except errors.BadDomainSpecificationError:
+ except BadDomainSpecificationError:
print _('List is not in a supported domain: $fqdn_listname')
continue
# Save the list creation, then unlock and relock the list. This is so
=== modified file 'src/mailman/core/errors.py'
--- src/mailman/core/errors.py 2009-02-13 03:52:18 +0000
+++ src/mailman/core/errors.py 2009-07-27 01:23:02 +0000
@@ -23,7 +23,6 @@
__all__ = [
'AlreadyReceivingDigests',
'AlreadyReceivingRegularDeliveries',
- 'BadDomainSpecificationError',
'BadPasswordSchemeError',
'CantDigestError',
'DiscardMessage',
@@ -72,9 +71,6 @@
"""Base class for all Mailman errors."""
pass
-class BadDomainSpecificationError(MailmanError):
- """The specification of a virtual domain is invalid or duplicated."""
-
# Exception hierarchy for bad email address errors that can be raised from
=== modified file 'src/mailman/database/domain.py'
--- src/mailman/database/domain.py 2009-07-17 02:36:06 +0000
+++ src/mailman/database/domain.py 2009-07-27 01:23:02 +0000
@@ -29,9 +29,9 @@
from storm.locals import Int, Unicode
from zope.interface import implements
-from mailman.core.errors import BadDomainSpecificationError
from mailman.database.model import Model
-from mailman.interfaces.domain import IDomain, IDomainManager
+from mailman.interfaces.domain import (
+ BadDomainSpecificationError, IDomain, IDomainManager)
=== modified file 'src/mailman/database/listmanager.py'
--- src/mailman/database/listmanager.py 2009-07-11 01:55:26 +0000
+++ src/mailman/database/listmanager.py 2009-07-27 01:23:02 +0000
@@ -86,3 +86,8 @@
"""See `IListManager`."""
# lazr.restful will not allow this to be a generator.
return list(self.mailing_lists)
+
+ def new(self, fqdn_listname):
+ """See `IListManager."""
+ from mailman.app.lifecycle import create_list
+ return create_list(fqdn_listname)
=== modified file 'src/mailman/interfaces/domain.py'
--- src/mailman/interfaces/domain.py 2009-07-21 03:13:59 +0000
+++ src/mailman/interfaces/domain.py 2009-07-27 01:23:02 +0000
@@ -21,6 +21,7 @@
__metaclass__ = type
__all__ = [
+ 'BadDomainSpecificationError',
'IDomain',
'IDomainCollection',
'IDomainManager',
@@ -28,15 +29,23 @@
from lazr.restful.declarations import (
- collection_default_content, export_as_webservice_collection,
+ collection_default_content, error_status, export_as_webservice_collection,
export_as_webservice_entry, export_factory_operation, exported)
from zope.interface import Interface, Attribute
from zope.schema import TextLine
+from mailman.core.errors import MailmanError
from mailman.i18n import _
+...@error_status(400)
+class BadDomainSpecificationError(MailmanError):
+ """The specification of a virtual domain is invalid or duplicated."""
+
+
+
+
class IDomain(Interface):
"""Interface representing domains."""
=== modified file 'src/mailman/interfaces/listmanager.py'
--- src/mailman/interfaces/listmanager.py 2009-07-11 01:55:26 +0000
+++ src/mailman/interfaces/listmanager.py 2009-07-27 01:23:02 +0000
@@ -27,7 +27,8 @@
from lazr.restful.declarations import (
- collection_default_content, export_as_webservice_collection)
+ collection_default_content, export_as_webservice_collection,
+ export_factory_operation)
from zope.interface import Interface, Attribute
from mailman.interfaces.errors import MailmanError
@@ -96,3 +97,21 @@
:return: The list of all known mailing lists.
:rtype: list of `IMailingList`
"""
+
+ @export_factory_operation(IMailingList, ('fqdn_listname',))
+ def new(fqdn_listname):
+ """Add a new maling list.
+
+ The mailing may not exist yet, but the domain specified in
+ `fqdn_listname` must exist.
+
+ :param fqdn_listname: The fully qualified name for the new
+ mailing list.
+ :type fqdn_listname: string
+ :return: The new mailing list
+ :rtype: `IMailingList`
+ :raises `BadDomainSpecificationError`: when the hostname part of
+ `fqdn_listname` does not exist.
+ :raises `ListAlreadyExistsError`: when the mailing list already
+ exists.
+ """
=== modified file 'src/mailman/rest/docs/lists.txt'
--- src/mailman/rest/docs/lists.txt 2009-07-25 04:23:01 +0000
+++ src/mailman/rest/docs/lists.txt 2009-07-27 01:23:02 +0000
@@ -30,3 +30,46 @@
resource_type_link: http://localhost:8001/3.0/#mailing_lists
start: 0
total_size: 1
+
+
+Creating lists via the API
+==========================
+
+New mailing lists can also be created through the API, by posting to the
+'mailing_lists' URL. However lazr.restful requires us to use a 'named
+operation' instead of posting directly to the URL.
+
+ >>> dump_json('http://localhost:8001/3.0/lists', {
+ ... 'ws.op': 'new',
+ ... 'fqdn_listname': '[email protected]',
+ ... })
+ URL: http://localhost:8001/3.0/lists
+ content-length: 0
+ content-type: text/plain
+ date: ...
+ location: http://localhost:8001/3.0/mailing_lists/[email protected]
+ server: WSGIServer/... Python/...
+ x-content-type-warning: guessed from content
+ x-powered-by: Zope (www.zope.org), Python (www.python.org)
+
+The mailing list exists in the database.
+
+ >>> config.db.list_manager.get('[email protected]')
+ <mailing list "[email protected]" at ...>
+
+However, you are not allowed to create a mailing list in a domain that does
+not exist.
+
+ >>> dump_json('http://localhost:8001/3.0/lists', {
+ ... 'ws.op': 'new',
+ ... 'fqdn_listname': '[email protected]',
+ ... })
+ XXX
+
+Nor can you create a mailing list that already exists.
+
+ >>> dump_json('http://localhost:8001/3.0/lists', {
+ ... 'ws.op': 'new',
+ ... 'fqdn_listname': '[email protected]',
+ ... })
+ XXX
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
http://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org