diff options
| author | Barry Warsaw | 2009-05-27 17:47:21 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2009-05-27 17:47:21 -0400 |
| commit | 6213698325fb8905a8aefa0cc7779c2566f3e4e6 (patch) | |
| tree | 8cded1b324f85334e6ab9ac66b1614b3c97e5796 /src/mailman/docs | |
| parent | 4cf56226a52d2f5e607b5d4d83e20ae24619a383 (diff) | |
| download | mailman-6213698325fb8905a8aefa0cc7779c2566f3e4e6.tar.gz mailman-6213698325fb8905a8aefa0cc7779c2566f3e4e6.tar.zst mailman-6213698325fb8905a8aefa0cc7779c2566f3e4e6.zip | |
When cleaning up the artifacts of a list being deleted, be more careful for
artifacts that don't exist. In that case, just skimp them rather than
complain.
Docstring style cleanup.
Allow for doctest layer specification in the package's __init__.py, defaulting
to SMTPLayer if not given. This is probably too coarse for long term use, but
it works for now.
Make sure pipelines.txt properly cleans up its digest; it must be flushed
after clearing.
Diffstat (limited to 'src/mailman/docs')
| -rw-r--r-- | src/mailman/docs/__init__.py | 30 | ||||
| -rw-r--r-- | src/mailman/docs/archivers.txt | 184 | ||||
| -rw-r--r-- | src/mailman/docs/pipelines.txt | 14 |
3 files changed, 41 insertions, 187 deletions
diff --git a/src/mailman/docs/__init__.py b/src/mailman/docs/__init__.py index e69de29bb..0bb71a563 100644 --- a/src/mailman/docs/__init__.py +++ b/src/mailman/docs/__init__.py @@ -0,0 +1,30 @@ +# 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/>. + +"""General Mailman doc tests.""" + +from __future__ import absolute_import, unicode_literals + +__metaclass__ = type +__all__ = [ + 'layer', + ] + + + +from mailman.testing.layers import ConfigLayer +layer = ConfigLayer diff --git a/src/mailman/docs/archivers.txt b/src/mailman/docs/archivers.txt deleted file mode 100644 index ef36a25ac..000000000 --- a/src/mailman/docs/archivers.txt +++ /dev/null @@ -1,184 +0,0 @@ -Archivers -========= - -Mailman supports pluggable archivers, and it comes with several default -archivers. - - >>> from mailman.app.lifecycle import create_list - >>> mlist = create_list(u'test@example.com') - >>> msg = message_from_string("""\ - ... From: aperson@example.org - ... To: test@example.com - ... Subject: An archived message - ... Message-ID: <12345> - ... - ... Here is an archived message. - ... """) - -Archivers support an interface which provides the RFC 2369 List-Archive -header, and one that provides a 'permalink' to the specific message object in -the archive. This latter is appropriate for the message footer or for the RFC -5064 Archived-At header. - -Pipermail does not support a permalink, so that interface returns None. -Mailman defines a draft spec for how list servers and archivers can -interoperate. - - >>> archivers = {} - >>> from operator import attrgetter - >>> for archiver in sorted(config.archivers, key=attrgetter('name')): - ... print archiver.name - ... print ' ', archiver.list_url(mlist) - ... print ' ', archiver.permalink(mlist, msg) - ... archivers[archiver.name] = archiver - mail-archive - http://go.mail-archive.dev/test%40example.com - http://go.mail-archive.dev/ZaXPPxRMM9_hFZL4vTRlQlBx8pc= - mhonarc - http://lists.example.com/.../test@example.com - http://lists.example.com/.../RSZCG7IGPHFIRW3EMTVMMDNJMNCVCOLE - pipermail - http://www.example.com/pipermail/test@example.com - None - prototype - http://lists.example.com - http://lists.example.com/RSZCG7IGPHFIRW3EMTVMMDNJMNCVCOLE - - -Sending the message to the archiver ------------------------------------ - -The archiver is also able to archive the message. - - >>> archivers['pipermail'].archive_message(mlist, msg) - - >>> import os - >>> from mailman.interfaces.archiver import IPipermailMailingList - >>> pckpath = os.path.join( - ... IPipermailMailingList(mlist).archive_dir(), - ... 'pipermail.pck') - >>> os.path.exists(pckpath) - True - -Note however that the prototype archiver can't archive messages. - - >>> archivers['prototype'].archive_message(mlist, msg) - Traceback (most recent call last): - ... - NotImplementedError - - -The Mail-Archive.com --------------------- - -The Mail-Archive <http://www.mail-archive.com> is a public archiver that can -be used to archive message for free. Mailman comes with a plugin for this -archiver; by enabling it messages to public lists will get sent there -automatically. - - >>> archiver = archivers['mail-archive'] - >>> print archiver.list_url(mlist) - http://go.mail-archive.dev/test%40example.com - >>> print archiver.permalink(mlist, msg) - http://go.mail-archive.dev/ZaXPPxRMM9_hFZL4vTRlQlBx8pc= - -To archive the message, the archiver actually mails the message to a special -address at the Mail-Archive. - - >>> archiver.archive_message(mlist, msg) - - >>> from mailman.queue.outgoing import OutgoingRunner - >>> from mailman.testing.helpers import make_testable_runner - >>> outgoing = make_testable_runner(OutgoingRunner, 'out') - >>> outgoing.run() - - >>> from operator import itemgetter - >>> messages = list(smtpd.messages) - >>> len(messages) - 1 - - >>> print messages[0].as_string() - From: aperson@example.org - To: test@example.com - Subject: An archived message - Message-ID: <12345> - X-Message-ID-Hash: ZaXPPxRMM9_hFZL4vTRlQlBx8pc= - MIME-Version: 1.0 - Content-Type: text/plain; charset="us-ascii" - Content-Transfer-Encoding: 7bit - Sender: test-bounces@example.com - Errors-To: test-bounces@example.com - X-Peer: 127.0.0.1:... - X-MailFrom: test-bounces@example.com - X-RcptTo: archive@mail-archive.dev - <BLANKLINE> - Here is an archived message. - _______________________________________________ - Test mailing list - test@example.com - http://lists.example.com/listinfo/test@example.com - - >>> smtpd.clear() - -However, if the mailing list is not public, the message will never be archived -at this service. - - >>> mlist.archive_private = True - >>> print archiver.list_url(mlist) - None - >>> print archiver.permalink(mlist, msg) - None - >>> archiver.archive_message(mlist, msg) - >>> list(smtpd.messages) - [] - -Additionally, this archiver can handle malformed Message-IDs. - - >>> mlist.archive_private = False - >>> del msg['message-id'] - >>> msg['Message-ID'] = '12345>' - >>> print archiver.permalink(mlist, msg) - http://go.mail-archive.dev/bXvG32YzcDEIVDaDLaUSVQekfo8= - - >>> del msg['message-id'] - >>> msg['Message-ID'] = '<12345' - >>> print archiver.permalink(mlist, msg) - http://go.mail-archive.dev/9rockPrT1Mm-jOsLWS6_hseR_OY= - - >>> del msg['message-id'] - >>> msg['Message-ID'] = '12345' - >>> print archiver.permalink(mlist, msg) - http://go.mail-archive.dev/ZaXPPxRMM9_hFZL4vTRlQlBx8pc= - - >>> del msg['message-id'] - >>> msg['Message-ID'] = ' 12345 ' - >>> print archiver.permalink(mlist, msg) - http://go.mail-archive.dev/ZaXPPxRMM9_hFZL4vTRlQlBx8pc= - - -MHonArc -------- - -The MHonArc archiver <http://www.mhonarc.org> is also available. - - >>> archiver = archivers['mhonarc'] - >>> print archiver.name - mhonarc - -Messages sent to a local MHonArc instance are added to its archive via a -subprocess call. - - >>> archiver.archive_message(mlist, msg) - >>> archive_log = open(os.path.join(config.LOG_DIR, 'archiver')) - >>> try: - ... contents = archive_log.read() - ... finally: - ... archive_log.close() - >>> print 'LOG:', contents - LOG: ... /usr/bin/mhonarc -add - -dbfile /.../private/test@example.com.mbox/mhonarc.db - -outdir /.../mhonarc/test@example.com - -stderr /.../logs/mhonarc - -stdout /.../logs/mhonarc - -spammode -umask 022 - ... diff --git a/src/mailman/docs/pipelines.txt b/src/mailman/docs/pipelines.txt index 0e6dad8e8..36bf2dd23 100644 --- a/src/mailman/docs/pipelines.txt +++ b/src/mailman/docs/pipelines.txt @@ -1,3 +1,4 @@ +========= Pipelines ========= @@ -16,7 +17,7 @@ message once it's started. Processing a message --------------------- +==================== Messages hit the pipeline after they've been accepted for posting. @@ -47,12 +48,12 @@ etc. List-Post: <mailto:xtest@example.com> List-Subscribe: <http://lists.example.com/listinfo/xtest@example.com>, - <mailto:xtest-join@example.com> + <mailto:xtest-join@example.com> Archived-At: http://lists.example.com/archives/4CMWUN6BHVCMHMDAOSJZ2Q72G5M32MWB List-Unsubscribe: <http://lists.example.com/listinfo/xtest@example.com>, - <mailto:xtest-leave@example.com> + <mailto:xtest-leave@example.com> List-Archive: <http://lists.example.com/archives/xtest@example.com> List-Help: <mailto:xtest-request@example.com?subject=help> <BLANKLINE> @@ -183,4 +184,11 @@ There's now one message in the digest mailbox, getting ready to be sent. <BLANKLINE> <BLANKLINE> + +Clean up the digests +==================== + >>> digest.clear() + >>> digest.flush() + >>> sum(1 for msg in digest_mbox(mlist)) + 0 |
