Merge lp:~barry/mailman.client/bilingual into lp:mailman.client

Proposed by Barry Warsaw on 2015-01-04
Status: Merged
Merged at revision: 60
Proposed branch: lp:~barry/mailman.client/bilingual
Merge into: lp:mailman.client
Diff against target: 6418 lines (+4561/-1012)
23 files modified
.bzrignore (+3/-0)
MANIFEST.in (+2/-2)
README.rst (+1/-2)
TESTING.rst (+90/-0)
bin/test (+0/-35)
distribute_setup.py (+0/-477)
setup.py (+11/-13)
setup_helpers.py (+20/-19)
src/__init__.py (+1/-1)
src/mailmanclient/NEWS.rst (+6/-2)
src/mailmanclient/README.rst (+3/-4)
src/mailmanclient/__init__.py (+2/-2)
src/mailmanclient/_client.py (+100/-71)
src/mailmanclient/docs/using.rst (+130/-111)
src/mailmanclient/testing/documentation.py (+84/-0)
src/mailmanclient/testing/nose.py (+129/-0)
src/mailmanclient/tests/data/tape.yaml (+3905/-0)
src/mailmanclient/tests/test_docs.py (+0/-127)
src/mailmanclient/tests/test_domain.py (+47/-0)
src/mailmanclient/tests/utils.py (+0/-144)
template.py (+2/-2)
tox.ini (+15/-0)
unittest.cfg (+10/-0)
To merge this branch: bzr merge lp:~barry/mailman.client/bilingual
Reviewer Review Type Date Requested Status
Florian Fuchs 2015-01-04 Pending
Review via email: mp+245537@code.launchpad.net

Description of the change

mailmanclient's test suite no longer imports from the Mailman 3 code; it only uses the REST API.

It now uses `tox` to run the test suite against multiple versions of Python, and nose2 as the test runner.

Drop the use of distribute since it's been merged with setuptools.

Port to Python 3 (I've tested against 3.4 and 2.7 but I don't have a 2.6, 3.2, or 3.3 environment).

Added support for the new `queues` resource (py3 MM3 branch only; merged RSN).

Removed some unnecessary files and code; cleaned up some other stuff.

README.txt -> README.rst
using.txt -> using.rst
NEWS.txt -> NEWS.rst
Added a TESTING.rst file.

To post a comment you must log in.
Florian Fuchs (flo-fuchs) wrote :

Hi Barry,

thank you very much for this change! I ran the tests like described in TESTING.rst and also did some manual testing with fresh checkouts of the core, client and postorius. Worked like a charm.

I talked to Aurélien today about whether to wait with this merge until we have corresponing tests in Postorius and Hyperkitty. But we agreed that we better merge this branch now and then take care of Postorius and HK.

