summaryrefslogtreecommitdiff
path: root/src/mailman/docs
diff options
context:
space:
mode:
authorBarry Warsaw2009-05-27 17:47:21 -0400
committerBarry Warsaw2009-05-27 17:47:21 -0400
commit6213698325fb8905a8aefa0cc7779c2566f3e4e6 (patch)
tree8cded1b324f85334e6ab9ac66b1614b3c97e5796 /src/mailman/docs
parent4cf56226a52d2f5e607b5d4d83e20ae24619a383 (diff)
downloadmailman-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__.py30
-rw-r--r--src/mailman/docs/archivers.txt184
-rw-r--r--src/mailman/docs/pipelines.txt14
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