------------------------------------------------------------
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

Reply via email to