Flo

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2010-12-23 18:07:32 +0000
3+++ .bzrignore 2015-01-04 23:44:27 +0000
4@@ -1,3 +1,6 @@
5 build
6 dist
7 mailman.client.egg-info
8+.tox
9+__pycache__
10+*.egg-info
11
12=== modified file 'MANIFEST.in'
13--- MANIFEST.in 2010-12-23 16:29:39 +0000
14+++ MANIFEST.in 2015-01-04 23:44:27 +0000
15@@ -1,4 +1,4 @@
16-include *.py
17-global-include *.txt
18+include *.py MANIFEST.in
19+global-include *.txt *.rst *.yaml
20 include Makefile
21 prune _build
22
23=== renamed file 'README.txt' => 'README.rst'
24--- README.txt 2010-12-26 21:22:12 +0000
25+++ README.rst 2015-01-04 23:44:27 +0000
26@@ -41,9 +41,8 @@
27 You may download the latest version of the package from the Python
28 `Cheese Shop`_ or from Launchpad_.
29
30-You can also install it via ``easy_install`` or ``pip``.
31+You can also install it via ``pip``.
32
33- % sudo easy_install mailman.client
34 % sudo pip install mailman.client
35
36 See the Launchpad project page for access to the Bazaar branch, bug report,
37
38=== added file 'TESTING.rst'
39--- TESTING.rst 1970-01-01 00:00:00 +0000
40+++ TESTING.rst 2015-01-04 23:44:27 +0000
41@@ -0,0 +1,90 @@
42+======================
43+Running the test suite
44+======================
45+
46+The test suite is run with the `tox`_ tool, which allows it to be run against
47+multiple versions of Python. There are two modes to the test suite:
48+
49+ * *Record mode* which is used to record the HTTP traffic against a live
50+ Mailman 3 REST server.
51+ * *Replay mode* which allows you to run the test suite off-line, without
52+ running the REST server.
53+
54+Whenever you add tests for other parts of the REST API, you need to run the
55+suite once in record mode to generate the YAML file of HTTP requests and
56+responses.
57+
58+Then you can run the test suite in replay mode as often as you want, and
59+Mailman 3 needn't even be installed on your system.
60+
61+Since this branch ships with a recording file, you don't need to run in record
62+mode to start with.
63+
64+
65+Replay mode
66+===========
67+
68+To run the test suite in replay mode (the default), just run the following::
69+
70+ $ tox
71+
72+This will attempt to run the test suite against Python 2.6, 2.7, 3.2, 3.3, and
73+3.4, or whatever combination of those that are available on your system.
74+
75+
76+Record mode
77+===========
78+
79+Start by branching the Mailman 3 code base, then you should install it into a
80+virtual environment. The easiest way to do this is with `tox`::
81+
82+ $ tox --notest -r
83+
84+Now, use the virtual environment that `tox` creates to create a template `var`
85+directory in the current directory::
86+
87+ $ .tox/py34/bin/mailman info
88+
89+Now you need to modify the ``var/etc/mailman.cfg`` configuration file, so that
90+it contains the following::
91+
92+ [devmode]
93+ enabled: yes
94+ recipient: you@yourdomain.com
95+
96+ [mta]
97+ smtp_port: 9025
98+ lmtp_port: 9024
99+ incoming: mailman.testing.mta.FakeMTA
100+
101+ [webservice]
102+ port: 9001
103+
104+Now you can start Mailman 3::
105+
106+ $ .tox/py34/bin/mailman start
107+
108+Back in your ``mailmanclient`` branch, run the test suite in record mode::
109+
110+ $ tox -e record
111+
112+You should now have an updated recording file (``tape.yaml``).
113+
114+If you find you need to re-run the test suite, you *must* first stop the
115+Mailman REST server, and then delete the ``mailman.db`` file, since it
116+contains state that will mess up the ``mailmanclient`` test suite::
117+
118+ $ cd <mailman3-branch>
119+ $ .tox/py34/bin/mailman stop
120+ $ rm -f var/data/mailman.db
121+ $ .tox/py34/bin/mailman start
122+
123+ $ cd <mailmanclient-branch>
124+ $ tox -e record
125+
126+Once you're done recording the HTTP traffic, you can stop the Mailman 3 server
127+and you won't need it again. It's a good idea to commit the ``tape.yaml``
128+changes for other users of your branch.
129+
130+
131+.. _`tox`: https://testrun.org/tox/latest/
132
133=== removed directory 'bin'
134=== removed file 'bin/test'
135--- bin/test 2014-11-24 10:25:10 +0000
136+++ bin/test 1970-01-01 00:00:00 +0000
137@@ -1,35 +0,0 @@
138-#!/usr/bin/env python
139-# Copyright (C) 2010-2013 by the Free Software Foundation, Inc.
140-#
141-# This file is part of mailman.client.
142-#
143-# mailman.client is free software: you can redistribute it and/or modify it
144-# under the terms of the GNU Lesser General Public License as published by the
145-# Free Software Foundation, version 3 of the License.
146-#
147-# mailman.client is distributed in the hope that it will be useful, but
148-# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
149-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
150-# License for more details.
151-#
152-# You should have received a copy of the GNU Lesser General Public License
153-# along with mailman.client. If not, see <http://www.gnu.org/licenses/>.
154-
155-"""Test runner."""
156-
157-from __future__ import absolute_import, unicode_literals
158-
159-__metaclass__ = type
160-
161-
162-import os
163-import sys
164-import unittest
165-
166-from mailmanclient.tests.test_docs import additional_tests
167-
168-
169-if __name__ == '__main__':
170- suite = additional_tests()
171- runner = unittest.TextTestRunner(verbosity=2)
172- runner.run(suite)
173
174=== removed file 'distribute_setup.py'
175--- distribute_setup.py 2010-12-23 16:29:39 +0000
176+++ distribute_setup.py 1970-01-01 00:00:00 +0000
177@@ -1,477 +0,0 @@
178-#!python
179-"""Bootstrap distribute installation
180-
181-If you want to use setuptools in your package's setup.py, just include this
182-file in the same directory with it, and add this to the top of your setup.py::
183-
184- from distribute_setup import use_setuptools
185- use_setuptools()
186-
187-If you want to require a specific version of setuptools, set a download
188-mirror, or use an alternate download directory, you can do so by supplying
189-the appropriate options to ``use_setuptools()``.
190-
191-This file can also be run as a script to install or upgrade setuptools.
192-"""
193-import os
194-import sys
195-import time
196-import fnmatch
197-import tempfile
198-import tarfile
199-from distutils import log
200-
201-try:
202- from site import USER_SITE
203-except ImportError:
204- USER_SITE = None
205-
206-try:
207- import subprocess
208-
209- def _python_cmd(*args):
210- args = (sys.executable,) + args
211- return subprocess.call(args) == 0
212-
213-except ImportError:
214- # will be used for python 2.3
215- def _python_cmd(*args):
216- args = (sys.executable,) + args
217- # quoting arguments if windows
218- if sys.platform == 'win32':
219- def quote(arg):
220- if ' ' in arg:
221- return '"%s"' % arg
222- return arg
223- args = [quote(arg) for arg in args]
224- return os.spawnl(os.P_WAIT, sys.executable, *args) == 0
225-
226-DEFAULT_VERSION = "0.6.10"
227-DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
228-SETUPTOOLS_FAKED_VERSION = "0.6c11"
229-
230-SETUPTOOLS_PKG_INFO = """\
231-Metadata-Version: 1.0
232-Name: setuptools
233-Version: %s
234-Summary: xxxx
235-Home-page: xxx
236-Author: xxx
237-Author-email: xxx
238-License: xxx
239-Description: xxx
240-""" % SETUPTOOLS_FAKED_VERSION
241-
242-
243-def _install(tarball):
244- # extracting the tarball
245- tmpdir = tempfile.mkdtemp()
246- log.warn('Extracting in %s', tmpdir)
247- old_wd = os.getcwd()
248- try:
249- os.chdir(tmpdir)
250- tar = tarfile.open(tarball)
251- _extractall(tar)
252- tar.close()
253-
254- # going in the directory
255- subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
256- os.chdir(subdir)
257- log.warn('Now working in %s', subdir)
258-
259- # installing
260- log.warn('Installing Distribute')
261- if not _python_cmd('setup.py', 'install'):
262- log.warn('Something went wrong during the installation.')
263- log.warn('See the error message above.')
264- finally:
265- os.chdir(old_wd)
266-
267-
268-def _build_egg(egg, tarball, to_dir):
269- # extracting the tarball
270- tmpdir = tempfile.mkdtemp()
271- log.warn('Extracting in %s', tmpdir)
272- old_wd = os.getcwd()
273- try:
274- os.chdir(tmpdir)
275- tar = tarfile.open(tarball)
276- _extractall(tar)
277- tar.close()
278-
279- # going in the directory
280- subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
281- os.chdir(subdir)
282- log.warn('Now working in %s', subdir)
283-
284- # building an egg
285- log.warn('Building a Distribute egg in %s', to_dir)
286- _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
287-
288- finally:
289- os.chdir(old_wd)
290- # returning the result
291- log.warn(egg)
292- if not os.path.exists(egg):
293- raise IOError('Could not build the egg.')
294-
295-
296-def _do_download(version, download_base, to_dir, download_delay):
297- egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg'
298- % (version, sys.version_info[0], sys.version_info[1]))
299- if not os.path.exists(egg):
300- tarball = download_setuptools(version, download_base,
301- to_dir, download_delay)
302- _build_egg(egg, tarball, to_dir)
303- sys.path.insert(0, egg)
304- import setuptools
305- setuptools.bootstrap_install_from = egg
306-
307-
308-def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
309- to_dir=os.curdir, download_delay=15, no_fake=True):
310- # making sure we use the absolute path
311- to_dir = os.path.abspath(to_dir)
312- was_imported = 'pkg_resources' in sys.modules or \
313- 'setuptools' in sys.modules
314- try:
315- try:
316- import pkg_resources
317- if not hasattr(pkg_resources, '_distribute'):
318- if not no_fake:
319- _fake_setuptools()
320- raise ImportError
321- except ImportError:
322- return _do_download(version, download_base, to_dir, download_delay)
323- try:
324- pkg_resources.require("distribute>="+version)
325- return
326- except pkg_resources.VersionConflict:
327- e = sys.exc_info()[1]
328- if was_imported:
329- sys.stderr.write(
330- "The required version of distribute (>=%s) is not available,\n"
331- "and can't be installed while this script is running. Please\n"
332- "install a more recent version first, using\n"
333- "'easy_install -U distribute'."
334- "\n\n(Currently using %r)\n" % (version, e.args[0]))
335- sys.exit(2)
336- else:
337- del pkg_resources, sys.modules['pkg_resources'] # reload ok
338- return _do_download(version, download_base, to_dir,
339- download_delay)
340- except pkg_resources.DistributionNotFound:
341- return _do_download(version, download_base, to_dir,
342- download_delay)
343- finally:
344- if not no_fake:
345- _create_fake_setuptools_pkg_info(to_dir)
346-
347-def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
348- to_dir=os.curdir, delay=15):
349- """Download distribute from a specified location and return its filename
350-
351- `version` should be a valid distribute version number that is available
352- as an egg for download under the `download_base` URL (which should end
353- with a '/'). `to_dir` is the directory where the egg will be downloaded.
354- `delay` is the number of seconds to pause before an actual download
355- attempt.
356- """
357- # making sure we use the absolute path
358- to_dir = os.path.abspath(to_dir)
359- try:
360- from urllib.request import urlopen
361- except ImportError:
362- from urllib2 import urlopen
363- tgz_name = "distribute-%s.tar.gz" % version
364- url = download_base + tgz_name
365- saveto = os.path.join(to_dir, tgz_name)
366- src = dst = None
367- if not os.path.exists(saveto): # Avoid repeated downloads
368- try:
369- log.warn("Downloading %s", url)
370- src = urlopen(url)
371- # Read/write all in one block, so we don't create a corrupt file
372- # if the download is interrupted.
373- data = src.read()
374- dst = open(saveto, "wb")
375- dst.write(data)
376- finally:
377- if src:
378- src.close()
379- if dst:
380- dst.close()
381- return os.path.realpath(saveto)
382-
383-
384-def _patch_file(path, content):
385- """Will backup the file then patch it"""
386- existing_content = open(path).read()
387- if existing_content == content:
388- # already patched
389- log.warn('Already patched.')
390- return False
391- log.warn('Patching...')
392- _rename_path(path)
393- f = open(path, 'w')
394- try:
395- f.write(content)
396- finally:
397- f.close()
398- return True
399-
400-
401-def _same_content(path, content):
402- return open(path).read() == content
403-
404-def _no_sandbox(function):
405- def __no_sandbox(*args, **kw):
406- try:
407- from setuptools.sandbox import DirectorySandbox
408- def violation(*args):
409- pass
410- DirectorySandbox._old = DirectorySandbox._violation
411- DirectorySandbox._violation = violation
412- patched = True
413- except ImportError:
414- patched = False
415-
416- try:
417- return function(*args, **kw)
418- finally:
419- if patched:
420- DirectorySandbox._violation = DirectorySandbox._old
421- del DirectorySandbox._old
422-
423- return __no_sandbox
424-
425-@_no_sandbox
426-def _rename_path(path):
427- new_name = path + '.OLD.%s' % time.time()
428- log.warn('Renaming %s into %s', path, new_name)
429- os.rename(path, new_name)
430- return new_name
431-
432-def _remove_flat_installation(placeholder):
433- if not os.path.isdir(placeholder):
434- log.warn('Unkown installation at %s', placeholder)
435- return False
436- found = False
437- for file in os.listdir(placeholder):
438- if fnmatch.fnmatch(file, 'setuptools*.egg-info'):
439- found = True
440- break
441- if not found:
442- log.warn('Could not locate setuptools*.egg-info')
443- return
444-
445- log.warn('Removing elements out of the way...')
446- pkg_info = os.path.join(placeholder, file)
447- if os.path.isdir(pkg_info):
448- patched = _patch_egg_dir(pkg_info)
449- else:
450- patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO)
451-
452- if not patched:
453- log.warn('%s already patched.', pkg_info)
454- return False
455- # now let's move the files out of the way
456- for element in ('setuptools', 'pkg_resources.py', 'site.py'):
457- element = os.path.join(placeholder, element)
458- if os.path.exists(element):
459- _rename_path(element)
460- else:
461- log.warn('Could not find the %s element of the '
462- 'Setuptools distribution', element)
463- return True
464-
465-
466-def _after_install(dist):
467- log.warn('After install bootstrap.')
468- placeholder = dist.get_command_obj('install').install_purelib
469- _create_fake_setuptools_pkg_info(placeholder)
470-
471-@_no_sandbox
472-def _create_fake_setuptools_pkg_info(placeholder):
473- if not placeholder or not os.path.exists(placeholder):
474- log.warn('Could not find the install location')
475- return
476- pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1])
477- setuptools_file = 'setuptools-%s-py%s.egg-info' % \
478- (SETUPTOOLS_FAKED_VERSION, pyver)
479- pkg_info = os.path.join(placeholder, setuptools_file)
480- if os.path.exists(pkg_info):
481- log.warn('%s already exists', pkg_info)
482- return
483-
484- log.warn('Creating %s', pkg_info)
485- f = open(pkg_info, 'w')
486- try:
487- f.write(SETUPTOOLS_PKG_INFO)
488- finally:
489- f.close()
490-
491- pth_file = os.path.join(placeholder, 'setuptools.pth')
492- log.warn('Creating %s', pth_file)
493- f = open(pth_file, 'w')
494- try:
495- f.write(os.path.join(os.curdir, setuptools_file))
496- finally:
497- f.close()
498-
499-def _patch_egg_dir(path):
500- # let's check if it's already patched
501- pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
502- if os.path.exists(pkg_info):
503- if _same_content(pkg_info, SETUPTOOLS_PKG_INFO):
504- log.warn('%s already patched.', pkg_info)
505- return False
506- _rename_path(path)
507- os.mkdir(path)
508- os.mkdir(os.path.join(path, 'EGG-INFO'))
509- pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
510- f = open(pkg_info, 'w')
511- try:
512- f.write(SETUPTOOLS_PKG_INFO)
513- finally:
514- f.close()
515- return True
516-
517-
518-def _before_install():
519- log.warn('Before install bootstrap.')
520- _fake_setuptools()
521-
522-
523-def _under_prefix(location):
524- if 'install' not in sys.argv:
525- return True
526- args = sys.argv[sys.argv.index('install')+1:]
527- for index, arg in enumerate(args):
528- for option in ('--root', '--prefix'):
529- if arg.startswith('%s=' % option):
530- top_dir = arg.split('root=')[-1]
531- return location.startswith(top_dir)
532- elif arg == option:
533- if len(args) > index:
534- top_dir = args[index+1]
535- return location.startswith(top_dir)
536- elif option == '--user' and USER_SITE is not None:
537- return location.startswith(USER_SITE)
538- return True
539-
540-
541-def _fake_setuptools():
542- log.warn('Scanning installed packages')
543- try:
544- import pkg_resources
545- except ImportError:
546- # we're cool
547- log.warn('Setuptools or Distribute does not seem to be installed.')
548- return
549- ws = pkg_resources.working_set
550- try:
551- setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools',
552- replacement=False))
553- except TypeError:
554- # old distribute API
555- setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools'))
556-
557- if setuptools_dist is None:
558- log.warn('No setuptools distribution found')
559- return
560- # detecting if it was already faked
561- setuptools_location = setuptools_dist.location
562- log.warn('Setuptools installation detected at %s', setuptools_location)
563-
564- # if --root or --preix was provided, and if
565- # setuptools is not located in them, we don't patch it
566- if not _under_prefix(setuptools_location):
567- log.warn('Not patching, --root or --prefix is installing Distribute'
568- ' in another location')
569- return
570-
571- # let's see if its an egg
572- if not setuptools_location.endswith('.egg'):
573- log.warn('Non-egg installation')
574- res = _remove_flat_installation(setuptools_location)
575- if not res:
576- return
577- else:
578- log.warn('Egg installation')
579- pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO')
580- if (os.path.exists(pkg_info) and
581- _same_content(pkg_info, SETUPTOOLS_PKG_INFO)):
582- log.warn('Already patched.')
583- return
584- log.warn('Patching...')
585- # let's create a fake egg replacing setuptools one
586- res = _patch_egg_dir(setuptools_location)
587- if not res:
588- return
589- log.warn('Patched done.')
590- _relaunch()
591-
592-
593-def _relaunch():
594- log.warn('Relaunching...')
595- # we have to relaunch the process
596- args = [sys.executable] + sys.argv
597- sys.exit(subprocess.call(args))
598-
599-
600-def _extractall(self, path=".", members=None):
601- """Extract all members from the archive to the current working
602- directory and set owner, modification time and permissions on
603- directories afterwards. `path' specifies a different directory
604- to extract to. `members' is optional and must be a subset of the
605- list returned by getmembers().
606- """
607- import copy
608- import operator
609- from tarfile import ExtractError
610- directories = []
611-
612- if members is None:
613- members = self
614-
615- for tarinfo in members:
616- if tarinfo.isdir():
617- # Extract directories with a safe mode.
618- directories.append(tarinfo)
619- tarinfo = copy.copy(tarinfo)
620- tarinfo.mode = 448 # decimal for oct 0700
621- self.extract(tarinfo, path)
622-
623- # Reverse sort directories.
624- if sys.version_info < (2, 4):
625- def sorter(dir1, dir2):
626- return cmp(dir1.name, dir2.name)
627- directories.sort(sorter)
628- directories.reverse()
629- else:
630- directories.sort(key=operator.attrgetter('name'), reverse=True)
631-
632- # Set correct owner, mtime and filemode on directories.
633- for tarinfo in directories:
634- dirpath = os.path.join(path, tarinfo.name)
635- try:
636- self.chown(tarinfo, dirpath)
637- self.utime(tarinfo, dirpath)
638- self.chmod(tarinfo, dirpath)
639- except ExtractError:
640- e = sys.exc_info()[1]
641- if self.errorlevel > 1:
642- raise
643- else:
644- self._dbg(1, "tarfile: %s" % e)
645-
646-
647-def main(argv, version=DEFAULT_VERSION):
648- """Install or upgrade setuptools and EasyInstall"""
649- tarball = download_setuptools()
650- _install(tarball)
651-
652-
653-if __name__ == '__main__':
654- main(sys.argv[1:])
655
656=== modified file 'setup.py'
657--- setup.py 2014-11-19 11:03:32 +0000
658+++ setup.py 2015-01-04 23:44:27 +0000
659@@ -1,4 +1,4 @@
660-# Copyright (C) 2010 by the Free Software Foundation, Inc.
661+# Copyright (C) 2010-2015 by the Free Software Foundation, Inc.
662 #
663 # This file is part of mailman.client.
664 #
665@@ -15,34 +15,32 @@
666 # You should have received a copy of the GNU Lesser General Public License
667 # along with mailman.client. If not, see <http://www.gnu.org/licenses/>.
668
669-import distribute_setup
670-distribute_setup.use_setuptools()
671-
672 from setup_helpers import (
673 description, find_doctests, get_version, long_description, require_python)
674 from setuptools import setup, find_packages
675
676
677 require_python(0x20600f0)
678+__version__ = get_version('src/mailmanclient/__init__.py')
679
680
681 setup(
682 name='mailmanclient',
683- version='1.0.0b1',
684+ version=__version__,
685 packages=find_packages('src'),
686 package_dir = {'': 'src'},
687 include_package_data=True,
688 maintainer='Barry Warsaw',
689 maintainer_email='barry@list.org',
690- description=description('README.txt'),
691+ description=description('README.rst'),
692 long_description=long_description(
693- 'src/mailmanclient/README.txt',
694- 'src/mailmanclient/NEWS.txt'),
695+ 'src/mailmanclient/README.rst',
696+ 'src/mailmanclient/NEWS.rst'),
697 license='LGPLv3',
698 url='http://launchpad.net/mailman.client',
699 download_url='https://launchpad.net/mailman.client/+download',
700- # Auto-conversion to Python 3.
701- use_2to3=True,
702- convert_2to3_doctests=find_doctests(),
703- install_requires=['httplib2', 'mock', 'WebTest', ],
704-)
705+ install_requires=[
706+ 'httplib2',
707+ 'six',
708+ ],
709+ )
710
711=== modified file 'setup_helpers.py'
712--- setup_helpers.py 2014-12-16 11:07:10 +0000
713+++ setup_helpers.py 2015-01-04 23:44:27 +0000
714@@ -1,23 +1,22 @@
715-# Copyright (C) 2009, 2010 by Barry A. Warsaw
716-#
717-# This file is part of flufl.i18n
718-#
719-# flufl.i18n is free software: you can redistribute it and/or modify it under
720-# the terms of the GNU Lesser General Public License as published by the Free
721-# Software Foundation, version 3 of the License.
722-#
723-# flufl.i18n is distributed in the hope that it will be useful, but WITHOUT
724-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
725-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
726-# for more details.
727+# Copyright (C) 2009-2015 by the Free Software Foundation, Inc.
728+#
729+# This file is part of mailman.client
730+#
731+# mailman.client is free software: you can redistribute it and/or modify it
732+# under the terms of the GNU Lesser General Public License as published by the
733+# Free Software Foundation, version 3 of the License.
734+#
735+# mailman.client is distributed in the hope that it will be useful, but WITHOUT
736+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
737+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
738+# details.
739 #
740 # You should have received a copy of the GNU Lesser General Public License
741-# along with flufl.i18n. If not, see <http://www.gnu.org/licenses/>.
742+# along with mailman.client. If not, see <http://www.gnu.org/licenses/>.
743
744 """setup.py helper functions."""
745
746-from __future__ import absolute_import, unicode_literals
747-from __future__ import print_function
748+from __future__ import absolute_import, print_function, unicode_literals
749
750
751 __metaclass__ = type
752@@ -33,6 +32,7 @@
753 import os
754 import re
755 import sys
756+import codecs
757
758
759 DEFAULT_VERSION_RE = re.compile(r'(?P<version>\d+\.\d(?:\.\d+)?)')
760@@ -131,9 +131,10 @@
761 """Provide a long description."""
762 res = []
763 for value in filenames:
764- if value.endswith('.txt'):
765- with open(value) as fp:
766- value = fp.read().decode('UTF-8')
767+ base, ext = os.path.splitext(value)
768+ if ext in ('.txt', '.rst'):
769+ with codecs.open(value, 'r', encoding='utf-8') as fp:
770+ value = fp.read()
771 res.append(value)
772 if not value.endswith(NL):
773 res.append('')
774@@ -142,6 +143,6 @@
775
776 def description(filename):
777 """Provide a short description."""
778- with open(filename) as fp:
779+ with codecs.open(filename, 'r', encoding='utf-8') as fp:
780 for line in fp:
781 return line.strip()
782
783=== modified file 'src/__init__.py'
784--- src/__init__.py 2010-12-23 16:31:21 +0000
785+++ src/__init__.py 2015-01-04 23:44:27 +0000
786@@ -1,4 +1,4 @@
787-# Copyright (C) 2010 by the Free Software Foundation, Inc.
788+# Copyright (C) 2010-2015 by the Free Software Foundation, Inc.
789 #
790 # This file is part of mailman.client.
791 #
792
793=== renamed file 'src/mailmanclient/NEWS.txt' => 'src/mailmanclient/NEWS.rst'
794--- src/mailmanclient/NEWS.txt 2014-12-16 11:07:10 +0000
795+++ src/mailmanclient/NEWS.rst 2015-01-04 23:44:27 +0000
796@@ -2,9 +2,13 @@
797 NEWS for mailman.client
798 =======================
799
800-1.0.0b1 (xxxx-xx-xx)
801+1.0.0b1 (2015-xx-xx)
802+====================
803
804-* Addedd an improved test harness using WebTest. Contributed by Aurélien Bompard.
805+ * Added an improved test harness using WebTest. Contributed by Aurélien
806+ Bompard.
807+ * Port to Python 3.4.
808+ * Run test suite with `tox`.
809
810
811 1.0.0a1 (2014-03-15)
812
813=== renamed file 'src/mailmanclient/README.txt' => 'src/mailmanclient/README.rst'
814--- src/mailmanclient/README.txt 2010-12-23 16:34:38 +0000
815+++ src/mailmanclient/README.rst 2015-01-04 23:44:27 +0000
816@@ -2,7 +2,7 @@
817 mailman.client - Python bindings for the Mailman 3 REST API
818 ===========================================================
819
820-This package is called ``mailman.client``.
821+This package is called ``mailman.client``.
822
823
824 Requirements
825@@ -38,10 +38,9 @@
826 http://pypi.python.org/pypi/mailman.client
827
828 or from the Launchpad page above. Of course you can also just install it with
829-``pip`` or ``easy_install`` from the command line::
830+``pip`` from the command line::
831
832 % sudo pip mailman.client
833- % sudo easy_install mailman.client
834
835 You can grab the latest development copy of the code using Bazaar, from the
836 Launchpad home page above. See http://bazaar-vcs.org for details on the
837@@ -56,7 +55,7 @@
838 Copyright
839 =========
840
841-Copyright (C) 2010 by The Free Software Foundation, Inc.
842+Copyright (C) 2010-2015 by The Free Software Foundation, Inc.
843
844 This file is part of mailman.client.
845
846
847=== modified file 'src/mailmanclient/__init__.py'
848--- src/mailmanclient/__init__.py 2014-04-22 14:38:40 +0000
849+++ src/mailmanclient/__init__.py 2015-01-04 23:44:27 +0000
850@@ -1,4 +1,4 @@
851-# Copyright (C) 2010-2014 by the Free Software Foundation, Inc.
852+# Copyright (C) 2010-2015 by the Free Software Foundation, Inc.
853 #
854 # This file is part of mailman.client.
855 #
856@@ -16,7 +16,7 @@
857
858 """Package contents."""
859
860-from __future__ import absolute_import, unicode_literals
861+from __future__ import absolute_import, print_function, unicode_literals
862
863 __metaclass__ = type
864 __all__ = [
865
866=== modified file 'src/mailmanclient/_client.py'
867--- src/mailmanclient/_client.py 2014-04-22 12:35:29 +0000
868+++ src/mailmanclient/_client.py 2015-01-04 23:44:27 +0000
869@@ -1,4 +1,4 @@
870-# Copyright (C) 2010-2014 by the Free Software Foundation, Inc.
871+# Copyright (C) 2010-2015 by the Free Software Foundation, Inc.
872 #
873 # This file is part of mailman.client.
874 #
875@@ -25,31 +25,25 @@
876 ]
877
878
879-import re
880+import six
881 import json
882
883 from base64 import b64encode
884 from httplib2 import Http
885+from mailmanclient import __version__
886 from operator import itemgetter
887-from urllib import urlencode
888-from urllib2 import HTTPError
889-from urlparse import urljoin
890-
891-
892-from mailmanclient import __version__
893+from six.moves.urllib_error import HTTPError
894+from six.moves.urllib_parse import urlencode, urljoin
895
896
897 DEFAULT_PAGE_ITEM_COUNT = 50
898
899
900 class MailmanConnectionError(Exception):
901-
902 """Custom Exception to catch connection errors."""
903- pass
904
905
906 class _Connection:
907-
908 """A connection to the REST client."""
909
910 def __init__(self, baseurl, name=None, password=None):
911@@ -74,7 +68,7 @@
912 self.basic_auth = None
913 else:
914 auth = '{0}:{1}'.format(name, password)
915- self.basic_auth = b64encode(auth)
916+ self.basic_auth = b64encode(auth.encode('utf-8')).decode('utf-8')
917
918 def call(self, path, data=None, method=None):
919 """Make a call to the Mailman REST API.
920@@ -93,7 +87,7 @@
921 """
922 headers = {
923 'User-Agent': 'GNU Mailman REST client v{0}'.format(__version__),
924- }
925+ }
926 if data is not None:
927 data = urlencode(data, doseq=True)
928 headers['Content-Type'] = 'application/x-www-form-urlencoded'
929@@ -115,7 +109,8 @@
930 if len(content) == 0:
931 return response, None
932 # XXX Work around for http://bugs.python.org/issue10038
933- content = unicode(content)
934+ if isinstance(content, six.binary_type):
935+ content = content.decode('utf-8')
936 return response, json.loads(content)
937 except HTTPError:
938 raise
939@@ -124,7 +119,6 @@
940
941
942 class Client:
943-
944 """Access the Mailman REST API root."""
945
946 def __init__(self, baseurl, name=None, password=None):
947@@ -144,13 +138,21 @@
948
949 @property
950 def system(self):
951- return self._connection.call('system')[1]
952+ return self._connection.call('system/versions')[1]
953
954 @property
955 def preferences(self):
956 return _Preferences(self._connection, 'system/preferences')
957
958 @property
959+ def queues(self):
960+ response, content = self._connection.call('queues')
961+ queues = {}
962+ for entry in content['entries']:
963+ queues[entry['name']] = _Queue(self._connection, entry)
964+ return queues
965+
966+ @property
967 def lists(self):
968 response, content = self._connection.call('lists')
969 if 'entries' not in content:
970@@ -209,9 +211,8 @@
971 return _Domain(self._connection, response['location'])
972
973 def delete_domain(self, mail_host):
974- response, content = self._connection.call('domains/{0}'
975- .format(mail_host),
976- None, 'DELETE')
977+ response, content = self._connection.call(
978+ 'domains/{0}'.format(mail_host), None, 'DELETE')
979
980 def get_domain(self, mail_host=None, web_host=None):
981 """Get domain by its mail_host or its web_host."""
982@@ -225,13 +226,13 @@
983 # in Mailman3Alpha8
984 if domain.base_url == web_host:
985 return domain
986- break
987 else:
988 return None
989
990 def create_user(self, email, password, display_name=''):
991 response, content = self._connection.call(
992- 'users', dict(email=email, password=password,
993+ 'users', dict(email=email,
994+ password=password,
995 display_name=display_name))
996 return _User(self._connection, response['location'])
997
998@@ -319,9 +320,7 @@
999 def __init__(self, connection, url, data=None):
1000 self._connection = connection
1001 self._url = url
1002- self._info = None
1003- if data is not None:
1004- self._info = data
1005+ self._info = data
1006
1007 def __repr__(self):
1008 return '<List "{0}">'.format(self.fqdn_listname)
1009@@ -409,8 +408,7 @@
1010
1011 @property
1012 def held(self):
1013- """Return a list of dicts with held message information.
1014- """
1015+ """Return a list of dicts with held message information."""
1016 response, content = self._connection.call(
1017 'lists/{0}/held'.format(self.fqdn_listname), None, 'GET')
1018 if 'entries' not in content:
1019@@ -429,8 +427,7 @@
1020
1021 @property
1022 def requests(self):
1023- """Return a list of dicts with subscription requests.
1024- """
1025+ """Return a list of dicts with subscription requests."""
1026 response, content = self._connection.call(
1027 'lists/{0}/requests'.format(self.fqdn_listname), None, 'GET')
1028 if 'entries' not in content:
1029@@ -479,30 +476,26 @@
1030 :param action: Action to perform on held message.
1031 :type action: String.
1032 """
1033- path = 'lists/{0}/held/{1}'.format(self.fqdn_listname,
1034- str(request_id))
1035- response, content = self._connection.call(path, dict(action=action),
1036- 'POST')
1037+ path = 'lists/{0}/held/{1}'.format(
1038+ self.fqdn_listname, str(request_id))
1039+ response, content = self._connection.call(
1040+ path, dict(action=action), 'POST')
1041 return response
1042
1043 def discard_message(self, request_id):
1044- """Shortcut for moderate_message.
1045- """
1046+ """Shortcut for moderate_message."""
1047 return self.moderate_message(request_id, 'discard')
1048
1049 def reject_message(self, request_id):
1050- """Shortcut for moderate_message.
1051- """
1052+ """Shortcut for moderate_message."""
1053 return self.moderate_message(request_id, 'reject')
1054
1055 def defer_message(self, request_id):
1056- """Shortcut for moderate_message.
1057- """
1058+ """Shortcut for moderate_message."""
1059 return self.moderate_message(request_id, 'defer')
1060
1061 def accept_message(self, request_id):
1062- """Shortcut for moderate_message.
1063- """
1064+ """Shortcut for moderate_message."""
1065 return self.moderate_message(request_id, 'accept')
1066
1067 def get_member(self, email):
1068@@ -516,7 +509,6 @@
1069 for member in self.members:
1070 if member.email == email:
1071 return member
1072- break
1073 else:
1074 raise ValueError('%s is not a member address of %s' %
1075 (email, self.fqdn_listname))
1076@@ -534,7 +526,7 @@
1077 list_id=self.list_id,
1078 subscriber=address,
1079 display_name=display_name,
1080- )
1081+ )
1082 response, content = self._connection.call('members', data)
1083 return _Member(self._connection, response['location'])
1084
1085@@ -568,8 +560,7 @@
1086 self._preferences = None
1087
1088 def __repr__(self):
1089- return '<Member "{0}" on "{1}">'.format(
1090- self.email, self.list_id)
1091+ return '<Member "{0}" on "{1}">'.format(self.email, self.list_id)
1092
1093 def _get_info(self):
1094 if self._info is None:
1095@@ -634,8 +625,7 @@
1096 self._cleartext_password = None
1097
1098 def __repr__(self):
1099- return '<User "{0}" ({1})>'.format(
1100- self.display_name, self.user_id)
1101+ return '<User "{0}" ({1})>'.format(self.display_name, self.user_id)
1102
1103 def _get_info(self):
1104 if self._info is None:
1105@@ -685,8 +675,8 @@
1106 if self._subscriptions is None:
1107 subscriptions = []
1108 for address in self.addresses:
1109- response, content = self._connection.call('members/find',
1110- data={'subscriber': address})
1111+ response, content = self._connection.call(
1112+ 'members/find', data={'subscriber': address})
1113 try:
1114 for entry in content['entries']:
1115 subscriptions.append(_Member(self._connection,
1116@@ -713,7 +703,7 @@
1117 return self._preferences
1118
1119 def add_address(self, email):
1120- # Adds another email adress to the user record and returns an
1121+ # Adds another email adress to the user record and returns an
1122 # _Address object.
1123 url = '{0}/addresses'.format(self._url)
1124 self._connection.call(url, {'email': email})
1125@@ -723,8 +713,8 @@
1126 if self._cleartext_password is not None:
1127 data['cleartext_password'] = self._cleartext_password
1128 self.cleartext_password = None
1129- response, content = self._connection.call(self._url,
1130- data, method='PATCH')
1131+ response, content = self._connection.call(
1132+ self._url, data, method='PATCH')
1133 self._info = None
1134
1135 def delete(self):
1136@@ -741,8 +731,8 @@
1137
1138 def _get_addresses(self):
1139 if self._addresses is None:
1140- response, content = self._connection.call('users/{0}/addresses'
1141- .format(self._user_id))
1142+ response, content = self._connection.call(
1143+ 'users/{0}/addresses'.format(self._user_id))
1144 if 'entries' not in content:
1145 self._addresses = []
1146 self._addresses = content['entries']
1147@@ -795,13 +785,13 @@
1148 return self._preferences
1149
1150 def verify(self):
1151- self._connection.call('addresses/{0}/verify'
1152- .format(self._address['email']), method='POST')
1153+ self._connection.call('addresses/{0}/verify'.format(
1154+ self._address['email']), method='POST')
1155 self._info = None
1156
1157 def unverify(self):
1158- self._connection.call('addresses/{0}/unverify'
1159- .format(self._address['email']), method='POST')
1160+ self._connection.call('addresses/{0}/unverify'.format(
1161+ self._address['email']), method='POST')
1162 self._info = None
1163
1164
1165@@ -812,9 +802,13 @@
1166 'hide_address',
1167 'preferred_language',
1168 'receive_list_copy',
1169- 'receive_own_postings', )
1170+ 'receive_own_postings',
1171+ )
1172
1173-PREF_READ_ONLY_ATTRS = ('http_etag', 'self_link')
1174+PREF_READ_ONLY_ATTRS = (
1175+ 'http_etag',
1176+ 'self_link',
1177+ )
1178
1179
1180 class _Preferences:
1181@@ -843,7 +837,7 @@
1182 return self._preferences[key]
1183
1184 def __iter__(self):
1185- for key in self._preferences.keys():
1186+ for key in self._preferences:
1187 yield self._preferences[key]
1188
1189 def __len__(self):
1190@@ -861,18 +855,34 @@
1191 def save(self):
1192 data = {}
1193 for key in self._preferences:
1194- if key not in PREF_READ_ONLY_ATTRS and self._preferences[key] is not None:
1195+ if (key not in PREF_READ_ONLY_ATTRS
1196+ and self._preferences[key] is not None):
1197 data[key] = self._preferences[key]
1198 response, content = self._connection.call(self._url, data, 'PATCH')
1199
1200
1201-LIST_READ_ONLY_ATTRS = ('bounces_address', 'created_at', 'digest_last_sent_at',
1202- 'fqdn_listname', 'http_etag', 'mail_host',
1203- 'join_address', 'last_post_at', 'leave_address',
1204- 'list_id', 'list_name', 'next_digest_number',
1205- 'no_reply_address', 'owner_address', 'post_id',
1206- 'posting_address', 'request_address', 'scheme',
1207- 'volume', 'web_host',)
1208+LIST_READ_ONLY_ATTRS = (
1209+ 'bounces_address',
1210+ 'created_at',
1211+ 'digest_last_sent_at',
1212+ 'fqdn_listname',
1213+ 'http_etag',
1214+ 'join_address',
1215+ 'last_post_at',
1216+ 'leave_address',
1217+ 'list_id',
1218+ 'list_name',
1219+ 'mail_host',
1220+ 'next_digest_number',
1221+ 'no_reply_address',
1222+ 'owner_address',
1223+ 'post_id',
1224+ 'posting_address',
1225+ 'request_address',
1226+ 'scheme',
1227+ 'volume',
1228+ 'web_host',
1229+ )
1230
1231
1232 class _Settings:
1233@@ -892,7 +902,7 @@
1234 self._info = content
1235
1236 def __iter__(self):
1237- for key in self._info.keys():
1238+ for key in self._info:
1239 yield key
1240
1241 def __getitem__(self, key):
1242@@ -949,8 +959,8 @@
1243 def _create_page(self):
1244 self._entries = []
1245 # create url
1246- path = '{0}?count={1}&page={2}'.format(self._path, self._count,
1247- self._page)
1248+ path = '{0}?count={1}&page={2}'.format(
1249+ self._path, self._count, self._page)
1250 response, content = self._connection.call(path)
1251 if 'entries' in content:
1252 for entry in content['entries']:
1253@@ -973,3 +983,22 @@
1254 self._page -= 1
1255 self._create_page()
1256 return self
1257+
1258+
1259+class _Queue:
1260+ def __init__(self, connection, entry):
1261+ self._connection = connection
1262+ self.name = entry['name']
1263+ self.url = entry['self_link']
1264+ self.directory = entry['directory']
1265+
1266+ def __repr__(self):
1267+ return '<Queue: {}>'.format(self.name)
1268+
1269+ def inject(self, list_id, text):
1270+ self._connection.call(self.url, dict(list_id=list_id, text=text))
1271+
1272+ @property
1273+ def files(self):
1274+ response, content = self._connection.call(self.url)
1275+ return content['files']
1276
1277=== renamed file 'src/mailmanclient/docs/using.txt' => 'src/mailmanclient/docs/using.rst'
1278--- src/mailmanclient/docs/using.txt 2014-11-18 15:08:41 +0000
1279+++ src/mailmanclient/docs/using.rst 2015-01-04 23:44:27 +0000
1280@@ -2,13 +2,6 @@
1281 Mailman REST client
1282 ===================
1283
1284- >>> import os
1285- >>> import time
1286- >>> import smtplib
1287- >>> import subprocess
1288-
1289- >>> from mock import patch
1290-
1291 This is the official Python bindings for the GNU Mailman REST API. In order
1292 to talk to Mailman, the engine's REST server must be running. You begin by
1293 instantiating a client object to access the root of the REST hierarchy,
1294@@ -23,7 +16,7 @@
1295 http_etag: "..."
1296 mailman_version: GNU Mailman 3.0... (...)
1297 python_version: ...
1298- self_link: http://localhost:9001/3.0/system
1299+ self_link: http://localhost:9001/3.0/system/versions
1300
1301 To start with, there are no known mailing lists.
1302
1303@@ -47,15 +40,15 @@
1304 ... contact_address='admin@example.com')
1305 >>> example_dot_com
1306 <Domain "example.com">
1307- >>> print example_dot_com.base_url
1308+ >>> print(example_dot_com.base_url)
1309 http://example.com
1310- >>> print example_dot_com.contact_address
1311+ >>> print(example_dot_com.contact_address)
1312 admin@example.com
1313- >>> print example_dot_com.description
1314+ >>> print(example_dot_com.description)
1315 None
1316- >>> print example_dot_com.mail_host
1317+ >>> print(example_dot_com.mail_host)
1318 example.com
1319- >>> print example_dot_com.url_host
1320+ >>> print(example_dot_com.url_host)
1321 example.com
1322
1323 You can also get an existing domain independently using its mail host.
1324@@ -63,7 +56,7 @@
1325 >>> example = client.get_domain('example.com')
1326 >>> example
1327 <Domain "example.com">
1328- >>> print example_dot_com.base_url
1329+ >>> print(example_dot_com.base_url)
1330 http://example.com
1331
1332 Additionally you can get an existing domain using its web host.
1333@@ -71,16 +64,9 @@
1334 >>> example = client.get_domain(web_host='http://example.com')
1335 >>> example
1336 <Domain "example.com">
1337- >>> print example_dot_com.base_url
1338+ >>> print(example_dot_com.base_url)
1339 http://example.com
1340
1341-But you cannot retrieve a non-existent domain.
1342-
1343- >>> client.get_domain('example.org')
1344- Traceback (most recent call last):
1345- ...
1346- HTTPError: HTTP Error 404: 404 Not Found
1347-
1348 After creating a few more domains, we can print the list of all domains.
1349
1350 >>> client.create_domain('example.net')
1351@@ -88,7 +74,7 @@
1352 >>> client.create_domain('example.org')
1353 <Domain "example.org">
1354 >>> for mail_host in client.domains:
1355- ... print mail_host
1356+ ... print(mail_host)
1357 <Domain "example.com">
1358 <Domain "example.net">
1359 <Domain "example.org">
1360@@ -97,7 +83,7 @@
1361
1362 >>> client.delete_domain('example.org')
1363 >>> for mail_host in client.domains:
1364- ... print mail_host
1365+ ... print(mail_host)
1366 <Domain "example.com">
1367 <Domain "example.net">
1368
1369@@ -110,13 +96,13 @@
1370 >>> test_one = example.create_list('test-one')
1371 >>> test_one
1372 <List "test-one@example.com">
1373- >>> print test_one.fqdn_listname
1374+ >>> print(test_one.fqdn_listname)
1375 test-one@example.com
1376- >>> print test_one.mail_host
1377+ >>> print(test_one.mail_host)
1378 example.com
1379- >>> print test_one.list_name
1380+ >>> print(test_one.list_name)
1381 test-one
1382- >>> print test_one.display_name
1383+ >>> print(test_one.display_name)
1384 Test-one
1385
1386 You can also retrieve the mailing list after the fact.
1387@@ -137,7 +123,7 @@
1388 <List "test-three@example.com">
1389
1390 >>> for mlist in client.lists:
1391- ... print mlist
1392+ ... print(mlist)
1393 <List "test-one@example.com">
1394 <List "test-two@example.com">
1395 <List "test-three@example.net">
1396@@ -151,21 +137,22 @@
1397 >>> len(page)
1398 2
1399 >>> for m_list in page:
1400- ... print m_list
1401+ ... print(m_list)
1402 <List "test-one@example.com">
1403 <List "test-two@example.com">
1404 >>> page = page.next
1405 >>> page.nr
1406 2
1407 >>> for m_list in page:
1408- ... print m_list
1409+ ... print(m_list)
1410 <List "test-three@example.net">
1411 <List "test-three@example.com">
1412
1413-If you only want to know all lists for a specific domain, use the domain object.
1414+If you only want to know all lists for a specific domain, use the domain
1415+object.
1416
1417 >>> for mlist in example.lists:
1418- ... print mlist
1419+ ... print(mlist)
1420 <List "test-one@example.com">
1421 <List "test-three@example.com">
1422 <List "test-two@example.com">
1423@@ -180,7 +167,7 @@
1424 >>> client.delete_list('test-three@example.com')
1425
1426 >>> for mlist in client.lists:
1427- ... print mlist
1428+ ... print(mlist)
1429 <List "test-one@example.com">
1430 <List "test-two@example.com">
1431
1432@@ -217,7 +204,7 @@
1433 name, then by email address.
1434
1435 >>> for member in client.members:
1436- ... print member
1437+ ... print(member)
1438 <Member "anna@example.com" on "test-one.example.com">
1439 <Member "bill@example.com" on "test-one.example.com">
1440 <Member "anna@example.com" on "test-two.example.com">
1441@@ -226,7 +213,7 @@
1442 We can also view the memberships for a single mailing list.
1443
1444 >>> for member in test_one.members:
1445- ... print member
1446+ ... print(member)
1447 <Member "anna@example.com" on "test-one.example.com">
1448 <Member "bill@example.com" on "test-one.example.com">
1449
1450@@ -236,7 +223,7 @@
1451 >>> page.nr
1452 1
1453 >>> for member in page:
1454- ... print member
1455+ ... print(member)
1456 <Member "anna@example.com" on "test-one.example.com">
1457 <Member "bill@example.com" on "test-one.example.com">
1458
1459@@ -244,7 +231,7 @@
1460 >>> page.nr
1461 2
1462 >>> for member in page:
1463- ... print member
1464+ ... print(member)
1465 <Member "anna@example.com" on "test-two.example.com">
1466 <Member "cris@example.com" on "test-two.example.com">
1467
1468@@ -252,13 +239,13 @@
1469 >>> page.nr
1470 1
1471 >>> for member in page:
1472- ... print member
1473+ ... print(member)
1474 <Member "anna@example.com" on "test-one.example.com">
1475 >>> page = page.next
1476 >>> page.nr
1477 2
1478 >>> for member in page:
1479- ... print member
1480+ ... print(member)
1481 <Member "bill@example.com" on "test-one.example.com">
1482
1483 We can get a single membership too.
1484@@ -266,7 +253,7 @@
1485 >>> cris_test_two = test_two.get_member('cris@example.com')
1486 >>> cris_test_two
1487 <Member "cris@example.com" on "test-two.example.com">
1488- >>> print cris_test_two.role
1489+ >>> print(cris_test_two.role)
1490 member
1491
1492 A membership can also be retrieved without instantiating the list object first:
1493@@ -277,24 +264,24 @@
1494 A membership has preferences.
1495
1496 >>> prefs = cris_test_two.preferences
1497- >>> print prefs['delivery_mode']
1498+ >>> print(prefs['delivery_mode'])
1499 regular
1500- >>> print prefs['acknowledge_posts']
1501- None
1502- >>> print prefs['delivery_status']
1503- None
1504- >>> print prefs['hide_address']
1505- None
1506- >>> print prefs['preferred_language']
1507- None
1508- >>> print prefs['receive_list_copy']
1509- None
1510- >>> print prefs['receive_own_postings']
1511+ >>> print(prefs['acknowledge_posts'])
1512+ None
1513+ >>> print(prefs['delivery_status'])
1514+ None
1515+ >>> print(prefs['hide_address'])
1516+ None
1517+ >>> print(prefs['preferred_language'])
1518+ None
1519+ >>> print(prefs['receive_list_copy'])
1520+ None
1521+ >>> print(prefs['receive_own_postings'])
1522 None
1523
1524 The membership object's ``user`` attribute will return a User object:
1525
1526- >>> cris_test_two.user
1527+ >>> cris_test_two.user
1528 <User "Cris" (...)>
1529
1530 If you use an address which is not a member of test_two `ValueError` is raised:
1531@@ -302,15 +289,17 @@
1532 >>> test_two.unsubscribe('nomember@example.com')
1533 Traceback (most recent call last):
1534 ...
1535- ValueError: nomember@example.com is not a member address of test-two@example.com
1536+ ValueError: nomember@example.com is not a member address of
1537+ test-two@example.com
1538
1539 After a while, Anna decides to unsubscribe from the Test One mailing list,
1540 though she keeps her Test Two membership active.
1541
1542+ >>> import time
1543 >>> time.sleep(2)
1544 >>> test_one.unsubscribe('anna@example.com')
1545 >>> for member in client.members:
1546- ... print member
1547+ ... print(member)
1548 <Member "bill@example.com" on "test-one.example.com">
1549 <Member "anna@example.com" on "test-two.example.com">
1550 <Member "cris@example.com" on "test-two.example.com">
1551@@ -319,16 +308,19 @@
1552
1553 >>> cris_test_two.unsubscribe()
1554 >>> for member in client.members:
1555- ... print member
1556+ ... print(member)
1557 <Member "bill@example.com" on "test-one.example.com">
1558 <Member "anna@example.com" on "test-two.example.com">
1559
1560-If you try to unsubscribe an address which is not a member address `ValueError` is raised:
1561+If you try to unsubscribe an address which is not a member address
1562+`ValueError` is raised:
1563
1564 >>> test_one.unsubscribe('nomember@example.com')
1565 Traceback (most recent call last):
1566 ...
1567- ValueError: nomember@example.com is not a member address of test-one@example.com
1568+ ValueError: nomember@example.com is not a member address of
1569+ test-one@example.com
1570+
1571
1572 Non-Members
1573 ===========
1574@@ -347,13 +339,15 @@
1575 When someone tries to send a message to the list and they are not a
1576 subscriber, they get added to the nonmember list.
1577
1578+
1579 Users
1580 =====
1581
1582-Users are people with one or more list memberhips. To get a list of all users, access the clients user property.
1583+Users are people with one or more list memberships. To get a list of all users,
1584+access the clients user property.
1585
1586 >>> for user in client.users:
1587- ... print user
1588+ ... print(user)
1589 <User "..." (...)>
1590 <User "..." (...)>
1591 <User "..." (...)>
1592@@ -365,7 +359,7 @@
1593 1
1594
1595 >>> for user in page:
1596- ... print user
1597+ ... print(user)
1598 <User "Anna" (...)>
1599 <User "Bill" (...)>
1600
1601@@ -376,7 +370,7 @@
1602 2
1603
1604 >>> for user in page:
1605- ... print user
1606+ ... print(user)
1607 <User "Cris" (...)>
1608
1609 >>> page = page.previous
1610@@ -384,34 +378,34 @@
1611 1
1612
1613 >>> for user in page:
1614- ... print user
1615+ ... print(user)
1616 <User "Anna" (...)>
1617 <User "Bill" (...)>
1618
1619 A single user can be retrieved using their email address.
1620
1621 >>> cris = client.get_user('cris@example.com')
1622- >>> print cris.display_name
1623+ >>> print(cris.display_name)
1624 Cris
1625
1626 Every user has a list of one or more addresses.
1627
1628 >>> for address in cris.addresses:
1629- ... print address
1630- ... print address.display_name
1631- ... print address.registered_on
1632+ ... print(address)
1633+ ... print(address.display_name)
1634+ ... print(address.registered_on)
1635 cris@example.com
1636 Cris
1637 ...
1638-
1639+
1640 Multiple addresses can be assigned to a user record:
1641
1642 >>> cris.add_address('cris.person@example.org')
1643- >>> print client.get_address('cris.person@example.org')
1644+ >>> print(client.get_address('cris.person@example.org'))
1645 cris.person@example.org
1646
1647 >>> for address in cris.addresses:
1648- ... print address
1649+ ... print(address)
1650 cris.person@example.org
1651 cris@example.com
1652
1653@@ -422,14 +416,14 @@
1654 Addresses can be accessed directly:
1655
1656 >>> address = client.get_address('cris@example.com')
1657- >>> print address
1658+ >>> print(address)
1659 cris@example.com
1660- >>> print address.display_name
1661+ >>> print(address.display_name)
1662 Cris
1663
1664 The address has not been verified:
1665
1666- >>> print address.verified_on is None
1667+ >>> print(address.verified_on is None)
1668 True
1669
1670 But that can be done via the address object:
1671@@ -451,9 +445,9 @@
1672 ... display_name='Ler')
1673 <User "Ler" (...)>
1674 >>> ler = client.get_user('ler@primus.org')
1675- >>> print ler.password
1676+ >>> print(ler.password)
1677 $...
1678- >>> print ler.display_name
1679+ >>> print(ler.display_name)
1680 Ler
1681
1682 User attributes can be changed through assignment, but you need to call the
1683@@ -462,7 +456,7 @@
1684 >>> ler.display_name = 'Sir Ler'
1685 >>> ler.save()
1686 >>> ler = client.get_user('ler@primus.org')
1687- >>> print ler.display_name
1688+ >>> print(ler.display_name)
1689 Sir Ler
1690
1691 Passwords can be changed as well:
1692@@ -483,39 +477,41 @@
1693
1694 >>> bill = client.get_user('bill@example.com')
1695 >>> for subscription in bill.subscriptions:
1696- ... print subscription
1697+ ... print(subscription)
1698 <Member "bill@example.com" on "test-one.example.com">
1699
1700-If all you need are the list ids of all mailing lists a user is subscribed to, you can use the ``subscription_list_ids`` property.
1701+If all you need are the list ids of all mailing lists a user is subscribed to,
1702+you can use the ``subscription_list_ids`` property.
1703
1704 >>> for list_id in bill.subscription_list_ids:
1705- ... print list_id
1706+ ... print(list_id)
1707 test-one.example.com
1708
1709
1710 List Settings
1711 =============
1712
1713-We can get all list settings via a lists settings attribute. A proxy object for the settings is returned which behaves much like a dictionary.
1714+We can get all list settings via a lists settings attribute. A proxy object
1715+for the settings is returned which behaves much like a dictionary.
1716
1717 >>> settings = test_one.settings
1718 >>> len(settings)
1719 50
1720
1721 >>> for attr in sorted(settings):
1722- ... print attr + ': ' + str(settings[attr])
1723+ ... print(attr + ': ' + str(settings[attr]))
1724 acceptable_aliases: []
1725 ...
1726 welcome_message_uri: mailman:///welcome.txt
1727
1728- >>> print settings['display_name']
1729+ >>> print(settings['display_name'])
1730 Test-one
1731
1732 We can access all valid list settings as attributes.
1733
1734- >>> print settings['fqdn_listname']
1735+ >>> print(settings['fqdn_listname'])
1736 test-one@example.com
1737- >>> print settings['description']
1738+ >>> print(settings['description'])
1739
1740 >>> settings['description'] = 'A very meaningful description.'
1741 >>> settings['display_name'] = 'Test Numero Uno'
1742@@ -523,14 +519,16 @@
1743 >>> settings.save()
1744
1745 >>> settings_new = test_one.settings
1746- >>> print settings_new['description']
1747+ >>> print(settings_new['description'])
1748 A very meaningful description.
1749- >>> print settings_new['display_name']
1750+ >>> print(settings_new['display_name'])
1751 Test Numero Uno
1752
1753-The settings object also supports the `get` method of usual Python dictionaries:
1754+The settings object also supports the `get` method of usual Python
1755+dictionaries:
1756
1757- >>> print settings_new.get('OhNoIForgotTheKey', 'HowGoodIPlacedOneUnderTheDoormat')
1758+ >>> print(settings_new.get('OhNoIForgotTheKey',
1759+ ... 'HowGoodIPlacedOneUnderTheDoormat'))
1760 HowGoodIPlacedOneUnderTheDoormat
1761
1762
1763@@ -539,31 +537,33 @@
1764
1765 Preferences can be accessed and set for users, members and addresses.
1766
1767-By default, preferences are not set and fall back to the global system preferences. They're read-only and can be accessed through the client object.
1768+By default, preferences are not set and fall back to the global system
1769+preferences. They're read-only and can be accessed through the client object.
1770
1771 >>> global_prefs = client.preferences
1772- >>> print global_prefs['acknowledge_posts']
1773+ >>> print(global_prefs['acknowledge_posts'])
1774 False
1775- >>> print global_prefs['delivery_mode']
1776+ >>> print(global_prefs['delivery_mode'])
1777 regular
1778- >>> print global_prefs['delivery_status']
1779+ >>> print(global_prefs['delivery_status'])
1780 enabled
1781- >>> print global_prefs['hide_address']
1782+ >>> print(global_prefs['hide_address'])
1783 True
1784- >>> print global_prefs['preferred_language']
1785+ >>> print(global_prefs['preferred_language'])
1786 en
1787- >>> print global_prefs['receive_list_copy']
1788+ >>> print(global_prefs['receive_list_copy'])
1789 True
1790- >>> print global_prefs['receive_own_postings']
1791+ >>> print(global_prefs['receive_own_postings'])
1792 True
1793
1794-Preferences can be set, but you have to call ``save`` to make your changes permanent.
1795+Preferences can be set, but you have to call ``save`` to make your changes
1796+permanent.
1797
1798 >>> prefs = test_two.get_member('anna@example.com').preferences
1799 >>> prefs['delivery_status'] = 'by_user'
1800 >>> prefs.save()
1801 >>> prefs = test_two.get_member('anna@example.com').preferences
1802- >>> print prefs['delivery_status']
1803+ >>> print(prefs['delivery_status'])
1804 by_user
1805
1806
1807@@ -581,7 +581,7 @@
1808
1809 >>> test_one.add_owner('foo@example.com')
1810 >>> for owner in test_one.owners:
1811- ... print owner
1812+ ... print(owner)
1813 foo@example.com
1814
1815 The owner of the list not automatically added as a member:
1816@@ -593,7 +593,7 @@
1817
1818 >>> test_one.add_moderator('bar@example.com')
1819 >>> for moderator in test_one.moderators:
1820- ... print moderator
1821+ ... print(moderator)
1822 bar@example.com
1823
1824 Moderators are also not automatically added as members:
1825@@ -608,7 +608,7 @@
1826 <Member "bar@example.com" on "test-one.example.com">
1827
1828 >>> for member in client.members:
1829- ... print '%s: %s' %(member, member.role)
1830+ ... print('%s: %s' %(member, member.role))
1831 <Member "foo@example.com" on "test-one.example.com">: owner
1832 <Member "bar@example.com" on "test-one.example.com">: moderator
1833 <Member "bar@example.com" on "test-one.example.com">: member
1834@@ -632,33 +632,52 @@
1835 Message Moderation
1836 ------------------
1837
1838+By injecting a message by a non-member into the incoming queue, we can
1839+simulate a message being held for moderator approval.
1840+
1841 >>> msg = """From: nomember@example.com
1842 ... To: test-one@example.com
1843 ... Subject: Something
1844 ... Message-ID: <moderated_01>
1845- ...
1846+ ...
1847 ... Some text.
1848- ...
1849+ ...
1850 ... """
1851- >>> inject_message('test-one@example.com', msg)
1852+ >>> inq = client.queues['in']
1853+ >>> inq.inject('test-one.example.com', msg)
1854+
1855+Now wait until the message has been processed.
1856+
1857+ >>> while True:
1858+ ... if len(inq.files) == 0:
1859+ ... break
1860+ ... time.sleep(0.1)
1861+
1862+It might take a few moments for the message to show up in the moderation
1863+queue.
1864+
1865+ >>> while True:
1866+ ... held = test_one.held
1867+ ... if len(held) > 0:
1868+ ... break
1869+ ... time.sleep(0.1)
1870
1871 Messages held for moderation can be listed on a per list basis.
1872
1873- >>> held = test_one.held
1874- >>> print held[0]['subject']
1875+ >>> print(held[0]['subject'])
1876 Something
1877- >>> print held[0]['reason']
1878+ >>> print(held[0]['reason'])
1879 <BLANKLINE>
1880- >>> print held[0]['request_id']
1881+ >>> print(held[0]['request_id'])
1882 1
1883
1884- >>> print test_one.defer_message(held[0]['request_id'])['status']
1885+ >>> print(test_one.defer_message(held[0]['request_id'])['status'])
1886 204
1887
1888 >>> len(test_one.held)
1889 1
1890
1891- >>> print test_one.discard_message(held[0]['request_id'])['status']
1892+ >>> print(test_one.discard_message(held[0]['request_id'])['status'])
1893 204
1894
1895 >>> len(test_one.held)
1896
1897=== added directory 'src/mailmanclient/testing'
1898=== added file 'src/mailmanclient/testing/__init__.py'
1899=== added file 'src/mailmanclient/testing/documentation.py'
1900--- src/mailmanclient/testing/documentation.py 1970-01-01 00:00:00 +0000
1901+++ src/mailmanclient/testing/documentation.py 2015-01-04 23:44:27 +0000
1902@@ -0,0 +1,84 @@
1903+# Copyright (C) 2007-2015 by the Free Software Foundation, Inc.
1904+#
1905+# This file is part of GNU Mailman.
1906+#
1907+# GNU Mailman is free software: you can redistribute it and/or modify it under
1908+# the terms of the GNU General Public License as published by the Free
1909+# Software Foundation, either version 3 of the License, or (at your option)
1910+# any later version.
1911+#
1912+# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
1913+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1914+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
1915+# more details.
1916+#
1917+# You should have received a copy of the GNU General Public License along with
1918+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
1919+
1920+"""Harness for testing Mailman's documentation.
1921+
1922+Note that doctest extraction does not currently work for zip file
1923+distributions. doctest discovery currently requires file system traversal.
1924+"""
1925+
1926+from __future__ import absolute_import, print_function, unicode_literals
1927+
1928+__metaclass__ = type
1929+__all__ = [
1930+ 'setup',
1931+ 'teardown'
1932+ ]
1933+
1934+
1935+from inspect import isfunction, ismethod
1936+
1937+
1938+
1939
1940+def stop():
1941+ """Call into pdb.set_trace()"""
1942+ # Do the import here so that you get the wacky special hacked pdb instead
1943+ # of Python's normal pdb.
1944+ import pdb
1945+ pdb.set_trace()
1946+
1947+
1948+def dump(results):
1949+ if results is None:
1950+ print(None)
1951+ return
1952+ for key in sorted(results):
1953+ if key == 'entries':
1954+ for i, entry in enumerate(results[key]):
1955+ # entry is a dictionary.
1956+ print('entry %d:' % i)
1957+ for entry_key in sorted(entry):
1958+ print(' {0}: {1}'.format(entry_key, entry[entry_key]))
1959+ else:
1960+ print('{0}: {1}'.format(key, results[key]))
1961+
1962+
1963+
1964
1965+def setup(testobj):
1966+ """Test setup."""
1967+ # Make sure future statements in our doctests are the same as everywhere
1968+ # else.
1969+ testobj.globs['absolute_import'] = absolute_import
1970+ testobj.globs['print_function'] = print_function
1971+ testobj.globs['unicode_literals'] = unicode_literals
1972+ # In general, I don't like adding convenience functions, since I think
1973+ # doctests should do the imports themselves. It makes for better
1974+ # documentation that way. However, a few are really useful, or help to
1975+ # hide some icky test implementation details.
1976+ testobj.globs['stop'] = stop
1977+ testobj.globs['dump'] = dump
1978+ # Add this so that cleanups can be automatically added by the doctest.
1979+ testobj.globs['cleanups'] = []
1980+
1981+
1982+
1983
1984+def teardown(testobj):
1985+ for cleanup in testobj.globs['cleanups']:
1986+ if isfunction(cleanup) or ismethod(cleanup):
1987+ cleanup()
1988+ else:
1989+ cleanup[0](*cleanup[1:])
1990
1991=== added file 'src/mailmanclient/testing/nose.py'
1992--- src/mailmanclient/testing/nose.py 1970-01-01 00:00:00 +0000
1993+++ src/mailmanclient/testing/nose.py 2015-01-04 23:44:27 +0000
1994@@ -0,0 +1,129 @@
1995+# Copyright (C) 2013-2015 by the Free Software Foundation, Inc.
1996+#
1997+# This file is part of GNU Mailman.
1998+#
1999+# GNU Mailman is free software: you can redistribute it and/or modify it under
2000+# the terms of the GNU General Public License as published by the Free
2001+# Software Foundation, either version 3 of the License, or (at your option)
2002+# any later version.
2003+#
2004+# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
2005+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2006+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
2007+# more details.
2008+#
2009+# You should have received a copy of the GNU General Public License along with
2010+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
2011+
2012+"""nose2 test infrastructure."""
2013+
2014+__all__ = [
2015+ 'NosePlugin',
2016+ ]
2017+
2018+
2019+import os
2020+import re
2021+import vcr
2022+import errno
2023+import doctest
2024+import mailmanclient
2025+
2026+from contextlib2 import ExitStack
2027+from mailmanclient.testing.documentation import setup, teardown
2028+from nose2.events import Plugin
2029+
2030+
2031+DOT = '.'
2032+FLAGS = doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_NDIFF
2033+TOPDIR = os.path.dirname(mailmanclient.__file__)
2034+
2035+
2036+
2037
2038+class NosePlugin(Plugin):
2039+ configSection = 'mailman'
2040+
2041+ def __init__(self):
2042+ super(NosePlugin, self).__init__()
2043+ self.patterns = []
2044+ self.stderr = False
2045+ self.record = False
2046+ def set_stderr(ignore):
2047+ self.stderr = True
2048+ self.addArgument(self.patterns, 'P', 'pattern',
2049+ 'Add a test matching pattern')
2050+ self.addFlag(set_stderr, 'E', 'stderr',
2051+ 'Enable stderr logging to sub-runners')
2052+ def set_record(ignore):
2053+ self.record = True
2054+ self.addFlag(set_record, 'R', 'rerecord',
2055+ """Force re-recording of test responses. Requires
2056+ Mailman to be running.""")
2057+ self._data_path = os.path.join(TOPDIR, 'tests', 'data', 'tape.yaml')
2058+ self._resources = ExitStack()
2059+
2060+ def startTestRun(self, event):
2061+ # Check to see if we're running the test suite in record mode. If so,
2062+ # delete any existing recording.
2063+ if self.record:
2064+ try:
2065+ os.remove(self._data_path)
2066+ except OSError as error:
2067+ if error.errno != errno.ENOENT:
2068+ raise
2069+ # This will automatically create the recording file.
2070+ self._resources.enter_context(vcr.use_cassette(self._data_path))
2071+
2072+ def stopTestRun(self, event):
2073+ # Stop all recording.
2074+ self._resources.close()
2075+
2076+ def getTestCaseNames(self, event):
2077+ if len(self.patterns) == 0:
2078+ # No filter patterns, so everything should be tested.
2079+ return
2080+ # Does the pattern match the fully qualified class name?
2081+ for pattern in self.patterns:
2082+ full_class_name = '{}.{}'.format(
2083+ event.testCase.__module__, event.testCase.__name__)
2084+ if re.search(pattern, full_class_name):
2085+ # Don't suppress this test class.
2086+ return
2087+ names = filter(event.isTestMethod, dir(event.testCase))
2088+ for name in names:
2089+ full_test_name = '{}.{}.{}'.format(
2090+ event.testCase.__module__,
2091+ event.testCase.__name__,
2092+ name)
2093+ for pattern in self.patterns:
2094+ if re.search(pattern, full_test_name):
2095+ break
2096+ else:
2097+ event.excludedNames.append(name)
2098+
2099+ def handleFile(self, event):
2100+ path = event.path[len(TOPDIR)+1:]
2101+ if len(self.patterns) > 0:
2102+ for pattern in self.patterns:
2103+ if re.search(pattern, path):
2104+ break
2105+ else:
2106+ # Skip this doctest.
2107+ return
2108+ base, ext = os.path.splitext(path)
2109+ if ext != '.rst':
2110+ return
2111+ test = doctest.DocFileTest(
2112+ path, package=mailmanclient,
2113+ optionflags=FLAGS,
2114+ setUp=setup,
2115+ tearDown=teardown)
2116+ # Suppress the extra "Doctest: ..." line.
2117+ test.shortDescription = lambda: None
2118+ event.extraTests.append(test)
2119+
2120+ ## def startTest(self, event):
2121+ ## import sys; print('vvvvv', event.test, file=sys.stderr)
2122+
2123+ ## def stopTest(self, event):
2124+ ## import sys; print('^^^^^', event.test, file=sys.stderr)
2125
2126=== added directory 'src/mailmanclient/tests/data'
2127=== added file 'src/mailmanclient/tests/data/tape.yaml'
2128--- src/mailmanclient/tests/data/tape.yaml 1970-01-01 00:00:00 +0000
2129+++ src/mailmanclient/tests/data/tape.yaml 2015-01-04 23:44:27 +0000
2130@@ -0,0 +1,3905 @@
2131+interactions:
2132+- request:
2133+ body: null
2134+ headers:
2135+ accept-encoding: ['gzip, deflate']
2136+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2137+ user-agent: [GNU Mailman REST client v1.0.0b1]
2138+ method: GET
2139+ uri: http://localhost:9001/3.0/domains/example.org
2140+ response:
2141+ body: {string: 404 Not Found}
2142+ headers:
2143+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2144+ Server: [WSGIServer/0.2 CPython/3.4.2]
2145+ content-length: ['13']
2146+ content-type: [application/json; charset=utf-8]
2147+ status: {code: 404, message: Not Found}
2148+- request:
2149+ body: null
2150+ headers:
2151+ accept-encoding: ['gzip, deflate']
2152+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2153+ user-agent: [GNU Mailman REST client v1.0.0b1]
2154+ method: GET
2155+ uri: http://localhost:9001/3.0/system/versions
2156+ response:
2157+ body: {string: '{"python_version": "3.4.2 (default, Dec 27 2014, 23:37:21) \n[GCC
2158+ 4.9.2]", "http_etag": "\"9fa41b456a0e065e31f34bf9ce42637722d3bf15\"", "mailman_version":
2159+ "GNU Mailman 3.0.0b5 (Carve Away The Stone)", "self_link": "http://localhost:9001/3.0/system/versions"}'}
2160+ headers:
2161+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2162+ Server: [WSGIServer/0.2 CPython/3.4.2]
2163+ content-length: ['258']
2164+ content-type: [application/json; charset=utf-8]
2165+ status: {code: 200, message: OK}
2166+- request:
2167+ body: null
2168+ headers:
2169+ accept-encoding: ['gzip, deflate']
2170+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2171+ user-agent: [GNU Mailman REST client v1.0.0b1]
2172+ method: GET
2173+ uri: http://localhost:9001/3.0/lists
2174+ response:
2175+ body: {string: '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"",
2176+ "total_size": 0, "start": 0}'}
2177+ headers:
2178+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2179+ Server: [WSGIServer/0.2 CPython/3.4.2]
2180+ content-length: ['90']
2181+ content-type: [application/json; charset=utf-8]
2182+ status: {code: 200, message: OK}
2183+- request:
2184+ body: null
2185+ headers:
2186+ accept-encoding: ['gzip, deflate']
2187+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2188+ user-agent: [GNU Mailman REST client v1.0.0b1]
2189+ method: GET
2190+ uri: http://localhost:9001/3.0/domains
2191+ response:
2192+ body: {string: '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"",
2193+ "total_size": 0, "start": 0}'}
2194+ headers:
2195+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2196+ Server: [WSGIServer/0.2 CPython/3.4.2]
2197+ content-length: ['90']
2198+ content-type: [application/json; charset=utf-8]
2199+ status: {code: 200, message: OK}
2200+- request:
2201+ body: contact_address=admin%40example.com&mail_host=example.com
2202+ headers:
2203+ accept-encoding: ['gzip, deflate']
2204+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2205+ content-type: [application/x-www-form-urlencoded]
2206+ user-agent: [GNU Mailman REST client v1.0.0b1]
2207+ method: POST
2208+ uri: http://localhost:9001/3.0/domains
2209+ response:
2210+ body: {string: ''}
2211+ headers:
2212+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2213+ Server: [WSGIServer/0.2 CPython/3.4.2]
2214+ content-length: ['0']
2215+ location: ['http://localhost:9001/3.0/domains/example.com']
2216+ status: {code: 201, message: Created}
2217+- request:
2218+ body: null
2219+ headers:
2220+ accept-encoding: ['gzip, deflate']
2221+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2222+ user-agent: [GNU Mailman REST client v1.0.0b1]
2223+ method: GET
2224+ uri: http://localhost:9001/3.0/domains/example.com
2225+ response:
2226+ body: {string: '{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2227+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2228+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2229+ null}'}
2230+ headers:
2231+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2232+ Server: [WSGIServer/0.2 CPython/3.4.2]
2233+ content-length: ['273']
2234+ content-type: [application/json; charset=utf-8]
2235+ status: {code: 200, message: OK}
2236+- request:
2237+ body: null
2238+ headers:
2239+ accept-encoding: ['gzip, deflate']
2240+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2241+ user-agent: [GNU Mailman REST client v1.0.0b1]
2242+ method: GET
2243+ uri: http://localhost:9001/3.0/domains/example.com
2244+ response:
2245+ body: {string: '{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2246+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2247+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2248+ null}'}
2249+ headers:
2250+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2251+ Server: [WSGIServer/0.2 CPython/3.4.2]
2252+ content-length: ['273']
2253+ content-type: [application/json; charset=utf-8]
2254+ status: {code: 200, message: OK}
2255+- request:
2256+ body: null
2257+ headers:
2258+ accept-encoding: ['gzip, deflate']
2259+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2260+ user-agent: [GNU Mailman REST client v1.0.0b1]
2261+ method: GET
2262+ uri: http://localhost:9001/3.0/domains/example.com
2263+ response:
2264+ body: {string: '{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2265+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2266+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2267+ null}'}
2268+ headers:
2269+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2270+ Server: [WSGIServer/0.2 CPython/3.4.2]
2271+ content-length: ['273']
2272+ content-type: [application/json; charset=utf-8]
2273+ status: {code: 200, message: OK}
2274+- request:
2275+ body: null
2276+ headers:
2277+ accept-encoding: ['gzip, deflate']
2278+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2279+ user-agent: [GNU Mailman REST client v1.0.0b1]
2280+ method: GET
2281+ uri: http://localhost:9001/3.0/domains
2282+ response:
2283+ body: {string: '{"entries": [{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2284+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2285+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2286+ null}], "http_etag": "\"6df529c1146b355d86760c043ba724375711c3fb\"", "total_size":
2287+ 1, "start": 0}'}
2288+ headers:
2289+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2290+ Server: [WSGIServer/0.2 CPython/3.4.2]
2291+ content-length: ['378']
2292+ content-type: [application/json; charset=utf-8]
2293+ status: {code: 200, message: OK}
2294+- request:
2295+ body: null
2296+ headers:
2297+ accept-encoding: ['gzip, deflate']
2298+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2299+ user-agent: [GNU Mailman REST client v1.0.0b1]
2300+ method: GET
2301+ uri: http://localhost:9001/3.0/domains/example.com
2302+ response:
2303+ body: {string: '{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2304+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2305+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2306+ null}'}
2307+ headers:
2308+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2309+ Server: [WSGIServer/0.2 CPython/3.4.2]
2310+ content-length: ['273']
2311+ content-type: [application/json; charset=utf-8]
2312+ status: {code: 200, message: OK}
2313+- request:
2314+ body: mail_host=example.net
2315+ headers:
2316+ accept-encoding: ['gzip, deflate']
2317+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2318+ content-type: [application/x-www-form-urlencoded]
2319+ user-agent: [GNU Mailman REST client v1.0.0b1]
2320+ method: POST
2321+ uri: http://localhost:9001/3.0/domains
2322+ response:
2323+ body: {string: ''}
2324+ headers:
2325+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2326+ Server: [WSGIServer/0.2 CPython/3.4.2]
2327+ content-length: ['0']
2328+ location: ['http://localhost:9001/3.0/domains/example.net']
2329+ status: {code: 201, message: Created}
2330+- request:
2331+ body: null
2332+ headers:
2333+ accept-encoding: ['gzip, deflate']
2334+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2335+ user-agent: [GNU Mailman REST client v1.0.0b1]
2336+ method: GET
2337+ uri: http://localhost:9001/3.0/domains/example.net
2338+ response:
2339+ body: {string: '{"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2340+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2341+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2342+ null}'}
2343+ headers:
2344+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2345+ Server: [WSGIServer/0.2 CPython/3.4.2]
2346+ content-length: ['278']
2347+ content-type: [application/json; charset=utf-8]
2348+ status: {code: 200, message: OK}
2349+- request:
2350+ body: mail_host=example.org
2351+ headers:
2352+ accept-encoding: ['gzip, deflate']
2353+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2354+ content-type: [application/x-www-form-urlencoded]
2355+ user-agent: [GNU Mailman REST client v1.0.0b1]
2356+ method: POST
2357+ uri: http://localhost:9001/3.0/domains
2358+ response:
2359+ body: {string: ''}
2360+ headers:
2361+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2362+ Server: [WSGIServer/0.2 CPython/3.4.2]
2363+ content-length: ['0']
2364+ location: ['http://localhost:9001/3.0/domains/example.org']
2365+ status: {code: 201, message: Created}
2366+- request:
2367+ body: null
2368+ headers:
2369+ accept-encoding: ['gzip, deflate']
2370+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2371+ user-agent: [GNU Mailman REST client v1.0.0b1]
2372+ method: GET
2373+ uri: http://localhost:9001/3.0/domains/example.org
2374+ response:
2375+ body: {string: '{"base_url": "http://example.org", "http_etag": "\"730f23a7a90aecfe1248f952d15bcfe97ce9e51f\"",
2376+ "url_host": "example.org", "self_link": "http://localhost:9001/3.0/domains/example.org",
2377+ "contact_address": "postmaster@example.org", "mail_host": "example.org", "description":
2378+ null}'}
2379+ headers:
2380+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2381+ Server: [WSGIServer/0.2 CPython/3.4.2]
2382+ content-length: ['278']
2383+ content-type: [application/json; charset=utf-8]
2384+ status: {code: 200, message: OK}
2385+- request:
2386+ body: null
2387+ headers:
2388+ accept-encoding: ['gzip, deflate']
2389+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2390+ user-agent: [GNU Mailman REST client v1.0.0b1]
2391+ method: GET
2392+ uri: http://localhost:9001/3.0/domains
2393+ response:
2394+ body: {string: '{"entries": [{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2395+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2396+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2397+ null}, {"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2398+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2399+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2400+ null}, {"base_url": "http://example.org", "http_etag": "\"730f23a7a90aecfe1248f952d15bcfe97ce9e51f\"",
2401+ "url_host": "example.org", "self_link": "http://localhost:9001/3.0/domains/example.org",
2402+ "contact_address": "postmaster@example.org", "mail_host": "example.org", "description":
2403+ null}], "http_etag": "\"f76dc099470a0e1b5bb1788c290dbff8b2e06822\"", "total_size":
2404+ 3, "start": 0}'}
2405+ headers:
2406+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2407+ Server: [WSGIServer/0.2 CPython/3.4.2]
2408+ content-length: ['938']
2409+ content-type: [application/json; charset=utf-8]
2410+ status: {code: 200, message: OK}
2411+- request:
2412+ body: null
2413+ headers:
2414+ accept-encoding: ['gzip, deflate']
2415+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2416+ user-agent: [GNU Mailman REST client v1.0.0b1]
2417+ method: GET
2418+ uri: http://localhost:9001/3.0/domains/example.com
2419+ response:
2420+ body: {string: '{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2421+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2422+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2423+ null}'}
2424+ headers:
2425+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2426+ Server: [WSGIServer/0.2 CPython/3.4.2]
2427+ content-length: ['273']
2428+ content-type: [application/json; charset=utf-8]
2429+ status: {code: 200, message: OK}
2430+- request:
2431+ body: null
2432+ headers:
2433+ accept-encoding: ['gzip, deflate']
2434+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2435+ user-agent: [GNU Mailman REST client v1.0.0b1]
2436+ method: GET
2437+ uri: http://localhost:9001/3.0/domains/example.net
2438+ response:
2439+ body: {string: '{"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2440+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2441+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2442+ null}'}
2443+ headers:
2444+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2445+ Server: [WSGIServer/0.2 CPython/3.4.2]
2446+ content-length: ['278']
2447+ content-type: [application/json; charset=utf-8]
2448+ status: {code: 200, message: OK}
2449+- request:
2450+ body: null
2451+ headers:
2452+ accept-encoding: ['gzip, deflate']
2453+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2454+ user-agent: [GNU Mailman REST client v1.0.0b1]
2455+ method: GET
2456+ uri: http://localhost:9001/3.0/domains/example.org
2457+ response:
2458+ body: {string: '{"base_url": "http://example.org", "http_etag": "\"730f23a7a90aecfe1248f952d15bcfe97ce9e51f\"",
2459+ "url_host": "example.org", "self_link": "http://localhost:9001/3.0/domains/example.org",
2460+ "contact_address": "postmaster@example.org", "mail_host": "example.org", "description":
2461+ null}'}
2462+ headers:
2463+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2464+ Server: [WSGIServer/0.2 CPython/3.4.2]
2465+ content-length: ['278']
2466+ content-type: [application/json; charset=utf-8]
2467+ status: {code: 200, message: OK}
2468+- request:
2469+ body: null
2470+ headers:
2471+ accept-encoding: ['gzip, deflate']
2472+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2473+ user-agent: [GNU Mailman REST client v1.0.0b1]
2474+ method: DELETE
2475+ uri: http://localhost:9001/3.0/domains/example.org
2476+ response:
2477+ body: {string: ''}
2478+ headers:
2479+ Content-Length: ['0']
2480+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2481+ Server: [WSGIServer/0.2 CPython/3.4.2]
2482+ status: {code: 204, message: No Content}
2483+- request:
2484+ body: null
2485+ headers:
2486+ accept-encoding: ['gzip, deflate']
2487+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2488+ user-agent: [GNU Mailman REST client v1.0.0b1]
2489+ method: GET
2490+ uri: http://localhost:9001/3.0/domains
2491+ response:
2492+ body: {string: '{"entries": [{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2493+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2494+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2495+ null}, {"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2496+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2497+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2498+ null}], "http_etag": "\"8c072a5737b36719925d2e222ca2f8fc5a758b50\"", "total_size":
2499+ 2, "start": 0}'}
2500+ headers:
2501+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2502+ Server: [WSGIServer/0.2 CPython/3.4.2]
2503+ content-length: ['658']
2504+ content-type: [application/json; charset=utf-8]
2505+ status: {code: 200, message: OK}
2506+- request:
2507+ body: null
2508+ headers:
2509+ accept-encoding: ['gzip, deflate']
2510+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2511+ user-agent: [GNU Mailman REST client v1.0.0b1]
2512+ method: GET
2513+ uri: http://localhost:9001/3.0/domains/example.com
2514+ response:
2515+ body: {string: '{"base_url": "http://example.com", "http_etag": "\"8e9e004095e6daf79c3b9906bf1bb63f21cf60d7\"",
2516+ "url_host": "example.com", "self_link": "http://localhost:9001/3.0/domains/example.com",
2517+ "contact_address": "admin@example.com", "mail_host": "example.com", "description":
2518+ null}'}
2519+ headers:
2520+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2521+ Server: [WSGIServer/0.2 CPython/3.4.2]
2522+ content-length: ['273']
2523+ content-type: [application/json; charset=utf-8]
2524+ status: {code: 200, message: OK}
2525+- request:
2526+ body: null
2527+ headers:
2528+ accept-encoding: ['gzip, deflate']
2529+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2530+ user-agent: [GNU Mailman REST client v1.0.0b1]
2531+ method: GET
2532+ uri: http://localhost:9001/3.0/domains/example.net
2533+ response:
2534+ body: {string: '{"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2535+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2536+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2537+ null}'}
2538+ headers:
2539+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2540+ Server: [WSGIServer/0.2 CPython/3.4.2]
2541+ content-length: ['278']
2542+ content-type: [application/json; charset=utf-8]
2543+ status: {code: 200, message: OK}
2544+- request:
2545+ body: fqdn_listname=test-one%40example.com
2546+ headers:
2547+ accept-encoding: ['gzip, deflate']
2548+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2549+ content-type: [application/x-www-form-urlencoded]
2550+ user-agent: [GNU Mailman REST client v1.0.0b1]
2551+ method: POST
2552+ uri: http://localhost:9001/3.0/lists
2553+ response:
2554+ body: {string: ''}
2555+ headers:
2556+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2557+ Server: [WSGIServer/0.2 CPython/3.4.2]
2558+ content-length: ['0']
2559+ location: ['http://localhost:9001/3.0/lists/test-one.example.com']
2560+ status: {code: 201, message: Created}
2561+- request:
2562+ body: null
2563+ headers:
2564+ accept-encoding: ['gzip, deflate']
2565+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2566+ user-agent: [GNU Mailman REST client v1.0.0b1]
2567+ method: GET
2568+ uri: http://localhost:9001/3.0/lists/test-one.example.com
2569+ response:
2570+ body: {string: '{"display_name": "Test-one", "list_name": "test-one", "mail_host":
2571+ "example.com", "volume": 1, "fqdn_listname": "test-one@example.com", "member_count":
2572+ 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"", "self_link":
2573+ "http://localhost:9001/3.0/lists/test-one.example.com", "list_id": "test-one.example.com"}'}
2574+ headers:
2575+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2576+ Server: [WSGIServer/0.2 CPython/3.4.2]
2577+ content-length: ['319']
2578+ content-type: [application/json; charset=utf-8]
2579+ status: {code: 200, message: OK}
2580+- request:
2581+ body: null
2582+ headers:
2583+ accept-encoding: ['gzip, deflate']
2584+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2585+ user-agent: [GNU Mailman REST client v1.0.0b1]
2586+ method: GET
2587+ uri: http://localhost:9001/3.0/lists/test-one@example.com
2588+ response:
2589+ body: {string: '{"display_name": "Test-one", "list_name": "test-one", "mail_host":
2590+ "example.com", "volume": 1, "fqdn_listname": "test-one@example.com", "member_count":
2591+ 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"", "self_link":
2592+ "http://localhost:9001/3.0/lists/test-one.example.com", "list_id": "test-one.example.com"}'}
2593+ headers:
2594+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2595+ Server: [WSGIServer/0.2 CPython/3.4.2]
2596+ content-length: ['319']
2597+ content-type: [application/json; charset=utf-8]
2598+ status: {code: 200, message: OK}
2599+- request:
2600+ body: fqdn_listname=test-two%40example.com
2601+ headers:
2602+ accept-encoding: ['gzip, deflate']
2603+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2604+ content-type: [application/x-www-form-urlencoded]
2605+ user-agent: [GNU Mailman REST client v1.0.0b1]
2606+ method: POST
2607+ uri: http://localhost:9001/3.0/lists
2608+ response:
2609+ body: {string: ''}
2610+ headers:
2611+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2612+ Server: [WSGIServer/0.2 CPython/3.4.2]
2613+ content-length: ['0']
2614+ location: ['http://localhost:9001/3.0/lists/test-two.example.com']
2615+ status: {code: 201, message: Created}
2616+- request:
2617+ body: null
2618+ headers:
2619+ accept-encoding: ['gzip, deflate']
2620+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2621+ user-agent: [GNU Mailman REST client v1.0.0b1]
2622+ method: GET
2623+ uri: http://localhost:9001/3.0/lists/test-two.example.com
2624+ response:
2625+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
2626+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
2627+ 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"", "self_link":
2628+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
2629+ headers:
2630+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2631+ Server: [WSGIServer/0.2 CPython/3.4.2]
2632+ content-length: ['319']
2633+ content-type: [application/json; charset=utf-8]
2634+ status: {code: 200, message: OK}
2635+- request:
2636+ body: null
2637+ headers:
2638+ accept-encoding: ['gzip, deflate']
2639+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2640+ user-agent: [GNU Mailman REST client v1.0.0b1]
2641+ method: GET
2642+ uri: http://localhost:9001/3.0/domains/example.net
2643+ response:
2644+ body: {string: '{"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2645+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2646+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2647+ null}'}
2648+ headers:
2649+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2650+ Server: [WSGIServer/0.2 CPython/3.4.2]
2651+ content-length: ['278']
2652+ content-type: [application/json; charset=utf-8]
2653+ status: {code: 200, message: OK}
2654+- request:
2655+ body: null
2656+ headers:
2657+ accept-encoding: ['gzip, deflate']
2658+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2659+ user-agent: [GNU Mailman REST client v1.0.0b1]
2660+ method: GET
2661+ uri: http://localhost:9001/3.0/domains/example.net
2662+ response:
2663+ body: {string: '{"base_url": "http://example.net", "http_etag": "\"e9851cfb8e0e0999c083459951f4f9764f3be325\"",
2664+ "url_host": "example.net", "self_link": "http://localhost:9001/3.0/domains/example.net",
2665+ "contact_address": "postmaster@example.net", "mail_host": "example.net", "description":
2666+ null}'}
2667+ headers:
2668+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2669+ Server: [WSGIServer/0.2 CPython/3.4.2]
2670+ content-length: ['278']
2671+ content-type: [application/json; charset=utf-8]
2672+ status: {code: 200, message: OK}
2673+- request:
2674+ body: fqdn_listname=test-three%40example.net
2675+ headers:
2676+ accept-encoding: ['gzip, deflate']
2677+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2678+ content-type: [application/x-www-form-urlencoded]
2679+ user-agent: [GNU Mailman REST client v1.0.0b1]
2680+ method: POST
2681+ uri: http://localhost:9001/3.0/lists
2682+ response:
2683+ body: {string: ''}
2684+ headers:
2685+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2686+ Server: [WSGIServer/0.2 CPython/3.4.2]
2687+ content-length: ['0']
2688+ location: ['http://localhost:9001/3.0/lists/test-three.example.net']
2689+ status: {code: 201, message: Created}
2690+- request:
2691+ body: null
2692+ headers:
2693+ accept-encoding: ['gzip, deflate']
2694+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2695+ user-agent: [GNU Mailman REST client v1.0.0b1]
2696+ method: GET
2697+ uri: http://localhost:9001/3.0/lists/test-three.example.net
2698+ response:
2699+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
2700+ "example.net", "volume": 1, "fqdn_listname": "test-three@example.net", "member_count":
2701+ 0, "http_etag": "\"aac838e6414aceb4bd94838ce8587acd14c82689\"", "self_link":
2702+ "http://localhost:9001/3.0/lists/test-three.example.net", "list_id": "test-three.example.net"}'}
2703+ headers:
2704+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2705+ Server: [WSGIServer/0.2 CPython/3.4.2]
2706+ content-length: ['329']
2707+ content-type: [application/json; charset=utf-8]
2708+ status: {code: 200, message: OK}
2709+- request:
2710+ body: fqdn_listname=test-three%40example.com
2711+ headers:
2712+ accept-encoding: ['gzip, deflate']
2713+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2714+ content-type: [application/x-www-form-urlencoded]
2715+ user-agent: [GNU Mailman REST client v1.0.0b1]
2716+ method: POST
2717+ uri: http://localhost:9001/3.0/lists
2718+ response:
2719+ body: {string: ''}
2720+ headers:
2721+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2722+ Server: [WSGIServer/0.2 CPython/3.4.2]
2723+ content-length: ['0']
2724+ location: ['http://localhost:9001/3.0/lists/test-three.example.com']
2725+ status: {code: 201, message: Created}
2726+- request:
2727+ body: null
2728+ headers:
2729+ accept-encoding: ['gzip, deflate']
2730+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2731+ user-agent: [GNU Mailman REST client v1.0.0b1]
2732+ method: GET
2733+ uri: http://localhost:9001/3.0/lists/test-three.example.com
2734+ response:
2735+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
2736+ "example.com", "volume": 1, "fqdn_listname": "test-three@example.com", "member_count":
2737+ 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"", "self_link":
2738+ "http://localhost:9001/3.0/lists/test-three.example.com", "list_id": "test-three.example.com"}'}
2739+ headers:
2740+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2741+ Server: [WSGIServer/0.2 CPython/3.4.2]
2742+ content-length: ['329']
2743+ content-type: [application/json; charset=utf-8]
2744+ status: {code: 200, message: OK}
2745+- request:
2746+ body: null
2747+ headers:
2748+ accept-encoding: ['gzip, deflate']
2749+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2750+ user-agent: [GNU Mailman REST client v1.0.0b1]
2751+ method: GET
2752+ uri: http://localhost:9001/3.0/lists
2753+ response:
2754+ body: {string: '{"entries": [{"display_name": "Test-one", "list_name": "test-one",
2755+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-one@example.com",
2756+ "member_count": 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"",
2757+ "self_link": "http://localhost:9001/3.0/lists/test-one.example.com", "list_id":
2758+ "test-one.example.com"}, {"display_name": "Test-two", "list_name": "test-two",
2759+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-two@example.com",
2760+ "member_count": 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"",
2761+ "self_link": "http://localhost:9001/3.0/lists/test-two.example.com", "list_id":
2762+ "test-two.example.com"}, {"display_name": "Test-three", "list_name": "test-three",
2763+ "mail_host": "example.net", "volume": 1, "fqdn_listname": "test-three@example.net",
2764+ "member_count": 0, "http_etag": "\"aac838e6414aceb4bd94838ce8587acd14c82689\"",
2765+ "self_link": "http://localhost:9001/3.0/lists/test-three.example.net", "list_id":
2766+ "test-three.example.net"}, {"display_name": "Test-three", "list_name": "test-three",
2767+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-three@example.com",
2768+ "member_count": 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"",
2769+ "self_link": "http://localhost:9001/3.0/lists/test-three.example.com", "list_id":
2770+ "test-three.example.com"}], "http_etag": "\"364f4981c17939f6475615640cf38eca0354df52\"",
2771+ "total_size": 4, "start": 0}'}
2772+ headers:
2773+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2774+ Server: [WSGIServer/0.2 CPython/3.4.2]
2775+ content-length: ['1407']
2776+ content-type: [application/json; charset=utf-8]
2777+ status: {code: 200, message: OK}
2778+- request:
2779+ body: null
2780+ headers:
2781+ accept-encoding: ['gzip, deflate']
2782+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2783+ user-agent: [GNU Mailman REST client v1.0.0b1]
2784+ method: GET
2785+ uri: http://localhost:9001/3.0/lists/test-one.example.com
2786+ response:
2787+ body: {string: '{"display_name": "Test-one", "list_name": "test-one", "mail_host":
2788+ "example.com", "volume": 1, "fqdn_listname": "test-one@example.com", "member_count":
2789+ 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"", "self_link":
2790+ "http://localhost:9001/3.0/lists/test-one.example.com", "list_id": "test-one.example.com"}'}
2791+ headers:
2792+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2793+ Server: [WSGIServer/0.2 CPython/3.4.2]
2794+ content-length: ['319']
2795+ content-type: [application/json; charset=utf-8]
2796+ status: {code: 200, message: OK}
2797+- request:
2798+ body: null
2799+ headers:
2800+ accept-encoding: ['gzip, deflate']
2801+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2802+ user-agent: [GNU Mailman REST client v1.0.0b1]
2803+ method: GET
2804+ uri: http://localhost:9001/3.0/lists/test-two.example.com
2805+ response:
2806+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
2807+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
2808+ 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"", "self_link":
2809+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
2810+ headers:
2811+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2812+ Server: [WSGIServer/0.2 CPython/3.4.2]
2813+ content-length: ['319']
2814+ content-type: [application/json; charset=utf-8]
2815+ status: {code: 200, message: OK}
2816+- request:
2817+ body: null
2818+ headers:
2819+ accept-encoding: ['gzip, deflate']
2820+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2821+ user-agent: [GNU Mailman REST client v1.0.0b1]
2822+ method: GET
2823+ uri: http://localhost:9001/3.0/lists/test-three.example.net
2824+ response:
2825+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
2826+ "example.net", "volume": 1, "fqdn_listname": "test-three@example.net", "member_count":
2827+ 0, "http_etag": "\"aac838e6414aceb4bd94838ce8587acd14c82689\"", "self_link":
2828+ "http://localhost:9001/3.0/lists/test-three.example.net", "list_id": "test-three.example.net"}'}
2829+ headers:
2830+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2831+ Server: [WSGIServer/0.2 CPython/3.4.2]
2832+ content-length: ['329']
2833+ content-type: [application/json; charset=utf-8]
2834+ status: {code: 200, message: OK}
2835+- request:
2836+ body: null
2837+ headers:
2838+ accept-encoding: ['gzip, deflate']
2839+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2840+ user-agent: [GNU Mailman REST client v1.0.0b1]
2841+ method: GET
2842+ uri: http://localhost:9001/3.0/lists/test-three.example.com
2843+ response:
2844+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
2845+ "example.com", "volume": 1, "fqdn_listname": "test-three@example.com", "member_count":
2846+ 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"", "self_link":
2847+ "http://localhost:9001/3.0/lists/test-three.example.com", "list_id": "test-three.example.com"}'}
2848+ headers:
2849+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2850+ Server: [WSGIServer/0.2 CPython/3.4.2]
2851+ content-length: ['329']
2852+ content-type: [application/json; charset=utf-8]
2853+ status: {code: 200, message: OK}
2854+- request:
2855+ body: null
2856+ headers:
2857+ accept-encoding: ['gzip, deflate']
2858+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2859+ user-agent: [GNU Mailman REST client v1.0.0b1]
2860+ method: GET
2861+ uri: http://localhost:9001/3.0/lists?count=2&page=1
2862+ response:
2863+ body: {string: '{"entries": [{"display_name": "Test-one", "list_name": "test-one",
2864+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-one@example.com",
2865+ "member_count": 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"",
2866+ "self_link": "http://localhost:9001/3.0/lists/test-one.example.com", "list_id":
2867+ "test-one.example.com"}, {"display_name": "Test-two", "list_name": "test-two",
2868+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-two@example.com",
2869+ "member_count": 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"",
2870+ "self_link": "http://localhost:9001/3.0/lists/test-two.example.com", "list_id":
2871+ "test-two.example.com"}], "http_etag": "\"7576518b52cee8dd837ba7de06531325e23d8051\"",
2872+ "total_size": 2, "start": 0}'}
2873+ headers:
2874+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2875+ Server: [WSGIServer/0.2 CPython/3.4.2]
2876+ content-length: ['745']
2877+ content-type: [application/json; charset=utf-8]
2878+ status: {code: 200, message: OK}
2879+- request:
2880+ body: null
2881+ headers:
2882+ accept-encoding: ['gzip, deflate']
2883+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2884+ user-agent: [GNU Mailman REST client v1.0.0b1]
2885+ method: GET
2886+ uri: http://localhost:9001/3.0/lists/test-one.example.com
2887+ response:
2888+ body: {string: '{"display_name": "Test-one", "list_name": "test-one", "mail_host":
2889+ "example.com", "volume": 1, "fqdn_listname": "test-one@example.com", "member_count":
2890+ 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"", "self_link":
2891+ "http://localhost:9001/3.0/lists/test-one.example.com", "list_id": "test-one.example.com"}'}
2892+ headers:
2893+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2894+ Server: [WSGIServer/0.2 CPython/3.4.2]
2895+ content-length: ['319']
2896+ content-type: [application/json; charset=utf-8]
2897+ status: {code: 200, message: OK}
2898+- request:
2899+ body: null
2900+ headers:
2901+ accept-encoding: ['gzip, deflate']
2902+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2903+ user-agent: [GNU Mailman REST client v1.0.0b1]
2904+ method: GET
2905+ uri: http://localhost:9001/3.0/lists/test-two.example.com
2906+ response:
2907+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
2908+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
2909+ 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"", "self_link":
2910+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
2911+ headers:
2912+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2913+ Server: [WSGIServer/0.2 CPython/3.4.2]
2914+ content-length: ['319']
2915+ content-type: [application/json; charset=utf-8]
2916+ status: {code: 200, message: OK}
2917+- request:
2918+ body: null
2919+ headers:
2920+ accept-encoding: ['gzip, deflate']
2921+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2922+ user-agent: [GNU Mailman REST client v1.0.0b1]
2923+ method: GET
2924+ uri: http://localhost:9001/3.0/lists?count=2&page=2
2925+ response:
2926+ body: {string: '{"entries": [{"display_name": "Test-three", "list_name": "test-three",
2927+ "mail_host": "example.net", "volume": 1, "fqdn_listname": "test-three@example.net",
2928+ "member_count": 0, "http_etag": "\"aac838e6414aceb4bd94838ce8587acd14c82689\"",
2929+ "self_link": "http://localhost:9001/3.0/lists/test-three.example.net", "list_id":
2930+ "test-three.example.net"}, {"display_name": "Test-three", "list_name": "test-three",
2931+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-three@example.com",
2932+ "member_count": 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"",
2933+ "self_link": "http://localhost:9001/3.0/lists/test-three.example.com", "list_id":
2934+ "test-three.example.com"}], "http_etag": "\"8bb63eb4f57656bfbeda922896dc67efd33fb31c\"",
2935+ "total_size": 2, "start": 0}'}
2936+ headers:
2937+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2938+ Server: [WSGIServer/0.2 CPython/3.4.2]
2939+ content-length: ['765']
2940+ content-type: [application/json; charset=utf-8]
2941+ status: {code: 200, message: OK}
2942+- request:
2943+ body: null
2944+ headers:
2945+ accept-encoding: ['gzip, deflate']
2946+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2947+ user-agent: [GNU Mailman REST client v1.0.0b1]
2948+ method: GET
2949+ uri: http://localhost:9001/3.0/lists/test-three.example.net
2950+ response:
2951+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
2952+ "example.net", "volume": 1, "fqdn_listname": "test-three@example.net", "member_count":
2953+ 0, "http_etag": "\"aac838e6414aceb4bd94838ce8587acd14c82689\"", "self_link":
2954+ "http://localhost:9001/3.0/lists/test-three.example.net", "list_id": "test-three.example.net"}'}
2955+ headers:
2956+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2957+ Server: [WSGIServer/0.2 CPython/3.4.2]
2958+ content-length: ['329']
2959+ content-type: [application/json; charset=utf-8]
2960+ status: {code: 200, message: OK}
2961+- request:
2962+ body: null
2963+ headers:
2964+ accept-encoding: ['gzip, deflate']
2965+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2966+ user-agent: [GNU Mailman REST client v1.0.0b1]
2967+ method: GET
2968+ uri: http://localhost:9001/3.0/lists/test-three.example.com
2969+ response:
2970+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
2971+ "example.com", "volume": 1, "fqdn_listname": "test-three@example.com", "member_count":
2972+ 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"", "self_link":
2973+ "http://localhost:9001/3.0/lists/test-three.example.com", "list_id": "test-three.example.com"}'}
2974+ headers:
2975+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
2976+ Server: [WSGIServer/0.2 CPython/3.4.2]
2977+ content-length: ['329']
2978+ content-type: [application/json; charset=utf-8]
2979+ status: {code: 200, message: OK}
2980+- request:
2981+ body: null
2982+ headers:
2983+ accept-encoding: ['gzip, deflate']
2984+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
2985+ user-agent: [GNU Mailman REST client v1.0.0b1]
2986+ method: GET
2987+ uri: http://localhost:9001/3.0/domains/example.com/lists
2988+ response:
2989+ body: {string: '{"entries": [{"display_name": "Test-one", "list_name": "test-one",
2990+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-one@example.com",
2991+ "member_count": 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"",
2992+ "self_link": "http://localhost:9001/3.0/lists/test-one.example.com", "list_id":
2993+ "test-one.example.com"}, {"display_name": "Test-three", "list_name": "test-three",
2994+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-three@example.com",
2995+ "member_count": 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"",
2996+ "self_link": "http://localhost:9001/3.0/lists/test-three.example.com", "list_id":
2997+ "test-three.example.com"}, {"display_name": "Test-two", "list_name": "test-two",
2998+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-two@example.com",
2999+ "member_count": 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"",
3000+ "self_link": "http://localhost:9001/3.0/lists/test-two.example.com", "list_id":
3001+ "test-two.example.com"}], "http_etag": "\"abf9ade1d031e7c98d4b258a33f14ec9f00ba12a\"",
3002+ "total_size": 3, "start": 0}'}
3003+ headers:
3004+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3005+ Server: [WSGIServer/0.2 CPython/3.4.2]
3006+ content-length: ['1076']
3007+ content-type: [application/json; charset=utf-8]
3008+ status: {code: 200, message: OK}
3009+- request:
3010+ body: null
3011+ headers:
3012+ accept-encoding: ['gzip, deflate']
3013+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3014+ user-agent: [GNU Mailman REST client v1.0.0b1]
3015+ method: GET
3016+ uri: http://localhost:9001/3.0/lists/test-one.example.com
3017+ response:
3018+ body: {string: '{"display_name": "Test-one", "list_name": "test-one", "mail_host":
3019+ "example.com", "volume": 1, "fqdn_listname": "test-one@example.com", "member_count":
3020+ 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"", "self_link":
3021+ "http://localhost:9001/3.0/lists/test-one.example.com", "list_id": "test-one.example.com"}'}
3022+ headers:
3023+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3024+ Server: [WSGIServer/0.2 CPython/3.4.2]
3025+ content-length: ['319']
3026+ content-type: [application/json; charset=utf-8]
3027+ status: {code: 200, message: OK}
3028+- request:
3029+ body: null
3030+ headers:
3031+ accept-encoding: ['gzip, deflate']
3032+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3033+ user-agent: [GNU Mailman REST client v1.0.0b1]
3034+ method: GET
3035+ uri: http://localhost:9001/3.0/lists/test-three.example.com
3036+ response:
3037+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
3038+ "example.com", "volume": 1, "fqdn_listname": "test-three@example.com", "member_count":
3039+ 0, "http_etag": "\"c168aa6f2589f789bf71e7f3146b5f2cfb1c87f9\"", "self_link":
3040+ "http://localhost:9001/3.0/lists/test-three.example.com", "list_id": "test-three.example.com"}'}
3041+ headers:
3042+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3043+ Server: [WSGIServer/0.2 CPython/3.4.2]
3044+ content-length: ['329']
3045+ content-type: [application/json; charset=utf-8]
3046+ status: {code: 200, message: OK}
3047+- request:
3048+ body: null
3049+ headers:
3050+ accept-encoding: ['gzip, deflate']
3051+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3052+ user-agent: [GNU Mailman REST client v1.0.0b1]
3053+ method: GET
3054+ uri: http://localhost:9001/3.0/lists/test-two.example.com
3055+ response:
3056+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
3057+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
3058+ 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"", "self_link":
3059+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
3060+ headers:
3061+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3062+ Server: [WSGIServer/0.2 CPython/3.4.2]
3063+ content-length: ['319']
3064+ content-type: [application/json; charset=utf-8]
3065+ status: {code: 200, message: OK}
3066+- request:
3067+ body: null
3068+ headers:
3069+ accept-encoding: ['gzip, deflate']
3070+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3071+ user-agent: [GNU Mailman REST client v1.0.0b1]
3072+ method: GET
3073+ uri: http://localhost:9001/3.0/lists/test-three@example.net
3074+ response:
3075+ body: {string: '{"display_name": "Test-three", "list_name": "test-three", "mail_host":
3076+ "example.net", "volume": 1, "fqdn_listname": "test-three@example.net", "member_count":
3077+ 0, "http_etag": "\"aac838e6414aceb4bd94838ce8587acd14c82689\"", "self_link":
3078+ "http://localhost:9001/3.0/lists/test-three.example.net", "list_id": "test-three.example.net"}'}
3079+ headers:
3080+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3081+ Server: [WSGIServer/0.2 CPython/3.4.2]
3082+ content-length: ['329']
3083+ content-type: [application/json; charset=utf-8]
3084+ status: {code: 200, message: OK}
3085+- request:
3086+ body: null
3087+ headers:
3088+ accept-encoding: ['gzip, deflate']
3089+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3090+ user-agent: [GNU Mailman REST client v1.0.0b1]
3091+ method: DELETE
3092+ uri: http://localhost:9001/3.0/lists/test-three@example.net
3093+ response:
3094+ body: {string: ''}
3095+ headers:
3096+ Content-Length: ['0']
3097+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3098+ Server: [WSGIServer/0.2 CPython/3.4.2]
3099+ status: {code: 204, message: No Content}
3100+- request:
3101+ body: null
3102+ headers:
3103+ accept-encoding: ['gzip, deflate']
3104+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3105+ user-agent: [GNU Mailman REST client v1.0.0b1]
3106+ method: DELETE
3107+ uri: http://localhost:9001/3.0/lists/test-three@example.com
3108+ response:
3109+ body: {string: ''}
3110+ headers:
3111+ Content-Length: ['0']
3112+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3113+ Server: [WSGIServer/0.2 CPython/3.4.2]
3114+ status: {code: 204, message: No Content}
3115+- request:
3116+ body: null
3117+ headers:
3118+ accept-encoding: ['gzip, deflate']
3119+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3120+ user-agent: [GNU Mailman REST client v1.0.0b1]
3121+ method: GET
3122+ uri: http://localhost:9001/3.0/lists
3123+ response:
3124+ body: {string: '{"entries": [{"display_name": "Test-one", "list_name": "test-one",
3125+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-one@example.com",
3126+ "member_count": 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"",
3127+ "self_link": "http://localhost:9001/3.0/lists/test-one.example.com", "list_id":
3128+ "test-one.example.com"}, {"display_name": "Test-two", "list_name": "test-two",
3129+ "mail_host": "example.com", "volume": 1, "fqdn_listname": "test-two@example.com",
3130+ "member_count": 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"",
3131+ "self_link": "http://localhost:9001/3.0/lists/test-two.example.com", "list_id":
3132+ "test-two.example.com"}], "http_etag": "\"7576518b52cee8dd837ba7de06531325e23d8051\"",
3133+ "total_size": 2, "start": 0}'}
3134+ headers:
3135+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3136+ Server: [WSGIServer/0.2 CPython/3.4.2]
3137+ content-length: ['745']
3138+ content-type: [application/json; charset=utf-8]
3139+ status: {code: 200, message: OK}
3140+- request:
3141+ body: null
3142+ headers:
3143+ accept-encoding: ['gzip, deflate']
3144+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3145+ user-agent: [GNU Mailman REST client v1.0.0b1]
3146+ method: GET
3147+ uri: http://localhost:9001/3.0/lists/test-one.example.com
3148+ response:
3149+ body: {string: '{"display_name": "Test-one", "list_name": "test-one", "mail_host":
3150+ "example.com", "volume": 1, "fqdn_listname": "test-one@example.com", "member_count":
3151+ 0, "http_etag": "\"37400908e98dea4024428dd7983a06b749c86582\"", "self_link":
3152+ "http://localhost:9001/3.0/lists/test-one.example.com", "list_id": "test-one.example.com"}'}
3153+ headers:
3154+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3155+ Server: [WSGIServer/0.2 CPython/3.4.2]
3156+ content-length: ['319']
3157+ content-type: [application/json; charset=utf-8]
3158+ status: {code: 200, message: OK}
3159+- request:
3160+ body: null
3161+ headers:
3162+ accept-encoding: ['gzip, deflate']
3163+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3164+ user-agent: [GNU Mailman REST client v1.0.0b1]
3165+ method: GET
3166+ uri: http://localhost:9001/3.0/lists/test-two.example.com
3167+ response:
3168+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
3169+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
3170+ 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"", "self_link":
3171+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
3172+ headers:
3173+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3174+ Server: [WSGIServer/0.2 CPython/3.4.2]
3175+ content-length: ['319']
3176+ content-type: [application/json; charset=utf-8]
3177+ status: {code: 200, message: OK}
3178+- request:
3179+ body: null
3180+ headers:
3181+ accept-encoding: ['gzip, deflate']
3182+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3183+ user-agent: [GNU Mailman REST client v1.0.0b1]
3184+ method: GET
3185+ uri: http://localhost:9001/3.0/members
3186+ response:
3187+ body: {string: '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"",
3188+ "total_size": 0, "start": 0}'}
3189+ headers:
3190+ Date: ['Sun, 04 Jan 2015 22:42:45 GMT']
3191+ Server: [WSGIServer/0.2 CPython/3.4.2]
3192+ content-length: ['90']
3193+ content-type: [application/json; charset=utf-8]
3194+ status: {code: 200, message: OK}
3195+- request:
3196+ body: null
3197+ headers:
3198+ accept-encoding: ['gzip, deflate']
3199+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3200+ user-agent: [GNU Mailman REST client v1.0.0b1]
3201+ method: GET
3202+ uri: http://localhost:9001/3.0/lists/test-two@example.com
3203+ response:
3204+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
3205+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
3206+ 0, "http_etag": "\"2b786766b483232ecccef33e919016281990bc7f\"", "self_link":
3207+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
3208+ headers:
3209+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3210+ Server: [WSGIServer/0.2 CPython/3.4.2]
3211+ content-length: ['319']
3212+ content-type: [application/json; charset=utf-8]
3213+ status: {code: 200, message: OK}
3214+- request:
3215+ body: subscriber=anna%40example.com&display_name=Anna&list_id=test-one.example.com
3216+ headers:
3217+ accept-encoding: ['gzip, deflate']
3218+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3219+ content-type: [application/x-www-form-urlencoded]
3220+ user-agent: [GNU Mailman REST client v1.0.0b1]
3221+ method: POST
3222+ uri: http://localhost:9001/3.0/members
3223+ response:
3224+ body: {string: ''}
3225+ headers:
3226+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3227+ Server: [WSGIServer/0.2 CPython/3.4.2]
3228+ content-length: ['0']
3229+ location: ['http://localhost:9001/3.0/members/104473260871439163529610165544142173708']
3230+ status: {code: 201, message: Created}
3231+- request:
3232+ body: null
3233+ headers:
3234+ accept-encoding: ['gzip, deflate']
3235+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3236+ user-agent: [GNU Mailman REST client v1.0.0b1]
3237+ method: GET
3238+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
3239+ response:
3240+ body: {string: '{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3241+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3242+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3243+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3244+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3245+ headers:
3246+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3247+ Server: [WSGIServer/0.2 CPython/3.4.2]
3248+ content-length: ['410']
3249+ content-type: [application/json; charset=utf-8]
3250+ status: {code: 200, message: OK}
3251+- request:
3252+ body: subscriber=bill%40example.com&display_name=Bill&list_id=test-one.example.com
3253+ headers:
3254+ accept-encoding: ['gzip, deflate']
3255+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3256+ content-type: [application/x-www-form-urlencoded]
3257+ user-agent: [GNU Mailman REST client v1.0.0b1]
3258+ method: POST
3259+ uri: http://localhost:9001/3.0/members
3260+ response:
3261+ body: {string: ''}
3262+ headers:
3263+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3264+ Server: [WSGIServer/0.2 CPython/3.4.2]
3265+ content-length: ['0']
3266+ location: ['http://localhost:9001/3.0/members/275272594951032189318671732666193338856']
3267+ status: {code: 201, message: Created}
3268+- request:
3269+ body: null
3270+ headers:
3271+ accept-encoding: ['gzip, deflate']
3272+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3273+ user-agent: [GNU Mailman REST client v1.0.0b1]
3274+ method: GET
3275+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
3276+ response:
3277+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
3278+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3279+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3280+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3281+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
3282+ headers:
3283+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3284+ Server: [WSGIServer/0.2 CPython/3.4.2]
3285+ content-length: ['411']
3286+ content-type: [application/json; charset=utf-8]
3287+ status: {code: 200, message: OK}
3288+- request:
3289+ body: subscriber=anna%40example.com&display_name=None&list_id=test-two.example.com
3290+ headers:
3291+ accept-encoding: ['gzip, deflate']
3292+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3293+ content-type: [application/x-www-form-urlencoded]
3294+ user-agent: [GNU Mailman REST client v1.0.0b1]
3295+ method: POST
3296+ uri: http://localhost:9001/3.0/members
3297+ response:
3298+ body: {string: ''}
3299+ headers:
3300+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3301+ Server: [WSGIServer/0.2 CPython/3.4.2]
3302+ content-length: ['0']
3303+ location: ['http://localhost:9001/3.0/members/18090098823740248348445588761302258241']
3304+ status: {code: 201, message: Created}
3305+- request:
3306+ body: null
3307+ headers:
3308+ accept-encoding: ['gzip, deflate']
3309+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3310+ user-agent: [GNU Mailman REST client v1.0.0b1]
3311+ method: GET
3312+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
3313+ response:
3314+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3315+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3316+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3317+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3318+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3319+ headers:
3320+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3321+ Server: [WSGIServer/0.2 CPython/3.4.2]
3322+ content-length: ['409']
3323+ content-type: [application/json; charset=utf-8]
3324+ status: {code: 200, message: OK}
3325+- request:
3326+ body: subscriber=cris%40example.com&display_name=Cris&list_id=test-two.example.com
3327+ headers:
3328+ accept-encoding: ['gzip, deflate']
3329+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3330+ content-type: [application/x-www-form-urlencoded]
3331+ user-agent: [GNU Mailman REST client v1.0.0b1]
3332+ method: POST
3333+ uri: http://localhost:9001/3.0/members
3334+ response:
3335+ body: {string: ''}
3336+ headers:
3337+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3338+ Server: [WSGIServer/0.2 CPython/3.4.2]
3339+ content-length: ['0']
3340+ location: ['http://localhost:9001/3.0/members/277964071707554096935986210544886743347']
3341+ status: {code: 201, message: Created}
3342+- request:
3343+ body: null
3344+ headers:
3345+ accept-encoding: ['gzip, deflate']
3346+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3347+ user-agent: [GNU Mailman REST client v1.0.0b1]
3348+ method: GET
3349+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
3350+ response:
3351+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
3352+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3353+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3354+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3355+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
3356+ headers:
3357+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3358+ Server: [WSGIServer/0.2 CPython/3.4.2]
3359+ content-length: ['411']
3360+ content-type: [application/json; charset=utf-8]
3361+ status: {code: 200, message: OK}
3362+- request:
3363+ body: null
3364+ headers:
3365+ accept-encoding: ['gzip, deflate']
3366+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3367+ user-agent: [GNU Mailman REST client v1.0.0b1]
3368+ method: GET
3369+ uri: http://localhost:9001/3.0/members
3370+ response:
3371+ body: {string: '{"entries": [{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3372+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3373+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3374+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3375+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3376+ {"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"", "delivery_mode":
3377+ "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3378+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3379+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3380+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"},
3381+ {"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"", "delivery_mode":
3382+ "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3383+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3384+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3385+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3386+ {"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"", "delivery_mode":
3387+ "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3388+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3389+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3390+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}],
3391+ "http_etag": "\"52ccb218ea5b606545a0a1509ecb57fcea5c30da\"", "total_size":
3392+ 4, "start": 0}'}
3393+ headers:
3394+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3395+ Server: [WSGIServer/0.2 CPython/3.4.2]
3396+ content-length: ['1752']
3397+ content-type: [application/json; charset=utf-8]
3398+ status: {code: 200, message: OK}
3399+- request:
3400+ body: null
3401+ headers:
3402+ accept-encoding: ['gzip, deflate']
3403+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3404+ user-agent: [GNU Mailman REST client v1.0.0b1]
3405+ method: GET
3406+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
3407+ response:
3408+ body: {string: '{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3409+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3410+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3411+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3412+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3413+ headers:
3414+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3415+ Server: [WSGIServer/0.2 CPython/3.4.2]
3416+ content-length: ['410']
3417+ content-type: [application/json; charset=utf-8]
3418+ status: {code: 200, message: OK}
3419+- request:
3420+ body: null
3421+ headers:
3422+ accept-encoding: ['gzip, deflate']
3423+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3424+ user-agent: [GNU Mailman REST client v1.0.0b1]
3425+ method: GET
3426+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
3427+ response:
3428+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
3429+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3430+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3431+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3432+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
3433+ headers:
3434+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3435+ Server: [WSGIServer/0.2 CPython/3.4.2]
3436+ content-length: ['411']
3437+ content-type: [application/json; charset=utf-8]
3438+ status: {code: 200, message: OK}
3439+- request:
3440+ body: null
3441+ headers:
3442+ accept-encoding: ['gzip, deflate']
3443+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3444+ user-agent: [GNU Mailman REST client v1.0.0b1]
3445+ method: GET
3446+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
3447+ response:
3448+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3449+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3450+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3451+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3452+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3453+ headers:
3454+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3455+ Server: [WSGIServer/0.2 CPython/3.4.2]
3456+ content-length: ['409']
3457+ content-type: [application/json; charset=utf-8]
3458+ status: {code: 200, message: OK}
3459+- request:
3460+ body: null
3461+ headers:
3462+ accept-encoding: ['gzip, deflate']
3463+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3464+ user-agent: [GNU Mailman REST client v1.0.0b1]
3465+ method: GET
3466+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
3467+ response:
3468+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
3469+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3470+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3471+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3472+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
3473+ headers:
3474+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3475+ Server: [WSGIServer/0.2 CPython/3.4.2]
3476+ content-length: ['411']
3477+ content-type: [application/json; charset=utf-8]
3478+ status: {code: 200, message: OK}
3479+- request:
3480+ body: null
3481+ headers:
3482+ accept-encoding: ['gzip, deflate']
3483+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3484+ user-agent: [GNU Mailman REST client v1.0.0b1]
3485+ method: GET
3486+ uri: http://localhost:9001/3.0/lists/test-one@example.com/roster/member
3487+ response:
3488+ body: {string: '{"entries": [{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3489+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3490+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3491+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3492+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3493+ {"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"", "delivery_mode":
3494+ "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3495+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3496+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3497+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}],
3498+ "http_etag": "\"035b2ef6161ccb46df27b7a6bec02c1a85cf471f\"", "total_size":
3499+ 2, "start": 0}'}
3500+ headers:
3501+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3502+ Server: [WSGIServer/0.2 CPython/3.4.2]
3503+ content-length: ['928']
3504+ content-type: [application/json; charset=utf-8]
3505+ status: {code: 200, message: OK}
3506+- request:
3507+ body: null
3508+ headers:
3509+ accept-encoding: ['gzip, deflate']
3510+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3511+ user-agent: [GNU Mailman REST client v1.0.0b1]
3512+ method: GET
3513+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
3514+ response:
3515+ body: {string: '{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3516+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3517+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3518+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3519+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3520+ headers:
3521+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3522+ Server: [WSGIServer/0.2 CPython/3.4.2]
3523+ content-length: ['410']
3524+ content-type: [application/json; charset=utf-8]
3525+ status: {code: 200, message: OK}
3526+- request:
3527+ body: null
3528+ headers:
3529+ accept-encoding: ['gzip, deflate']
3530+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3531+ user-agent: [GNU Mailman REST client v1.0.0b1]
3532+ method: GET
3533+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
3534+ response:
3535+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
3536+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3537+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3538+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3539+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
3540+ headers:
3541+ Date: ['Sun, 04 Jan 2015 22:42:46 GMT']
3542+ Server: [WSGIServer/0.2 CPython/3.4.2]
3543+ content-length: ['411']
3544+ content-type: [application/json; charset=utf-8]
3545+ status: {code: 200, message: OK}
3546+- request:
3547+ body: null
3548+ headers:
3549+ accept-encoding: ['gzip, deflate']
3550+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3551+ user-agent: [GNU Mailman REST client v1.0.0b1]
3552+ method: GET
3553+ uri: http://localhost:9001/3.0/members?count=2&page=1
3554+ response:
3555+ body: {string: '{"entries": [{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3556+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3557+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3558+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3559+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3560+ {"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"", "delivery_mode":
3561+ "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3562+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3563+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3564+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}],
3565+ "http_etag": "\"035b2ef6161ccb46df27b7a6bec02c1a85cf471f\"", "total_size":
3566+ 2, "start": 0}'}
3567+ headers:
3568+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3569+ Server: [WSGIServer/0.2 CPython/3.4.2]
3570+ content-length: ['928']
3571+ content-type: [application/json; charset=utf-8]
3572+ status: {code: 200, message: OK}
3573+- request:
3574+ body: null
3575+ headers:
3576+ accept-encoding: ['gzip, deflate']
3577+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3578+ user-agent: [GNU Mailman REST client v1.0.0b1]
3579+ method: GET
3580+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
3581+ response:
3582+ body: {string: '{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3583+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3584+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3585+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3586+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3587+ headers:
3588+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3589+ Server: [WSGIServer/0.2 CPython/3.4.2]
3590+ content-length: ['410']
3591+ content-type: [application/json; charset=utf-8]
3592+ status: {code: 200, message: OK}
3593+- request:
3594+ body: null
3595+ headers:
3596+ accept-encoding: ['gzip, deflate']
3597+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3598+ user-agent: [GNU Mailman REST client v1.0.0b1]
3599+ method: GET
3600+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
3601+ response:
3602+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
3603+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3604+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3605+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3606+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
3607+ headers:
3608+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3609+ Server: [WSGIServer/0.2 CPython/3.4.2]
3610+ content-length: ['411']
3611+ content-type: [application/json; charset=utf-8]
3612+ status: {code: 200, message: OK}
3613+- request:
3614+ body: null
3615+ headers:
3616+ accept-encoding: ['gzip, deflate']
3617+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3618+ user-agent: [GNU Mailman REST client v1.0.0b1]
3619+ method: GET
3620+ uri: http://localhost:9001/3.0/members?count=2&page=2
3621+ response:
3622+ body: {string: '{"entries": [{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3623+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3624+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3625+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3626+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3627+ {"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"", "delivery_mode":
3628+ "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3629+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3630+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3631+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}],
3632+ "http_etag": "\"1146a3a8fbea4f6d9cd141f0243f98a5c85e9c47\"", "total_size":
3633+ 2, "start": 0}'}
3634+ headers:
3635+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3636+ Server: [WSGIServer/0.2 CPython/3.4.2]
3637+ content-length: ['927']
3638+ content-type: [application/json; charset=utf-8]
3639+ status: {code: 200, message: OK}
3640+- request:
3641+ body: null
3642+ headers:
3643+ accept-encoding: ['gzip, deflate']
3644+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3645+ user-agent: [GNU Mailman REST client v1.0.0b1]
3646+ method: GET
3647+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
3648+ response:
3649+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3650+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3651+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3652+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3653+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3654+ headers:
3655+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3656+ Server: [WSGIServer/0.2 CPython/3.4.2]
3657+ content-length: ['409']
3658+ content-type: [application/json; charset=utf-8]
3659+ status: {code: 200, message: OK}
3660+- request:
3661+ body: null
3662+ headers:
3663+ accept-encoding: ['gzip, deflate']
3664+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3665+ user-agent: [GNU Mailman REST client v1.0.0b1]
3666+ method: GET
3667+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
3668+ response:
3669+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
3670+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3671+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3672+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3673+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
3674+ headers:
3675+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3676+ Server: [WSGIServer/0.2 CPython/3.4.2]
3677+ content-length: ['411']
3678+ content-type: [application/json; charset=utf-8]
3679+ status: {code: 200, message: OK}
3680+- request:
3681+ body: null
3682+ headers:
3683+ accept-encoding: ['gzip, deflate']
3684+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3685+ user-agent: [GNU Mailman REST client v1.0.0b1]
3686+ method: GET
3687+ uri: http://localhost:9001/3.0/lists/test-one@example.com/roster/member?count=1&page=1
3688+ response:
3689+ body: {string: '{"entries": [{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3690+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3691+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3692+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3693+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}],
3694+ "http_etag": "\"ddb98e7ce39d8994d3b2de98bcae1650a7359e78\"", "total_size":
3695+ 1, "start": 0}'}
3696+ headers:
3697+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3698+ Server: [WSGIServer/0.2 CPython/3.4.2]
3699+ content-length: ['515']
3700+ content-type: [application/json; charset=utf-8]
3701+ status: {code: 200, message: OK}
3702+- request:
3703+ body: null
3704+ headers:
3705+ accept-encoding: ['gzip, deflate']
3706+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3707+ user-agent: [GNU Mailman REST client v1.0.0b1]
3708+ method: GET
3709+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
3710+ response:
3711+ body: {string: '{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
3712+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
3713+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3714+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
3715+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3716+ headers:
3717+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3718+ Server: [WSGIServer/0.2 CPython/3.4.2]
3719+ content-length: ['410']
3720+ content-type: [application/json; charset=utf-8]
3721+ status: {code: 200, message: OK}
3722+- request:
3723+ body: null
3724+ headers:
3725+ accept-encoding: ['gzip, deflate']
3726+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3727+ user-agent: [GNU Mailman REST client v1.0.0b1]
3728+ method: GET
3729+ uri: http://localhost:9001/3.0/lists/test-one@example.com/roster/member?count=1&page=2
3730+ response:
3731+ body: {string: '{"entries": [{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
3732+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3733+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3734+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3735+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}],
3736+ "http_etag": "\"f0171d45c23ec5087836f92aaf8ff0f0f70a9294\"", "total_size":
3737+ 1, "start": 0}'}
3738+ headers:
3739+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3740+ Server: [WSGIServer/0.2 CPython/3.4.2]
3741+ content-length: ['516']
3742+ content-type: [application/json; charset=utf-8]
3743+ status: {code: 200, message: OK}
3744+- request:
3745+ body: null
3746+ headers:
3747+ accept-encoding: ['gzip, deflate']
3748+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3749+ user-agent: [GNU Mailman REST client v1.0.0b1]
3750+ method: GET
3751+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
3752+ response:
3753+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
3754+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
3755+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
3756+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
3757+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
3758+ headers:
3759+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3760+ Server: [WSGIServer/0.2 CPython/3.4.2]
3761+ content-length: ['411']
3762+ content-type: [application/json; charset=utf-8]
3763+ status: {code: 200, message: OK}
3764+- request:
3765+ body: null
3766+ headers:
3767+ accept-encoding: ['gzip, deflate']
3768+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3769+ user-agent: [GNU Mailman REST client v1.0.0b1]
3770+ method: GET
3771+ uri: http://localhost:9001/3.0/lists/test-two@example.com/roster/member
3772+ response:
3773+ body: {string: '{"entries": [{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3774+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3775+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3776+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3777+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3778+ {"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"", "delivery_mode":
3779+ "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3780+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3781+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3782+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}],
3783+ "http_etag": "\"1146a3a8fbea4f6d9cd141f0243f98a5c85e9c47\"", "total_size":
3784+ 2, "start": 0}'}
3785+ headers:
3786+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3787+ Server: [WSGIServer/0.2 CPython/3.4.2]
3788+ content-length: ['927']
3789+ content-type: [application/json; charset=utf-8]
3790+ status: {code: 200, message: OK}
3791+- request:
3792+ body: null
3793+ headers:
3794+ accept-encoding: ['gzip, deflate']
3795+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3796+ user-agent: [GNU Mailman REST client v1.0.0b1]
3797+ method: GET
3798+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
3799+ response:
3800+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3801+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3802+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3803+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3804+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3805+ headers:
3806+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3807+ Server: [WSGIServer/0.2 CPython/3.4.2]
3808+ content-length: ['409']
3809+ content-type: [application/json; charset=utf-8]
3810+ status: {code: 200, message: OK}
3811+- request:
3812+ body: null
3813+ headers:
3814+ accept-encoding: ['gzip, deflate']
3815+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3816+ user-agent: [GNU Mailman REST client v1.0.0b1]
3817+ method: GET
3818+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
3819+ response:
3820+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
3821+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3822+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3823+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3824+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
3825+ headers:
3826+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3827+ Server: [WSGIServer/0.2 CPython/3.4.2]
3828+ content-length: ['411']
3829+ content-type: [application/json; charset=utf-8]
3830+ status: {code: 200, message: OK}
3831+- request:
3832+ body: null
3833+ headers:
3834+ accept-encoding: ['gzip, deflate']
3835+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3836+ user-agent: [GNU Mailman REST client v1.0.0b1]
3837+ method: GET
3838+ uri: http://localhost:9001/3.0/lists/test-two@example.com
3839+ response:
3840+ body: {string: '{"display_name": "Test-two", "list_name": "test-two", "mail_host":
3841+ "example.com", "volume": 1, "fqdn_listname": "test-two@example.com", "member_count":
3842+ 2, "http_etag": "\"d08cd84bdb77efc54164c377e86a9540fffcf6ab\"", "self_link":
3843+ "http://localhost:9001/3.0/lists/test-two.example.com", "list_id": "test-two.example.com"}'}
3844+ headers:
3845+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3846+ Server: [WSGIServer/0.2 CPython/3.4.2]
3847+ content-length: ['319']
3848+ content-type: [application/json; charset=utf-8]
3849+ status: {code: 200, message: OK}
3850+- request:
3851+ body: null
3852+ headers:
3853+ accept-encoding: ['gzip, deflate']
3854+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3855+ user-agent: [GNU Mailman REST client v1.0.0b1]
3856+ method: GET
3857+ uri: http://localhost:9001/3.0/lists/test-two@example.com/roster/member
3858+ response:
3859+ body: {string: '{"entries": [{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3860+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3861+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3862+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3863+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3864+ {"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"", "delivery_mode":
3865+ "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3866+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3867+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3868+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}],
3869+ "http_etag": "\"1146a3a8fbea4f6d9cd141f0243f98a5c85e9c47\"", "total_size":
3870+ 2, "start": 0}'}
3871+ headers:
3872+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3873+ Server: [WSGIServer/0.2 CPython/3.4.2]
3874+ content-length: ['927']
3875+ content-type: [application/json; charset=utf-8]
3876+ status: {code: 200, message: OK}
3877+- request:
3878+ body: null
3879+ headers:
3880+ accept-encoding: ['gzip, deflate']
3881+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3882+ user-agent: [GNU Mailman REST client v1.0.0b1]
3883+ method: GET
3884+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
3885+ response:
3886+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3887+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3888+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3889+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3890+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3891+ headers:
3892+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3893+ Server: [WSGIServer/0.2 CPython/3.4.2]
3894+ content-length: ['409']
3895+ content-type: [application/json; charset=utf-8]
3896+ status: {code: 200, message: OK}
3897+- request:
3898+ body: null
3899+ headers:
3900+ accept-encoding: ['gzip, deflate']
3901+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3902+ user-agent: [GNU Mailman REST client v1.0.0b1]
3903+ method: GET
3904+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
3905+ response:
3906+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
3907+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3908+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3909+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3910+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
3911+ headers:
3912+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3913+ Server: [WSGIServer/0.2 CPython/3.4.2]
3914+ content-length: ['411']
3915+ content-type: [application/json; charset=utf-8]
3916+ status: {code: 200, message: OK}
3917+- request:
3918+ body: null
3919+ headers:
3920+ accept-encoding: ['gzip, deflate']
3921+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3922+ user-agent: [GNU Mailman REST client v1.0.0b1]
3923+ method: GET
3924+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347/preferences
3925+ response:
3926+ body: {string: '{"http_etag": "\"c92a598f73d802965003673ce4b295c8ac99044e\"",
3927+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347/preferences"}'}
3928+ headers:
3929+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3930+ Server: [WSGIServer/0.2 CPython/3.4.2]
3931+ content-length: ['191']
3932+ content-type: [application/json; charset=utf-8]
3933+ status: {code: 200, message: OK}
3934+- request:
3935+ body: null
3936+ headers:
3937+ accept-encoding: ['gzip, deflate']
3938+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3939+ user-agent: [GNU Mailman REST client v1.0.0b1]
3940+ method: GET
3941+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337
3942+ response:
3943+ body: {string: '{"display_name": "Cris", "created_on": "2015-01-04T22:42:46.585952",
3944+ "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"", "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
3945+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
3946+ "user_id": 124469682936455360048380387046363665337}'}
3947+ headers:
3948+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3949+ Server: [WSGIServer/0.2 CPython/3.4.2]
3950+ content-length: ['404']
3951+ content-type: [application/json; charset=utf-8]
3952+ status: {code: 200, message: OK}
3953+- request:
3954+ body: null
3955+ headers:
3956+ accept-encoding: ['gzip, deflate']
3957+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3958+ user-agent: [GNU Mailman REST client v1.0.0b1]
3959+ method: GET
3960+ uri: http://localhost:9001/3.0/lists/test-two@example.com/roster/member
3961+ response:
3962+ body: {string: '{"entries": [{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3963+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3964+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3965+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3966+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
3967+ {"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"", "delivery_mode":
3968+ "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
3969+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
3970+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
3971+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}],
3972+ "http_etag": "\"1146a3a8fbea4f6d9cd141f0243f98a5c85e9c47\"", "total_size":
3973+ 2, "start": 0}'}
3974+ headers:
3975+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3976+ Server: [WSGIServer/0.2 CPython/3.4.2]
3977+ content-length: ['927']
3978+ content-type: [application/json; charset=utf-8]
3979+ status: {code: 200, message: OK}
3980+- request:
3981+ body: null
3982+ headers:
3983+ accept-encoding: ['gzip, deflate']
3984+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
3985+ user-agent: [GNU Mailman REST client v1.0.0b1]
3986+ method: GET
3987+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
3988+ response:
3989+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
3990+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
3991+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
3992+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
3993+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
3994+ headers:
3995+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
3996+ Server: [WSGIServer/0.2 CPython/3.4.2]
3997+ content-length: ['409']
3998+ content-type: [application/json; charset=utf-8]
3999+ status: {code: 200, message: OK}
4000+- request:
4001+ body: null
4002+ headers:
4003+ accept-encoding: ['gzip, deflate']
4004+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4005+ user-agent: [GNU Mailman REST client v1.0.0b1]
4006+ method: GET
4007+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
4008+ response:
4009+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
4010+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
4011+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
4012+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
4013+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
4014+ headers:
4015+ Date: ['Sun, 04 Jan 2015 22:42:47 GMT']
4016+ Server: [WSGIServer/0.2 CPython/3.4.2]
4017+ content-length: ['411']
4018+ content-type: [application/json; charset=utf-8]
4019+ status: {code: 200, message: OK}
4020+- request:
4021+ body: null
4022+ headers:
4023+ accept-encoding: ['gzip, deflate']
4024+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4025+ user-agent: [GNU Mailman REST client v1.0.0b1]
4026+ method: GET
4027+ uri: http://localhost:9001/3.0/lists/test-one@example.com/roster/member
4028+ response:
4029+ body: {string: '{"entries": [{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
4030+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
4031+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
4032+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
4033+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
4034+ {"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"", "delivery_mode":
4035+ "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4036+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4037+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4038+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}],
4039+ "http_etag": "\"035b2ef6161ccb46df27b7a6bec02c1a85cf471f\"", "total_size":
4040+ 2, "start": 0}'}
4041+ headers:
4042+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4043+ Server: [WSGIServer/0.2 CPython/3.4.2]
4044+ content-length: ['928']
4045+ content-type: [application/json; charset=utf-8]
4046+ status: {code: 200, message: OK}
4047+- request:
4048+ body: null
4049+ headers:
4050+ accept-encoding: ['gzip, deflate']
4051+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4052+ user-agent: [GNU Mailman REST client v1.0.0b1]
4053+ method: GET
4054+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
4055+ response:
4056+ body: {string: '{"http_etag": "\"791c35b4fc3a7d325559ba98bf459a91f0ec0b97\"",
4057+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/104473260871439163529610165544142173708",
4058+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
4059+ "test-one.example.com", "email": "anna@example.com", "role": "member", "user":
4060+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
4061+ headers:
4062+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4063+ Server: [WSGIServer/0.2 CPython/3.4.2]
4064+ content-length: ['410']
4065+ content-type: [application/json; charset=utf-8]
4066+ status: {code: 200, message: OK}
4067+- request:
4068+ body: null
4069+ headers:
4070+ accept-encoding: ['gzip, deflate']
4071+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4072+ user-agent: [GNU Mailman REST client v1.0.0b1]
4073+ method: DELETE
4074+ uri: http://localhost:9001/3.0/members/104473260871439163529610165544142173708
4075+ response:
4076+ body: {string: ''}
4077+ headers:
4078+ Content-Length: ['0']
4079+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4080+ Server: [WSGIServer/0.2 CPython/3.4.2]
4081+ status: {code: 204, message: No Content}
4082+- request:
4083+ body: null
4084+ headers:
4085+ accept-encoding: ['gzip, deflate']
4086+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4087+ user-agent: [GNU Mailman REST client v1.0.0b1]
4088+ method: GET
4089+ uri: http://localhost:9001/3.0/members
4090+ response:
4091+ body: {string: '{"entries": [{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
4092+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4093+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4094+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4095+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"},
4096+ {"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"", "delivery_mode":
4097+ "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
4098+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
4099+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
4100+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"},
4101+ {"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"", "delivery_mode":
4102+ "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
4103+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
4104+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
4105+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}],
4106+ "http_etag": "\"0dfdbb6a939f9d964c0aec89b14a11a3c5089eee\"", "total_size":
4107+ 3, "start": 0}'}
4108+ headers:
4109+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4110+ Server: [WSGIServer/0.2 CPython/3.4.2]
4111+ content-length: ['1340']
4112+ content-type: [application/json; charset=utf-8]
4113+ status: {code: 200, message: OK}
4114+- request:
4115+ body: null
4116+ headers:
4117+ accept-encoding: ['gzip, deflate']
4118+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4119+ user-agent: [GNU Mailman REST client v1.0.0b1]
4120+ method: GET
4121+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
4122+ response:
4123+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
4124+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4125+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4126+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4127+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
4128+ headers:
4129+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4130+ Server: [WSGIServer/0.2 CPython/3.4.2]
4131+ content-length: ['411']
4132+ content-type: [application/json; charset=utf-8]
4133+ status: {code: 200, message: OK}
4134+- request:
4135+ body: null
4136+ headers:
4137+ accept-encoding: ['gzip, deflate']
4138+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4139+ user-agent: [GNU Mailman REST client v1.0.0b1]
4140+ method: GET
4141+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
4142+ response:
4143+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
4144+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
4145+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
4146+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
4147+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
4148+ headers:
4149+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4150+ Server: [WSGIServer/0.2 CPython/3.4.2]
4151+ content-length: ['409']
4152+ content-type: [application/json; charset=utf-8]
4153+ status: {code: 200, message: OK}
4154+- request:
4155+ body: null
4156+ headers:
4157+ accept-encoding: ['gzip, deflate']
4158+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4159+ user-agent: [GNU Mailman REST client v1.0.0b1]
4160+ method: GET
4161+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
4162+ response:
4163+ body: {string: '{"http_etag": "\"7e9fbe757624318db74a977eb13491950d78fce7\"",
4164+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/277964071707554096935986210544886743347",
4165+ "address": "http://localhost:9001/3.0/addresses/cris@example.com", "list_id":
4166+ "test-two.example.com", "email": "cris@example.com", "role": "member", "user":
4167+ "http://localhost:9001/3.0/users/124469682936455360048380387046363665337"}'}
4168+ headers:
4169+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4170+ Server: [WSGIServer/0.2 CPython/3.4.2]
4171+ content-length: ['411']
4172+ content-type: [application/json; charset=utf-8]
4173+ status: {code: 200, message: OK}
4174+- request:
4175+ body: null
4176+ headers:
4177+ accept-encoding: ['gzip, deflate']
4178+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4179+ user-agent: [GNU Mailman REST client v1.0.0b1]
4180+ method: DELETE
4181+ uri: http://localhost:9001/3.0/members/277964071707554096935986210544886743347
4182+ response:
4183+ body: {string: ''}
4184+ headers:
4185+ Content-Length: ['0']
4186+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4187+ Server: [WSGIServer/0.2 CPython/3.4.2]
4188+ status: {code: 204, message: No Content}
4189+- request:
4190+ body: null
4191+ headers:
4192+ accept-encoding: ['gzip, deflate']
4193+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4194+ user-agent: [GNU Mailman REST client v1.0.0b1]
4195+ method: GET
4196+ uri: http://localhost:9001/3.0/members
4197+ response:
4198+ body: {string: '{"entries": [{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
4199+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4200+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4201+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4202+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"},
4203+ {"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"", "delivery_mode":
4204+ "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
4205+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
4206+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
4207+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}],
4208+ "http_etag": "\"0faf9fc88982999af8efa057d2f0871c072eb2bd\"", "total_size":
4209+ 2, "start": 0}'}
4210+ headers:
4211+ Date: ['Sun, 04 Jan 2015 22:42:49 GMT']
4212+ Server: [WSGIServer/0.2 CPython/3.4.2]
4213+ content-length: ['927']
4214+ content-type: [application/json; charset=utf-8]
4215+ status: {code: 200, message: OK}
4216+- request:
4217+ body: null
4218+ headers:
4219+ accept-encoding: ['gzip, deflate']
4220+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4221+ user-agent: [GNU Mailman REST client v1.0.0b1]
4222+ method: GET
4223+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
4224+ response:
4225+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
4226+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4227+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4228+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4229+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
4230+ headers:
4231+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4232+ Server: [WSGIServer/0.2 CPython/3.4.2]
4233+ content-length: ['411']
4234+ content-type: [application/json; charset=utf-8]
4235+ status: {code: 200, message: OK}
4236+- request:
4237+ body: null
4238+ headers:
4239+ accept-encoding: ['gzip, deflate']
4240+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4241+ user-agent: [GNU Mailman REST client v1.0.0b1]
4242+ method: GET
4243+ uri: http://localhost:9001/3.0/members/18090098823740248348445588761302258241
4244+ response:
4245+ body: {string: '{"http_etag": "\"cb2d6f0b4bed8456d32dc0f83a47ba2ee264e661\"",
4246+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/18090098823740248348445588761302258241",
4247+ "address": "http://localhost:9001/3.0/addresses/anna@example.com", "list_id":
4248+ "test-two.example.com", "email": "anna@example.com", "role": "member", "user":
4249+ "http://localhost:9001/3.0/users/53219726604340771000788887326802581518"}'}
4250+ headers:
4251+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4252+ Server: [WSGIServer/0.2 CPython/3.4.2]
4253+ content-length: ['409']
4254+ content-type: [application/json; charset=utf-8]
4255+ status: {code: 200, message: OK}
4256+- request:
4257+ body: null
4258+ headers:
4259+ accept-encoding: ['gzip, deflate']
4260+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4261+ user-agent: [GNU Mailman REST client v1.0.0b1]
4262+ method: GET
4263+ uri: http://localhost:9001/3.0/lists/test-one@example.com/roster/member
4264+ response:
4265+ body: {string: '{"entries": [{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
4266+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4267+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4268+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4269+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}],
4270+ "http_etag": "\"f0171d45c23ec5087836f92aaf8ff0f0f70a9294\"", "total_size":
4271+ 1, "start": 0}'}
4272+ headers:
4273+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4274+ Server: [WSGIServer/0.2 CPython/3.4.2]
4275+ content-length: ['516']
4276+ content-type: [application/json; charset=utf-8]
4277+ status: {code: 200, message: OK}
4278+- request:
4279+ body: null
4280+ headers:
4281+ accept-encoding: ['gzip, deflate']
4282+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4283+ user-agent: [GNU Mailman REST client v1.0.0b1]
4284+ method: GET
4285+ uri: http://localhost:9001/3.0/members/275272594951032189318671732666193338856
4286+ response:
4287+ body: {string: '{"http_etag": "\"0e88aa304c672fe175da32e7ef6ee81d65d94856\"",
4288+ "delivery_mode": "regular", "self_link": "http://localhost:9001/3.0/members/275272594951032189318671732666193338856",
4289+ "address": "http://localhost:9001/3.0/addresses/bill@example.com", "list_id":
4290+ "test-one.example.com", "email": "bill@example.com", "role": "member", "user":
4291+ "http://localhost:9001/3.0/users/282238326831930934086115995946546408713"}'}
4292+ headers:
4293+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4294+ Server: [WSGIServer/0.2 CPython/3.4.2]
4295+ content-length: ['411']
4296+ content-type: [application/json; charset=utf-8]
4297+ status: {code: 200, message: OK}
4298+- request:
4299+ body: list_id=test-one.example.com&role=nonmember
4300+ headers:
4301+ accept-encoding: ['gzip, deflate']
4302+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4303+ content-type: [application/x-www-form-urlencoded]
4304+ user-agent: [GNU Mailman REST client v1.0.0b1]
4305+ method: POST
4306+ uri: http://localhost:9001/3.0/members/find
4307+ response:
4308+ body: {string: '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"",
4309+ "total_size": 0, "start": 0}'}
4310+ headers:
4311+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4312+ Server: [WSGIServer/0.2 CPython/3.4.2]
4313+ content-length: ['90']
4314+ content-type: [application/json; charset=utf-8]
4315+ status: {code: 200, message: OK}
4316+- request:
4317+ body: null
4318+ headers:
4319+ accept-encoding: ['gzip, deflate']
4320+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4321+ user-agent: [GNU Mailman REST client v1.0.0b1]
4322+ method: GET
4323+ uri: http://localhost:9001/3.0/users
4324+ response:
4325+ body: {string: '{"entries": [{"display_name": "Anna", "created_on": "2015-01-04T22:42:46.058449",
4326+ "http_etag": "\"38cfaada6ec706c48e1a453e5b774aff209942e4\"", "password": "$6$rounds=104746$a6kjw9ZdJUX8E7Ig$lm4HU6MIyMcOgPteqwHqFpJuey7zc7WkO4.bqw4hmEc7hrfZFmN9iTdgAPc8zm04QT8HL8gfqQKXxnAe6uAFh1",
4327+ "self_link": "http://localhost:9001/3.0/users/53219726604340771000788887326802581518",
4328+ "user_id": 53219726604340771000788887326802581518}, {"display_name": "Bill",
4329+ "created_on": "2015-01-04T22:42:46.289167", "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"",
4330+ "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4331+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4332+ "user_id": 282238326831930934086115995946546408713}, {"display_name": "Cris",
4333+ "created_on": "2015-01-04T22:42:46.585952", "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"",
4334+ "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
4335+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4336+ "user_id": 124469682936455360048380387046363665337}], "http_etag": "\"5cdb208d747b21a3e3f8d7c04c8831d8713a2d02\"",
4337+ "total_size": 3, "start": 0}'}
4338+ headers:
4339+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4340+ Server: [WSGIServer/0.2 CPython/3.4.2]
4341+ content-length: ['1320']
4342+ content-type: [application/json; charset=utf-8]
4343+ status: {code: 200, message: OK}
4344+- request:
4345+ body: null
4346+ headers:
4347+ accept-encoding: ['gzip, deflate']
4348+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4349+ user-agent: [GNU Mailman REST client v1.0.0b1]
4350+ method: GET
4351+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337
4352+ response:
4353+ body: {string: '{"display_name": "Cris", "created_on": "2015-01-04T22:42:46.585952",
4354+ "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"", "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
4355+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4356+ "user_id": 124469682936455360048380387046363665337}'}
4357+ headers:
4358+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4359+ Server: [WSGIServer/0.2 CPython/3.4.2]
4360+ content-length: ['404']
4361+ content-type: [application/json; charset=utf-8]
4362+ status: {code: 200, message: OK}
4363+- request:
4364+ body: null
4365+ headers:
4366+ accept-encoding: ['gzip, deflate']
4367+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4368+ user-agent: [GNU Mailman REST client v1.0.0b1]
4369+ method: GET
4370+ uri: http://localhost:9001/3.0/users/282238326831930934086115995946546408713
4371+ response:
4372+ body: {string: '{"display_name": "Bill", "created_on": "2015-01-04T22:42:46.289167",
4373+ "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"", "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4374+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4375+ "user_id": 282238326831930934086115995946546408713}'}
4376+ headers:
4377+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4378+ Server: [WSGIServer/0.2 CPython/3.4.2]
4379+ content-length: ['404']
4380+ content-type: [application/json; charset=utf-8]
4381+ status: {code: 200, message: OK}
4382+- request:
4383+ body: null
4384+ headers:
4385+ accept-encoding: ['gzip, deflate']
4386+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4387+ user-agent: [GNU Mailman REST client v1.0.0b1]
4388+ method: GET
4389+ uri: http://localhost:9001/3.0/users/53219726604340771000788887326802581518
4390+ response:
4391+ body: {string: '{"display_name": "Anna", "created_on": "2015-01-04T22:42:46.058449",
4392+ "http_etag": "\"38cfaada6ec706c48e1a453e5b774aff209942e4\"", "password": "$6$rounds=104746$a6kjw9ZdJUX8E7Ig$lm4HU6MIyMcOgPteqwHqFpJuey7zc7WkO4.bqw4hmEc7hrfZFmN9iTdgAPc8zm04QT8HL8gfqQKXxnAe6uAFh1",
4393+ "self_link": "http://localhost:9001/3.0/users/53219726604340771000788887326802581518",
4394+ "user_id": 53219726604340771000788887326802581518}'}
4395+ headers:
4396+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4397+ Server: [WSGIServer/0.2 CPython/3.4.2]
4398+ content-length: ['403']
4399+ content-type: [application/json; charset=utf-8]
4400+ status: {code: 200, message: OK}
4401+- request:
4402+ body: null
4403+ headers:
4404+ accept-encoding: ['gzip, deflate']
4405+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4406+ user-agent: [GNU Mailman REST client v1.0.0b1]
4407+ method: GET
4408+ uri: http://localhost:9001/3.0/users?count=2&page=1
4409+ response:
4410+ body: {string: '{"entries": [{"display_name": "Anna", "created_on": "2015-01-04T22:42:46.058449",
4411+ "http_etag": "\"38cfaada6ec706c48e1a453e5b774aff209942e4\"", "password": "$6$rounds=104746$a6kjw9ZdJUX8E7Ig$lm4HU6MIyMcOgPteqwHqFpJuey7zc7WkO4.bqw4hmEc7hrfZFmN9iTdgAPc8zm04QT8HL8gfqQKXxnAe6uAFh1",
4412+ "self_link": "http://localhost:9001/3.0/users/53219726604340771000788887326802581518",
4413+ "user_id": 53219726604340771000788887326802581518}, {"display_name": "Bill",
4414+ "created_on": "2015-01-04T22:42:46.289167", "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"",
4415+ "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4416+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4417+ "user_id": 282238326831930934086115995946546408713}], "http_etag": "\"5a99b5066025762287b4d885d50a920ec8f51ec3\"",
4418+ "total_size": 2, "start": 0}'}
4419+ headers:
4420+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4421+ Server: [WSGIServer/0.2 CPython/3.4.2]
4422+ content-length: ['914']
4423+ content-type: [application/json; charset=utf-8]
4424+ status: {code: 200, message: OK}
4425+- request:
4426+ body: null
4427+ headers:
4428+ accept-encoding: ['gzip, deflate']
4429+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4430+ user-agent: [GNU Mailman REST client v1.0.0b1]
4431+ method: GET
4432+ uri: http://localhost:9001/3.0/users/53219726604340771000788887326802581518
4433+ response:
4434+ body: {string: '{"display_name": "Anna", "created_on": "2015-01-04T22:42:46.058449",
4435+ "http_etag": "\"38cfaada6ec706c48e1a453e5b774aff209942e4\"", "password": "$6$rounds=104746$a6kjw9ZdJUX8E7Ig$lm4HU6MIyMcOgPteqwHqFpJuey7zc7WkO4.bqw4hmEc7hrfZFmN9iTdgAPc8zm04QT8HL8gfqQKXxnAe6uAFh1",
4436+ "self_link": "http://localhost:9001/3.0/users/53219726604340771000788887326802581518",
4437+ "user_id": 53219726604340771000788887326802581518}'}
4438+ headers:
4439+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4440+ Server: [WSGIServer/0.2 CPython/3.4.2]
4441+ content-length: ['403']
4442+ content-type: [application/json; charset=utf-8]
4443+ status: {code: 200, message: OK}
4444+- request:
4445+ body: null
4446+ headers:
4447+ accept-encoding: ['gzip, deflate']
4448+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4449+ user-agent: [GNU Mailman REST client v1.0.0b1]
4450+ method: GET
4451+ uri: http://localhost:9001/3.0/users/282238326831930934086115995946546408713
4452+ response:
4453+ body: {string: '{"display_name": "Bill", "created_on": "2015-01-04T22:42:46.289167",
4454+ "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"", "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4455+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4456+ "user_id": 282238326831930934086115995946546408713}'}
4457+ headers:
4458+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4459+ Server: [WSGIServer/0.2 CPython/3.4.2]
4460+ content-length: ['404']
4461+ content-type: [application/json; charset=utf-8]
4462+ status: {code: 200, message: OK}
4463+- request:
4464+ body: null
4465+ headers:
4466+ accept-encoding: ['gzip, deflate']
4467+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4468+ user-agent: [GNU Mailman REST client v1.0.0b1]
4469+ method: GET
4470+ uri: http://localhost:9001/3.0/users?count=2&page=2
4471+ response:
4472+ body: {string: '{"entries": [{"display_name": "Cris", "created_on": "2015-01-04T22:42:46.585952",
4473+ "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"", "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
4474+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4475+ "user_id": 124469682936455360048380387046363665337}], "http_etag": "\"36e84cef22a2eba7b77c527a1b8de775f70c3810\"",
4476+ "total_size": 1, "start": 0}'}
4477+ headers:
4478+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4479+ Server: [WSGIServer/0.2 CPython/3.4.2]
4480+ content-length: ['509']
4481+ content-type: [application/json; charset=utf-8]
4482+ status: {code: 200, message: OK}
4483+- request:
4484+ body: null
4485+ headers:
4486+ accept-encoding: ['gzip, deflate']
4487+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4488+ user-agent: [GNU Mailman REST client v1.0.0b1]
4489+ method: GET
4490+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337
4491+ response:
4492+ body: {string: '{"display_name": "Cris", "created_on": "2015-01-04T22:42:46.585952",
4493+ "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"", "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
4494+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4495+ "user_id": 124469682936455360048380387046363665337}'}
4496+ headers:
4497+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4498+ Server: [WSGIServer/0.2 CPython/3.4.2]
4499+ content-length: ['404']
4500+ content-type: [application/json; charset=utf-8]
4501+ status: {code: 200, message: OK}
4502+- request:
4503+ body: null
4504+ headers:
4505+ accept-encoding: ['gzip, deflate']
4506+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4507+ user-agent: [GNU Mailman REST client v1.0.0b1]
4508+ method: GET
4509+ uri: http://localhost:9001/3.0/users?count=2&page=1
4510+ response:
4511+ body: {string: '{"entries": [{"display_name": "Anna", "created_on": "2015-01-04T22:42:46.058449",
4512+ "http_etag": "\"38cfaada6ec706c48e1a453e5b774aff209942e4\"", "password": "$6$rounds=104746$a6kjw9ZdJUX8E7Ig$lm4HU6MIyMcOgPteqwHqFpJuey7zc7WkO4.bqw4hmEc7hrfZFmN9iTdgAPc8zm04QT8HL8gfqQKXxnAe6uAFh1",
4513+ "self_link": "http://localhost:9001/3.0/users/53219726604340771000788887326802581518",
4514+ "user_id": 53219726604340771000788887326802581518}, {"display_name": "Bill",
4515+ "created_on": "2015-01-04T22:42:46.289167", "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"",
4516+ "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4517+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4518+ "user_id": 282238326831930934086115995946546408713}], "http_etag": "\"5a99b5066025762287b4d885d50a920ec8f51ec3\"",
4519+ "total_size": 2, "start": 0}'}
4520+ headers:
4521+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4522+ Server: [WSGIServer/0.2 CPython/3.4.2]
4523+ content-length: ['914']
4524+ content-type: [application/json; charset=utf-8]
4525+ status: {code: 200, message: OK}
4526+- request:
4527+ body: null
4528+ headers:
4529+ accept-encoding: ['gzip, deflate']
4530+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4531+ user-agent: [GNU Mailman REST client v1.0.0b1]
4532+ method: GET
4533+ uri: http://localhost:9001/3.0/users/53219726604340771000788887326802581518
4534+ response:
4535+ body: {string: '{"display_name": "Anna", "created_on": "2015-01-04T22:42:46.058449",
4536+ "http_etag": "\"38cfaada6ec706c48e1a453e5b774aff209942e4\"", "password": "$6$rounds=104746$a6kjw9ZdJUX8E7Ig$lm4HU6MIyMcOgPteqwHqFpJuey7zc7WkO4.bqw4hmEc7hrfZFmN9iTdgAPc8zm04QT8HL8gfqQKXxnAe6uAFh1",
4537+ "self_link": "http://localhost:9001/3.0/users/53219726604340771000788887326802581518",
4538+ "user_id": 53219726604340771000788887326802581518}'}
4539+ headers:
4540+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4541+ Server: [WSGIServer/0.2 CPython/3.4.2]
4542+ content-length: ['403']
4543+ content-type: [application/json; charset=utf-8]
4544+ status: {code: 200, message: OK}
4545+- request:
4546+ body: null
4547+ headers:
4548+ accept-encoding: ['gzip, deflate']
4549+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4550+ user-agent: [GNU Mailman REST client v1.0.0b1]
4551+ method: GET
4552+ uri: http://localhost:9001/3.0/users/282238326831930934086115995946546408713
4553+ response:
4554+ body: {string: '{"display_name": "Bill", "created_on": "2015-01-04T22:42:46.289167",
4555+ "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"", "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4556+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4557+ "user_id": 282238326831930934086115995946546408713}'}
4558+ headers:
4559+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4560+ Server: [WSGIServer/0.2 CPython/3.4.2]
4561+ content-length: ['404']
4562+ content-type: [application/json; charset=utf-8]
4563+ status: {code: 200, message: OK}
4564+- request:
4565+ body: null
4566+ headers:
4567+ accept-encoding: ['gzip, deflate']
4568+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4569+ user-agent: [GNU Mailman REST client v1.0.0b1]
4570+ method: GET
4571+ uri: http://localhost:9001/3.0/users/cris@example.com
4572+ response:
4573+ body: {string: '{"display_name": "Cris", "created_on": "2015-01-04T22:42:46.585952",
4574+ "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"", "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
4575+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4576+ "user_id": 124469682936455360048380387046363665337}'}
4577+ headers:
4578+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4579+ Server: [WSGIServer/0.2 CPython/3.4.2]
4580+ content-length: ['404']
4581+ content-type: [application/json; charset=utf-8]
4582+ status: {code: 200, message: OK}
4583+- request:
4584+ body: null
4585+ headers:
4586+ accept-encoding: ['gzip, deflate']
4587+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4588+ user-agent: [GNU Mailman REST client v1.0.0b1]
4589+ method: GET
4590+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337
4591+ response:
4592+ body: {string: '{"display_name": "Cris", "created_on": "2015-01-04T22:42:46.585952",
4593+ "http_etag": "\"d90ffc1b68bce7104b233c1db8f845e99c7bd825\"", "password": "$6$rounds=92010$7YY2dmehop54XUlN$AmEKAOmx8038OgvF5/lXAJZuIW9ZWw.q.sEgT2BO9ypTD0GsTzkwQxKVgu2aCkcpkCQRJaw2sM/EjaeqUYfMY0",
4594+ "self_link": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4595+ "user_id": 124469682936455360048380387046363665337}'}
4596+ headers:
4597+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4598+ Server: [WSGIServer/0.2 CPython/3.4.2]
4599+ content-length: ['404']
4600+ content-type: [application/json; charset=utf-8]
4601+ status: {code: 200, message: OK}
4602+- request:
4603+ body: null
4604+ headers:
4605+ accept-encoding: ['gzip, deflate']
4606+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4607+ user-agent: [GNU Mailman REST client v1.0.0b1]
4608+ method: GET
4609+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337/addresses
4610+ response:
4611+ body: {string: '{"entries": [{"display_name": "Cris", "http_etag": "\"34ebc29602ad70d31b728755584723a2e02238a5\"",
4612+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4613+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4614+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4615+ "cris@example.com"}], "http_etag": "\"469ab74e2321ef1e1ab60af79835859cec5786ab\"",
4616+ "total_size": 1, "start": 0}'}
4617+ headers:
4618+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4619+ Server: [WSGIServer/0.2 CPython/3.4.2]
4620+ content-length: ['456']
4621+ content-type: [application/json; charset=utf-8]
4622+ status: {code: 200, message: OK}
4623+- request:
4624+ body: null
4625+ headers:
4626+ accept-encoding: ['gzip, deflate']
4627+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4628+ user-agent: [GNU Mailman REST client v1.0.0b1]
4629+ method: GET
4630+ uri: http://localhost:9001/3.0/addresses/cris@example.com
4631+ response:
4632+ body: {string: '{"display_name": "Cris", "http_etag": "\"34ebc29602ad70d31b728755584723a2e02238a5\"",
4633+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4634+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4635+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4636+ "cris@example.com"}'}
4637+ headers:
4638+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4639+ Server: [WSGIServer/0.2 CPython/3.4.2]
4640+ content-length: ['351']
4641+ content-type: [application/json; charset=utf-8]
4642+ status: {code: 200, message: OK}
4643+- request:
4644+ body: email=cris.person%40example.org
4645+ headers:
4646+ accept-encoding: ['gzip, deflate']
4647+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4648+ content-type: [application/x-www-form-urlencoded]
4649+ user-agent: [GNU Mailman REST client v1.0.0b1]
4650+ method: POST
4651+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337/addresses
4652+ response:
4653+ body: {string: ''}
4654+ headers:
4655+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4656+ Server: [WSGIServer/0.2 CPython/3.4.2]
4657+ content-length: ['0']
4658+ location: ['http://localhost:9001/3.0/addresses/cris.person@example.org']
4659+ status: {code: 201, message: Created}
4660+- request:
4661+ body: null
4662+ headers:
4663+ accept-encoding: ['gzip, deflate']
4664+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4665+ user-agent: [GNU Mailman REST client v1.0.0b1]
4666+ method: GET
4667+ uri: http://localhost:9001/3.0/addresses/cris.person@example.org
4668+ response:
4669+ body: {string: '{"http_etag": "\"c023ccd7bf2c69ff9dafae0e2bdd223a4bc14aef\"",
4670+ "self_link": "http://localhost:9001/3.0/addresses/cris.person@example.org",
4671+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4672+ "registered_on": "2015-01-04T22:42:50.455755", "email": "cris.person@example.org",
4673+ "original_email": "cris.person@example.org"}'}
4674+ headers:
4675+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4676+ Server: [WSGIServer/0.2 CPython/3.4.2]
4677+ content-length: ['348']
4678+ content-type: [application/json; charset=utf-8]
4679+ status: {code: 200, message: OK}
4680+- request:
4681+ body: null
4682+ headers:
4683+ accept-encoding: ['gzip, deflate']
4684+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4685+ user-agent: [GNU Mailman REST client v1.0.0b1]
4686+ method: GET
4687+ uri: http://localhost:9001/3.0/users/124469682936455360048380387046363665337/addresses
4688+ response:
4689+ body: {string: '{"entries": [{"http_etag": "\"c023ccd7bf2c69ff9dafae0e2bdd223a4bc14aef\"",
4690+ "self_link": "http://localhost:9001/3.0/addresses/cris.person@example.org",
4691+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4692+ "registered_on": "2015-01-04T22:42:50.455755", "email": "cris.person@example.org",
4693+ "original_email": "cris.person@example.org"}, {"display_name": "Cris", "http_etag":
4694+ "\"34ebc29602ad70d31b728755584723a2e02238a5\"", "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4695+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4696+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4697+ "cris@example.com"}], "http_etag": "\"e309820611085e383deb6897c40d36343c0c2d9c\"",
4698+ "total_size": 2, "start": 0}'}
4699+ headers:
4700+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4701+ Server: [WSGIServer/0.2 CPython/3.4.2]
4702+ content-length: ['806']
4703+ content-type: [application/json; charset=utf-8]
4704+ status: {code: 200, message: OK}
4705+- request:
4706+ body: null
4707+ headers:
4708+ accept-encoding: ['gzip, deflate']
4709+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4710+ user-agent: [GNU Mailman REST client v1.0.0b1]
4711+ method: GET
4712+ uri: http://localhost:9001/3.0/addresses/cris@example.com
4713+ response:
4714+ body: {string: '{"display_name": "Cris", "http_etag": "\"34ebc29602ad70d31b728755584723a2e02238a5\"",
4715+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4716+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4717+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4718+ "cris@example.com"}'}
4719+ headers:
4720+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4721+ Server: [WSGIServer/0.2 CPython/3.4.2]
4722+ content-length: ['351']
4723+ content-type: [application/json; charset=utf-8]
4724+ status: {code: 200, message: OK}
4725+- request:
4726+ body: null
4727+ headers:
4728+ accept-encoding: ['gzip, deflate']
4729+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4730+ user-agent: [GNU Mailman REST client v1.0.0b1]
4731+ method: GET
4732+ uri: http://localhost:9001/3.0/addresses/cris@example.com
4733+ response:
4734+ body: {string: '{"display_name": "Cris", "http_etag": "\"34ebc29602ad70d31b728755584723a2e02238a5\"",
4735+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4736+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4737+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4738+ "cris@example.com"}'}
4739+ headers:
4740+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4741+ Server: [WSGIServer/0.2 CPython/3.4.2]
4742+ content-length: ['351']
4743+ content-type: [application/json; charset=utf-8]
4744+ status: {code: 200, message: OK}
4745+- request:
4746+ body: null
4747+ headers:
4748+ accept-encoding: ['gzip, deflate']
4749+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4750+ user-agent: [GNU Mailman REST client v1.0.0b1]
4751+ method: POST
4752+ uri: http://localhost:9001/3.0/addresses/cris@example.com/verify
4753+ response:
4754+ body: {string: ''}
4755+ headers:
4756+ Content-Length: ['0']
4757+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4758+ Server: [WSGIServer/0.2 CPython/3.4.2]
4759+ status: {code: 204, message: No Content}
4760+- request:
4761+ body: null
4762+ headers:
4763+ accept-encoding: ['gzip, deflate']
4764+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4765+ user-agent: [GNU Mailman REST client v1.0.0b1]
4766+ method: GET
4767+ uri: http://localhost:9001/3.0/addresses/cris@example.com
4768+ response:
4769+ body: {string: '{"display_name": "Cris", "http_etag": "\"dafcd9b979858ed08be56c28e1d30036ecaaad7d\"",
4770+ "verified_on": "2015-01-04T22:42:50.623274", "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4771+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4772+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4773+ "cris@example.com"}'}
4774+ headers:
4775+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4776+ Server: [WSGIServer/0.2 CPython/3.4.2]
4777+ content-length: ['396']
4778+ content-type: [application/json; charset=utf-8]
4779+ status: {code: 200, message: OK}
4780+- request:
4781+ body: null
4782+ headers:
4783+ accept-encoding: ['gzip, deflate']
4784+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4785+ user-agent: [GNU Mailman REST client v1.0.0b1]
4786+ method: POST
4787+ uri: http://localhost:9001/3.0/addresses/cris@example.com/unverify
4788+ response:
4789+ body: {string: ''}
4790+ headers:
4791+ Content-Length: ['0']
4792+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4793+ Server: [WSGIServer/0.2 CPython/3.4.2]
4794+ status: {code: 204, message: No Content}
4795+- request:
4796+ body: null
4797+ headers:
4798+ accept-encoding: ['gzip, deflate']
4799+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4800+ user-agent: [GNU Mailman REST client v1.0.0b1]
4801+ method: GET
4802+ uri: http://localhost:9001/3.0/addresses/cris@example.com
4803+ response:
4804+ body: {string: '{"display_name": "Cris", "http_etag": "\"34ebc29602ad70d31b728755584723a2e02238a5\"",
4805+ "user": "http://localhost:9001/3.0/users/124469682936455360048380387046363665337",
4806+ "self_link": "http://localhost:9001/3.0/addresses/cris@example.com", "registered_on":
4807+ "2015-01-04T22:42:46.599496", "email": "cris@example.com", "original_email":
4808+ "cris@example.com"}'}
4809+ headers:
4810+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4811+ Server: [WSGIServer/0.2 CPython/3.4.2]
4812+ content-length: ['351']
4813+ content-type: [application/json; charset=utf-8]
4814+ status: {code: 200, message: OK}
4815+- request:
4816+ body: email=ler%40primus.org&password=somepass&display_name=Ler
4817+ headers:
4818+ accept-encoding: ['gzip, deflate']
4819+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4820+ content-type: [application/x-www-form-urlencoded]
4821+ user-agent: [GNU Mailman REST client v1.0.0b1]
4822+ method: POST
4823+ uri: http://localhost:9001/3.0/users
4824+ response:
4825+ body: {string: ''}
4826+ headers:
4827+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4828+ Server: [WSGIServer/0.2 CPython/3.4.2]
4829+ content-length: ['0']
4830+ location: ['http://localhost:9001/3.0/users/336996234976700619952769788325714110792']
4831+ status: {code: 201, message: Created}
4832+- request:
4833+ body: null
4834+ headers:
4835+ accept-encoding: ['gzip, deflate']
4836+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4837+ user-agent: [GNU Mailman REST client v1.0.0b1]
4838+ method: GET
4839+ uri: http://localhost:9001/3.0/users/336996234976700619952769788325714110792
4840+ response:
4841+ body: {string: '{"display_name": "Ler", "created_on": "2015-01-04T22:42:50.764436",
4842+ "http_etag": "\"ea381267efb7cbd2d379699f091fc7b4d5cda6b4\"", "password": "$6$rounds=109126$U4DnRdYva2uDoAxg$3FLd0ADkfea9rWd33UaE0CWwp8VVRO9HB7BvYabK4OawXBdrV1kwMW4qO9QMHf67in2XM0So/Gc9cnnwMEf9h/",
4843+ "self_link": "http://localhost:9001/3.0/users/336996234976700619952769788325714110792",
4844+ "user_id": 336996234976700619952769788325714110792}'}
4845+ headers:
4846+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4847+ Server: [WSGIServer/0.2 CPython/3.4.2]
4848+ content-length: ['404']
4849+ content-type: [application/json; charset=utf-8]
4850+ status: {code: 200, message: OK}
4851+- request:
4852+ body: null
4853+ headers:
4854+ accept-encoding: ['gzip, deflate']
4855+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4856+ user-agent: [GNU Mailman REST client v1.0.0b1]
4857+ method: GET
4858+ uri: http://localhost:9001/3.0/users/ler@primus.org
4859+ response:
4860+ body: {string: '{"display_name": "Ler", "created_on": "2015-01-04T22:42:50.764436",
4861+ "http_etag": "\"ea381267efb7cbd2d379699f091fc7b4d5cda6b4\"", "password": "$6$rounds=109126$U4DnRdYva2uDoAxg$3FLd0ADkfea9rWd33UaE0CWwp8VVRO9HB7BvYabK4OawXBdrV1kwMW4qO9QMHf67in2XM0So/Gc9cnnwMEf9h/",
4862+ "self_link": "http://localhost:9001/3.0/users/336996234976700619952769788325714110792",
4863+ "user_id": 336996234976700619952769788325714110792}'}
4864+ headers:
4865+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4866+ Server: [WSGIServer/0.2 CPython/3.4.2]
4867+ content-length: ['404']
4868+ content-type: [application/json; charset=utf-8]
4869+ status: {code: 200, message: OK}
4870+- request:
4871+ body: null
4872+ headers:
4873+ accept-encoding: ['gzip, deflate']
4874+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4875+ user-agent: [GNU Mailman REST client v1.0.0b1]
4876+ method: GET
4877+ uri: http://localhost:9001/3.0/users/336996234976700619952769788325714110792
4878+ response:
4879+ body: {string: '{"display_name": "Ler", "created_on": "2015-01-04T22:42:50.764436",
4880+ "http_etag": "\"ea381267efb7cbd2d379699f091fc7b4d5cda6b4\"", "password": "$6$rounds=109126$U4DnRdYva2uDoAxg$3FLd0ADkfea9rWd33UaE0CWwp8VVRO9HB7BvYabK4OawXBdrV1kwMW4qO9QMHf67in2XM0So/Gc9cnnwMEf9h/",
4881+ "self_link": "http://localhost:9001/3.0/users/336996234976700619952769788325714110792",
4882+ "user_id": 336996234976700619952769788325714110792}'}
4883+ headers:
4884+ Date: ['Sun, 04 Jan 2015 22:42:50 GMT']
4885+ Server: [WSGIServer/0.2 CPython/3.4.2]
4886+ content-length: ['404']
4887+ content-type: [application/json; charset=utf-8]
4888+ status: {code: 200, message: OK}
4889+- request:
4890+ body: display_name=Sir+Ler
4891+ headers:
4892+ accept-encoding: ['gzip, deflate']
4893+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4894+ content-type: [application/x-www-form-urlencoded]
4895+ user-agent: [GNU Mailman REST client v1.0.0b1]
4896+ method: PATCH
4897+ uri: http://localhost:9001/3.0/users/336996234976700619952769788325714110792
4898+ response:
4899+ body: {string: ''}
4900+ headers:
4901+ Content-Length: ['0']
4902+ Date: ['Sun, 04 Jan 2015 22:42:51 GMT']
4903+ Server: [WSGIServer/0.2 CPython/3.4.2]
4904+ status: {code: 204, message: No Content}
4905+- request:
4906+ body: null
4907+ headers:
4908+ accept-encoding: ['gzip, deflate']
4909+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4910+ user-agent: [GNU Mailman REST client v1.0.0b1]
4911+ method: GET
4912+ uri: http://localhost:9001/3.0/users/ler@primus.org
4913+ response:
4914+ body: {string: '{"display_name": "Sir Ler", "created_on": "2015-01-04T22:42:50.764436",
4915+ "http_etag": "\"d0ad1c90a176ce6e55d152de451c3dcdac8a9694\"", "password": "$6$rounds=109126$U4DnRdYva2uDoAxg$3FLd0ADkfea9rWd33UaE0CWwp8VVRO9HB7BvYabK4OawXBdrV1kwMW4qO9QMHf67in2XM0So/Gc9cnnwMEf9h/",
4916+ "self_link": "http://localhost:9001/3.0/users/336996234976700619952769788325714110792",
4917+ "user_id": 336996234976700619952769788325714110792}'}
4918+ headers:
4919+ Date: ['Sun, 04 Jan 2015 22:42:51 GMT']
4920+ Server: [WSGIServer/0.2 CPython/3.4.2]
4921+ content-length: ['408']
4922+ content-type: [application/json; charset=utf-8]
4923+ status: {code: 200, message: OK}
4924+- request:
4925+ body: null
4926+ headers:
4927+ accept-encoding: ['gzip, deflate']
4928+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4929+ user-agent: [GNU Mailman REST client v1.0.0b1]
4930+ method: GET
4931+ uri: http://localhost:9001/3.0/users/336996234976700619952769788325714110792
4932+ response:
4933+ body: {string: '{"display_name": "Sir Ler", "created_on": "2015-01-04T22:42:50.764436",
4934+ "http_etag": "\"d0ad1c90a176ce6e55d152de451c3dcdac8a9694\"", "password": "$6$rounds=109126$U4DnRdYva2uDoAxg$3FLd0ADkfea9rWd33UaE0CWwp8VVRO9HB7BvYabK4OawXBdrV1kwMW4qO9QMHf67in2XM0So/Gc9cnnwMEf9h/",
4935+ "self_link": "http://localhost:9001/3.0/users/336996234976700619952769788325714110792",
4936+ "user_id": 336996234976700619952769788325714110792}'}
4937+ headers:
4938+ Date: ['Sun, 04 Jan 2015 22:42:51 GMT']
4939+ Server: [WSGIServer/0.2 CPython/3.4.2]
4940+ content-length: ['408']
4941+ content-type: [application/json; charset=utf-8]
4942+ status: {code: 200, message: OK}
4943+- request:
4944+ body: display_name=Sir+Ler&cleartext_password=easy
4945+ headers:
4946+ accept-encoding: ['gzip, deflate']
4947+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4948+ content-type: [application/x-www-form-urlencoded]
4949+ user-agent: [GNU Mailman REST client v1.0.0b1]
4950+ method: PATCH
4951+ uri: http://localhost:9001/3.0/users/336996234976700619952769788325714110792
4952+ response:
4953+ body: {string: ''}
4954+ headers:
4955+ Content-Length: ['0']
4956+ Date: ['Sun, 04 Jan 2015 22:42:51 GMT']
4957+ Server: [WSGIServer/0.2 CPython/3.4.2]
4958+ status: {code: 204, message: No Content}
4959+- request:
4960+ body: null
4961+ headers:
4962+ accept-encoding: ['gzip, deflate']
4963+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4964+ user-agent: [GNU Mailman REST client v1.0.0b1]
4965+ method: GET
4966+ uri: http://localhost:9001/3.0/users/336996234976700619952769788325714110792
4967+ response:
4968+ body: {string: '{"display_name": "Sir Ler", "created_on": "2015-01-04T22:42:50.764436",
4969+ "http_etag": "\"c2292e6d206ad3fae45d815699fab665ffd3152d\"", "password": "$6$rounds=93265$Z5DEe17fTAD3CuwU$mpVZgRg5m2mkoOAQutSUIjw1yNNxGhtKtkYV5s1Hc3OwKPyIa5p74yq/LIMcP4S50BfO.E814Fk4qwBwsJQC91",
4970+ "self_link": "http://localhost:9001/3.0/users/336996234976700619952769788325714110792",
4971+ "user_id": 336996234976700619952769788325714110792}'}
4972+ headers:
4973+ Date: ['Sun, 04 Jan 2015 22:42:51 GMT']
4974+ Server: [WSGIServer/0.2 CPython/3.4.2]
4975+ content-length: ['407']
4976+ content-type: [application/json; charset=utf-8]
4977+ status: {code: 200, message: OK}
4978+- request:
4979+ body: null
4980+ headers:
4981+ accept-encoding: ['gzip, deflate']
4982+ authorization: [Basic cmVzdGFkbWluOnJlc3RwYXNz]
4983+ user-agent: [GNU Mailman REST client v1.0.0b1]
4984+ method: GET
4985+ uri: http://localhost:9001/3.0/users/bill@example.com
4986+ response:
4987+ body: {string: '{"display_name": "Bill", "created_on": "2015-01-04T22:42:46.289167",
4988+ "http_etag": "\"c084714d661a69fd433bac818a53cd121323d036\"", "password": "$6$rounds=93157$R872gB3lPaWHcG85$0BqbkmSBVfkjIHTeJZGGP0yXHAUVM/ys46Tquswpz5zEMIdV4Ya4AyBz.LMkKdsfKjo0P5dSFInFlOsE6W3Sd/",
4989+ "self_link": "http://localhost:9001/3.0/users/282238326831930934086115995946546408713",
4990+ "user_id": 282238326831930934086115995946546408713}'}
4991+ headers:
4992+ Date: ['Sun, 04 Jan 2015 22:42:51 GMT']
4993+ Server: [WSGIServer/0.2 CPython/3.4.2]
4994+ content-length: ['404']
4995+ content-type: [application/json; charset=utf-8]
4996+ status: {code: 200, message: OK}
4997+- request:
4998+ body: null
4999+ headers:
5000+ accept-encoding: ['gzip, deflate']
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches