mailmanclient-3.1.1/0000775000175000017500000000000013166327535015464 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/pytest.ini0000664000175000017500000000005213145013731017475 0ustar maxkingmaxking00000000000000[pytest] addopts = --doctest-glob='*.rst' mailmanclient-3.1.1/conf.py0000664000175000017500000001647013115365155016765 0ustar maxkingmaxking00000000000000# -*- coding: utf-8 -*- # # mailman.client documentation build configuration file, created by # sphinx-quickstart on Wed Aug 17 15:43:10 2011. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os # import the source code directory into Python Path for use with Auto Module APP_ROOT = os.path.dirname(__file__) sys.path.insert(0, APP_ROOT) # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here # sys.path.insert(0, os.path.abspath('.')) # -- General configuration ---------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] # Add any paths that contain templates here, relative to this directory. # templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'README' # General information about the project. project = u'Mailman Client' copyright = u'2012-2017, The Free Software Foundation' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. from setup_helpers import get_version # noqa _version = get_version('src/mailmanclient/constants.py') version = '.'.join(_version.split('.')[0:2]) # The full version, including alpha/beta/rc tags. release = _version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build', '.tox', 'eggs'] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # -- Options for HTML output -------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. # html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'mailmanclientdoc' # -- Options for LaTeX output ------------------------------------------------- # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]) latex_documents = [ ('README', 'mailmanclient.tex', u'Mailman Client Documentation', u'Mailman Coders', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_domain_indices = True # -- Options for manual page output ------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('README', 'mailmanclient', u'Mailman Client Documentation', [u'Mailman Coders'], 1) ] mailmanclient-3.1.1/conftest.py0000664000175000017500000000163613145013731017654 0ustar maxkingmaxking00000000000000# Copyright (C) 2017 The Free Software Foundation, Inc. # # This file is part of mailman.client. # # mailman.client is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailman.client is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailman.client. If not, see . """pytest conftest""" __metaclass__ = type import os import pytest @pytest.fixture def vcr_cassette_path(request, vcr_cassette_name): return os.path.join('src/mailmanclient/tests/data', vcr_cassette_name) mailmanclient-3.1.1/src/0000775000175000017500000000000013166327535016253 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient.egg-info/0000775000175000017500000000000013166327535022562 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient.egg-info/top_level.txt0000664000175000017500000000001613166327534025310 0ustar maxkingmaxking00000000000000mailmanclient mailmanclient-3.1.1/src/mailmanclient.egg-info/SOURCES.txt0000664000175000017500000000346213166327535024453 0ustar maxkingmaxking00000000000000COPYING.LESSER MANIFEST.in Makefile README.rst conf.py conftest.py pytest.ini setup.cfg setup.py setup_helpers.py template.py tox.ini src/mailmanclient/__init__.py src/mailmanclient/_client.py src/mailmanclient/client.py src/mailmanclient/constants.py src/mailmanclient.egg-info/PKG-INFO src/mailmanclient.egg-info/SOURCES.txt src/mailmanclient.egg-info/dependency_links.txt src/mailmanclient.egg-info/requires.txt src/mailmanclient.egg-info/top_level.txt src/mailmanclient/docs/NEWS.rst src/mailmanclient/docs/__init__.py src/mailmanclient/docs/apiref.rst src/mailmanclient/docs/conftest.py src/mailmanclient/docs/testing.rst src/mailmanclient/docs/using.rst src/mailmanclient/restbase/__init__.py src/mailmanclient/restbase/base.py src/mailmanclient/restbase/connection.py src/mailmanclient/restbase/page.py src/mailmanclient/restobjects/__init__.py src/mailmanclient/restobjects/address.py src/mailmanclient/restobjects/archivers.py src/mailmanclient/restobjects/ban.py src/mailmanclient/restobjects/configuration.py src/mailmanclient/restobjects/domain.py src/mailmanclient/restobjects/header_match.py src/mailmanclient/restobjects/held_message.py src/mailmanclient/restobjects/mailinglist.py src/mailmanclient/restobjects/member.py src/mailmanclient/restobjects/preferences.py src/mailmanclient/restobjects/queue.py src/mailmanclient/restobjects/settings.py src/mailmanclient/restobjects/user.py src/mailmanclient/testing/__init__.py src/mailmanclient/testing/documentation.py src/mailmanclient/testing/vcr_helpers.py src/mailmanclient/tests/__init__.py src/mailmanclient/tests/test_domain.py src/mailmanclient/tests/test_page.py src/mailmanclient/tests/test_unicode.py src/mailmanclient/tests/data/TestDomains.test_no_domain.yaml src/mailmanclient/tests/data/TestUnicode.test_create_user.yaml src/mailmanclient/tests/data/using.rst.yamlmailmanclient-3.1.1/src/mailmanclient.egg-info/dependency_links.txt0000664000175000017500000000000113166327534026627 0ustar maxkingmaxking00000000000000 mailmanclient-3.1.1/src/mailmanclient.egg-info/PKG-INFO0000664000175000017500000000115413166327534023657 0ustar maxkingmaxking00000000000000Metadata-Version: 1.1 Name: mailmanclient Version: 3.1.1 Summary: mailmanclient -- python library for Mailman REST API Home-page: https://www.list.org/ Author: Barry Warsaw Author-email: barry@list.org License: LGPLv3 Description: .. Platform: UNKNOWN Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Topic :: Internet :: WWW/HTTP mailmanclient-3.1.1/src/mailmanclient.egg-info/requires.txt0000664000175000017500000000001513166327534025155 0ustar maxkingmaxking00000000000000httplib2 six mailmanclient-3.1.1/src/mailmanclient/0000775000175000017500000000000013166327535021070 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/_client.py0000664000175000017500000000214513166325043023051 0ustar maxkingmaxking00000000000000# Copyright (C) 2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailman.client is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailman.client is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailman.client. If not, see . """Old module for backwards compatibility""" from __future__ import absolute_import, print_function, unicode_literals from mailmanclient import * # noqa __metaclass__ = type # XXX: This module exists for backwards compatibility with older versions of # MailmanClient which had all the API under this module. It will be removed in # future after few cycles of deprecation. mailmanclient-3.1.1/src/mailmanclient/restbase/0000775000175000017500000000000013166327535022700 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/restbase/base.py0000664000175000017500000001620013145013731024146 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . import six from collections import MutableMapping, Sequence __metaclass__ = type __all__ = [ 'RESTBase', 'RESTDict', 'RESTList', 'RESTObject' ] class RESTBase: """ Base class for data coming from the REST API. Subclasses can (and sometimes must) define some attributes to handle a particular entity. :cvar _properties: the list of expected entity properties. This is required for API elements that behave like an object, with REST data accessed through attributes. If this value is None, the REST data is used to list available properties. :cvar _writable_properties: list of properties that can be written to using a `PATCH` request. If this value is `None`, all properties are writable. :cvar _read_only_properties: list of properties that cannot be written to (defaults to `self_link` only). :cvar _autosave: automatically send a `PATCH` request to the API when a value is changed. Otherwise, the `save()` method must be called. """ _properties = None _writable_properties = None _read_only_properties = ['self_link'] _autosave = False def __init__(self, connection, url, data=None): """ :param connection: An API connection object. :type connection: Connection. :param url: The url of the API endpoint. :type url: str. :param data: The initial data to use. :type data: dict. """ self._connection = connection self._url = url self._rest_data = data self._changed_rest_data = {} def __repr__(self): return '<{0} at {1}>'.format(self.__class__.__name__, self._url) @property def rest_data(self): """Get data from API and cache it (only once per instance).""" if self._rest_data is None: response, content = self._connection.call(self._url) if isinstance(content, dict) and 'http_etag' in content: del content['http_etag'] # We don't care about etags. self._rest_data = content return self._rest_data def _get(self, key): if self._properties is not None: # Some REST key/values may not be returned by Mailman if the value # is None. if key in self._properties: return self.rest_data.get(key) raise KeyError(key) else: return self.rest_data[key] def _set(self, key, value): if (key in self._read_only_properties or ( self._writable_properties is not None and key not in self._writable_properties)): raise ValueError('value is read-only') # Don't check that the key is in _properties, the accepted values for # write may be different from the returned values (eg: User.password # and User.cleartext_password). if key in self.rest_data and self.rest_data[key] == value: return # Nothing to do self._changed_rest_data[key] = value if self._autosave: self.save() def _reset_cache(self): self._changed_rest_data = {} self._rest_data = None def save(self): response, content = self._connection.call( self._url, self._changed_rest_data, method='PATCH') self._reset_cache() class RESTObject(RESTBase): """Base class for REST data that behaves like an object with attributes.""" def __getattr__(self, name): try: return self._get(name) except KeyError: # Transform the KeyError into the more appropriate AttributeError raise AttributeError( "'{0}' object has no attribute '{1}'".format( self.__class__.__name__, name)) def __setattr__(self, name, value): # RESTObject must list REST-specific properties or we won't be able to # store the _connection, _url, etc. assert self._properties is not None if name not in self._properties: return super(RESTObject, self).__setattr__(name, value) return self._set(name, value) def delete(self): self._connection.call(self._url, method='DELETE') self._reset_cache() class RESTDict(RESTBase, MutableMapping): """Base class for REST data that behaves like a dictionary.""" def __repr__(self): return repr(self.rest_data) def __unicode__(self): return six.text_type(self.rest_data) def __getitem__(self, key): return self._get(key) def __setitem__(self, key, value): self._set(key, value) def __delitem__(self, key): raise NotImplementedError("REST dictionnary keys can't be deleted.") def __iter__(self): for key in self.rest_data: if self._properties is not None and key not in self._properties: continue yield key def __len__(self): return len(self.rest_data) def get(self, key, default=None): return self.rest_data.get(key, default) def keys(self): return list(self) def update(self, other): # Optimize the update to call save() only once _old_autosave = self._autosave self._autosave = False super(RESTDict, self).update(other) self._autosave = _old_autosave if self._autosave: self.save() class RESTList(RESTBase, Sequence): """ Base class for REST data that behaves like a list. The `_factory` attribute is a callable that will be applied on each returned member of the list. """ _factory = lambda x: x # flake8: noqa @property def rest_data(self): if self._rest_data is None: response, content = self._connection.call(self._url) if 'entries' not in content: self._rest_data = [] else: self._rest_data = content['entries'] return self._rest_data def __repr__(self): return repr(self.rest_data) def __unicode__(self): return six.text_type(self.rest_data) def __getitem__(self, key): return self._factory(self.rest_data[key]) def __delitem__(self, key): self[key].delete() self._reset_cache() def __len__(self): return len(self.rest_data) def __iter__(self): for entry in self.rest_data: yield self._factory(entry) def clear(self): self._connection.call(self._url, method='DELETE') self._reset_cache()mailmanclient-3.1.1/src/mailmanclient/restbase/__init__.py0000664000175000017500000000000013145013731024762 0ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/restbase/page.py0000664000175000017500000000527213145013731024157 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from six.moves.urllib_parse import urlencode, urlsplit, parse_qs, urlunsplit from mailmanclient.constants import DEFAULT_PAGE_ITEM_COUNT __metaclass__ = type __all__ = [ 'Page' ] class Page: def __init__(self, connection, path, model, count=DEFAULT_PAGE_ITEM_COUNT, page=1): self._connection = connection self._path = path self._count = count self._page = page self._model = model self._entries = [] self.total_size = 0 self._create_page() def __getitem__(self, key): return self._entries[key] def __iter__(self): for entry in self._entries: yield entry def __repr__(self): return ' 1 @property def has_next(self): return self._count * self._page < self.total_size mailmanclient-3.1.1/src/mailmanclient/restbase/connection.py0000664000175000017500000001044413163254544025410 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . import json from base64 import b64encode from six.moves.urllib_error import HTTPError from six.moves.urllib_parse import urljoin, urlencode import six from httplib2 import Http from mailmanclient.constants import __version__ __metaclass__ = type __all__ = [ 'MailmanConnectionError', 'Connection' ] class MailmanConnectionError(Exception): """Custom Exception to catch connection errors.""" class Connection: """A connection to the REST client.""" def __init__(self, baseurl, name=None, password=None): """Initialize a connection to the REST API. :param baseurl: The base url to access the Mailman 3 REST API. :param name: The Basic Auth user name. If given, the `password` must also be given. :param password: The Basic Auth password. If given the `name` must also be given. """ if baseurl[-1] != '/': baseurl += '/' self.baseurl = baseurl self.name = name self.password = password if name is not None and password is None: raise TypeError('`password` is required when `name` is given') if name is None and password is not None: raise TypeError('`name` is required when `password` is given') if name is None: self.basic_auth = None else: auth = '{0}:{1}'.format(name, password) self.basic_auth = b64encode(auth.encode('utf-8')).decode('utf-8') def call(self, path, data=None, method=None): """Make a call to the Mailman REST API. :param path: The url path to the resource. :type path: str :param data: Data to send, implies POST (default) or PUT. :type data: dict :param method: The HTTP method to call. Defaults to GET when `data` is None or POST if `data` is given. :type method: str :return: The response content, which will be None, a dictionary, or a list depending on the actual JSON type returned. :rtype: None, list, dict :raises HTTPError: when a non-2xx status code is returned. """ headers = { 'User-Agent': 'GNU Mailman REST client v{0}'.format(__version__), } data_str = None if data is not None: for k, v in data.items(): if not isinstance(v, bytes): data[k] = six.text_type(v).encode('utf-8') data_str = urlencode(data, doseq=True) headers['Content-Type'] = 'application/x-www-form-urlencoded' if method is None: if data_str is None: method = 'GET' else: method = 'POST' method = method.upper() if self.basic_auth: headers['Authorization'] = 'Basic ' + self.basic_auth url = urljoin(self.baseurl, path) try: response, content = Http().request(url, method, data_str, headers) # If we did not get a 2xx status code, make this look like a # urllib2 exception, for backward compatibility. if response.status // 100 != 2: raise HTTPError(url, response.status, content, response, None) if len(content) == 0: return response, None # XXX Work around for http://bugs.python.org/issue10038 if isinstance(content, six.binary_type): content = content.decode('utf-8') return response, json.loads(content) except HTTPError: raise except IOError: raise MailmanConnectionError('Could not connect to Mailman API') mailmanclient-3.1.1/src/mailmanclient/constants.py0000664000175000017500000000142213166327310023444 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . __version__ = '3.1.1' DEFAULT_PAGE_ITEM_COUNT = 50 MISSING = object() mailmanclient-3.1.1/src/mailmanclient/testing/0000775000175000017500000000000013166327535022545 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/testing/documentation.py0000664000175000017500000000254413145013731025760 0ustar maxkingmaxking00000000000000# Copyright (C) 2007-2017 The Free Software Foundation, Inc. # # This file is part of GNU Mailman. # # GNU Mailman is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # GNU Mailman is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # GNU Mailman. If not, see . """Harness for testing Mailman's documentation.""" from __future__ import absolute_import, print_function, unicode_literals __metaclass__ = type __all__ = [ 'dump', ] def dump(results): if results is None: print(None) return for key in sorted(results): if key == 'entries': for i, entry in enumerate(results[key]): # entry is a dictionary. print('entry %d:' % i) for entry_key in sorted(entry): print(' {0}: {1}'.format(entry_key, entry[entry_key])) else: print('{0}: {1}'.format(key, results[key])) mailmanclient-3.1.1/src/mailmanclient/testing/__init__.py0000664000175000017500000000000013112461453024631 0ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/testing/vcr_helpers.py0000664000175000017500000000711513166325043025427 0ustar maxkingmaxking00000000000000# Copyright (C) 2015-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # GNU Mailman is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # GNU Mailman is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # GNU Mailman. If not, see . """Helpers for VCR""" import vcr from functools import update_wrapper from six import binary_type, text_type from six.moves.urllib.parse import urlparse, urlunparse, parse_qsl, urlencode __all__ = [ 'get_vcr', ] # XXX: This module exists to maintain compatibility with some parts of # Postorius' test suite which use this internal API. This is duplicated in new # versions of Postorius (for >1.1 releases). def filter_response_headers(response): for header in ('Date', 'Server', 'date', 'server'): # The headers are lowercase on Python 2 and capitalized on Python 3 if header in response['headers']: del response['headers'][header] return response def reorder_request_params(request): def reorder_params(params): parsed = parse_qsl(params) if parsed: return urlencode(sorted(parsed, key=lambda kv: kv[0])) else: # Parsing failed, it may be a simple string. return params # sort the URL query-string by key names. uri_parts = urlparse(request.uri) if uri_parts.query: request.uri = urlunparse(( uri_parts.scheme, uri_parts.netloc, uri_parts.path, uri_parts.params, reorder_params(uri_parts.query), uri_parts.fragment, )) # convert the request body to text and sort the parameters. if isinstance(request.body, binary_type): try: request._body = request._body.decode('utf-8') except UnicodeDecodeError: pass if isinstance(request.body, text_type): request._body = reorder_params(request._body.encode('utf-8')) return request def get_vcr(**kwargs): return vcr.VCR( filter_headers=['authorization', 'user-agent', 'date'], before_record=reorder_request_params, before_record_response=filter_response_headers, **kwargs ) class vcr_testcase: """ Decorator for TestCases that use VCR. It automatically sets up a different cassette for each test function. """ def __init__(self, vcr_instance): self.vcr = vcr_instance def __call__(self, testcase): return self.decorate_class(testcase) def decorate_class(self, testcase): """Create a subclass that will add setUp instructions.""" vcr_instance = self.vcr class VCRTestCase(testcase): vcr = vcr_instance def setUp(self): cm = self.vcr.use_cassette('.'.join([ # testcase.__module__.rpartition('.')[2], testcase.__name__, self._testMethodName, 'yaml'])) self.cassette = cm.__enter__() self.addCleanup(cm.__exit__, None, None, None) super(VCRTestCase, self).setUp() return update_wrapper( VCRTestCase, testcase, assigned=('__module__', '__name__'), updated=[]) mailmanclient-3.1.1/src/mailmanclient/tests/0000775000175000017500000000000013166327535022232 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/tests/data/0000775000175000017500000000000013166327535023143 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/tests/data/using.rst.yaml0000664000175000017500000126377113145013731025767 0ustar maxkingmaxking00000000000000interactions: - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/system/versions response: body: {string: !!python/unicode '{"api_version": "3.1", "http_etag": "\"37ddc1fe42b81fd3b6952798c015a6f321f481a8\"", "mailman_version": "GNU Mailman 3.2.0a1 (La Villa Strangiato)", "python_version": "3.5.3 (default, Jan 19 2017, 14:11:04) \n[GCC 6.3.0 20170118]", "self_link": "http://localhost:9001/3.1/system/versions"}'} headers: content-length: ['288'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'mail_host=example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/domains response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/domains/example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'mail_host=example.net' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/domains response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/domains/example.net'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.net response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'mail_host=example.org' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/domains response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/domains/example.org'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.org response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"9db56968670dce724a7280d88f5b29c8ba0cb516\"", "mail_host": "example.org", "self_link": "http://localhost:9001/3.1/domains/example.org"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains response: body: {string: !!python/unicode '{"entries": [{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}, {"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}, {"description": null, "http_etag": "\"9db56968670dce724a7280d88f5b29c8ba0cb516\"", "mail_host": "example.org", "self_link": "http://localhost:9001/3.1/domains/example.org"}], "http_etag": "\"cbb432be6bf5871343ad67746a268dcd9d52f0a7\"", "start": 0, "total_size": 3}'} headers: content-length: ['625'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.net response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.org response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"9db56968670dce724a7280d88f5b29c8ba0cb516\"", "mail_host": "example.org", "self_link": "http://localhost:9001/3.1/domains/example.org"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/domains/example.org response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains response: body: {string: !!python/unicode '{"entries": [{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}, {"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}], "http_etag": "\"ca79d1241b5c323f634284232ad894799b5a3c63\"", "start": 0, "total_size": 2}'} headers: content-length: ['451'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"d6e3312427f77f8bae17740af4d812349a811a55\"", "mail_host": "example.com", "self_link": "http://localhost:9001/3.1/domains/example.com"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.net response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'fqdn_listname=test-1%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/lists/test-1.example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com response: body: {string: !!python/unicode '{"display_name": "Test-1", "fqdn_listname": "test-1@example.com", "http_etag": "\"40cd89e168750b73cbc0d60933bba97892048be2\"", "list_id": "test-1.example.com", "list_name": "test-1", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com response: body: {string: !!python/unicode '{"display_name": "Test-1", "fqdn_listname": "test-1@example.com", "http_etag": "\"40cd89e168750b73cbc0d60933bba97892048be2\"", "list_id": "test-1.example.com", "list_name": "test-1", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'fqdn_listname=test-2%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/lists/test-2.example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2.example.com response: body: {string: !!python/unicode '{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.net response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.net response: body: {string: !!python/unicode '{"description": null, "http_etag": "\"593e581e7bf6c9599b156d6d52a6ca5d56f174f3\"", "mail_host": "example.net", "self_link": "http://localhost:9001/3.1/domains/example.net"}'} headers: content-length: ['172'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'fqdn_listname=test-3%40example.net' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/lists/test-3.example.net'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-3.example.net response: body: {string: !!python/unicode '{"display_name": "Test-3", "fqdn_listname": "test-3@example.net", "http_etag": "\"351777e7d0678dfb6668c73f9fc37a0147a47297\"", "list_id": "test-3.example.net", "list_name": "test-3", "mail_host": "example.net", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.net", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'fqdn_listname=test-3%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] location: ['http://localhost:9001/3.1/lists/test-3.example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-3.example.com response: body: {string: !!python/unicode '{"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-1", "fqdn_listname": "test-1@example.com", "http_etag": "\"40cd89e168750b73cbc0d60933bba97892048be2\"", "list_id": "test-1.example.com", "list_name": "test-1", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com", "volume": 1}, {"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.net", "http_etag": "\"351777e7d0678dfb6668c73f9fc37a0147a47297\"", "list_id": "test-3.example.net", "list_name": "test-3", "mail_host": "example.net", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.net", "volume": 1}], "http_etag": "\"cc8a6adc8dee9865e485162fedfccfc5cb00ee7d\"", "start": 0, "total_size": 4}'} headers: content-length: ['1347'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/config response: body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": true, "admin_notify_mchanges": false, "administrivia": true, "advertised": true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": "test-1-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": "monthly", "digests_enabled": true, "display_name": "Test-1", "dmarc_mitigate_action": "no_mitigation", "dmarc_mitigate_unconditionally": false, "dmarc_moderation_notice": "", "dmarc_wrapped_message_text": "", "filter_content": false, "first_strip_reply_to": false, "fqdn_listname": "test-1@example.com", "http_etag": "\"f78b48eaabed841fc433122a21c9ab5d8304ce42\"", "include_rfc2369_headers": true, "info": "", "join_address": "test-1-join@example.com", "last_post_at": null, "leave_address": "test-1-leave@example.com", "list_name": "test-1", "mail_host": "example.com", "moderator_password": null, "next_digest_number": 1, "no_reply_address": "noreply@example.com", "owner_address": "test-1-owner@example.com", "post_id": 1, "posting_address": "test-1@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": "test-1-request@example.com", "send_welcome_message": true, "subject_prefix": "[Test-1] ", "subscription_policy": "confirm", "volume": 1}'} headers: content-length: ['1827'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'advertised=False' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/lists/test-1@example.com/config response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists?advertised=true response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.net", "http_etag": "\"351777e7d0678dfb6668c73f9fc37a0147a47297\"", "list_id": "test-3.example.net", "list_name": "test-3", "mail_host": "example.net", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.net", "volume": 1}], "http_etag": "\"202af86b8895e04728a0881bd9c5373baf8f61a2\"", "start": 0, "total_size": 3}'} headers: content-length: ['1036'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists?count=2&page=1 response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-1", "fqdn_listname": "test-1@example.com", "http_etag": "\"40cd89e168750b73cbc0d60933bba97892048be2\"", "list_id": "test-1.example.com", "list_name": "test-1", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com", "volume": 1}, {"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}], "http_etag": "\"690582fb9a8017c589b175f493b814cf061b0246\"", "start": 0, "total_size": 4}'} headers: content-length: ['725'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists?count=2&page=2 response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.net", "http_etag": "\"351777e7d0678dfb6668c73f9fc37a0147a47297\"", "list_id": "test-3.example.net", "list_name": "test-3", "mail_host": "example.net", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.net", "volume": 1}], "http_etag": "\"476bdd05804643bfe24ba8508b85c89b5ae30a8a\"", "start": 2, "total_size": 4}'} headers: content-length: ['725'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists?count=2&page=1&advertised=true response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}], "http_etag": "\"075bb20436aa2ce3e524750ff3e1cd56e713c9c1\"", "start": 0, "total_size": 3}'} headers: content-length: ['725'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com/lists response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-1", "fqdn_listname": "test-1@example.com", "http_etag": "\"40cd89e168750b73cbc0d60933bba97892048be2\"", "list_id": "test-1.example.com", "list_name": "test-1", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com", "volume": 1}, {"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}], "http_etag": "\"1a8b03ae8ce6b9432939f5f0c0c67bed3164a498\"", "start": 0, "total_size": 3}'} headers: content-length: ['1036'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com/lists?advertised=true response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}], "http_etag": "\"c5aa652d137063eca2743e8376dc85c999df1ffa\"", "start": 0, "total_size": 2}'} headers: content-length: ['725'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/domains/example.com/lists?count=2&page=1&advertised=true response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}, {"display_name": "Test-3", "fqdn_listname": "test-3@example.com", "http_etag": "\"28ebc14149a5a5a2d1768712201e7bd96d1a6d40\"", "list_id": "test-3.example.com", "list_name": "test-3", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.com", "volume": 1}], "http_etag": "\"c5aa652d137063eca2743e8376dc85c999df1ffa\"", "start": 0, "total_size": 2}'} headers: content-length: ['725'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-3@example.net response: body: {string: !!python/unicode '{"display_name": "Test-3", "fqdn_listname": "test-3@example.net", "http_etag": "\"351777e7d0678dfb6668c73f9fc37a0147a47297\"", "list_id": "test-3.example.net", "list_name": "test-3", "mail_host": "example.net", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-3.example.net", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-3.example.net response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-3@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode '{"entries": [{"display_name": "Test-1", "fqdn_listname": "test-1@example.com", "http_etag": "\"40cd89e168750b73cbc0d60933bba97892048be2\"", "list_id": "test-1.example.com", "list_name": "test-1", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com", "volume": 1}, {"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}], "http_etag": "\"fdf5436ef16b7913746f78cc72de5a354f93918b\"", "start": 0, "total_size": 2}'} headers: content-length: ['725'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2@example.com response: body: {string: !!python/unicode '{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"a52f87bcdd7a4035c93a8b0a4a92ee4342278428\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2@example.com/config response: body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": true, "admin_notify_mchanges": false, "administrivia": true, "advertised": true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": "test-2-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": "monthly", "digests_enabled": true, "display_name": "Test-2", "dmarc_mitigate_action": "no_mitigation", "dmarc_mitigate_unconditionally": false, "dmarc_moderation_notice": "", "dmarc_wrapped_message_text": "", "filter_content": false, "first_strip_reply_to": false, "fqdn_listname": "test-2@example.com", "http_etag": "\"f36e1331e828c417e08a07563a1d78030baf302e\"", "include_rfc2369_headers": true, "info": "", "join_address": "test-2-join@example.com", "last_post_at": null, "leave_address": "test-2-leave@example.com", "list_name": "test-2", "mail_host": "example.com", "moderator_password": null, "next_digest_number": 1, "no_reply_address": "noreply@example.com", "owner_address": "test-2-owner@example.com", "post_id": 1, "posting_address": "test-2@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": "test-2-request@example.com", "send_welcome_message": true, "subject_prefix": "[Test-2] ", "subscription_policy": "confirm", "volume": 1}'} headers: content-length: ['1827'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=unverified%40example.com&display_name=Unverified&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"http_etag": "\"1aca89199df0caf000b3b808201b46b5e4db573c\"", "token": "0000000000000000000000000000000000000647", "token_owner": "subscriber"}'} headers: content-length: ['143'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 202, message: Accepted} - request: body: !!python/unicode 'subscriber=unconfirmed%40example.com&pre_verified=True&display_name=Unconfirmed&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"http_etag": "\"858116a4a02340890b528d88e487e7fd21f8debb\"", "token": "0000000000000000000000000000000000000648", "token_owner": "subscriber"}'} headers: content-length: ['143'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:18 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 202, message: Accepted} - request: body: !!python/unicode 'subscriber=anna%40example.com&pre_confirmed=True&pre_verified=True&display_name=Anna&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] location: ['http://localhost:9001/3.1/members/0000000000000000000000000000033e'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/0000000000000000000000000000033e response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"177587f08e1f2b2aeeb96de21bcdf9eab1734c13\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033e", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033e", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=bill%40example.com&pre_confirmed=True&pre_verified=True&display_name=Bill&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] location: ['http://localhost:9001/3.1/members/0000000000000000000000000000033f'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/0000000000000000000000000000033f response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=anna%40example.com&pre_confirmed=True&pre_verified=True&display_name=None&list_id=test-2.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] location: ['http://localhost:9001/3.1/members/00000000000000000000000000000340'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/00000000000000000000000000000340 response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=cris%40example.com&pre_confirmed=True&pre_verified=True&display_name=Cris&list_id=test-2.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] location: ['http://localhost:9001/3.1/members/00000000000000000000000000000341'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/00000000000000000000000000000341 response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/cris@example.com", "delivery_mode": "regular", "email": "cris@example.com", "http_etag": "\"ec9bbf36110495e8c916aea6056e5bb4fcc83dec\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000341", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"177587f08e1f2b2aeeb96de21bcdf9eab1734c13\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033e", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033e", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}, {"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}, {"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}, {"address": "http://localhost:9001/3.1/addresses/cris@example.com", "delivery_mode": "regular", "email": "cris@example.com", "http_etag": "\"ec9bbf36110495e8c916aea6056e5bb4fcc83dec\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000341", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}], "http_etag": "\"14f0855e6cc3229e09a0b96bf0724218e6af6249\"", "start": 0, "total_size": 4}'} headers: content-length: ['1887'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/roster/member response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"177587f08e1f2b2aeeb96de21bcdf9eab1734c13\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033e", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033e", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}, {"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}], "http_etag": "\"c261d0811ec4047a99b68d6e2ee00247b502bdb1\"", "start": 0, "total_size": 2}'} headers: content-length: ['995'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members?count=2&page=1 response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"177587f08e1f2b2aeeb96de21bcdf9eab1734c13\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033e", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033e", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}, {"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}], "http_etag": "\"219a1f22638e51e72b805e487458e7c0a7141203\"", "start": 0, "total_size": 4}'} headers: content-length: ['995'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members?count=2&page=2 response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}, {"address": "http://localhost:9001/3.1/addresses/cris@example.com", "delivery_mode": "regular", "email": "cris@example.com", "http_etag": "\"ec9bbf36110495e8c916aea6056e5bb4fcc83dec\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000341", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}], "http_etag": "\"edade9ce623bfba815542a50960a237d332271e8\"", "start": 2, "total_size": 4}'} headers: content-length: ['995'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/roster/member?count=1&page=1 response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"177587f08e1f2b2aeeb96de21bcdf9eab1734c13\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033e", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033e", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}], "http_etag": "\"0ce276769846af340782f865f2f1fbd31cf81a1e\"", "start": 0, "total_size": 2}'} headers: content-length: ['549'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/roster/member?count=1&page=2 response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}], "http_etag": "\"8f54a0eeaf24ad41b43839c63aded37bc19cfa23\"", "start": 1, "total_size": 2}'} headers: content-length: ['549'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2.example.com/member/cris@example.com response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/cris@example.com", "delivery_mode": "regular", "email": "cris@example.com", "http_etag": "\"ec9bbf36110495e8c916aea6056e5bb4fcc83dec\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000341", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2@example.com response: body: {string: !!python/unicode '{"display_name": "Test-2", "fqdn_listname": "test-2@example.com", "http_etag": "\"9e65ac42ffbf62ab2deab791745ce1695a09e505\"", "list_id": "test-2.example.com", "list_name": "test-2", "mail_host": "example.com", "member_count": 2, "self_link": "http://localhost:9001/3.1/lists/test-2.example.com", "volume": 1}'} headers: content-length: ['309'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2.example.com/member/cris@example.com response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/cris@example.com", "delivery_mode": "regular", "email": "cris@example.com", "http_etag": "\"ec9bbf36110495e8c916aea6056e5bb4fcc83dec\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000341", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/00000000000000000000000000000341/preferences response: body: {string: !!python/unicode '{"http_etag": "\"4520dfb39af4de604e7fa2fa6560621fc5a778f9\"", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341/preferences"}'} headers: content-length: ['156'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Cris", "http_etag": "\"ad735a213419d53c39c79a7fca7946c6336811c1\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "user_id": "0000000000000000000000000000047b"}'} headers: content-length: ['276'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-2.example.com/member/nomember@example.com response: body: {string: !!python/unicode '{"title": "404 Not Found"}'} headers: content-length: ['26'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:19 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] vary: [Accept] status: {code: 404, message: Not Found} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1.example.com/member/anna@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}, {"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}, {"address": "http://localhost:9001/3.1/addresses/cris@example.com", "delivery_mode": "regular", "email": "cris@example.com", "http_etag": "\"ec9bbf36110495e8c916aea6056e5bb4fcc83dec\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000341", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000341", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}], "http_etag": "\"6f2bde56f2f0c2b17e8deeb2e928aa5c543790bc\"", "start": 0, "total_size": 3}'} headers: content-length: ['1441'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/members/00000000000000000000000000000341 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}, {"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}], "http_etag": "\"690bddbfaeeb62c7e5235706cfe3c6290e880e90\"", "start": 0, "total_size": 2}'} headers: content-length: ['995'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1.example.com/member/nomember@example.com response: body: {string: !!python/unicode '{"title": "404 Not Found"}'} headers: content-length: ['26'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] vary: [Accept] status: {code: 404, message: Not Found} - request: body: !!python/unicode 'role=nonmember&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members/find response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users response: body: {string: !!python/unicode '{"entries": [{"created_on": "2005-08-01T07:49:23", "display_name": "Unverified", "http_etag": "\"c1122b8a2734e8e4a8a93f574782939315a5af25\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000477", "user_id": "00000000000000000000000000000477"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Unconfirmed", "http_etag": "\"a3f755e773a108a25f54e68048b6c735bbe1ba77\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000478", "user_id": "00000000000000000000000000000478"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Anna", "http_etag": "\"d75a29d94399449661d955fae2269182c0ecbce8\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000479", "user_id": "00000000000000000000000000000479"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Bill", "http_etag": "\"083120bb35acbf4593cfd55fb1d23cb3e113ac15\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047a", "user_id": "0000000000000000000000000000047a"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Cris", "http_etag": "\"ad735a213419d53c39c79a7fca7946c6336811c1\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "user_id": "0000000000000000000000000000047b"}], "http_etag": "\"1db5f7b1c0fd5391ebbc7b5da26684cec05ad5da\"", "start": 0, "total_size": 5}'} headers: content-length: ['1506'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users?count=4&page=1 response: body: {string: !!python/unicode '{"entries": [{"created_on": "2005-08-01T07:49:23", "display_name": "Unverified", "http_etag": "\"c1122b8a2734e8e4a8a93f574782939315a5af25\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000477", "user_id": "00000000000000000000000000000477"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Unconfirmed", "http_etag": "\"a3f755e773a108a25f54e68048b6c735bbe1ba77\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000478", "user_id": "00000000000000000000000000000478"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Anna", "http_etag": "\"d75a29d94399449661d955fae2269182c0ecbce8\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000479", "user_id": "00000000000000000000000000000479"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Bill", "http_etag": "\"083120bb35acbf4593cfd55fb1d23cb3e113ac15\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047a", "user_id": "0000000000000000000000000000047a"}], "http_etag": "\"5bc8b0e155b75f24fc0c7f9135c4895e41f2e3a9\"", "start": 0, "total_size": 5}'} headers: content-length: ['1228'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users?count=4&page=2 response: body: {string: !!python/unicode '{"entries": [{"created_on": "2005-08-01T07:49:23", "display_name": "Cris", "http_etag": "\"ad735a213419d53c39c79a7fca7946c6336811c1\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "user_id": "0000000000000000000000000000047b"}], "http_etag": "\"b080ff3729449cfe60da2cbd47989430362cfc8f\"", "start": 4, "total_size": 5}'} headers: content-length: ['381'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users?count=4&page=1 response: body: {string: !!python/unicode '{"entries": [{"created_on": "2005-08-01T07:49:23", "display_name": "Unverified", "http_etag": "\"c1122b8a2734e8e4a8a93f574782939315a5af25\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000477", "user_id": "00000000000000000000000000000477"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Unconfirmed", "http_etag": "\"a3f755e773a108a25f54e68048b6c735bbe1ba77\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000478", "user_id": "00000000000000000000000000000478"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Anna", "http_etag": "\"d75a29d94399449661d955fae2269182c0ecbce8\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000479", "user_id": "00000000000000000000000000000479"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Bill", "http_etag": "\"083120bb35acbf4593cfd55fb1d23cb3e113ac15\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047a", "user_id": "0000000000000000000000000000047a"}], "http_etag": "\"5bc8b0e155b75f24fc0c7f9135c4895e41f2e3a9\"", "start": 0, "total_size": 5}'} headers: content-length: ['1228'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/cris@example.com response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Cris", "http_etag": "\"ad735a213419d53c39c79a7fca7946c6336811c1\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "user_id": "0000000000000000000000000000047b"}'} headers: content-length: ['276'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode '{"entries": [{"display_name": "Cris", "email": "cris@example.com", "http_etag": "\"247e19eb5145b3f481be5d1d675487ee12aaea67\"", "original_email": "cris@example.com", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris@example.com", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "verified_on": "2005-08-01T07:49:23"}], "http_etag": "\"7413e23c8c650922ada9d2f96b4570c5e163944c\"", "start": 0, "total_size": 1}'} headers: content-length: ['480'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'email=cris.person%40example.org' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] location: ['http://localhost:9001/3.1/addresses/cris.person@example.org'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/addresses/cris.person@example.org response: body: {string: !!python/unicode '{"email": "cris.person@example.org", "http_etag": "\"65697dd3d9809a56914f75bf483507f458eb0317\"", "original_email": "cris.person@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris.person@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}'} headers: content-length: ['334'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode '{"entries": [{"email": "cris.person@example.org", "http_etag": "\"65697dd3d9809a56914f75bf483507f458eb0317\"", "original_email": "cris.person@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris.person@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}, {"display_name": "Cris", "email": "cris@example.com", "http_etag": "\"247e19eb5145b3f481be5d1d675487ee12aaea67\"", "original_email": "cris@example.com", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris@example.com", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "verified_on": "2005-08-01T07:49:23"}], "http_etag": "\"da88d5cf19cccb285688428633d1e4ee75e01644\"", "start": 0, "total_size": 2}'} headers: content-length: ['816'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:21 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'password=somepass&display_name=Dana&email=dana%40example.org' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/users response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] location: ['http://localhost:9001/3.1/users/0000000000000000000000000000047c'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047c response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Dana", "http_etag": "\"a3fb0c90554c940c552aa24eeb8451a1c0c52449\"", "is_server_owner": false, "password": "$6$rounds=656000$.q0SmTobhYqCQXAQ$HsRDORbQwHtBH4CKPlP.Y.yiKl5HTwOfvgzfh9CxRKf8TXMEnvhQnzeJAYVW4mzba5jr32xd2o.pgi8yJ.YgM1", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047c", "user_id": "0000000000000000000000000000047c"}'} headers: content-length: ['412'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'email=dana%40example.org' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode 'Address belongs to other user'} headers: content-length: ['29'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 400, message: Bad Request} - request: body: !!python/unicode 'absorb_existing=1&email=dana%40example.org' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] location: ['http://localhost:9001/3.1/addresses/dana@example.org'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode '{"entries": [{"email": "cris.person@example.org", "http_etag": "\"65697dd3d9809a56914f75bf483507f458eb0317\"", "original_email": "cris.person@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris.person@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}, {"display_name": "Cris", "email": "cris@example.com", "http_etag": "\"247e19eb5145b3f481be5d1d675487ee12aaea67\"", "original_email": "cris@example.com", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris@example.com", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "verified_on": "2005-08-01T07:49:23"}, {"display_name": "Dana", "email": "dana@example.org", "http_etag": "\"4f5fb9bbf5bf3b208362a666d773265c4abcea42\"", "original_email": "dana@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/dana@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}], "http_etag": "\"0bd7fd95c0c541cfe7a488ca9a590e64d1c7a0b9\"", "start": 0, "total_size": 3}'} headers: content-length: ['1155'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/addresses/dana@example.org response: body: {string: !!python/unicode '{"display_name": "Dana", "email": "dana@example.org", "http_etag": "\"4f5fb9bbf5bf3b208362a666d773265c4abcea42\"", "original_email": "dana@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/dana@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}'} headers: content-length: ['337'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/addresses/dana@example.org/verify response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/addresses/dana@example.org response: body: {string: !!python/unicode '{"display_name": "Dana", "email": "dana@example.org", "http_etag": "\"cb67c82f968abf00fc4a1325091b7a3d61692614\"", "original_email": "dana@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/dana@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "verified_on": "2005-08-01T07:49:23"}'} headers: content-length: ['375'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/addresses/dana@example.org/unverify response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/addresses/dana@example.org response: body: {string: !!python/unicode '{"display_name": "Dana", "email": "dana@example.org", "http_etag": "\"4f5fb9bbf5bf3b208362a666d773265c4abcea42\"", "original_email": "dana@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/dana@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}'} headers: content-length: ['337'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode '{"entries": [{"email": "cris.person@example.org", "http_etag": "\"65697dd3d9809a56914f75bf483507f458eb0317\"", "original_email": "cris.person@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris.person@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}, {"display_name": "Cris", "email": "cris@example.com", "http_etag": "\"247e19eb5145b3f481be5d1d675487ee12aaea67\"", "original_email": "cris@example.com", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris@example.com", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "verified_on": "2005-08-01T07:49:23"}, {"display_name": "Dana", "email": "dana@example.org", "http_etag": "\"4f5fb9bbf5bf3b208362a666d773265c4abcea42\"", "original_email": "dana@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/dana@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}], "http_etag": "\"0bd7fd95c0c541cfe7a488ca9a590e64d1c7a0b9\"", "start": 0, "total_size": 3}'} headers: content-length: ['1155'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/addresses/dana@example.org response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b/addresses response: body: {string: !!python/unicode '{"entries": [{"email": "cris.person@example.org", "http_etag": "\"65697dd3d9809a56914f75bf483507f458eb0317\"", "original_email": "cris.person@example.org", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris.person@example.org", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b"}, {"display_name": "Cris", "email": "cris@example.com", "http_etag": "\"247e19eb5145b3f481be5d1d675487ee12aaea67\"", "original_email": "cris@example.com", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/cris@example.com", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "verified_on": "2005-08-01T07:49:23"}], "http_etag": "\"da88d5cf19cccb285688428633d1e4ee75e01644\"", "start": 0, "total_size": 2}'} headers: content-length: ['816'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'password=somepass&display_name=Ler&email=ler%40primus.org' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/users response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] location: ['http://localhost:9001/3.1/users/0000000000000000000000000000047d'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047d response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Ler", "http_etag": "\"ced9c4bc8ad3e11fbb83bc610e7d6f6e4f60ce50\"", "is_server_owner": false, "password": "$6$rounds=656000$hIACt25Q0lqJEkyI$gUtd5aJu0QIpoaWPW./vkAEyibdoLYfN3WjA5yQf8rqDsHHfoOs0f368sKXLOi2TDVFu7FiMaSRd7MySY3PIk0", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047d", "user_id": "0000000000000000000000000000047d"}'} headers: content-length: ['411'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/ler@primus.org response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Ler", "http_etag": "\"ced9c4bc8ad3e11fbb83bc610e7d6f6e4f60ce50\"", "is_server_owner": false, "password": "$6$rounds=656000$hIACt25Q0lqJEkyI$gUtd5aJu0QIpoaWPW./vkAEyibdoLYfN3WjA5yQf8rqDsHHfoOs0f368sKXLOi2TDVFu7FiMaSRd7MySY3PIk0", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047d", "user_id": "0000000000000000000000000000047d"}'} headers: content-length: ['411'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'display_name=Sir+Ler' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047d response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/ler@primus.org response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Sir Ler", "http_etag": "\"65ae00a4bcf2029fcaf7b8079a0352684b27dbc6\"", "is_server_owner": false, "password": "$6$rounds=656000$hIACt25Q0lqJEkyI$gUtd5aJu0QIpoaWPW./vkAEyibdoLYfN3WjA5yQf8rqDsHHfoOs0f368sKXLOi2TDVFu7FiMaSRd7MySY3PIk0", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047d", "user_id": "0000000000000000000000000000047d"}'} headers: content-length: ['415'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'cleartext_password=easy' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047d response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047d response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Sir Ler", "http_etag": "\"50447df82c18d9a1797764a18962585ffff81eca\"", "is_server_owner": false, "password": "$6$rounds=656000$vxCVBA6LZfVsFYGH$qegjTOweTyGZMzwnTJe3KeczIzn2QFGAHQjJBsRHIp0Sb9HKZIU1.lPO7EZ/ptZHCLeBjULzEVTHmOvGhP6d..", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047d", "user_id": "0000000000000000000000000000047d"}'} headers: content-length: ['415'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/bill@example.com response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "Bill", "http_etag": "\"083120bb35acbf4593cfd55fb1d23cb3e113ac15\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047a", "user_id": "0000000000000000000000000000047a"}'} headers: content-length: ['276'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047a/addresses response: body: {string: !!python/unicode '{"entries": [{"display_name": "Bill", "email": "bill@example.com", "http_etag": "\"3b37cc20851888148b0390a4dafffc7455bbbf16\"", "original_email": "bill@example.com", "registered_on": "2005-08-01T07:49:23", "self_link": "http://localhost:9001/3.1/addresses/bill@example.com", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a", "verified_on": "2005-08-01T07:49:23"}], "http_etag": "\"6c7ebfef2165f914e5015ead4e6c3d5aebb18443\"", "start": 0, "total_size": 1}'} headers: content-length: ['480'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=bill%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members/find response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}], "http_etag": "\"9a0085970b8b55d4af14264b825b98891a3a7ce1\"", "start": 0, "total_size": 1}'} headers: content-length: ['549'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/config response: body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": true, "admin_notify_mchanges": false, "administrivia": true, "advertised": false, "allow_list_posts": true, "anonymous_list": false, "archive_policy": "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": "test-1-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": "monthly", "digests_enabled": true, "display_name": "Test-1", "dmarc_mitigate_action": "no_mitigation", "dmarc_mitigate_unconditionally": false, "dmarc_moderation_notice": "", "dmarc_wrapped_message_text": "", "filter_content": false, "first_strip_reply_to": false, "fqdn_listname": "test-1@example.com", "http_etag": "\"fb430080d986cc221e2d083d6ae27c18e7d3e32b\"", "include_rfc2369_headers": true, "info": "", "join_address": "test-1-join@example.com", "last_post_at": null, "leave_address": "test-1-leave@example.com", "list_name": "test-1", "mail_host": "example.com", "moderator_password": null, "next_digest_number": 1, "no_reply_address": "noreply@example.com", "owner_address": "test-1-owner@example.com", "post_id": 1, "posting_address": "test-1@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": "test-1-request@example.com", "send_welcome_message": true, "subject_prefix": "[Test-1] ", "subscription_policy": "confirm", "volume": 1}'} headers: content-length: ['1828'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'display_name=Test+Numero+Uno&description=A+very+meaningful+description.' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/lists/test-1@example.com/config response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/config response: body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": true, "admin_notify_mchanges": false, "administrivia": true, "advertised": false, "allow_list_posts": true, "anonymous_list": false, "archive_policy": "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": "test-1-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", "default_nonmember_action": "hold", "description": "A very meaningful description.", "digest_last_sent_at": null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": "monthly", "digests_enabled": true, "display_name": "Test Numero Uno", "dmarc_mitigate_action": "no_mitigation", "dmarc_mitigate_unconditionally": false, "dmarc_moderation_notice": "", "dmarc_wrapped_message_text": "", "filter_content": false, "first_strip_reply_to": false, "fqdn_listname": "test-1@example.com", "http_etag": "\"498db45cc6310075559ec503668fe78300660306\"", "include_rfc2369_headers": true, "info": "", "join_address": "test-1-join@example.com", "last_post_at": null, "leave_address": "test-1-leave@example.com", "list_name": "test-1", "mail_host": "example.com", "moderator_password": null, "next_digest_number": 1, "no_reply_address": "noreply@example.com", "owner_address": "test-1-owner@example.com", "post_id": 1, "posting_address": "test-1@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": "test-1-request@example.com", "send_welcome_message": true, "subject_prefix": "[Test-1] ", "subscription_policy": "confirm", "volume": 1}'} headers: content-length: ['1867'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/system/preferences response: body: {string: !!python/unicode '{"acknowledge_posts": false, "delivery_mode": "regular", "delivery_status": "enabled", "hide_address": true, "http_etag": "\"2bf3b0a394f164ec02c6bdc0147db6323c2261de\"", "preferred_language": "en", "receive_list_copy": true, "receive_own_postings": true, "self_link": "http://localhost:9001/3.1/system/preferences"}'} headers: content-length: ['315'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:22 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2.example.com/member/anna@example.com response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/00000000000000000000000000000340/preferences response: body: {string: !!python/unicode '{"http_etag": "\"87f2006c6f2726e82bacf527ac7f7300a0f2a0bf\"", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340/preferences"}'} headers: content-length: ['156'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'delivery_status=by_user' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/members/00000000000000000000000000000340/preferences response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-2.example.com/member/anna@example.com response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/00000000000000000000000000000340/preferences response: body: {string: !!python/unicode '{"delivery_status": "by_user", "http_etag": "\"e9ae5aca448b59e7e006530aa483b46fd0a07bdd\"", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340/preferences"}'} headers: content-length: ['186'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/system/pipelines response: body: {string: !!python/unicode '{"http_etag": "\"ff8a7af97caf24e6ca24c5baed447ff532bd1b4f\"", "pipelines": ["default-owner-pipeline", "default-posting-pipeline", "virgin"]}'} headers: content-length: ['140'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/system/chains response: body: {string: !!python/unicode '{"chains": ["accept", "default-owner-chain", "default-posting-chain", "discard", "header-match", "hold", "moderation", "reject"], "http_etag": "\"48472ee39093b9bf8cc151ba77aca22926feda66\""}'} headers: content-length: ['190'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/roster/owner response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/roster/moderator response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=foo%40example.com&role=owner&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] location: ['http://localhost:9001/3.1/members/00000000000000000000000000000342'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/roster/owner response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/foo@example.com", "delivery_mode": "regular", "email": "foo@example.com", "http_etag": "\"f0f2d1729e0ec12cc957dcb1f2ba3e520f21bb67\"", "list_id": "test-1.example.com", "member_id": "00000000000000000000000000000342", "moderation_action": "accept", "role": "owner", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000342", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047e"}], "http_etag": "\"2fecf282b01325c7b95d131f1aaeb9a1b0f959b9\"", "start": 0, "total_size": 1}'} headers: content-length: ['577'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/roster/member response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}], "http_etag": "\"9a0085970b8b55d4af14264b825b98891a3a7ce1\"", "start": 0, "total_size": 1}'} headers: content-length: ['549'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=bar%40example.com&role=moderator&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] location: ['http://localhost:9001/3.1/members/00000000000000000000000000000343'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/roster/moderator response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bar@example.com", "delivery_mode": "regular", "email": "bar@example.com", "http_etag": "\"518a1edc92bec3434bdbb49cdce3fab8204d5532\"", "list_id": "test-1.example.com", "member_id": "00000000000000000000000000000343", "moderation_action": "accept", "role": "moderator", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000343", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047f"}], "http_etag": "\"8854c5df1d7447cfdab3d5cbd0db3cc6f80ddf71\"", "start": 0, "total_size": 1}'} headers: content-length: ['581'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/roster/member response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}], "http_etag": "\"9a0085970b8b55d4af14264b825b98891a3a7ce1\"", "start": 0, "total_size": 1}'} headers: content-length: ['549'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=bar%40example.com&pre_confirmed=True&pre_verified=True&display_name=Bar&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] location: ['http://localhost:9001/3.1/members/00000000000000000000000000000344'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members/00000000000000000000000000000344 response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/bar@example.com", "delivery_mode": "regular", "email": "bar@example.com", "http_etag": "\"f2e893024bf515ce2b66cde4a19568823a0189cc\"", "list_id": "test-1.example.com", "member_id": "00000000000000000000000000000344", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000344", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047f"}'} headers: content-length: ['442'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"entries": [{"address": "http://localhost:9001/3.1/addresses/foo@example.com", "delivery_mode": "regular", "email": "foo@example.com", "http_etag": "\"f0f2d1729e0ec12cc957dcb1f2ba3e520f21bb67\"", "list_id": "test-1.example.com", "member_id": "00000000000000000000000000000342", "moderation_action": "accept", "role": "owner", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000342", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047e"}, {"address": "http://localhost:9001/3.1/addresses/bar@example.com", "delivery_mode": "regular", "email": "bar@example.com", "http_etag": "\"518a1edc92bec3434bdbb49cdce3fab8204d5532\"", "list_id": "test-1.example.com", "member_id": "00000000000000000000000000000343", "moderation_action": "accept", "role": "moderator", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000343", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047f"}, {"address": "http://localhost:9001/3.1/addresses/bar@example.com", "delivery_mode": "regular", "email": "bar@example.com", "http_etag": "\"f2e893024bf515ce2b66cde4a19568823a0189cc\"", "list_id": "test-1.example.com", "member_id": "00000000000000000000000000000344", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000344", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047f"}, {"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}, {"address": "http://localhost:9001/3.1/addresses/anna@example.com", "delivery_mode": "regular", "email": "anna@example.com", "http_etag": "\"a2f87859154c808a8911db829df672878daabf0d\"", "list_id": "test-2.example.com", "member_id": "00000000000000000000000000000340", "role": "member", "self_link": "http://localhost:9001/3.1/members/00000000000000000000000000000340", "user": "http://localhost:9001/3.1/users/00000000000000000000000000000479"}], "http_etag": "\"ad1deacbc1c6c4be2c95bceece451ef9e0c52387\"", "start": 0, "total_size": 5}'} headers: content-length: ['2391'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1@example.com/owner/foo@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/roster/owner response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'fqdn_listname=confirm-first%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] location: ['http://localhost:9001/3.1/lists/confirm-first.example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first.example.com response: body: {string: !!python/unicode '{"display_name": "Confirm-first", "fqdn_listname": "confirm-first@example.com", "http_etag": "\"c45f8c0a7609b62ca5c7cfda30c2e3d39f11cca6\"", "list_id": "confirm-first.example.com", "list_name": "confirm-first", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/confirm-first.example.com", "volume": 1}'} headers: content-length: ['344'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/config response: body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": true, "admin_notify_mchanges": false, "administrivia": true, "advertised": true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": "confirm-first-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": "monthly", "digests_enabled": true, "display_name": "Confirm-first", "dmarc_mitigate_action": "no_mitigation", "dmarc_mitigate_unconditionally": false, "dmarc_moderation_notice": "", "dmarc_wrapped_message_text": "", "filter_content": false, "first_strip_reply_to": false, "fqdn_listname": "confirm-first@example.com", "http_etag": "\"91ae097703ed5d6c5f16f16bf8347a8bc1f66f96\"", "include_rfc2369_headers": true, "info": "", "join_address": "confirm-first-join@example.com", "last_post_at": null, "leave_address": "confirm-first-leave@example.com", "list_name": "confirm-first", "mail_host": "example.com", "moderator_password": null, "next_digest_number": 1, "no_reply_address": "noreply@example.com", "owner_address": "confirm-first-owner@example.com", "post_id": 1, "posting_address": "confirm-first@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": "confirm-first-request@example.com", "send_welcome_message": true, "subject_prefix": "[Confirm-first] ", "subscription_policy": "confirm", "volume": 1}'} headers: content-length: ['1897'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscription_policy=moderate' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/config response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first.example.com response: body: {string: !!python/unicode '{"display_name": "Confirm-first", "fqdn_listname": "confirm-first@example.com", "http_etag": "\"c45f8c0a7609b62ca5c7cfda30c2e3d39f11cca6\"", "list_id": "confirm-first.example.com", "list_name": "confirm-first", "mail_host": "example.com", "member_count": 0, "self_link": "http://localhost:9001/3.1/lists/confirm-first.example.com", "volume": 1}'} headers: content-length: ['344'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/config response: body: {string: !!python/unicode '{"acceptable_aliases": [], "admin_immed_notify": true, "admin_notify_mchanges": false, "administrivia": true, "advertised": true, "allow_list_posts": true, "anonymous_list": false, "archive_policy": "public", "autorespond_owner": "none", "autorespond_postings": "none", "autorespond_requests": "none", "autoresponse_grace_period": "90d", "autoresponse_owner_text": "", "autoresponse_postings_text": "", "autoresponse_request_text": "", "bounces_address": "confirm-first-bounces@example.com", "collapse_alternatives": true, "convert_html_to_plaintext": false, "created_at": "2005-08-01T07:49:23", "default_member_action": "defer", "default_nonmember_action": "hold", "description": "", "digest_last_sent_at": null, "digest_send_periodic": true, "digest_size_threshold": 30.0, "digest_volume_frequency": "monthly", "digests_enabled": true, "display_name": "Confirm-first", "dmarc_mitigate_action": "no_mitigation", "dmarc_mitigate_unconditionally": false, "dmarc_moderation_notice": "", "dmarc_wrapped_message_text": "", "filter_content": false, "first_strip_reply_to": false, "fqdn_listname": "confirm-first@example.com", "http_etag": "\"497dd87a429913344143941fcabbc597591b647e\"", "include_rfc2369_headers": true, "info": "", "join_address": "confirm-first-join@example.com", "last_post_at": null, "leave_address": "confirm-first-leave@example.com", "list_name": "confirm-first", "mail_host": "example.com", "moderator_password": null, "next_digest_number": 1, "no_reply_address": "noreply@example.com", "owner_address": "confirm-first-owner@example.com", "post_id": 1, "posting_address": "confirm-first@example.com", "posting_pipeline": "default-posting-pipeline", "reply_goes_to_list": "no_munging", "reply_to_address": "", "request_address": "confirm-first-request@example.com", "send_welcome_message": true, "subject_prefix": "[Confirm-first] ", "subscription_policy": "moderate", "volume": 1}'} headers: content-length: ['1898'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=groucho%40example.com&pre_confirmed=True&pre_verified=True&display_name=None&list_id=confirm-first.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"http_etag": "\"16703b46c6b82226a19d9a1c36ec4d52993bb351\"", "token": "0000000000000000000000000000000000000649", "token_owner": "moderator"}'} headers: content-length: ['142'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:23 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 202, message: Accepted} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "groucho@example.com", "http_etag": "\"d4d20c4396b45dc7e0f7a5a4a143922c78cd8287\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000649", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"8cbfa9bc57e8d6b435c717ddffedefd0bbceca7c\"", "start": 0, "total_size": 1}'} headers: content-length: ['398'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "groucho@example.com", "http_etag": "\"d4d20c4396b45dc7e0f7a5a4a143922c78cd8287\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000649", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"8cbfa9bc57e8d6b435c717ddffedefd0bbceca7c\"", "start": 0, "total_size": 1}'} headers: content-length: ['398'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'subscriber=harpo%40example.com&pre_confirmed=True&pre_verified=True&display_name=None&list_id=confirm-first.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"http_etag": "\"bc8475dbe8435011af6350dd6f3dd632232bc24d\"", "token": "0000000000000000000000000000000000000650", "token_owner": "moderator"}'} headers: content-length: ['142'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 202, message: Accepted} - request: body: !!python/unicode 'subscriber=zeppo%40example.com&pre_confirmed=True&pre_verified=True&display_name=None&list_id=confirm-first.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/members response: body: {string: !!python/unicode '{"http_etag": "\"bdbb340c8f10c044355159209e2172834cc1f237\"", "token": "0000000000000000000000000000000000000651", "token_owner": "moderator"}'} headers: content-length: ['142'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 202, message: Accepted} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "groucho@example.com", "http_etag": "\"d4d20c4396b45dc7e0f7a5a4a143922c78cd8287\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000649", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}, {"display_name": "None", "email": "harpo@example.com", "http_etag": "\"588cf8fd7dbe9cd7df26156ca5b5377e3fa66998\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000650", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}, {"display_name": "None", "email": "zeppo@example.com", "http_etag": "\"d54db4427ac4e5886eb4bcaf1693940a58dfd76c\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000651", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"9228b740e212ce4e29e0c52ec654dd6a4027009e\"", "start": 0, "total_size": 3}'} headers: content-length: ['984'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=accept' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/confirm-first.example.com/requests/0000000000000000000000000000000000000649 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "harpo@example.com", "http_etag": "\"588cf8fd7dbe9cd7df26156ca5b5377e3fa66998\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000650", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}, {"display_name": "None", "email": "zeppo@example.com", "http_etag": "\"d54db4427ac4e5886eb4bcaf1693940a58dfd76c\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000651", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"9510abf3887fe68b3f5b72441552dfd6b35ba809\"", "start": 0, "total_size": 2}'} headers: content-length: ['689'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "harpo@example.com", "http_etag": "\"588cf8fd7dbe9cd7df26156ca5b5377e3fa66998\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000650", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}, {"display_name": "None", "email": "zeppo@example.com", "http_etag": "\"d54db4427ac4e5886eb4bcaf1693940a58dfd76c\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000651", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"9510abf3887fe68b3f5b72441552dfd6b35ba809\"", "start": 0, "total_size": 2}'} headers: content-length: ['689'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "harpo@example.com", "http_etag": "\"588cf8fd7dbe9cd7df26156ca5b5377e3fa66998\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000650", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}, {"display_name": "None", "email": "zeppo@example.com", "http_etag": "\"d54db4427ac4e5886eb4bcaf1693940a58dfd76c\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000651", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"9510abf3887fe68b3f5b72441552dfd6b35ba809\"", "start": 0, "total_size": 2}'} headers: content-length: ['689'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=reject' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/confirm-first.example.com/requests/0000000000000000000000000000000000000650 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"entries": [{"display_name": "None", "email": "zeppo@example.com", "http_etag": "\"d54db4427ac4e5886eb4bcaf1693940a58dfd76c\"", "list_id": "confirm-first.example.com", "token": "0000000000000000000000000000000000000651", "token_owner": "moderator", "type": "subscription", "when": "2005-08-01T07:49:23"}], "http_etag": "\"67d6626e8675d0e5dbf751bbc82bdda9563f4d23\"", "start": 0, "total_size": 1}'} headers: content-length: ['396'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:28 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=discard' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/confirm-first.example.com/requests/0000000000000000000000000000000000000651 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/confirm-first@example.com/requests response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues response: body: {string: !!python/unicode '{"entries": [{"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/archive", "files": [], "http_etag": "\"8509f9f7575e2b39f10303d70170b83d942cf2ee\"", "name": "archive", "self_link": "http://localhost:9001/3.1/queues/archive"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/bad", "files": [], "http_etag": "\"1bc1bf804dd5db6b552b4ab330c8bef429747430\"", "name": "bad", "self_link": "http://localhost:9001/3.1/queues/bad"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/bounces", "files": [], "http_etag": "\"530a1fe0c2a0a4fafb9b0b1c274ff9876c531a8a\"", "name": "bounces", "self_link": "http://localhost:9001/3.1/queues/bounces"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/command", "files": [], "http_etag": "\"acad9d2bc30494e9d31d1d7f63b92602ab62bd36\"", "name": "command", "self_link": "http://localhost:9001/3.1/queues/command"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/digest", "files": [], "http_etag": "\"f195b92715d20d178e35136b16c849d52e7d2908\"", "name": "digest", "self_link": "http://localhost:9001/3.1/queues/digest"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": [], "http_etag": "\"8a3a2468b5f526624f1893b85fe30a1a9d10179c\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/nntp", "files": [], "http_etag": "\"9f2221ff691dc85b9778ed39d27c4829c11a01b2\"", "name": "nntp", "self_link": "http://localhost:9001/3.1/queues/nntp"}, {"count": 3, "directory": "/home/maxking/Documents/mm3/core/var/queue/out", "files": ["1497761008.9138193+fd8b401544b079e9cf518940e8ee4ff08c4c1921", "1497761008.923455+0289c12d0567398735a8c92f9ed0cca8ea18cbba", "1497761008.9335907+61aa5136439831b7ff07e8c4918a3a3cc6c586fe"], "http_etag": "\"013aac8dc4f61551883f806f6c316fa723c370c7\"", "name": "out", "self_link": "http://localhost:9001/3.1/queues/out"}, {"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/pipeline", "files": [], "http_etag": "\"6275cf40af81c3f8610de0bf74e52db6452871dc\"", "name": "pipeline", "self_link": "http://localhost:9001/3.1/queues/pipeline"}, {"count": 8, "directory": "/home/maxking/Documents/mm3/core/var/queue/retry", "files": ["1497761000.5213077+fdad52119bb11d37af83feb59c6cecee6df46a47", "1497761000.5315669+286bb7e1cc5bbb8e534b1175df40a3895715b5ca", "1497761000.5417008+d5af797b772955fb6296b31ebadecfc206656cbc", "1497761000.551105+b5db3d4815fbdede6fdacc34918b8a65ae72916a", "1497761000.5610843+974c4d8d682998c5b7c52234a75e1e7b1bc9f15e", "1497761000.571449+906cc2c254bffd81c91fd8590318124c68c7039e", "1497761004.5943239+c691b6a34893582d51d88dca70f104556f3a2c75", "1497761004.6104813+ad73f9b1b2357662ec441afeddfa7360d9e4ba76"], "http_etag": "\"84f03ac4a06199819dc010feda0cc1f8712e7d2a\"", "name": "retry", "self_link": "http://localhost:9001/3.1/queues/retry"}, {"count": 1584, "directory": "/home/maxking/Documents/mm3/core/var/queue/shunt", "files": ["1495480791.5727017+a944c9d883c225b2ed235a011fb8b33b32666d53", "1495480791.5854533+9e9c427e2895126db02c4fc65eb077d88b22a6f6", "1495480791.598509+38e7565df2987dfb74b2a0be31a53d98ce75a21e", "1495480791.6116967+fd7540b6c4960aa25f3aaf125c80925c6d764b07", "1495480791.624832+5806d9188e79476564c46a9a79b70a4011283943", "1495480791.6376092+eb5caaf8adebd666003e1d780e4303bd568b1286", "1495480791.6515718+9b7ef1a754e35eaf238bcbda9dcf593b2e1089f3", "1495480791.6637232+9af1a98c356da86430e5eb28eb6295f17a1f15f5", "1495480791.678168+7174b5ab49595012da301f1452d6cce59d8b14e6", "1495480791.6901982+7526909813001ff9af689209218790fb20a67c0c", "1495480791.708966+86402fc47ad91507b8aa567b43f9d15240697a30", "1495480791.727804+db2cfcae7102d56396c38a59f3c213c4fd52d07a", "1495480791.7409475+af6635d13913bb8c840f286b634f8b4c88cec4f3", "1495480791.7542264+14f352b9d9198704b8becc50e6a94216aa830817", "1495480945.393748+8634d01325b8e33482a981ab38372a85ed71cc21", "1495480945.4068422+f82f223402e60ad6aca70f3f5dd6e420b956e89b", "1495480945.4200387+0eb779079e5205ab77e654b321c219958f7aa52a", "1495480945.4313538+de0c7d722fd386ba5d41d161e1d2dc55ae3ef549", "1495480945.4428613+d65ad4cf7c2f3d47d9c5506615681598710b50b2", "1495480945.4555597+804fe80f47635410bc239726a8e610ba708b2e6c", "1495480945.4688709+6e0c30a5f7f713a0d6ef909139ada2a51c51e25c", "1495480945.4801698+716a3072ec4aa18b2aca70cbad48ecc192156996", "1495480945.492385+da20423a4203333ab9e41f417fbe4a7e2a7516c3", "1495480945.503693+0dcbcfedc76e81abfa5caf2fe25083c5072c041f", "1495480945.5151846+cd50c55efb1a2f1854bdcda3da2736533ce2981c", "1495480945.5270321+267f89c028383e675232c8b9a8e9926e6139e0af", "1495480945.5387208+2d10be1bd70dc847f18304697e357b8cf551b305", "1495480945.550177+90d3622483f4b48abcb4a27b4c8e7e474d3fdf8f", "1495481937.792101+ba9c2d3131c3f3f33b688fabdff4a11e463b963c", "1495481937.8038895+2cb27be8a9a7860496615a11e51969f5cf0f7033", "1495481937.8183813+2478478440292c7f26f604417bd5548a6f98a01b", "1495481937.8303344+5a340c5de5ad8ef510716bdc3368634ef78840aa", "1495481937.842179+a622be4492bbc55715ac38cebb723672f8e01323", "1495481937.853717+e9e86d339aca315019e69b97b8534aa36086320b", "1495481937.8655236+aa02c7ce2390667f5e8d609c600feadef3afd7b3", "1495481937.883323+02595df8709ac768f7685fa22e8be86dc94a97a9", "1495481937.9052248+ebfec01b0759a857d582e914f40297821dd14d0e", "1495481937.918258+0ef4c2e1f3420ef264346e3ec85b5d6debc6b46c", "1495481937.9309113+9093ccd4d6d8877fd3aac58e9cdfa141845c6e7c", "1495481937.9431102+8c84dc84e1b49c15a3040abba66b2448e794276c", "1495481937.9551723+0c3479af20c4d0fb67996935467a4b427ff2d5a7", "1495481937.9666467+be2808f75130e36ceb5d280a27f62120bc7d2329", "1495485652.0594335+b71048c4239c174e4154b76448c219a16e1a39c7", "1495485652.0730445+2c223bcdb6a8e9144ec5adda4d0dcdaa55f26da9", "1495485652.0865064+578c7f2c36c504a7e3a51a762ee0f0cba4c8f0bb", "1495485652.1013+0077622a4662fc2ee71c5d7a73219816ccc9f481", "1495485652.1128547+ae71ce5ed50a00017d3189c41a2caa74df29a66a", "1495485652.1249332+4812cf12bb355e51188a9567857efb72a5c398c6", "1495485652.1395776+5eacd8ad7ac0a5834ee00b2d8350b321f90ffda8", "1495485652.1530125+6eb9eed6729c3149a4db8abebfbf4b1f3d064e97", "1495485652.1728072+ca432ea4ad60b93dec4c54192020156076bf0330", "1495485652.1911995+58af4ad20f881501ea68eb8c90e5299532c3c904", "1495485652.2405827+7421e995a06ca37aafd4ededa06387ae7daa15ae", "1495485652.2531264+b0da95adc651c347e575fd8c10fc123fb7534ac4", "1495485652.2652106+0a311324edbb4665ea0452fa6489b9656abb9f11", "1495485652.280184+ef05af7f6ef11978859948d741a3bfe87a39475f", "1495486123.9388878+db2502abb4501f97baede88b8ded8d509c20222a", "1495486123.958237+6031e1b5dfc3f5c88b0dd8f0fbd8a15f7eec7eac", "1495486123.97841+e315a13f92d4b76926ffe2da1803e60a87d16f32", "1495486123.9951215+a6e33cb48e684e0350ad17b8a8b3fe7316b55ded", "1495486124.0119328+52a63d954811a4282d39831503a4a379436eb45b", "1495486124.0283685+ecd78d8af51c7cd23a268784ada7ebf97bb54bf0", "1495486124.044973+b46714ba60fc700261be786112ec124726bbac00", "1495486124.060903+adab95080aa39708d63f5bd949bbf40483e99674", "1495486124.0781732+2b868a5ae5e7996724a6a7ebaa447bd5ade4ca41", "1495486124.0937157+783f827ee05678fa0170fad365da70a4106ca3f9", "1495486124.1095634+1bea1ac27a37be7bfec78ed2f0ce89e6af23c0e4", "1495486124.121828+34eda166f56344a8bd27c13db3435c7a6bb12ec3", "1495486124.1336398+9550989cda81c639177dd9199086accbbd642476", "1495486124.1457965+4f004f2f2be281d04c3ccc53ae387acac5156bba", "1495486236.1431885+47ab53a8aad58299d6275adf107296b53a852af6", "1495486236.1568933+7900152bd5cb29f66e282fc9cd3d1a7bbb347e76", "1495486236.1686575+c543f1534693529c05cba35433d44ed508c6cf7f", "1495486236.1802497+e68fedcaace6c6ac7780ed5a97c9fc3fc29ed3df", "1495486236.1922228+8ee543d8278bf350127ef6676aa77761b39da20c", "1495486236.2040224+5c04d82d7409e555b7f559a53b35281d6297c0f3", "1495486236.2155025+881c4ce6c081ff0303d1d14ac407358923c91f60", "1495486236.2272475+af3b75edab1d07690a2b99fd8d135a34b5f1017b", "1495486236.2397182+c3e041f5ae4436a7630e6bb6cb4161f0b63949ee", "1495486236.2510571+05a3894a6f63c5b72affeccc847b8dd091c73dd6", "1495486236.263168+102718f64baec74ca84b38c058e4d801fc7d5748", "1495486236.2750776+43a84960271c654d636a732f7f77a304ce5a0815", "1495486236.2866135+1594953e030b34f36c83d25d200edc50deba7b7b", "1495486236.3022742+48b8f3ca0cdb003c60327edb6d665ac4a12d6ea4", "1495486316.0485148+b2c16b7c80d7ca8191c691f4481aec7142289ab1", "1495486316.0619535+b6f3412af0e23e0c1927e48f2434076c735734d9", "1495486316.07512+468adecc94ea2868e475f1b1cad393d29a92fac9", "1495486316.088575+7e8d4ecf1e3cbaa1437abcf0d137d4454e9bbcc9", "1495486316.1006324+908997f56e955b4a6ee06232804376570609ab93", "1495486316.1127627+ee4e5b32925c6759c14c0068c1ab6348e5b4d0f3", "1495486316.1259274+40ec27b6a40819c69e471f57beb66ba78587f204", "1495486316.138245+f1d5744c3b67cd63134bdbac9ae7033fb42523a2", "1495486316.1545515+ca64509edc11e213ce6b21b8619dfebd301ec28c", "1495486316.1665475+56249582f2ab22f62369c35c9cb453e60599fa8e", "1495486316.183079+ac4d5bca64ce275644a17ae51dcc35cd97a889e4", "1495486316.1957588+72dc5b64e475a4773735bfd09c1d43c9fd879e47", "1495486316.20818+24017f72efaa08d61992f63171f52d1d05cebf56", "1495486316.225883+e5192e7f69e3c99f1e2035eb1b33520963054767", "1495486620.3750777+f1790e7851e7aaa05dfd98d7533b9ef721c771d4", "1495486620.40625+f477fb2387af380a80c0d23ed3552a5c817fc903", "1495486620.4335892+ce393edf2bccc233ead46c00b7a3844e7d4ab0f7", "1495486620.4489427+c85924ae4313d998dbe3fd172d01f838b6b63777", "1495486620.4645107+306197accf976d4c37883e205517088e4aaf6b00", "1495486620.493153+630754557cbe753cb448baea176b1088052fc955", "1495486620.5216556+1cb79de3dfdd192392348d2b234deed644abb1a3", "1495486620.5415878+ab3f53beb3fbee2caf775e2589c861fdce87558c", "1495486620.5783916+d329cd54bb4b6bbc33da1385ee2594dc3417c18c", "1495486620.5945518+a134987d185f0467efb59b88165493ac5c6c2c2f", "1495486620.6181822+b253278267110ba8f8555dad62e3c80946458d0e", "1495486620.6482663+6c263751458fda31a507fc4177a93eb64de2b0d2", "1495486620.6654096+799ccb9855d2fe73ff95993c6513f77e4ef068f5", "1495486620.6815853+5a08c7937680b945b3bd670df684ff3a42d72e92", "1495486802.6115792+36c7c901dba65ffa492a53e936bc36fe5da8c2ab", "1495486802.6288702+5b3733fd422a8cb1028641a216ec5e8c402b0c71", "1495486802.6445975+4b2b261087f3d99fca866d03784f9624caecfbce", "1495486802.6601114+92187cdb2f6eb2a6b1ac5f25e7e963492fcde4cd", "1495486802.6760786+1f2b91e13907d586ccac32264dbf35880c78a5f5", "1495486802.6926098+c1b4b1087f0db9de1fe907a8e5b462533374b69e", "1495486802.7088778+88e25df7dbf469b08f811c8c35dd82c8bb8931af", "1495486802.7238557+9c3410575c55d58d77af9d63d58c4c34fed7bc53", "1495486802.736623+5392962625f31d5535638ef13eb32ee043e3498c", "1495486802.7483335+cf02921520ca9c0d496305e0090828930cb00152", "1495486802.7606027+513f7979351b9e0aedaad9f80653a3576b28b366", "1495486802.7729945+940590aaf619d90ff48077f7fdcb8fe816018efd", "1495486802.7849562+7a3cd9feccb87afb2d85c79c3dc621b1963de1b1", "1495486802.797994+56119f3afdb8a90a9593fde2275e0f049e4c686d", "1495487027.1124887+0774aec6177f1e84ec1dec057244b2cd4d1e83e3", "1495487027.1262743+94d236777cb41e490d0a704640fa1ba0f4b45b3d", "1495487027.1396518+65b3d06b867ea593b3acb7f19ee97f88b40bf516", "1495487027.1513972+3042ee1d360ced20804ddd63b6d5b10627fa634e", "1495487027.1632843+60121c1ff46518caa2e78be1604f49eca3a89a02", "1495487027.179972+3c0b006b72632a5bd0165d18772bf640df6a1eaa", "1495487027.1923554+4f7aa69b04a840cd362039af928785a35f009098", "1495487027.204674+21ae0a2f2c3236b977ea0f7d2805a6e348bb5909", "1495487027.218303+88d4b4dc4e3776db199b12eac8c38fbd0ae358ab", "1495487027.2300613+63ccc13bbdbcc827a3ed1255543ea06618318f1f", "1495487027.241684+bdabc315bec0e7415a2d755ee1ffbe1fe22db24b", "1495487027.2537453+854f202b611538e882860607fd233c075189347c", "1495487027.2658882+45c49d64f3355f618c85a200cc50c04ca2c5007a", "1495487027.2822182+5b2745fe5002cea8dc56e45eba3a230886ba805e", "1495487315.8339665+36836d92447ef4b8f2fabf5a190c6f3095b8b487", "1495487315.8502042+220c4488385612105046df473ab9058932c44419", "1495487315.8664963+77512643472eae66934f1082feee4819ece8f42f", "1495487315.8817375+be3c4874e26a0ab6aad480cd08c8d1128af8369c", "1495487315.8974714+e393ce64ec79baa2268cb67cd33235d4a8288bc6", "1495487315.91369+7c0be901ed8452337034d434c31d88ad640a4213", "1495487315.9297454+dfa411356b13a44901b57f393c7bd66e85e5c1a5", "1495487315.95506+c0bdd8bac3d52e6c2c534264fdf7f2eaf77845a0", "1495487315.9780009+eab2e31b0bf4ac6f6c9b86fc844f411ebe037de9", "1495487315.994494+2c3cbaf1039938cc923bca056f7e082f9bfea3f5", "1495487316.0113873+9e4b5596423e529ee453375acf792e426b5ebe00", "1495487316.0246809+784cdd644b618e7bc7a236da4c597fd1f7f102c8", "1495487316.0374067+3b72abd3c2684539e5442c088d8b31ed5e2ba1fb", "1495487316.0544848+c696cb716d8fbd77fb01bd80299255938f0560e3", "1495488216.175593+821453d0069a068c4b117593351fd6891c2900b0", "1495488216.1872995+240fca0392f4df6c42402009c71cb24d40f32213", "1495488216.201138+11459badac4964a38b558309beefc3b645cea4a7", "1495488216.2163332+b1c156043b04e00a04e5a8881c47892476efa3e8", "1495488216.2325242+335b52376f850cc3af5b6e99f3531eb9461ceab5", "1495488216.2462926+ee4bafc5b74baab0d8572982f9d46b1fa418d7b4", "1495488216.260895+21f600e24d4ceb3851d38931457413a9efddf8aa", "1495488216.2776895+80100e0f86fb724d1d0498995807b4ce0b94a72c", "1495488216.2918122+9371207cec22290f1acb40fdf90b1f6cf9052145", "1495488216.304416+0df003c8c959b58a2add230c6cbc649c10319eaf", "1495488216.3171499+30b9bdcec606a61f62cb9be0c7d0061c70d039a3", "1495488216.3321464+b3edf968f2e8afc1368248eb560a1c97476fcda1", "1495488216.348412+cff43df518d928d6040b126a9bd29a670dd31923", "1495488216.361311+2df214c01c15a814529dd5d3b41242a4cbc453e4", "1495490839.6462018+826660d24a51cbfd2f12fb1424e541a626a4d791", "1495490839.6934237+b77afbada8312b642a2c865214371b8be691a559", "1495490839.7075317+bee0371233434d98b29f995aeda918ddf66b3da5", "1495490839.7240117+f6de31d0a7eb15dc0dea23b1accd613d6abe5387", "1495490839.7367988+a408d75aff150e48dc03637c583afb2d0722aae3", "1495490839.7492795+8630531035ae00722f2af1f412409b1d7d341f12", "1495490839.780438+15f5abba7ce234d39e9df590269201f441c1bd74", "1495490839.7935019+e59e4f185a522fda2d50383322dcf2aceab4d951", "1495490839.8068166+8fed6b929a33800829d8f337ab6faf6cc28cd08a", "1495490839.818826+22ff3dc08817c8df2e384d646efc5030be93c2c6", "1495490839.864649+9924a5ba3095a91431e4b41d850d852287e59f59", "1495490839.8774078+6d1390004cf9a31602cc6ce886988f7c5ac51a1e", "1495491739.9660013+fcc692c2fb575e10799613fc3736903e7c1b22ee", "1495491739.9806767+845308c4047a41a7a94b40a6b49bad98555fcbad", "1495491739.992233+c78be864f2bbf21e1385bbe7613f633999e8210c", "1495491740.0043252+57203b0614302be0ad2268ffaf27455407f5063f", "1495491740.0178015+60ed2521ef75d371b989a77f664c8f01894079ed", "1495491740.0314887+5c3cd0c6e37b991e3326df4751ae2bd4bf13382c", "1495491740.0451124+6dbe68cc66bcd5356defbddb9af57c2c21e3f704", "1495491740.0579813+543f78f39025d21e761e324c2727fd8dd0d55824", "1495491740.0721278+2fb229247ce9979221b42fe3fe5828bafe4aec86", "1495491740.0844793+e185e488c9c40dbcf9ece7914d514c0c31494a57", "1495491740.0980632+e75245b88e86914c44b876dc97607bb9249b318c", "1495491740.112222+90411c4798f8f6ab489aa2cdda708581aa5e2ef2", "1495491740.128213+ea9c0a9e82a91ba36763992bc1cc40e05f95a5c8", "1495491740.1404326+2dc7621b8edfd224693e2dac9e978e9f963735c9", "1495491740.152783+3e1381b56e0633dc75552d4c6a680f62abd79e8c", "1495491740.1656792+5f5825824e0788d6d79091fb216ef254f9a67365", "1495491740.1778731+e832323b7fbb2ed0d64019a43b346eb391dbf0fc", "1495491740.1892343+ab9b144b749a9fdefad7978de1863a08ba124239", "1495491740.200704+1e49bb33a11372b3cb4b4dbedc0bbcd8ae608e88", "1495491740.2121944+c466004b0dab8244be6532e7f0192b70428656af", "1495491740.2238789+66e17afc8b4084e877fcfd9ecc67576fe21f4dea", "1495491740.2403495+d7ed2c2181ae6fc6bc0b4de2519974e9662ab326", "1495491740.252244+4e955c09c010da1dac9c77ecc24d47db6290cce8", "1495491740.264221+4dddf5cfd2b537f9b95dae60e9cf24187867df27", "1495491740.2764854+564697735b7c6c04043d5c737c1b2d3a01c40e3d", "1495491740.2883565+9917d009e0c88a3b6b72024da05fca40596ff70f", "1495491740.3001187+a17a3c918d7b169e4a6b70fe8648c56454b589fa", "1495491740.3118362+86281e3f32aae3f4b8067abd83f7be5f30ded5ba", "1495491740.3243237+401679c2c6331f8a08074cb07ee15834f76a7e3f", "1495491740.3360305+9e4b6a7d34238ef0c395264906562007f45fed26", "1495492640.395396+db99e7c3e23c94533d85c774cbb0c747a0fc7a74", "1495492640.4111037+257024b3772eec5111f75e79cedf9548796b3f4c", "1495492640.423362+6748e8769fe73822bfa45897bb329fb7323a0ba1", "1495492640.4353917+2e1213cb4a8e2bc6cee9bc54f576c8437b3cd00f", "1495492640.4478238+ff9dc37f3f9ceb14c3fe97358fcb94297e4bdbd7", "1495492640.4595451+fdfa5f11a06334cba6551630c3ab43b9612411a0", "1495492640.471111+2e9b3f942cb55974ebcc472131d39976deadba40", "1495492640.4828124+731f63acdd65eef2a6cc6e825d1d1c12996227ee", "1495492640.500543+4b9f9f9887c57584eecaceb7b30dfe65c3ed8a01", "1495492640.512862+72b551c2ce3338b16f4b75a778bf12c1430956bb", "1495492640.5252914+dde6eb41a61653c1da6382cb548e5e48a9666c8a", "1495492640.5373297+a86ee4f940b70ebc9fdf5ecd12a4897f93ff9776", "1495492640.5508513+6dfd0b82573f09b4ebe5559b504583e8eba015e6", "1495492640.5670142+1cb2bd758f9576bf358bf4029f3972d866c933cf", "1495493374.197179+ed538032e7e6d25a58f5ea10f18942ea8aed4ca7", "1495493374.2321641+f4deb5a2793360f7e08e38d286808078a2875da8", "1495493540.6863375+3d0d54a6fe0bd67d941259a57c9439fd4be3c4a1", "1495493540.7041817+9734e0809c9006225eb9e87bab1b5a940c1493d5", "1495493540.7161705+759ed43c1ac23ad33ff286160b7013d649af257e", "1495493540.7279613+9d69c522616091a17fdad4c552188e68e2d083c5", "1495493540.7408705+2522719241f79bff643e6d4406b169fb322f80e3", "1495493540.7585444+667e45fbae0ca76bde0f7b7dd90e0e005905063b", "1495493540.7707164+bd3b35c86a0eeee25f75c348392885f68ea8dd9f", "1495493540.7830884+ac87c288253308e14dfe6f6f20be70b32652bec5", "1495493540.796128+4822bbc696b7098100759073e823b4fb88c1ff24", "1495493540.8096993+8a0e8a4dbac61486e5e20169be53e2e942c00e02", "1495493540.8244748+7c888404d7b83ec9899040d87a9081f2e39599ed", "1495493540.8389726+8ba40edca4fa631c2e66957e84cee95d4ac92c62", "1495493540.851766+828b399f8314c5bbc5df36dc71792ec765a4b1c2", "1495493540.8637283+3f6cb972a8305870ec706ed8e608873be0932ff1", "1495493540.880696+1eafffca6b2548db941c6673f0d6c45db0693d1a", "1495493540.8931916+84bd9d00d70c5d675b8f1ec0772ac68bd0a4b270", "1495493540.9050226+17f5b9de4b269348b3fc25fc701199b7afcdd3ed", "1495493540.9177976+3ee857d113f09fa1e4b44a158ad679caa0f51b0b", "1495493540.931668+8ea420789f42f1c0f572fdf9835636cad5dc76d8", "1495493540.9460213+1b716f0bba65523666ebb7064742e1fe3663580a", "1495493540.958436+a1871a4552f285e21c7630abe5d5bce328d38fad", "1495493540.9702463+d29678ab926600e50e9ce2bf9d8efae55096c579", "1495493540.9821694+17481a9728079b1f093eb6f6453426d9ddf30cd2", "1495493540.9942162+cbeb53dd2942ade96eab28418dde36f407de81a3", "1495493541.0058458+9e463044ce1b668795ab63b1db8cdd601a3fbbca", "1495493541.022699+c83b8760a0a75acd0ec0cae8ee837906a7513f13", "1495493541.0372028+422d3f52b6ac7f090b3be585332979cd2a59750e", "1495493541.0496893+9fb1811fe131f6cd8b808e6696f5774f6d0e80f2", "1495493541.0616403+d083a919d7daba659cfc1042251d6a1038ebaae0", "1495493541.0737422+0e96fb5a7c205e7cc582a89040677a3e3403b9f6", "1495493541.0851183+107c828fffa01dd52628f8e5c2a83375e3c2ed5b", "1495493541.0966094+87e1e08a95749c0ac1e17ad083eeb2b4c9bf01ba", "1495493541.1084704+a66e688d50244de6ea4a3017dfa9445a4f025881", "1495493541.1198967+b52c488df016fc01831fb0f1d111c55ea01f9c6a", "1495493541.1310797+de46f9dc2c1fd8d09d0273e0e61f43327544ae2c", "1495493541.1430466+80b61eaf5dca6f03fc078b228b83fa753e40f73d", "1495493541.1560605+a8d4e98f114b9499851974efe7a2edd16ba52b82", "1495493541.167627+6b23be159e9a8e06a72391a4e931ea27ac37183c", "1495493541.185359+1917d923eee3b4467c4e0735db5c57fd6342d4d8", "1495493541.2008245+702376aaf9b6d4a9ec43b411cf59d55e1cfd2172", "1495494441.3016326+3c671df416f8f5e37f8f392ebf08f5e385648d9b", "1495494441.3179414+cf0d3401cc3f36be3d319d3e25a3270fea70bdd5", "1495494441.3336833+08de52ea47935fc462f0124eeec01947e69fe63a", "1495494441.3482568+178398c974b8cc3c9f57cbd22ff86dd1af43b281", "1495494441.3608792+bea82e4835f6ad2940d25a5e071bb3a9bc02485f", "1495494441.3768203+e358686b5452ff813728d70832aab16a5c7df807", "1495494441.3921056+9d29678a08ae5e4e91baca16cb7b37cd35d7b6b2", "1495494441.4038162+b7ad2d3b87df465b7f7d63a63b8d742c2a648cf7", "1495494441.415611+27765663960983197105477f46a8e3664414cbf3", "1495494441.4275382+e5599eb4dd2d0eb60ade748adeac922a56225f2b", "1495494441.4394724+796fe796857be95a2eef2134db6b5817e23baedf", "1495494441.4510438+90b8e51e09ada66b82b18a0d6bf5bb0a4d83d619", "1495494441.4624653+6166c27bae9a00b8db5ddfde7757b8bfd880b4f5", "1495494441.4740927+3673c33f0e65a14ff09227d8a0d3ea2a7285d036", "1495494441.4877074+0e30e5c335ebe2373c6637ec1c93b0bed89a0bb6", "1495494441.4996185+5894453fad49fc2b48f5f9a26b1bf6e6aa4c4940", "1495494441.5114872+55021c6958dc87fdfad3c6f9cceb6efcb6cb7a37", "1495494441.5233693+76e01e418213e519aebe4bf6feb4623088b82ca6", "1495494441.5348217+4140b066fce0ee4ae20676fe61d7d4618d379969", "1495494441.546488+b236fea67b8619f7f60845a43ff4718ac45aff73", "1495494441.5586286+f00fef6e903df6c8979468deca1cbe7de6d5ff82", "1495494441.5708456+1519c266fa0c0b45d48e10426b8c27d669d69f22", "1495494441.5824635+1dd6271924f9fddcedbecc00be8e3a5ac9fd9064", "1495494441.5949845+02442671288e413ed970e72a9bf97b228d4d0de0", "1495494441.6112607+70779e671e02e9cc720c3594c29c745833c2b5b3", "1495494441.6238103+59f96ac63bf78d48685dce691900ab48c9c16857", "1495494441.6369708+cf3fdd77ad59b1ade20268f31498e0968c16c422", "1495494441.6506503+d9e52462ce8d5375735cd65d6b2053c6849abdb7", "1495674855.6924467+47a5da6ae4e8672d1333e6d0375cb3127cd08418", "1495674855.706259+ef5f994b1b150ce5861df9c4e925f8137e3d24c5", "1495674855.7181268+8194c8af0d7f26c8a65e167cec51dc628988f885", "1495674855.7300086+1b7761406a7f08d9551c7db46fe1d6be342b5753", "1495674855.7416792+7b11b770f659010703557f9675a0c48ae17f5592", "1495674855.761497+44ec736a28646e9bc67b50f1f69bf40e6e9e8158", "1495674855.7743413+8ac4a5a3179bb32145806dc3f2b036b357f8cee7", "1495674855.7880719+383fde39ce498ad08169e5dc232160966cf48ffb", "1495674855.801543+22ced0dbd09c0f2220f0b5aa8d74f652f3532e1d", "1495674855.813205+61ca092a808618a23b758f5a3fe4553887b6162d", "1495674855.8319342+fd8c24eee59452965bbc7c46cc5d20e13755bb87", "1495674855.84904+cc36d104be3ea138339e6dbaa42a112243673994", "1495674855.8612394+7c0c2f1a06563dbfe2d26ba4597a7ed9f6008444", "1495674855.875077+5493700d920f7a500b833f39fb780d13e8cae0da", "1495674855.8872297+4dab589467e60b4ea8631398716977b802360f78", "1495674855.8989966+810f5fec325e45f6a7df1839293255151a8e7432", "1495674855.9107466+131fa440c6c1d6e6242d44c6fd953e1d47c1e039", "1495674855.9228134+0a2f1a15e4ebbde42b03bf012d394476f543b052", "1495674855.934459+ec1cb8255979e89242f673b6cb5cb4e461012483", "1495674855.9458468+2995b0a0d575e29601881231d558330a0b8af11f", "1495674855.9578073+4bd034898801ff8f3d756673e2d5bf8e95fbcdc7", "1495674855.969457+ded7434682cc3f1b9e2f851028c9b5bce40cff6c", "1495674855.9809191+d3933085904b1bbed6461972ed2e51b3264348bd", "1495674855.9934423+fd631ebc5d2266807698529f13761fbc228f7182", "1495674856.005399+a52432b86e00bed81ec2563700720807274795e0", "1495674856.0183516+d1259a0d81b58deba78197eafee1e8274c44d578", "1495674856.0327857+db13cf2fecd8aa3ee106ccd0c8de74a33ebacbfa", "1495674856.047231+4992fea27ae2436ef015809d5829d4ab9ab1f8fd", "1495674856.0617504+60a73e943a3c6e592d0992556dfbe6a26d96db85", "1495674856.0732896+ba1b7bb37a2be1ecd8d17badc870fe45d3255d3e", "1495674856.0849028+ae485eaa9fe2d7c49006f16b7f63ae94df5bc9d9", "1495674856.0964782+fe7a82383c785901dd167b5b7433644ac24c93ba", "1495674856.108105+698fa1b6e16f0a6a94263dc6d5fe54d9875da0f6", "1495674856.1209896+1627d2b3253546166548b8afd2b0f73e51a1e3d8", "1495674856.132562+09aaf4b7c9df93fb21b640227b71dd4fe42ac29e", "1495674856.1440399+041078ecc119ca7ac12c0e2f00b0c30a55ff7bc7", "1495674856.1629984+1e46f583723ab5431d5cd614f811f2b84ca502e3", "1495674856.1751292+86b59adf87ac5f1aaee2553ff33b33bc9446028d", "1495674856.187097+ba15537e81fe2f399dc7be13469acb9b0785cefc", "1495674856.2030487+7bb046c44cbbaea8784e8d3fdd65acf215732cfd", "1495674856.2152503+8210105ff05c819c5add7c710883d943ab78494e", "1495674856.22716+7878f85479d554a2f516d949a610d73e1c838c2f", "1495674856.2393286+d0f4f4242055a3a02a23443b43069a8a2a602726", "1495674856.2507334+8e04cf72a5196f8824ef40426f9b30886fff107d", "1495674856.2657394+71d1549740ceb0778c7306876dd87f196f9d694b", "1495674856.279932+3c8f9ed07c10913e8e2be153341287ccf984616a", "1495674856.2941275+77b61f9f69caf86a3c6e58afbe32ef14a68f6b44", "1495674856.3081143+e63f22588e18b81f298793b08f95138e4bed259f", "1495674856.3214462+c4c8dcf10c2f761c26b57435c9c7c0ecddbb5ea2", "1495674856.3347385+5531fa516c602275f790bf1670bcc90b3bc67049", "1495674856.3475678+3d831a0b6559053f3e0e750895d0a1f647c18607", "1495674856.3734326+75270299d63efd4fafd5269521e3c8ba559455bd", "1495674856.3920884+f13071217f715890293576887a253c2c0d64bba9", "1495674856.4040222+7b7095ac7e7e4f24105ad5cce071387b35224e29", "1495674856.4181154+f249c7f72c8a05b7eef53f59ea0c45c5a16e8d44", "1495674856.4330783+b0550efae4a781a12e023dbc045d74c408724a81", "1495739775.535429+24da1078afcbe48918e01bf02269d1b3df3ef02c", "1495739775.5488017+efa82a77b858ea9f3dfa132b3368d6c70614e549", "1495739775.5609753+84d645cb1e6b5813d0d7e6c35d3c4ee3bdb151d4", "1495739775.5761106+a53558a37732143fe1f984ee43179519a86eb298", "1495739775.5923033+ab4d335012f2a8ab5b352277155d12f3f7160ad5", "1495739775.6076663+187f52f77649fee172fdb6e3d2d64a51fad2df42", "1495739775.622556+c436c7dd4ed897c7e4f93c1a5a99bb3c48bc7179", "1495739775.6375275+29f4a5a08d0a7378e39b478178f0070b1bbb9404", "1495740496.7955377+136ccf538d1bebadc4c39756aafec5302bd3fdad", "1495740496.8183503+606b68b3e2831f2336b076556650252425483cb4", "1495740496.8302312+7f14e114089c0f68d0bd3316c5000f0dcbaf4c9d", "1495740496.8423297+33140fd67523eaaedc447ca775afa5ac9469ab58", "1495740496.8539937+dfdded175b6bf60c79a6dc35948e6049f16ef60d", "1495740496.8666196+a71a808715e2930d27ef578d1a069655c042b6fd", "1495740496.879031+73ebd540d856c46f5f173aa6c638d4b3744874ba", "1495740496.8905528+005ebd0d98e68ec72218640378f977bdd282c122", "1495740496.9043128+79e6f12307e7a9989cd3f7c9ba6b8e9d3cae0836", "1495740496.9203079+c66012ec48f7521f8cab03c5838ca37f9c1ed3a9", "1495740496.941408+7a1e24331ea1e010c4f7d3c2509af468716cad84", "1495740496.9552171+a6fedf9952f3d457fa5e135a0e2c367a29eaeac3", "1495740496.9669297+e8350ae190e903bcf544319b3896d241d185e1d4", "1495740496.97865+a3533f858deb16a4b866fcad0d7435445f5d828c", "1495740496.9906743+493e3845e4a7f2ca0befca134a0a9776c3bf537c", "1495740497.0022886+abce97004b6b512050630688208a325d840c3e90", "1495740497.0135694+14cbe78e8f5e658f644cf77a1067fc1ef5484235", "1495740497.026292+3a27c5625dabf3d980b014bc026a5f943f055096", "1495740497.0374637+4191944f97b57ab36708e51ca875e63b695aecce", "1495740497.0491533+a8851e893d1b5eda4917869e920a6b76484b8e9c", "1495740497.061142+04d23c23aca9ad342e3d9d36d408c43854307a72", "1495740497.072407+d4f06c235071e12e8815b233be57720bc6c5878f", "1495740497.0840354+5d120133cc1658075e3e1f2d1ca6b2de737673ed", "1495740497.095675+37a5cb63e0c5a6a367363e8052b4291ac27f50a2", "1495740497.1075425+1c772d93b2c25a9d485f91511b858fbe01eb4227", "1495740497.11909+1f378df0c022f25e41acbb9b3e8771450523cce5", "1495740497.13107+ab805df1246bf9a37b5ec40743e3252203752dc3", "1495740497.1430416+f577fd326c5a4c7d4b9569e21748c917122dfd8d", "1495740497.1546886+291b09060ee210bca5a1b6673b3363385231d102", "1495740497.16596+9add89aa520ba0fdc05f999c5b87359c98bdb937", "1495740497.1868117+3e53f7817af2f7935eac3a726a7a8647b1856156", "1495740497.202261+92677b1dac7739a76ab841440b7ee28970cf48da", "1495740497.2176862+29297a139b9d9d181239c4c61e6e27efbec9ebbb", "1495740497.2334847+bd166eccc70c6839b6a09a64a5a6f1ac44c6ee04", "1495740497.2451189+113db0ff64ff182b477576191834d8b17d10d90c", "1495740497.2564628+46a9369c26dca4db1c3b016f2897fbf24546517a", "1495740497.2679427+99bec5637ee777b61e727f629027caacc645fd58", "1495740497.278986+08955159e72887f6ba528855b63744f709d4607c", "1495740497.2904732+79aa103c0022ec4ed11e85368e6c9503ef179650", "1495740497.3017917+efeef52e1cd533158aa6f30a9c60c2be6bb2a642", "1495740497.3174734+53d4bb8e71f051f40af712fb43917976339956b7", "1495740497.3293+4900a0c5011fe0227a915069f30e907af7d7473a", "1495740497.341692+4ae1348b413032fab26f934b6c0f924fc5d7346f", "1495740497.3575704+d0e853362dac3aba24c59eb772438d5555233427", "1495740497.3697147+1a374c1af83fd049e93a1f943ee92ed7fb74bab0", "1495740497.3851619+a2967b7be8e211732501733bbf73ae30c970ee51", "1495740497.3969162+813d10c7b998787506e83b15a91d4db59953dfe5", "1495740497.4130712+4b3d341bfc531d1c870a94208ff810f33ef2d439", "1495740497.4247227+b51384f7d2520d88c573cbabf64237858f473c09", "1495740497.4376109+4aeea764c78e5d1efbeece24b9839b4673bf8cd3", "1495740497.449863+bc1fbe425949a30ffd6e7f554dfbad597f142901", "1495740497.4615378+594afd8373c0f5fb949ce1ef8732101ab3e15af8", "1495740497.4728615+53fd961c8b7a7df34995abaee23e3ede88a0fb03", "1495740497.4861333+716127e242b64c98c9389236b998ed5266193e43", "1495740497.4977937+fb2552f26ae0977dddd19bd920e155273cc722aa", "1495740497.50924+e878868422955df9b811061863596e5d82b0b291", "1495743935.6026828+525f033d95f16035c2e1fa7c779ebbe241f6f2b8", "1495743935.618595+dc6f2f82b9a46a693ccd2e5ab277704d3b3adb84", "1495743935.6330798+de56374fc07bc84344065616284806b44959782a", "1495743935.6457238+681da17cef033300a7be16d2fd9a149239b19217", "1495743935.6578703+1727d5ab1e0c875e3be2c1b8e16348b2f9d0d552", "1495743935.6699138+f06989186a264a3161991221ff60f3a6b884f783", "1495743935.6819432+e6f1c117ec3417cbd83685807c8615289c54132d", "1495743935.6940265+2aeeaea4366e802c2bfe8f1385c1fdb3dfec4727", "1495743935.7085037+e94472f861e5293ca0f96c6fe0e7e9f27f1a34ac", "1495743935.7223997+1ae1a5e08f6d73f6ffa566ca75158012fb71d192", "1495743935.7378862+e1c04265a39d38db207e1857c083fea2c072bebd", "1495743935.7504923+a3c7fde5e58dbd7e8f951b8022afd6f1bfc62b53", "1495743935.7756305+1feba70198e25dd395dfcb4922ae2ddef637b5e1", "1495743935.7878487+36b426150769279381dd2606dd9f822bf00bff9d", "1495744469.3265042+58c6d7f8c415d64c8ab866822341c0a81c3bce10", "1495744469.339887+e97376313482fccb053ee6e16a75112a7d5d8a31", "1495744469.3565745+24e93237033b7d2a66e2da023c4c49a9716c0ac4", "1495744469.3695297+9da0b59fe2d81596e499a67fb59f2921db36ca0e", "1495744469.3822157+1eb5385e35d400818925057f388d37bf998d3865", "1495744469.3952377+18d2b83a1bb1eb7490fe7959b853c4789a1241fe", "1495744469.4074428+59b7ce637a115143969b295bb35c53d1abf00a62", "1495744469.4196227+66257a61e24c3322a962596bb775642bbd35343a", "1495744469.437446+cee6ed4a2b06312da280b5b1b9196892518d25cc", "1495744469.4504328+937846390c200300474498d4962a33a996536172", "1495744469.4638772+0635a1e115a4dfe8d654e9a6eb08e6caeb28db58", "1495744469.4767394+0c700b0404489a40e2b1535bb72c5a4211b2e328", "1495744469.509183+e197706e61baf16344a7646d731e647439593d90", "1495744469.5213583+494a3f5e82c263e189cb9f619dd4411fe73d199a", "1495744469.53334+2ff77230f287f7f15e8813c7722ae72ef4a0ef03", "1495744469.5450768+6868ff594f100b426ac571494e894fec1a83faba", "1495744469.5567997+97a130b11c52f28016953c9d2549636f1ac6f719", "1495744469.5693939+2209739663a4fb430d1330bb11f91a388ff48d96", "1495744469.5828772+d88c7da335187b6d3b233b4ec9ca9021695a1e88", "1495744469.5954347+768120d26a3eefc1e94fac6b1c69e68e153758ea", "1495744469.608646+34eeb227d42fa5a773d80e0668be6dcf272df1f2", "1495744469.62669+93ae529a7c405eccbd2126bc016c284d47952b1a", "1495744469.6393335+860ee0f902011c1fc9071736c7caff56b93b3bfd", "1495744469.6511805+4450a014fd1a0c855ade5722898b4748ad373376", "1495744469.6658263+d824adc04e0640e959eb5d52069407c6b040e588", "1495744469.6848516+64b5d0302ae93cd0a4bbea66fd6320a2e30a0406", "1495744469.7004223+36f4f5f5614c7d24cfb47adbf83d05af8fbd6c15", "1495744469.7171535+bbfdce71c7cd75953954b1db851a60c3bb7d47bc", "1495744536.364667+c0acab25d6173bef476f106986d15664e0a6774f", "1495744536.3803892+66ebf1b8da0990095294892bb710e6d7f3b9fd0d", "1495744536.394532+7286b5f4b402741212cf22f01a7290690466cd34", "1495744536.4070845+e08773a100a06e599f598bad5c605ea98c245df7", "1495744536.424178+947ab623dcc4b805f073fa4fa8719072279de913", "1495744536.4374065+bc97e8240b79787b45c729bba1ea7de2c5a7077f", "1495744536.4544935+520f11bdd7954dca22dfaf6c5f24e1a3d13da269", "1495744536.4706542+2dfd07329af1a6c1e79ffe610c5db1286794da57", "1495744536.4902174+2ecee025216edac6ee8da055c6ab819527d7b7ea", "1495744536.5109756+9af2d7bec56aa9bcdb93b7df895c0b6c86347bba", "1495744536.5276701+33c0cfb3e849dc4a071f51b386870b87eab14361", "1495744536.5450108+ae583b046ef5ad7519fa97964b90ce4f4c67aa2b", "1495744536.562094+0dafcfd0611b830802dc878e7eddecda0b05bba0", "1495744536.5787857+007d95861824beeb9a4cc69e2e3f194c26317911", "1495745506.686046+e6df6bda8092977676dfd546ef869230120b0b0e", "1495745506.7018502+351270237b56febc14b08e9a818d20c9aa188582", "1495745506.7141485+ea60b029533465db6d668f377f68f7e389ce2b48", "1495745506.7313185+b6ff96c67a04dd712ab70e1b521fbde9660a4cb5", "1495745506.7460022+63fd813b91a0722feddaf01abbc587b3df84af3d", "1495745506.7577562+a6af6801d03c2f75c02f17abb5d9253d32d51b0e", "1495745506.7732794+cfb58124e096903e07e750aec49f957c0f96e463", "1495745506.7852733+f776343966cc17be89a49796451c783f17e74885", "1495745506.7991357+d746ff9234018a507d96b4bb12041dd117605565", "1495745506.8158839+b6918628bdbd0f280f53733dd0e619bd7384daec", "1495745506.8285563+29dd3be40810cdd5b13c68ab8183e3990ce7c0e7", "1495745506.8408785+3853af6fef9093f7474687c042cf5432c923245e", "1495745506.853648+72df9bb9d328280bce52f5d8f04404c9b64f5b02", "1495745506.8657336+01b63f78117bbba1cca8adc0e3145486cc91147e", "1495746946.1498752+d107bf83417e284bd902c22930e6ee60d2ffe91b", "1495746946.1787968+8bd5b9d7eedfed1ae552c4aae354fa6306e9b1cc", "1495746946.2052007+40fc6008b602e27b25f5bb39e6b6cc5a24248fb1", "1495746946.233806+31e6482b73ff4bcdad851ad337e89163c03e25e7", "1495746946.2665744+0d0d2299cbc69d337423b7e9b0d95655c9e6cbb8", "1495746946.287065+fe85006c0d814e9dcc9d4dcf94311abd513a0723", "1495746946.3089495+7d8dbad23015fbc75e861963e777dd6d806c2c92", "1495746946.32472+d7dde9464ca9ab5de80eabe1830c2bc686d2c261", "1495746946.3415623+a6894f3a18565ceeddd067653de80e822a8eb391", "1495746946.3572247+3d3b67f1e8a463259053b5d9ad4e100b1049d454", "1495746946.376616+bf724a04211b5973a2fb3ab8657700e59901c842", "1495746946.392326+7196c0d05cd6fd22690bc25f7257892c2da4b781", "1495746946.4079008+2afc0a8e0446b5f96daba59bfd1b91c34c02d31d", "1495746946.4228258+1d80afbc69423fbe9357ac8d4112957a0b48aff2", "1495746946.437962+505c89a7ec0a8be48816b104979b8fa3665070de", "1495746946.4530885+6b2d42a0a5c6177c6a4231a6051354b2fc6eb8af", "1495746946.4671698+eeba494518d5b3c968b77256a875a5a91628f21a", "1495746946.4794254+cce3d45b8be2010693ef007c2fb53a3938391d60", "1495746946.4956625+d10de1c8fdd58044b1d04ac20b6d128670a162ed", "1495746946.5076463+949c1e0c00442ca5c72f69c740841c6625f211cf", "1495746946.5206733+7dd8858a66489da2dc9bea1f6b9ebd9990e5bdd4", "1495746946.5327768+662622ebc8dc28abbf654987de442de7736c0eef", "1495746946.5491793+7d1440c6f3553aa522f5cf9a004dec5fe30df228", "1495746946.5657513+1626b73f4addd8566b50513c61337897b178b369", "1495746946.5791569+923a3efc95570cbd284dee04aeb5b5c6f8b75bb6", "1495746946.605486+1ce0b4787f9567177d31dfa910d0410d40d5b2c8", "1495746946.618529+f95f4b41fb4526d64631dbf2add7dba833eab389", "1495746946.6309037+477ae532c8bdfd6b6afc8ed2edbfc15712615fd1", "1495747091.9425578+1ddb1d53e40eba770c6a3d78a0fded143ff87f02", "1495747091.9560013+1daeb41a63b94f69776d6b93b3d2fbab1a059b25", "1495747091.967684+2cb700bc7a14a3131683942f848f8e6e4f82f21e", "1495747091.9793334+22ce1cd40d769ef59501373dc0fcf6976207678d", "1495747091.9911718+141c765e3ada389b6629c89f6840370acac35cf0", "1495747092.0028203+d9d11a75d0420f66cc18b4cc12ef7d80084bf409", "1495747092.0144863+a59c803bcf96e2ccda0707da9f8378660935cb55", "1495747092.0263326+9752cd41a971a3f09a3768e4c74bf89e26ba1a9d", "1495747092.0399308+59213672888a8f4756610b6ed8f25449128ba9e2", "1495747092.053214+5e108c1a6f1b5aaccf19e7bc9446d023417cd3b6", "1495747092.0654185+7fe6181278f136d36bc3cd55d6f65f5e610900df", "1495747092.0777006+a90779f060437e549fe7f951068415a51a232173", "1495747092.0892818+47c25d77927252d6fd93c61389d9e3e508f79398", "1495747092.1011422+a4a872f2a95e20cc87ba5f09f8978d70dc8210fd", "1495747273.3839595+426da8a2fa69b635ffde2aa32a3d8869a8b06544", "1495747273.3990567+f29af60888f93968dd8d421bc1341bb1ab3f4b3f", "1495747273.4192746+7883acf70d1280d7ae5bee06f6dc2a94c141f904", "1495747273.4369807+93770fb9876269d12a4adcb2bec8006c5c256181", "1495747273.463427+5bb50a007fb2ba7e901c76212623ef8b30542e02", "1495747273.4805481+4e8887242314438cc09c29e83870faffff11343a", "1495747273.4971542+c878790883182b101e04d32347c6654d27ba24c2", "1495747273.5100076+1086632376cf1c9f42d313fd3c0482c8fd1c5648", "1495747273.528004+763f32d647741f9650068ace56f312c95b758843", "1495747273.5432942+f2e7ed9abdac8bfacfc1045181724d5e14c576aa", "1495747273.5583982+e8fb581d1a33f278d440ffd0dd72787f466b9ca0", "1495747273.5761392+d51a4ffd4abe30fc61be47b93e037326bf55a85a", "1495747273.590531+23aad69b15ffa9797e8109d838790b57acba615e", "1495747273.607259+5c755a7f071bcbc397b24810da920c26784e380c", "1495747273.6232927+7890769789f45d65a88de84052a73d5078e585ab", "1495747273.6407323+3fc80e3f3cb3a0426ad4d37805a3478f93f9b205", "1495747273.6618876+2c42c344f9917b28e4694efa9789d815d9473c85", "1495747273.6787562+f7cd7284d86665c70b8e3fac5c2b51e8516547bd", "1495747273.6948295+fa217fd36e91e61aa42fc3b28024548990d75556", "1495747273.7111142+b3c24c7a301006f093d5c7332e101bf89186ab18", "1495747273.7273643+2a9030b539e6f0e7de89f7056a30bffb82d1518a", "1495747273.7429636+56b56f5539ebd2c23fd3ad41d11900b0c2cc13d5", "1495747273.7590163+5e9e8f78eef581b975cce73d90ae3191ad160903", "1495747273.7747295+958d0e90d35937eee5e0a270c9e5b4950aa7480d", "1495747273.787188+18fda7897e9a67e208b42d1e322e3d0383ee4efc", "1495747273.7992735+93a7069cc12b93d0b35bb7eeae4e9396afe5b18a", "1495747273.811539+3756464653edd30c11e230dedd1c44b5775dcb39", "1495747273.823913+e22a5c2a3c79a6794c3ffe57580c80e9e4ffd188", "1495747273.8364892+0b5863803216c3dde2d3e01bc2f2c250a646edf3", "1495747273.8485234+916660c5692fa746d2475ab4f9cd34bb321a2daa", "1495747273.8608136+c2b55ae09a7f2e4dc1c0f7a89624c199ce2125de", "1495747273.8762505+72a93e625b53f330a3bd45d00664f9aab694c00b", "1495747273.8930943+68b78da51205b6195ac0f69a1f2a5d946496cb2b", "1495747273.9122589+caa1e51e20d85ea058870dc181adb1218a9920cf", "1495747273.933067+459c95acd666a807408e5f6442932c99fdc87ab7", "1495747273.9500165+2ff2a58ac84f4603df381bb3a73082744497b664", "1495747273.9675078+4de6e2d60cfdd3c571e27fc3490f832470f4b4d8", "1495747273.9841752+67d5c405bc17c1d8db2ebe218b67920ff9d1b066", "1495747274.00006+aeca46df5f2915aa31da66239b42a6630cfd3607", "1495747274.020699+ff16bced5174be5588bf74e44e222e763ff74302", "1495747274.0362036+f2d8f466ebb0001164c56cc43033b2d5f026f735", "1495747274.0520988+6299592930d3d6da5498118811cfbf11fd099783", "1495747318.7411635+e227afe52fcaaa11b309c0b59e8124ab7606977d", "1495747318.761249+eebf927aaa45e5480b1f1e1f5466b58d74e19f53", "1495747318.777101+df1f68f58042544163e3ab6ad89192549baa569b", "1495747318.7937384+765498cf117bbb6d3dcfc22b2238b38a69ed51ba", "1495747318.8100827+6306ceeb4170a33db79dd80c7c27c46107a1bd80", "1495747318.8261976+2ce526b3dae009b84f95ab30610cc4f92408afd9", "1495747318.838958+af3612315cda30d5083c1b8f4e2a630f844d1532", "1495747318.8565996+51278d2fcc08aacdcac5f24b8ff6b173887aa52e", "1495747318.871574+fe261478b5e1bb7316bb98958c0795011f537083", "1495747318.8860536+fee000e25aac515a0f4c82ca6410d80b24aa00ad", "1495747318.8990283+8964645ec4f2e8db61af8d139fc7920b4fcd7ed4", "1495747318.915009+ff7d7ed0af67abbc1f6ee2c45eeeadfe1f1de5c1", "1495747318.9306657+47ebdf52692da4d3d75ea1c77d2daee65b3dd1e4", "1495747318.9468188+1772f3df230010016d3f64c932a41deb2b65001a", "1495748003.4721074+426e7ddf1e6180e062ab15e8d44e3149644522b7", "1495748003.4895697+61966f99b37bb3638475b6748836776f0bb34b16", "1495748003.5015206+0262c3ec094c4e8d785a288c7773b74f1e96ad10", "1495748003.515108+0cf98d61f6c936f64f58772111c34dc8efc610e8", "1495748003.529915+06443e293803428881750b55c611a0ff6a9df9e7", "1495748003.5418572+d6d58211bd1cef99b8a0276fdc9ffcec69c9af02", "1495748003.5548828+4183039945b26598195f19fdb7f35f198b67d8f1", "1495748003.566938+8cb8078969027fda5cd46696871eeaa17a1e1c64", "1495748003.5843928+8915d2c18c4544c3b60fa3a063dabbec5d318df0", "1495748003.5969894+824c112d7b53dbf07485ed32e85d22f19ef2cdf2", "1495748003.6091468+cd9e781910877f735c41be378cd5c72d94f5e2b2", "1495748003.627757+774a1f128b002a428852a9e91d7861e89cc6ce11", "1495748003.6403322+ecf7dc2d86f3096ba743c310ce4c8fc5b6ebdc18", "1495748003.652586+098b3b21d4454bd2672df4fb04781367acec7f97", "1495748003.6655343+6ad99533bf73a292fba8410f5b89cf374a64e848", "1495748003.6774354+4990f418209fa0dc1e2ec6968068093caf609758", "1495748003.6934264+1c2aee62d0b852d70c601a7ee26de726eefc03ae", "1495748003.7106507+6c01e7b670bb4a0e759da96aa421499a2913d174", "1495748003.7236784+a467a33db873f9b969d93c5275d40f2a2b127aad", "1495748003.735746+f01a25c13074bb108fb5fbfa10f15a8a21f43ee1", "1495748003.7478185+0d824236e9df9c0eadafd4420182e06fbad1fdf6", "1495748003.7596917+4414ea02befd9ab369d7de50bcf5fdb5ce7ae5eb", "1495748003.771622+5ff958e7504f4a199183412ce84db4c16eaa05d4", "1495748003.7831326+a8ad07edbd414fd9e812ed09b72c12b4859b8411", "1495748003.7952435+64b4499bcd06909887fa4f5a514078840c3ea459", "1495748003.8072124+58a789aa016f6027c5982301fde4560c2952f615", "1495748003.8193011+9b39a2ec05fc8b993b8cbcf81404e34a17197bed", "1495748003.8310554+1147528fc0b9a125c5bef0d673e9c5ecd70b83e8", "1495748053.76364+9fdf56f41d9be7bbb869be2f2bf10254c7b08030", "1495748053.7789562+6562af5813da41743df30e0ad8fcfc5d315f11cb", "1495748053.7944875+d020a75cdbc34cf9b14c5d27a466999994725942", "1495748053.8064585+76d80fdcb276ef4d55fef6ed403650dd4488630f", "1495748053.8185425+e13c1e99ab2d2aecee9cb791a7f404f4498ef4c9", "1495748053.8306909+65aadb7a6e22aa562590106d1c63f69c2ce777ae", "1495748053.842738+034f2be4df63ce4d33b313663a99c06c45b73575", "1495748053.8554342+74b2b8558dc5ef5ed1ffe9946abaec717d2852ea", "1495748053.8714364+abf330302db67ffac1520218dd5837ce54380099", "1495748053.8854105+9930c0094c45a2b73198cebcaffdb9844ac18cd7", "1495748053.901379+333d29cc65208e32b0f593fb6041720a471afb74", "1495748053.9139428+d6cfa17908e3c9b60984447fc9940500c64cffb7", "1495748053.9273517+5e64341e889d646e1dedcb50f5d1b8e1c5a8c432", "1495748053.9406261+26d211858b3434f24641bb3f5b70e71c3c6b3fe6", "1495748782.2606707+8103e9bce28206401b517727f224faef3b50d707", "1495748782.2823737+d496c911d20ee089b947e3eb31012e1ebf8edf8d", "1495748782.2985225+f6a33941d8375ae919a4078fe9414965502e06da", "1495748782.3144372+168669e1b77647aa7a7685d7b3b3e9614483751e", "1495748782.3304014+89e7af25d47182d5ea59a9fe197757259537e276", "1495748782.3461878+fb215c681002d3aa475717550d9ebda2fe91a842", "1495748782.3617558+e2ca1c76103eb61611466a5d22929bf126506339", "1495748782.3775387+a3f7b25f8f281c2c5e9a95d18948c154c69d8301", "1495748782.3949795+e47d33590b5ae9dec481c3a9bbacf2bbd80b91ba", "1495748782.4134078+39987cc2a0524b836de20893f0938979c121ae58", "1495748782.4250925+619db28c636981d602d818404d7b0920ddd2a0aa", "1495748782.437442+6f20266e5a196cabfff0eb98db74d8e365385990", "1495748782.4491248+1decc90862243b2d7d64ec9e4a4bab8270c30e80", "1495748782.46081+3f42804cb2cd9373d65ef87fdd953cad8d90d515", "1495748782.4727793+1904a13ef1d5154d18769d2116c2b3c607e933f6", "1495748782.484525+bbd736e58be97e5809756cd7800c568b76c85629", "1495748782.5004318+80917a67eb75fabc1460e649243c5477962fe4c3", "1495748782.5166924+8c70e9ba1782f7f81904721a9fc254e15432a002", "1495748782.532378+77e5af2e4a9f2be60744062cfa67154a03e653e6", "1495748782.5482535+de52c3c2d721485a9707c9f935c9f861a62c8026", "1495748782.5645008+b78dbac88791378d65940f8214407b9bf78faebc", "1495748782.5802495+dd7bb7f57d0cc3df1cf745aa67ca81f293572870", "1495748782.5959733+4c1663a109868a6a986dd68597528b8cb0e97fca", "1495748782.6121488+5d99ee94cf2059f8e16a173901ffda2402452059", "1495748782.6270366+df97660f6f7bc929dc0ddb633c71b8054f1f1117", "1495748782.6433632+185346bd3c599a55bcdea3adb644d36b1c83a80b", "1495748782.6629846+424957d486f0441bb4c0922326237f61d358afae", "1495748782.6844964+388927a35b65c74b0dfde752f491d2e59076c6c6", "1495749682.809845+f59cbd7bf8020203e72e76a8147bbdc2b9435256", "1495749682.8236942+8a9d9a4face2be98495cd6858bacf6de6d643aa9", "1495749682.8358464+0835844429bfb000f4f2e7e9df2fa03ec658f6ec", "1495749682.8475792+77caddf0a92852c046c4923b4c428ac61f072034", "1495749682.8637087+4da895acb6f9483f0812a2260847e69098ae1ae3", "1495749682.8775053+d8a1eb2e9b7e417d738a5aa696d9f9b4525b017c", "1495749682.8916035+79257db65e6491a36d5ce16f69b09c4afd6b79e9", "1495749682.9084516+e05cff8382a6932505e31c4fb094c7c94793f39a", "1495749682.9207177+b2351ce468a66de3f57f47ba8ff848baa97e5b68", "1495749682.9336116+f362d77dc2cfa04900dfc4f1fad29dcfeb80754d", "1495749682.9454198+59a3f55d2b534baf92609f7c85c25782aed1ddf5", "1495749682.9570966+3a4beea60db8206144a6758524ae6f992251f29f", "1495749682.9738207+ee9158dbeb5e7ac0b64ba748f885cb9681bc50ff", "1495749682.9871798+9cf218fa713969aeea2fdf0b730ba05918810a76", "1495749682.9994478+d612f352692476d05dce98a5a113c06252669325", "1495749683.0118592+d4177761f0999381b9922bc107cb8c2d095f7b75", "1495749683.0237894+48a7d07b377002de2930111f4287d3fe3e6fd0af", "1495749683.0398777+4e62b4206b93069cc7dc98a2d4b318092492c130", "1495749683.052638+ed595e161600af3b8610437c8b21253bbdee4958", "1495749683.0708816+5df1a256029b2b6f47910bf8cbdb711866371628", "1495749683.087412+638a1fd4c77e37be5a81c990026fb3869ec0ce7d", "1495749683.0995147+336194d88e907189ab668aedd443c2cc05a467b7", "1495749683.117391+a2c89e287bc1b8e03c2291da0289012bb5801715", "1495749683.1335511+73d24fbc73ac878ac6ede6106d31de76a757c324", "1495749683.1470203+5a13edc1c2fd26be2f30cc904e07dfd722f859e6", "1495749683.1623988+e382387a8149f130430b87cb68f2fc61e19a6e45", "1495749683.1752+017d18c8898d43620bcaa9a98d75f3e68368c2c0", "1495749683.1874151+daf5a91483238426da6968d8ae9db03a20577dba", "1495749683.1990952+c0ae0ecf5fdc5e48f134792196242ee616f1d4d6", "1495749683.2113256+120b6544a47f2401bd3b06996de6b4f8d2bdd97c", "1495749683.2460399+f966b18cf8a69211e8fa2fb9474cc90c43a32e64", "1495749683.2578797+06aa69bf1cbc727b1d146df052fab94e892ed890", "1495749683.271152+ba7ff3a588b270c737cdfde030de509960cf3eb6", "1495749683.2851567+d14ab7d6774559c497dede3e1a68776fab676be8", "1495749683.3004463+e32a0197c2c59fa77b0f05bc2bb34bde435a0d80", "1495749683.3163528+a86cfb720802d264bbb5653a6f426b5a60eeb3cc", "1495749683.3280518+282f88b1c5ab2cfdf61e36850d3e3d05bc4e77fe", "1495749683.340098+9c0cb6571fe8a83e58061b925bda170723dc892c", "1495749683.3525841+8ce4beab0d896ad91d193dfed47814339e8a49a8", "1495749683.3642488+cf175f56da0f49efdb9bea0301e507472c37a60b", "1495749683.3857763+907b811ecd654cddf64290fb57d3cb55fc032cd2", "1495749683.3971136+554131be207ff364e52814b6aa74f5678c2d5094", "1495749683.40867+c9c01e255d0672e775a73873fc60560896d0216b", "1495749683.420529+03fc854b5a3aed636c8db83f97a82d8a3b812c32", "1495749683.4317567+7360c43200083cdbb65ded741fbe9e5ecb6c9edb", "1495749683.4431875+484a41fecdb757ed8f9ff13cbc91294944979f6a", "1495749683.4550683+bce7f4fef00564e48b4303f9edd60a46e0dff32e", "1495749683.4668155+005970b2eac591ae6f9e6f8a52c0c4cf73fe3ed9", "1495749683.4861357+d3a73bd7cdad1ffe135652af4a8658e51d2d4ec7", "1495749683.49915+d2a48d58d157f3b82b53f9e3e6822da8c0af800b", "1495749683.5121858+f7a53fd62a9e6ba9111d48c6b87190a76c9c914c", "1495749683.5256689+63aac40ed10fd4bf3f6dd1f96a9d9b195b2d5b26", "1495749683.5371761+4711afb2c32cef0c02f37060dd0fac50e3576567", "1495749683.5489874+3f35712d00719371fb064607448fec2b5af07065", "1495749683.5658312+a6b7fbf2564369b7587dac61a7aafe1151c006f7", "1495749683.5804107+7e5703f211635bb87e98ff056de5b99aeff38248", "1495750669.4518595+a9016069fbbb636f372175611567e0486fa50527", "1495750669.4669516+e15c43ce33611f5ae54a2467dec2b3a197bf7e43", "1495750669.4787374+a4abea39afdad077c4e23e61728629cc1286650f", "1495750669.4946864+94c2d383d4a0e4975375df394557f99fe5c7c2b5", "1495750669.507065+2f39fb820002fd5c1b7772d987289c590f16fc63", "1495750669.5302217+c76aefdb9f0aeee10e77f20442895cf27a85ae4f", "1495750669.5466576+65bc5fa4139f6d2e4b2a0e5adf171fc5135b5b66", "1495750669.5590587+a554189f023c4c85842845ac84aef4b261b3049f", "1495750669.581304+b9bcbc7628e5846b58722d59491d8a2ffdb0520a", "1495750669.593083+c9cc8defafab7298e2c03c6ea7e9142083e2e04f", "1495750669.6056995+24c14c426106d236c9b6eef48cceb0680e6c985e", "1495750669.6190403+0512298c357eb6486cfd92a7b7ec2ef61b8d6e30", "1495750669.6359165+5b6e8eecaefb2d8013809336b8c24ccb9a77e158", "1495750669.650129+63282c514e4ca56c4e76202998c2b7c0af74e4ab", "1495750669.6679003+8b27a4915e107fd3e1b6b99514e54aeb2a9f0354", "1495750669.6827657+417ecaecc94c54c873b8a0bbd3a166c262d07890", "1495750669.6970208+5b909c01fd2072d81a9d3d3d6cf204cc0d8f41b3", "1495750669.7117763+363e4c88368bd501cf41381ad20d9d9259e2cb40", "1495750669.7236109+f5ecf46ad35f91292b18b09468fce4eb68b663b0", "1495750669.7367065+ed7fe2e5c5989ff17386562bcc303e0f4c1e119f", "1495750669.7506874+f37bb31549a5046dc0c7b9d1926fd198deecf209", "1495750669.763998+d61b1c155bb740aa57a7a9199073cc1ff48255fd", "1495750669.7759128+09c856f16cf91bce408b72eee3db3077b2981c5e", "1495750669.7887712+4c1ff555f59d61eefb62df8a074a27ef08489da4", "1495750669.800536+c0c0f8316bab93c026f12751118902634c35d495", "1495750669.811861+c4d8c5151446812e51b510d17307ca16b8b9df07", "1495750669.8238068+77a57b4fe0dd0bb746668ddae52d4ad4de0001a2", "1495750669.8353608+47e8c54e9f92b3e6168aa7fc85310781142a8c63", "1495751022.7491403+96498e3ce881bba40f5b98e573b87ae91a53bdee", "1495751022.763783+a0a1ef4ead0788f6b93f04070c8ed7e116b6d9ce", "1495751022.775786+ca69caf2bd3391d35f05e7a9cd8aca121a4bd002", "1495751022.7995236+7ae13a79573ccd7764b32ea88d9a717c9f84e3fd", "1495751022.8162608+1710d92dece4ce1cebf74ef69c81283279db2fc1", "1495751022.8318691+b9a8e93ab0724c1b7a1705c21f376bf5c6f2ddd6", "1495751022.8456411+579d7d097718062e3051720ad9f71d3bb58c6ad8", "1495751022.8579538+ed9e0bfba7552764acce310035ca0dfd436a1f88", "1495751022.8738666+834fd8be0c3f830c3c960dba87b3910d07499e63", "1495751022.8855247+3197e7662290286c4752bcf8cf109d6f2008c93d", "1495751022.901031+774058b6fb303d82e62821aa135e8bc3f0f7c72d", "1495751022.9189508+4112ec2ee66388e750213328f5b4d8b9d4d76d33", "1495751022.9336967+7db35f08a0a205cb645b6c2cffd5018f5df283e6", "1495751022.9498239+587993868dcb435fc4784b1952161bcfe21bf1f9", "1495751022.96269+53b38c457c7c79c1631dd3e80f79599eebad8b2b", "1495751022.9820588+32a726f0ac80066579b6fec8d3bfd73ec251ec16", "1495751022.9988725+fccb6e5a36dd6f15f7068a8583716a4aee28dc41", "1495751023.0119903+4c86fcae6b329314ad66b05953595212e02dd808", "1495751023.0307033+bf3953dae90da3593136bebf99db6d8215ba7a1f", "1495751023.0454676+a9218a50cb1c15a8f1c9e41ae81598c76cfd0ff7", "1495751023.0582337+aa00751921fe40dbd32f8c52bbd9a97d4ed029c4", "1495751023.070343+015f6cbd9a8f9cf5ca56519306607424e04def38", "1495751023.0823102+3aea4fec3b4d957e7e299512e3c5142f4eb1afd0", "1495751023.093724+2b1a90c0f3d9f391027de19896d5b50e57599a41", "1495751023.1053832+fe2bb90ead3bbde29a1b995bfe5d415612af7eeb", "1495751023.1170387+a472ff0bf80de007bd5db51c2e5eccf43835268a", "1495751023.1289117+1d345a35ecfb6c2fb7e752e6985c63e072447bf7", "1495751023.1407413+ad0b142a95fbd75d38107a744a05f79255ecf661", "1495751520.064801+d9c4435b46ce3e87d0d61bc6c74618d358e3c040", "1495751520.0835414+c9b71a0337ae8d6773fec751c500fa314b6082c2", "1495751520.0979238+e95ef7be41e5236a2fc99c237172a30f5768ec34", "1495751520.1111166+a835c664bb66b9161367577a2dbe39ea9f52edb7", "1495751520.1233535+dee6fcde1d44caca479a0f3c5dd5ee7b9cbe5622", "1495751520.1353757+3fed10d3b3ca45b36ed8e5fa971244c8dab55981", "1495751520.1492527+f423bf6bf21f5e46e20dec7fd6012d170f81d5d3", "1495751520.164813+110d5578a3f5fccab89d6a0aa022df65b854df4b", "1495751520.1818795+d9606daa8b66a1ba9af5fba44bb852c0be1b233f", "1495751520.1975281+2e3da68fe7b2ddb1149ab0fcd1bc961190481d07", "1495751520.2127495+68cfb88ee783fafa9093b042cb5bbd1eab784b80", "1495751520.2295365+44f1772a07b7e06068223c75a8397d4685dc18c9", "1495751520.2498586+f9147e47a796af744816b074271a5d4ea0eaa937", "1495751520.270749+f8512bc932236969b5c5e391b6f5415723361267", "1495752420.3066895+1bff703375ce6bc14d8db816d4e98583eed77613", "1495752420.3201394+3c6f794d7efc53d1f8f799c9bf7ea0f34b128dfe", "1495752420.332204+459285dda04cd140324a60edce12f700cc993248", "1495752420.3443851+d93d788b888e33617d1ae4f7f30b5d3ff72e2e1d", "1495752420.3576252+eb5258701e9ea77b8f6501845be315a4eb123d33", "1495752420.3720286+b1b051ad487a5ca2d012141169b685fbc9b44af6", "1495752420.3864832+1cfec3b80e351d109143f1bf4658ef9190fed78d", "1495752420.3990502+4c082aa4e51058b87b835bc233cf645caa8cc2e1", "1495752420.4179528+3d75c89f33749101ff626729a9d752bd2d656875", "1495752420.4300447+dabbc5e064bc96e36dc0c6bdfecbedfe97e4274b", "1495752420.4421961+8c37a12907e9633274678bdb4e7127f5b55603f8", "1495752420.4579103+eb1ab9ad2aac66b60cc80fd213b6dd4b246f5c7c", "1495752420.4704187+7f9b910fd8e0243f2d02766e0d7082deaf422044", "1495752420.4822369+d70701d6b44eceac8a938192772303b814cbf3ad", "1495752420.4947379+d2a8bb95b2b911c3569ab8e475c4305279196f9b", "1495752420.5061302+ae2f1ae3ae97d973034bd45227aab880d9f833f5", "1495752420.517855+6bf1334dec4388889ded09c73c5b5d5192a20bf8", "1495752420.5373597+365978fb3dc1b29f14887758bce2842d9ff2d1ac", "1495752420.5500116+b456d78f5da21ffad16a53333f5e2c99ae38b80c", "1495752420.5808702+98bc5a9aa0ecb0bd9fb40cd6ddf644b5aab6b859", "1495752420.5977445+401556c28005cf28e67f26fefddfe54520ced6ee", "1495752420.6144602+7f19e41bf93f7a2c0bd5a68a6943d35d79c4f31a", "1495752420.6310313+05cf156b5f83a338ad4fb48064d065ba1eae8178", "1495752420.6451948+5d984824ea0e6ef7b00230f3b49e933a1a45e997", "1495752420.6570454+773eff02493ded56f5a4f1ba2be554f6bf5ddbb7", "1495752420.6755664+cec2a9949dbc0ed7765e9cdd658eaefd4111bba8", "1495752420.6909144+f8e2adbddc85174bf68ff4a146d9457bf3c111b0", "1495752420.7023275+bdf8bd324fd5d8383ce73b8c573782e9fabb4a35", "1495752420.7140396+4c35b8d92282e6053033cb848c090d0dc039e554", "1495752420.7268114+f36b49eeb1b98e98aafc2dfe5bbae99b5df5c64c", "1495752420.7399113+36b1630d8571da9c1d158a4348167c771f0359b5", "1495752420.7518115+e01001fc971153a8471dfecf17fd370430c99ea1", "1495752420.7647092+4656682f1c95e6e273fee64532ddf384ca351712", "1495752420.7789938+74a1796a2956d836c663ab249bd95d483f0e05af", "1495752420.793465+eb512edc97d7abdaaf8b705270f3199d5b4ce0e2", "1495752420.8071566+f8a0f1b108d739476a0dd800043459d6b559fe7a", "1495752420.8188038+bfd77623b3f7ffe8cb81b6586a43b570deda6bc4", "1495752420.8314588+5a73190057ef3b0a5465e13ab196c5ec56303b53", "1495752420.8457642+bf69cc7f91d7e4e81e26eb13aacd8adcbdb4e948", "1495752420.8655167+d3485ccb9d16ad19648842ba271675d554d60f05", "1495752420.8797324+a56bfceca4e1b56ed664290237c3b7ed2b881c17", "1495752420.9011328+9e5d7b88c88faee170996db2fb2ca3ff3aa5bf32", "1495752420.9191294+868f64377c8a7b23312c857b67bbff99728f3128", "1495752420.9314353+1ff4fc288b5d7d1dcdd15c707fd68df98c738d6f", "1495752420.9435358+71d1f4d3e8000cece8b604af56d235e9ec220de1", "1495752420.9554434+a85100367f7d80240eb901f6efc5f3a43407911c", "1495752420.9672184+baed8f0ce3e11a090d80dbe1aeeb16f7a8204e6a", "1495752420.9805617+ab0fd1c1825b80bfa82ddfd1eee2fb636c26e188", "1495752420.9973333+35604b9cc778fdbb094f290a78d88485e6e454e3", "1495752421.009059+42984079225aafab478087eb78cab412125febd1", "1495752421.0213325+4a65ac1df95f045ea298b0e317b67e55a2b9bea2", "1495752421.0377302+12d3ce2a3d109ad4c82ecf6a3ee906fd8a929723", "1495752421.0655978+e6d4541c31bdffc56278fc28af851e369724076f", "1495752421.0802758+df9c81291e104126273047cf9a17511c40724025", "1495752421.0968146+1e0ba4ac0f0da0c29ae4ecc19518a72258b19e4f", "1495752421.110257+045a9b04cdeaa818029bc3274ddb197121cd4dca", "1495752421.125354+d44c7cbdf61fdcaf15b26c650081163dff5ab7eb", "1495752421.1373148+520da8bbdc671f4a5a940f1ddc789e10641faa19", "1495752421.154374+cbbdca079dbfc5b49ac0d6cad3757e197c43b286", "1495752421.1668231+c0ce77e96dc04c358b9b2c4b79466447b0c9f375", "1495752421.182234+4f8da6e5fefc1eab5f2949bf872c7fe92611e51f", "1495752421.1954749+60753c756919f5194a47599a38d9b21ec725dd78", "1495752421.2077436+13ed61856c163b0e37860e49cf9138908fcc1b59", "1495752421.2194645+94b6ba912aebd91976e976647aaa7fac77004680", "1495752421.2337124+a0bbc85f346e7bc989353756df5c6939e716356c", "1495752421.2454858+6680d656065656f0883c0810565c02ecacd83ed6", "1495752421.260053+60f397917aeab390062a3bb8ea1fd23449e5f9b3", "1495752421.2737303+c081ff10f3480b76fd22a0ed53c91b8d08089572", "1495752421.285883+45d5729aaca67cf9a5cd4344655a4eca0e268c44", "1495752421.3005736+a6c333a0031fff0e44393303dd1d58e7e3c113a1", "1495753321.3282838+fac2190fc53d668acca879162eb8c3bcff8d7da6", "1495753321.342388+f59480c010518f72c8de9501b06f30aa6e828fbb", "1495753321.3591177+5b3492ba98ec585800f89ae1d5c01fc605a7d954", "1495753321.3728666+6f3bf7a39e756e01dce205d36b06ef25ed3fe9bf", "1495753321.3863616+4f8882ab60ac771e61ce4555f4469aac239e4e62", "1495753321.4075975+0f3063d03a8d71b22cdb167b7617c592ebaf77c2", "1495753321.4201257+dfd927d0da61aad77afffc5d2a66bbb510e86d51", "1495753321.432815+ca09d511844e79d00c3553490d50c316005201fd", "1495753321.4472203+d17f85f03306b7be090050844cdf658cb67c067c", "1495753321.459649+9d420a69e9076ed9c2f934ed26495c2b3d000771", "1495753321.4723628+ed7be67cb7c0a7eee74da68f68e967b4b717a4d4", "1495753321.4879565+1cddfae8202c283643a5f2a71d310178167ea3a0", "1495753321.5068424+9cf1be586bc94350b41852f9116217aacab581b5", "1495753321.5225062+d98700caade0d71f05eb4eaeeda221a8b870ef66", "1495753321.5416708+c83b42642e46928406b5ae674072189ea9536b8f", "1495753321.560185+eacc4d268bc75c045badca5385f74769d0752de7", "1495753321.5751896+104857b08a0f960ba9a7a9f203ee3c498411468e", "1495753321.5896833+c93223c58a977134faf288c2cdf8009a0a82534d", "1495753321.6034563+c32679350c9b86f20402f0b6e862678bf8cec93d", "1495753321.6159325+5e6059b885d9d3be22bb6f4b23ad5e63681637e1", "1495753321.629835+df7864f3031cc28246693b743cb9bf0d313a73d9", "1495753321.6417198+35c741c25d550d451b951892f1dce8b1f3b11fbd", "1495753321.655199+98463224517e23c5bc60bc48a64f452f2a56f676", "1495753321.669634+df1ade48b5d700036f3d298f2444629ec4d3ffb9", "1495753321.683718+17578162fd3c1edf3e47d02476d14b0ecf1b1c09", "1495753321.695625+2b19a151e63526b001dafbb9061a829f570729c1", "1495753321.708304+8f28ad05f06f6147b5e875968c983e30bf93a469", "1495753321.7242506+19c36feeaa4ee3b9b117ddad2399a8feb32acc47", "1495754221.838669+60c1dd4a421cb82964583dadd163065b5cd473d6", "1495754221.8508515+8a09c24f14119f3edf29d14221f653b6c22d6357", "1495754221.8684545+b2d6c794011e7e88301c7d013f257b626a2591bd", "1495754221.8806474+06076777babac4af3dd2658eb3c1918b3709c2b7", "1495754221.8943262+0aa1fd35aa2c1d8d6b3beb7c1170b5c0d6236203", "1495754221.9163396+8ff1ca5ac510cea203181ec4ac8e20078512dafc", "1495754221.9283414+3affac0754726e0afd3b3203c8d618a5b90b3509", "1495754221.9404535+18f6915de3004a0b01e19447176da6692ceea1e3", "1495754221.9529188+2c9ccb1195f0f14061bc81f4edaf1fc635b2541c", "1495754221.964611+974ebf6b851c552fcee2c35b4e5296f5c1af4082", "1495754221.9759426+e21f82c9e488a47351ede56643a4db1664142d21", "1495754221.9878795+22b02b6a15e2ca52231b349bcb705f65e3fd4241", "1495754221.9994552+321c703065de360e6abc6600d6272b9fc58d3189", "1495754222.0110369+0ffeecefb31560dc859f9cbcd7b4014472cbecc4", "1495789452.3831604+6dad56a41ff5f3b6f9bbc416c1b5401bc0a4c407", "1495789452.402247+f1c7662ae2b6d3029b3c8cf83f934eeaf316a2b3", "1495789555.6400282+ae5fb77f71c6b9180a0f3e1f9057d7cf9a665690", "1495789555.6606793+dd745241c53a209805fc81d8b22a6430cb19cf0a", "1495789779.7264163+5f8fc2a145abd0788dd100b0995943fc1fce5481", "1495789779.7410777+b4c78903e0da828baeb01f84e2a8639f50db820c", "1495789811.6131487+9416f6362a794b4ac8567cf7ec1a5e3441c3e821", "1495789811.630111+63580018cbd3bacc693dc9b51da776bc32bfef4c", "1495789811.6454713+62d99bfac3e9333f1072e25f808a6eb4816ac59c", "1495789811.6609762+d234dd1fdf3ab4d3e29c2898d60d8ada82a97654", "1495789811.67656+432a8ae048aea2f24290d1025f1a1574762b054c", "1495789811.6921914+eccb03441cfd52e8bb42d1a6296772e2342311b5", "1495789811.7077823+900313e5c0e0587397ba48c402b186addee260ee", "1495789811.7235386+aa2ea1dbdbdec1e8970e49cea2fa58a7edc8a467", "1495789811.740963+cddbb3f8a4d441bace79eb69f0a64c5bbeed1de8", "1495789811.7628255+20c692a8b71651461a728050adf70eb8859c1587", "1495789811.784547+4b43d9ccc6283557ccc39cd36c83038576b65d7e", "1495789811.7999177+21dcd7d7b9696006a509acd34c1acb3caabd62e3", "1495789811.8169756+0762fe26a9fd8d69e7cfa81134e1e189a36a5003", "1495789811.8301387+485c41f405a0c51b42481bf1d74732074ea4acf5", "1495789811.8451965+9dda760d82c4c731bc20bdb827e03c0a28fe39d6", "1495789811.8620617+977b287903b269df526555f27bf335c564173ad9", "1495789826.9772007+505907a85bf55e97fdfd6f64a804c92c78ac81ae", "1495789826.9977891+8381b720146abc7ede22b09ddedce540e998e480", "1495789902.126444+f34841594d1e4e406a5e8c66adb5125664b4129b", "1495789902.140567+92e1d47b60cf1a038e9d36bf4de110c8e85ffa53", "1495790802.202679+c68c54b276927edb9782f17c4e9160b37a445b67", "1495790802.2159505+9d001f57c79008d0c57b70bca07ed848e07c5ccc", "1495790802.2279747+8660f4437dd48a61a6733813aee757b017ff01df", "1495790802.2395535+ad74e7e52b98b854946de1486ad27953086bfb2f", "1495790802.2511697+cbc0a0c15f1a47de26e93e2c2b0d79fbf6a6ca8f", "1495790802.2630672+c0009fa48617175ddde6c9eaaf3e73fda8c38cc7", "1495790802.2762504+d92c6ad181c94f400204a568c54ce2c5ce8f3e2b", "1495790802.2876177+e392dd67bafc8f5151200db46debd244831d8bc0", "1495790802.3022423+1c102fe6dcce2e132d96f76978699c2f9a53d791", "1495790802.3169153+5bc1b7c1f68ea9886015f5db97d76bd58c6bffec", "1495790802.3367207+05d3aff7e2d9c4d240c5c1bb3720da3026fcf057", "1495790802.3516364+32bb3d064b01034623e4e576258f5ae0acc1b84e", "1495790802.3646958+a78a17c76bc144f57d0f1c05b6deef8b24bbc86d", "1495790802.379113+1ef0303fb011c95d065df0c024fb0a9ba75433fd", "1495790802.3905153+630a9ff48f9740f3075ea042e3c6b8bb5d76937a", "1495790802.4068997+f0aaa81b11e2f39c873ee87edfb420b6253c9ceb", "1495790802.4196942+18b4e221ecf0f781d7b8bf23d69dfd8fea7d90c8", "1495790802.4317248+a5d92a14234a67fb6413ff096edb54f9aaa12cd8", "1495790802.4515095+9f5f1c01f4005e47e2bb10fb5a11189e309d65b4", "1495790802.4675653+5c29da4694b0b63141bf9a14dfecd04cc57a385f", "1495790802.4798563+68655254c796e8aee55b385d4995df45448824f0", "1495790802.50048+ef7bfd1184e0a728d3def6e7b83177c9726b2feb", "1495790802.512934+6d7c901d6638b62ccaa15353ca83806adfd6dcaf", "1495790802.5279396+de902bbaee92024a996ccfb86a965d601b4fccea", "1495790802.5450163+31f15c5418f378cdd70fede6543518c2ac6ef326", "1495790802.5609016+e2b7fe3d9c1f0f6ffbaee4eb409a70333947c756", "1495790802.5748882+36225ff73a9b3b9fa716925f1ad8778d66f9440d", "1495790802.586915+783b645806638442b005799175bece2bd1e5f02d", "1495790802.5990057+8d456048526157981a833fbdcdeb77c53fc7969b", "1495790802.610562+2da1a059dedcb2fd6a1e6055d4acdad4105f9b72", "1495790802.6237872+32d59f176eb71ad926fb9d983fe5728c860e6801", "1495790802.635599+4f542ba7a7af356625f8653c8d97c1fa7c6cedae", "1495790802.6471288+e6ec344a81535bdd91baeccc1f65bde37b12d816", "1495790802.6627517+2ffe2f7ed95e74c571f2fba02176a04254da06ea", "1495790802.6773362+5e4011005ff1929b87e1115f89a046f9c5fd2b5e", "1495790802.6952453+13aa840def9ae5234fb88523ed0538ebd27df209", "1495790802.7154775+527913df3066a0a93af4bd241a4f894bd6a3be6d", "1495790802.7380223+dc4dcdffba84df85dcc5893bc82fee16e47a9374", "1495790802.7537863+5a52b1cab2ec39d96a4f28dd7cb389fc2805b638", "1495790802.7711527+6faa26780fc6135965f4cfbf069f80daf2bb9cc6", "1495790802.7883422+2049ed4d7af9ae9746100b9b8e6714bda7f4ec3a", "1495790802.8066173+c2eeeb149b95d993a62f56672dcf1966eb924798", "1495792602.8546536+9f12f68cdae91767522a33aecb8102a9b5f66b9e", "1495792602.866044+1a83194f9e5ed5a7db6e4e3e4f587636e3fab674", "1495792602.8774686+8cfc96e24691d92dea1c7597e944671b0533098d", "1495792602.8893375+731c56306bbb04c19119f60d8553e122c4d473cf", "1495792602.9010625+0406dd43f1ca7de793d2179f658a33e9a66d52f1", "1495792602.9173436+461d1e9e0fe63a6fc318121bc17edab46d2e88ad", "1495792602.9291875+bf520a3ab2b3fdf624560029853be513d130d1d1", "1495792602.9415007+e3ae602aab85eff9c0f5f2fd22f1cc6043ef8be1", "1495792602.9537535+addcdcf4a617719d5a74e04dd28127fc9aa83157", "1495792602.965891+7271ce7302e612b402dccbb7b5aec7c429a4d8b2", "1495792602.9770634+48e54a58d73565f4cd316703bbf0382a846fb478", "1495792602.9971628+c076e3c69f7b42eda0532293747fcec0ca7988d3", "1495792603.0095594+5b2765773b1a2423cda58c54fc4940ab83b52377", "1495792603.0219095+883ec5b31a6579ee40434c95db1a80fa6cbf5cc3", "1495811297.48684+015eea02690ef5a83e06169c8419adae4ee7251a", "1495811297.5097258+91a9e3e77b9607b41686d78c4ac99ad78afa0906", "1495811297.5327387+4ef741893ee8ddd73e386232ea6f93855f9ececd", "1495811297.5475485+6cc093bb6b5fef4770db3f3e8a226cb8070527e1", "1495811297.5654945+5b620659106c36ff2808c59612a477e3e2ccd7f1", "1495811297.583554+eef1e7e17239f4ec03a4f72a8966a92424661945", "1495811297.5998092+607f73f89b75480d83d6bcb37025673773dbf681", "1495811297.6166751+a0a3866677a8c5efd8c3832f6888c91012709f0f", "1495811297.6357644+56c7a43ab9822491b1d263c01027e7338df13dc8", "1495811297.6551392+ca00c38ef3321b62dc4b6db9a724958b0fb8a234", "1495811297.6724234+ae4d1e3f69e5e084e0522db1bee57e92b7ed42ac", "1495811297.687952+661454742d301e2a93264806ec172e2d5414238c", "1495811297.708158+9ab33096608b50b09c55bd1e329d9749758d6879", "1495811297.724058+0db4a674b03a17c54b121962fb4540dd1bcaf7c7", "1495811297.7400424+53ac023045eb9b9efcdabf661be7994dc5953a5d", "1495811297.7547512+5f8f8a882b21429a5c41504a5099ee769e4d7e5d", "1495811297.7781713+88d6269ba289f4085d43c26301ee494c1878b8ba", "1495811297.8012338+2c03fd8c2802a3242828d4308ced1dcba329c1fc", "1495811297.815399+dc152355a9c10c9a4db6dd3eee2748d85a02b953", "1495811297.8325038+b7117e886da9a5f7d5022ec08eb776812d3ed195", "1495811297.8485081+0fa3cbdba44b54876fb8d4e153f1efe6bc1dd805", "1495811297.8615742+3282db138be3cf453f1cf6397372372117edee4a", "1495811297.8750384+a4088b9b867e43a6b0f50faa4cc7c2fb455584b0", "1495811297.8915973+96c852e1997623c027fd21e36d303f873df45322", "1495811297.9058218+4e453f560fd92c2c7110846f123f019aa9f12ae2", "1495811297.9231439+b50af1423aecfdc28562b8e26bedb2dadc939231", "1495811297.9397743+481e8de1c8bb61f1edebdcd3c617a1cf1bfad36f", "1495811297.9556968+f6f7427e1d45490e3decf66046e0917c20f7fadf", "1495811297.9686198+5a95ac15a7db7dd817531ca9dff46ab82b7137f4", "1495811297.9828386+b2dead916eb52c131a02a84ca47ecc63f0ede98a", "1495811297.996158+e6f5db4270c10647fb972fc053594ea9e83dc651", "1495811298.016748+ad08245c9dc94b9bf9d1873c956a8afac5855b12", "1495811298.0407176+ddbfe14d12ffd100a160fca6a4b4d3173ff4e049", "1495811298.0540154+bd442940c099dea673409a93c00c6506f08eb465", "1495811298.0684073+38934561583698f1bf4f674eaf215dcfee2fa677", "1495811298.0863764+23734f3daf2a5266c95aa2d9901586eda80943b6", "1495811298.104018+8086531fa8d5178169e202558c8062ef57ade56e", "1495811298.1199293+bcccd2238f1913393acf0733e34d9972f16b751e", "1495811298.134258+bee55071d86892873bb0a65d17654e1be9cbf5c0", "1495811298.1540616+f76a64367020a04da4cfcdabd19b20784e186e24", "1495811298.1685693+51115898cea35f5afff4a47d04fb7ef5bf4fea4d", "1495811298.1874597+96d0272789dd82c58f9aeaf95fc38d6c3b8661cc", "1495811298.20421+7ed74ac6ab3185fdc21c2921b69a24afc920ad2d", "1495811298.221717+674de277ac99bd69dc7d92641f86785d04e79d6b", "1495811298.2425327+7235c579c418fb942136bcf9c72abc9b56f28de4", "1495811298.2626553+52e48b1eeede005657dacd6a4c1f72970fa80e83", "1495811298.2824476+6447a1afda17b040cbc456871386acc51b6e4ac4", "1495811298.3115294+e35bf5d6c086228e94c4389f69d968fdfaad5df9", "1495811298.3376052+dd466b99488bcc97131a4eb3eb4a8b3acd534828", "1495811298.3537874+73ed6d8b7783e529a5bf1326b77ceeeecfb378fb", "1495811298.3714864+bebbe5a0583176430fb1ba04703795945b89c8a6", "1495811298.3853528+cb0f20f28e32928c12127207c317849065467a1e", "1495811298.3998516+4144c49978ccb067f37f38da6bf65ff615b43a23", "1495811298.4133892+d7db61b6407efc650923239c9807b9558398da68", "1495811298.4261894+6fba7dc585205e6060eb04d4e0fc21dfd617769d", "1495811298.4402242+59c80faad9ff0d2327e4c7437600bf001d199a1c", "1495811298.4583123+54c7368d1f049cd3dbb42debdc2d657dce9af41c", "1495811298.47352+ec1e2510b34da402a2efdae0c9ba8be8ca82c714", "1495811298.4892187+c864ecaf8dafe15182046a3ca6488aa91ff23c03", "1495811298.5084312+28bee1c56dfb75a83b0cff26566f8bb87f650d75", "1495811298.5233393+591bc2c5ae96f9e32d1c8053eb738112346c2d0b", "1495811298.539819+3c49674043f155d8cca4d4601fd1ab49be7ee672", "1495811298.5564613+3beb6c37a2090394d45528ae94cf957e19a9dc70", "1495811298.5690305+26f85a568fd35dcb253b90428d6836014eb7714c", "1495811298.58582+d85276f73a55e8ce6153c5c0322724e530f181bf", "1495811298.5989718+8e92d5d839c76ca58aebeff12ded418871f876eb", "1495811298.6174212+d270c6015460d7cd766e2b978016dfcdeb5f9e5d", "1495811298.6377182+1e12b733544b8876a85d925c1218a257bccb553b", "1495811298.655175+df21092d3b060cb69e7d8e09f8f06d1b42dec41f", "1495811298.6806843+0f73ddb257eee9656879dae3c06f9adc8b91c07c", "1495811298.6959534+1fd8ce2a0582800ee476d8a21a9aa33dd32b5e3a", "1495811298.7231352+ed7090e647875a1b363a18cca84c8e131dd2b598", "1495931634.804929+2b7cabc0c8b1f7a3771320690cdb6c551e47ac7c", "1495931634.8236609+d4a913d1a8cb9dc9d445acd32179f4e4f40f807f", "1495931634.8359585+ffa59f883a0700c668e7f2344b5addb8314a5216", "1495931634.8483367+93f277de0ea71c8a2d4f94bb7479459c3243d9f1", "1495931634.8606777+0ce94225d0e0040b9ab9acd89a564ccddfcfe00f", "1495931634.872712+73aa7a6f7b29a3dd7537b1bb5ba0679962b32305", "1495931634.8886843+ea9e5b251a72e9e277515e03f48e53020d2f7653", "1495931634.9008784+fdefd39b0964fcddc6e4ff222ce58c0804750078", "1495931634.9141703+52e5f7f875a3c32aa68c64d9d3d0e47f33d52ff1", "1495931634.9266531+61c02fd2cf1c129d2ba99239d8269dde63ed1fc1", "1495931634.9387932+aa36835bed470482013003b9ac22543293a43eb0", "1495931634.956519+6d510dabdc937d2cf637555ec909ccd6673d1885", "1495931634.9741352+dd4ab1330b4ef1753f078c71240ecaef536b1b4e", "1495931634.9907863+be8a33b5ccd0640cc642c112f27341bdc7e0f8de", "1495931635.0039217+27bcd4e5ff0a35ddd1161c366c4eba9d55f759b0", "1495931635.0235958+d413949132c518679fbc48508742ad82fcc47dc3", "1495931635.0381324+f0ad42b887d7018bea2e73f4f605b25d6d9cc4e2", "1495931635.0560894+97aa37a77ec7bb6cb78d1892a69cddf18c5e2b1b", "1495931635.0716546+875816f23ce0c3671ee3ee7ca4f1456cf276f8b4", "1495931635.0858927+0ffdd42dffb139867ba589f578ace7a6a4c4787e", "1495931635.1090765+f42f68f62dc690c9a06c478fedea74c631b2c488", "1495931635.1218696+f62091099b18f089fbbe6bbb3edc33dbcb6e78ef", "1495931635.1432319+9f53816b5fbe144968ae4a6c4e986a1fc75521eb", "1495931635.1585124+9159af1a1f41b0feef1bf5470ba72749b6917e56", "1495931635.1739051+a43ccb9e36c17b62774b2d5dadc0c6864868f519", "1495931635.189145+58479556ddfe7409d7d7cc582231ab56214d785e", "1495931635.2098806+10739ece0c229a01cd8ac65c80077b20cb617c39", "1495931635.2324839+b34e2006ff53cd6ef8159e97eb67ad3661f71aae", "1495931635.251482+74b46fa84734a9b79eee54275e4cbb7cab639ccb", "1495931635.2678955+1e226da87133400f94cc545b34bc71fb6bbe9c18", "1495931635.283701+51b447a8a22d96f6760f6516bc1ae57f8bd0c9c1", "1495931635.29844+94d6137389a65a70cf80a392228a99cb689a8308", "1495931635.316741+509907b8788b495df10ed6e06b0ebf714ff4ddee", "1495931635.330863+b4c3280b60bcf609f469470dfe18bd816979c15a", "1495931635.346286+ffd19510b52224166f9c7e1fdc418cf9149b90c7", "1495931635.3600903+bed5512762029cd8f7df8552352c2289c78dd59f", "1495931635.3722737+b2820db7dca45f0fe730ad140145f95f24e66623", "1495931635.3866394+568e120c02940679b45b83306bfb217b1fdb5e0a", "1495931635.3987238+b065566c2bda1bc7c097b324ddfa96daf908fb4c", "1495931635.4138749+bca1833b36cefecc8f05e4518021e479d82867f3", "1495931635.4474814+45dbc1773bc9bf138004f60c69f1e31db82573ef", "1495931635.4628494+2de738cc247191c1d432a8c48fb5b30e63db6f98", "1495931635.4800565+f9204ffee18bcb60a5ec75bf1cd17dc148937b79", "1495931635.5067809+1a096723098e989fd6fe9de85a4efac3f655be90", "1495931635.5340025+5e6230a939841f4cd5f10ee9d85465a7cf5943a3", "1495931635.5592904+21bcd4d3b45c093a2c74f9d4da8bdd85c6c4c9c3", "1495931635.5777166+1844afb2eb6f1e4e8cc674783d2db8478e2c4312", "1495931635.5947318+84ce7bc0c73cd8631fd1bd416dbe177543007376", "1495931635.6115947+b8dfa9c05de7705f6af658320d7d90a528d8a8af", "1495931635.6268022+3915fb47eae520f74f3864c6a15a1f09888cd373", "1495931635.6439302+a2221ef190c841c7bb321ad03d18424efccd9be0", "1495931635.6614876+c77075da5636e8a352faba293f998d5ba752a4a5", "1495931635.6750178+34bd332f941a9179ff28f8c868f3274599c84f9e", "1495931635.6906307+758d7e33a45775b754b24b8487ee70a627e24b0a", "1495931635.7040555+215247e793480ddfe338d3aa595e9a19a23528e7", "1495931635.7189298+ca1ab4b23a6f1c4117ce9e48f96748b845e1f4c9", "1495931635.7341068+6fdb5023048983a7e96e9d508708637dc901c86f", "1495931635.7485619+e7fa12d39e7b770ac1d1cc78a0ba88f7a59f2041", "1495931635.7626274+43191409ae8d8000407430f28660e8262f78e40d", "1495931635.781535+327fa93173f6b09548e9fe26c54b375b12b115ab", "1495931635.7994955+98a09fc34f36c08f405dcaf9132e54458d4df00b", "1495931635.813529+f906dd32929ba1fb9e75b040501fd27c17105d71", "1495931635.827753+bf05b097c300d831f0682f8dbbd781791cdcf379", "1495931635.8398583+c64909c2f8e05d781649be317874c908083dec66", "1495931635.8552148+8274cd9b5952a73dd51f7eca8bfdc041e4484e27", "1495931635.8706117+f58bc08f1c02f97efb8933e709906d0698fb7b63", "1495931635.8826008+c54757669258e1eb9be190bf7fb90dff4ecad2a9", "1495931635.8957467+ee32b1f8e6dae8bede0bde95177f51d0b5b95768", "1495931635.9075198+30b7b7f06bae948f127e68e9d35ca570ac173d87", "1495931635.9229138+86ff31f17431b4bce5a687fcdd6a6c48d6e432d0", "1495931635.935402+cf3fbfc3f5ce876bdc734d28b1c8547c41cd6533", "1495931635.9479485+a33ad04a4f124084d564b16ec197dd42b37f2a3f", "1495931692.8829062+e5e52bf12e03de835607ad7a9bed9dd96a47e57d", "1495931692.9002745+e7670601ce80234907c410a6ba46ee2d8c725ac0", "1495931692.9164608+62854a7972348e695286e1e73cb051aa36013ae4", "1495931692.9319088+5d29ea81be7927fedfe0e16416075200db58a21d", "1495931692.9475303+8e3a5a26df56fdf7a11cb525cecd8aa7a4c2efb9", "1495931692.9633186+64619fd568fd8efd3626b14ce4c00e6e2115f18c", "1495931692.983699+6e7a58d9bfb0745c5208fefde2302d6347572151", "1495931692.9986746+7779a6f57ee02d8a4fe5d8a4b670e5f1a8f0bda1", "1495931693.01143+22c00f0745a6dc5d192e0f6ce995b8a2dbd76878", "1495931693.0274637+eaa719f5a2d2dd79c6deb8facfcab08a1f252c7c", "1495931693.0391107+746f655915e82188cb27be83a3ba1772002f280e", "1495931693.053793+b637c6a7b09d51867a0e78c3be4154c9e3b5058a", "1495931693.0660326+a3919698e67510b58f9063d480fc138927dea2f9", "1495931693.0799074+0b377873d5cac3b91d9d2b4031b056fa915adef3", "1495932593.184007+f1fc0b14fe730ee7d6b247856cfd2856e28873a7", "1495932593.2075489+5266bea5ce5321c5f98b21d1ee2f2bb0931246b0", "1495932593.2221308+df25f9ffab373b2020a61a78b5202b0a748aca52", "1495932593.2382355+97ea5b631081b7a2cdfef16eba2a3fad58ae13f7", "1495932593.254551+8b9cfa56f63af3b548bf93a7f630726a8cad5f71", "1495932593.277205+9bd6e08bf1d26bbedf6512f27587c82aba60d04d", "1495932593.2957435+43af2361d48201920a4bab19702658086a07dd2d", "1495932593.318718+99f75ba89bddb9050c7a2e2eb48ea090e0279257", "1495932593.3356197+d553265cf87b0430055b3e2d7cbd57eaac443a36", "1495932593.3550742+39ea85f5a26b0f4aa838c84bba0b2a8c38150087", "1495932593.3711092+216bc51ad6e944fb7bc62627c73b0f72906ef9be", "1495932593.3891737+4a71d58629919752b8ff01bd1b113437d23c3151", "1495932593.4104786+fe4ecee603411a5c0839201acbe088d46e60c401", "1495932593.425029+ce1e0fc3cbfdff2ceb3ab24b2d42dd95253e2823", "1495932593.4453+dc4430be3ff9732865561cc7de88b0c951c46368", "1495932593.4597392+e940d0321083dd78413b79c00886c19c73ed5888", "1495932593.4768653+8cfd8991cf1ca10f4cd4ece914aae30d5f18452f", "1495932593.4933062+915e53a5d4d52a578365dfc61dd9b07fb4d1fe02", "1495932593.5083334+5010fd8dcae1cdbec0b116e752dfe10a7def19d3", "1495932593.5378401+8b1ad588ef138f828743a1b22c229d95d20ef2ac", "1495932593.555597+df2fab79f7c763a5808fddbc3b530915960e8a60", "1495932593.5753117+9960e264eccb48b212211f1e0e141e021fe4e099", "1495932593.5923028+ab92bd2f7f34a9cf6cf76f0d998a1f3499e4688c", "1495932593.6056976+5c12e3d1ca8f142998b99c708c0963b4b6cdb227", "1495932593.6218324+7d937a5ea8375f41ebd01ffe1662641a026da9c2", "1495932593.637176+04d797b00acabbe708fe687872bcc323ed8d39a7", "1495932593.6567018+7ef169e8b6b553f9f1fea78772cff0ac7ff6a0b2", "1495932593.6736722+36b65b5e52428db87fed47383e573754e13b4246", "1495933493.7202241+ec9947f99a29c0d71ed0456b600b3563c19469f4", "1495933493.7342389+6e4184819e10c9df524fad6842656196639f85e3", "1495933493.7470815+79498dd3c59f0445d912960dbf3d4f2d50d8d064", "1495933493.7704437+cbc2b4865914b7a138649ec0fbc18d4e9c4f2a19", "1495933493.7827506+37aebf4558918d358f0ea389db69a96dbf34c481", "1495933493.7958252+bb8ac4b2abfed3c845cb32da734c628999fef388", "1495933493.808018+e112dcd08c2bc9126c4ce04cc8b858f3dcaa46ab", "1495933493.8195198+5c7dfb24ea95ea338e0d8f7206b721b3b5efe163", "1495933493.8314118+74df646780a970ee8ae432f7a7a352fa2901480c", "1495933493.8505838+43c94af933698c4d2c3e2ca8e2bf809362debc51", "1495933493.8634043+f04ff1e057d0e47b83a83bd5a07dd1334662839a", "1495933493.8766227+4bfe20e6457eeaf10ffabb7839af75c2e073fb3a", "1495933493.8892508+cfdc56fae8490ff2896633ae09706c446e8c1b9e", "1495933493.9020915+2812ff74a6b63f7e356acf044bbe8cee0d9e88a3", "1495933493.9149294+28b305aa9027a9ca92fb9ab76b3c15f3efc56a49", "1495933493.9272194+57692f7fe3022ddd44caa0f612d0dcc879749ea2", "1495933493.9401526+e0b4956ef75a5dd9701c22ed3a2d7ed2230c2be4", "1495933493.954081+45856f8652dee8a9cfb3f21ac80986d0cc3482fa", "1495933493.9685826+fbfb33e264c62cd96d33097edb45b1f7812e2245", "1495933493.9860475+92bcc49a11757a00766ce4b2d3369d53d3646f09", "1495933493.9996169+fc621c1161b8e4126153521035a8e1fc95359d5d", "1495933494.0291345+ea2f81c2e93be732a40a6b52f41783dff7bdbffe", "1495933494.0418844+d681ede8b82ab3b882ff6d5126eae6190d94eba6", "1495933494.0536091+97cb814c66c9d64ad6f347a43812c0b1a5f4eeca", "1495933494.073634+ced86e320dd7a620b844479b17e697d680fcbc12", "1495933494.0866368+4f9c4a80037a31bcd0ddd7c22a9eccb0ae38df8d", "1495933494.1005878+20a4cdbf121856baac2acbb3258bf318ec00dee1", "1495933494.114825+b67fb6bf777daa54f1937023f121a027416a8be4", "1495933494.1282213+be4949a36ab53a8480f0736d179c0a100c173252", "1495933494.1400504+52ddbd25b5647fa55b2d21c1dc941699a1441168", "1495933494.1521404+f519a87db0463bbe742c8b5646d84d8dac431197", "1495933494.16507+d00a97d8b441fe85dbaef8fb724dab5ab6833332", "1495933494.1787748+ecc79d9b9dc2f49002d0c6bdfe70853d092a4a1c", "1495933494.191304+83151bc237c2e1131c95c4c53722ed592e09d240", "1495933494.2109883+b37210f19332b5c916a1226543801f32991e8127", "1495933494.2277699+7c1a98a7afd42754c4a845c749e74e75b2866cb5", "1495933494.2394936+6e3d7dbbd3d2ced328b8ace4f2ad7beb3c8f299f", "1495933494.2517333+0f3162493de000be679e6cfc79eb692ddc171f6e", "1495933494.2668924+bc6155a11e3d3e807670632350b1eb12e51a33b7", "1495933494.2811291+68a0785f8c3072ed15fc6738209f27ef5279bba0", "1495933494.298407+2c3d6dac58827f686c1987b6e2750dc016e18650", "1495933494.3113127+053bd644c176444f52cbe27d921cbaaa16188424", "1495933494.3241284+b37bf7b223b9d907382887fca913e5ab20830feb", "1495933494.3364239+1ed6ff1647908cefc2246209d1ef3411a6a34901", "1495933494.351101+530fb9dd69b4c4b6f2a048b32d9633f68c33c4cf", "1495933494.3632233+09cd282e58c2c1d3b071a93424a4288d298fbba6", "1495933494.3757298+392c1412d7c79a9a7c44c59fecd34c8196c69953", "1495933494.3910155+a8e58198d57ddfe27efbe54dacfd419bfc592fad", "1495933494.4040499+655e91713a57b07f753796726dd512dc63b2aee7", "1495933494.4207323+e669054b82f99609120b1ce5bca60688337e4d0b", "1495933494.4334247+cb7191f214325f03f01cdabaa75777107a7f5285", "1495933494.4463727+bf23dfb4e529eb98f960d071b1834aa94cf6d44a", "1495933494.4582727+791b13cadb88ea7454c4f75171ddb5c663a9f882", "1495933494.470741+c1e01b568452f86fe44e3551bb7c52215418ffdd", "1495933494.4825323+1940e7f63c6467c3f27e506536fa308a456ab7a0", "1495933494.4951115+cbdae03f7ec0b88f9305240c29e00e669f2bb730", "1495933494.5128756+2c648c57cb7ce1e493cf3e6b5a8d5ca25f2133d0", "1495933494.5270047+c6c4b5bb9d69fceafd640a3bc5a2c308441165fe", "1495933494.5393283+121f5aa50031a184fef2041d40169a1351645d4c", "1495933494.5521102+d7cb6cc91a8a87ef172b485a183266f3d2a6a059", "1495933494.5652096+033182bbd3e90b91b71bd77edda9b5a50427134b", "1495933494.5791545+553cfd0336030ac5256d1f2bf79a1c77367bc99b", "1495933494.593876+6a33c9ba876576401def451cceece4efd217f56c", "1495933494.6058147+8d5e41bcad11b4f007a02023b71af1b8ad0a7bef", "1495933494.6195636+81ba832c030014b24cd0f1f05ffd1413bf3ae293", "1495933494.6312237+d988bf89b18fb873f44dc63b32e7aa33219d1a5c", "1495933494.6434224+e3032c19fac271a1c6754126dee1f3bd3018c745", "1495933494.6553428+37e7747e1fae90bc8a1a54cef6b0b9a2ccb4b006", "1495933494.6679754+c412e6496db80e14a9352a70a210a92c8ae99572", "1495933494.6822176+a78983298c349f530f3f4582834d3c4433d21bec", "1495934494.0493326+8aa683c06c172077ef0624db69f0c9401fb09255", "1495934494.0796294+bb312715c9cf177a04cfac1133fc6c768fcbeac4", "1495934494.096108+55d03677ba1b803bff5b3ccb8d69e5c32b8675b1", "1495934494.1121194+464e02e0c306e47ddef1fc16cf40c09304a6cf26", "1495934494.1330893+9be7480185e16b19f9388dd1be7c69bf4768c726", "1495934494.1566868+802507c71250d2f16f306cf5be8f412e130b39f4", "1495934565.7165809+42d24a35b28972b1d106104bd9fdb9699c1bf5f8", "1495934565.738796+a999718778e38685314319c3773181aa5e1a4975", "1495934565.7699635+fbeb78a95fa864012dfe70733996949b820e1d93", "1495934565.8086047+943eced2ee473d70b2ec7dff030e491fbc896372", "1495934565.844241+2e610aa5eef70a9803d0045674f4e21da06c68f9", "1495934565.8614056+6663575f9c1a0380e3dbc2f00fa88ef98f4d4858", "1495934839.6361778+fa466bdfdd7ab5b3abe8dfd7bbeb0f9f3de18de4", "1495934839.6678379+b2c264afe82cedbc54a6bd831206e75657bc320e", "1495934839.6937165+c80450bce69de80cdd04c0d69e171c2ce93e9bfd", "1495934839.717305+d3f2aa48d3e98fbf3c0fbb9c692f70eaa0665666", "1495934839.7399666+2fb74405dd367b41b718baa099d9363051926637", "1495934839.7629461+f870970c2703405729527cf352def453e702a8c9", "1495934923.6909978+90180739e60c2e716f13c7e6a6743ed22f3e92ca", "1495934923.7115705+811fc0215b48989b5234a861239e27733be663b8", "1495934923.725368+a4103b604204c50fb419b75b6cd23e79d2e04fd7", "1495934923.7377214+e9c7f11dfef1754fb99cb4789277b35d9a5d6616", "1495934923.7595959+3311a31622a7a45723d83f80d31886f3d9d334fd", "1495934923.7723465+69eca81403b16067cd052f777b884ee877abb867", "1495935073.906472+4a0c15775a2e4b6cdeea2033e325db1802499842", "1495935073.9228556+6cd289be1699a5fd2a6c3e572bee75ae0c59c073", "1495935073.9349313+6267e05c9138a4a6c1063dff4a0586ac31ec3b67", "1495935073.9500453+3c32f3dd1b327fe52f0ec3dc007aafbfba93edd2", "1495935073.9675815+6e096a42e693acdd3c4b84c70913e91498d11497", "1495935073.986259+9d73c4f5934e017977ca1409022b6a5b66c3bcb5", "1495935429.3287752+ef37e1c9a8cce8f6737f9c357886599ce350069d", "1495935429.347224+f8f897629a5bf3780b090386d95f8f0a27e1636b", "1495935429.3618639+cfb84e12ac65873d6280a8768280010e09bca2fc", "1495935429.3810222+87bc73a9f2faa94bdf02880949b71c5da3ad7783", "1495935429.3961163+44a3fcf656e5b0257a99817cc75d665608814e07", "1495935429.4135933+5c1eaf3917f3d447c5561bbbb32000f7bdf41842", "1495936239.2056575+3ae88cca588c264e450f37cc4e3e597b66bd49fb", "1495936239.2295682+b978430cc945134108ed47b80613f4a9e55f20ea", "1495936239.243981+eda1f2905083da4c99b983528278b7e5cf147da8", "1495936239.2568133+3cc05c83b18424e58fe01c2fab30f8c7887f29cd", "1495936239.2729535+44a39996ef0575b48d4676e4b28877768c5362c0", "1495936239.290502+b5a863939deca187b5b8e9b794e2d8e182c26834", "1495936631.450593+0973e69281ca4821d70f64d75156aff005ea6e88", "1495936631.4647856+dfcef9ff7b877a544e21d2e692309926effa36df", "1495936631.4821649+df6ae177d00ebd18ca96de819a8018adf7f71809", "1495936631.4986184+c42dcf655b45fc9c43c01c2dc52096f1f9fc7685", "1495936631.519037+e2e1927f3fc6461012b82c3e479b0c1fb5927d6a", "1495936631.5596495+bc513dd8831ea16aaa2f9c986a3360d62fffe02a", "1495936878.1311274+cfccec0b0da708e9f75bebe1c7e1460f195328be", "1495936878.1516256+e045eb332b37b0ecf54790b1e88431c3d7fcede9", "1495936878.1778078+d122e63700d7f3a9e45e2a5a7c6f990b673ef2b9", "1495936878.1962483+a6a51c76b0d5a26e723bd7b7b0d3215f420290f4", "1495936878.2137408+36147d11adddfbef023170b31592bc535063baf7", "1495936878.2338953+3eb62ec339a0b0b46908884f4a037fd302224398", "1495936878.2503276+b73ea5e42461006b27f7f0515b713c00b6b10860", "1495936878.2711027+8340177823d708b911af1a2a17b4bbfaf9138740", "1495936878.2890177+9aa4666debf252fb231466a44f672a72144ce3bb", "1495936878.3074446+0bfaff272ad848e01019cce2c905ea02419816e9", "1495936878.3276567+00b59c76b031fb69db9a302cbd7803d09e4a7d3c", "1495936878.347441+133800eb24f06d1c23b73de62e87965b7f4107e6", "1495936878.3628685+8d0fac2070714389c5d4342d8601c82f39881a1b", "1495936878.3782315+51ce995dce9fb7d6ec2f327936df2c5d7d61549e", "1495937059.7556765+2a0cfaf1ad4cd587a9f4a92678bb4aaf980d7d1d", "1495937059.7715607+f10c481d30b2542d36bd5f02b14bd991ca74fe2f", "1495937059.7863116+5f75f6b08e009761da6e9c7f8e962d1434e49d36", "1495937059.8006358+dde91c8149208cca234e84734585fab11b5a4903", "1495937059.8130093+4ec3f5a17417f78fd74ef1987ea1666598aeb7f1", "1495937059.8301294+ebdae60354aa60315dc61ec789f75590ec6dd2bc", "1495937059.8487966+fa4af059c071138ad3dedc2d8cbe5c6a34c3cc59", "1495937059.8700457+29514b4c4f57ce59a083756bc9b702423bbb266d", "1495937059.8919086+ab70783e517f81752198c834ec8e1add5479e48d", "1495937059.905934+5cbad5b744e287b597fc574983d222243c47e5ed", "1495937059.9209027+5e5aee8839ed9e12d839b667861878d5c26c123f", "1495937059.9352944+200dc56090ed79f899cf7407c2869ef479c3e9c6", "1495937059.9474142+88022795f0fd93ccb38c89200e1e1f04603a42e7", "1495937059.959519+e81b0e8f27874de7b86f87f32832796a045ae97b", "1495937235.7110739+da47fa66be11545b8a8c323b617fa34f7194086c", "1495937235.7291505+cf496cf34afe86fd849160bb053203eeb29c9a8d", "1495937235.7461295+3c90093b19800eff66483eef8397c591a347369d", "1495937235.760261+460a0fd4782844448b73fc7dd445c770bd4ef2a4", "1495937235.7723446+657081682d799c0ca35448cef96baa39b613b20c", "1495937235.7906625+66c77bc759c4deebf6929f82e0749ba2520599c7", "1495937235.8040707+7b537ffbf0f35470bd890f6db652b8a714598d4f", "1495937235.8236663+4e8649f04ea997cff2ddc725736baa98d4be54c0", "1495937235.8512058+bd635f6c8883cce8180b8a62a3a4af600af0a7c1", "1495937235.8679535+9b74b819ad8e90c11ffb8626d32f7bb31dfe4d8b", "1495937235.882029+049e5547bcc9ba8781a290524256bcb36c16dabd", "1495937235.8949482+0bea72ea4de39b5affae287e6fe953a8ce271e9e", "1495937235.9091651+f0059ebabb1e1c0c8256280184a793121373d860", "1495937235.9232411+efc7d79e864decb200bbf1779cddf4264b231915", "1495937311.553424+783c972a9e839e0b1ef37460af3e872df2005f57", "1495937311.5729568+8d97d5da15bec504ea8ba4f9577daef2a2bba9be", "1495937311.5853827+06c5e9364f6aebbeb43d8903a125306951fae4fa", "1495937311.5998878+b4374ec15ade5f0d9120bc6e68c702343941896b", "1495937311.6157465+afee22bf8ae4ab672353ed5265d9673e6ca7e742", "1495937311.6319015+a00f7332b680bc0355b842cf487d84ece72d524e", "1495937311.6441174+4bc8722d34aac502093055d9db05e3ae2552e4ef", "1495937311.6641767+4751625ee98a1c790a08a5587a9f2123af6c8954", "1495937311.6865635+23cf8b57aec6e5f7d63b450130bcafb1fb1ba84e", "1495937311.6989458+7025a8a101dfdeb051e00e475e9223b8613f25d1", "1495937311.7119875+9eed14ffd6a4f51fc937142debc44bf0fa6c6164", "1495937311.7320225+49955e8b51b56964a25685bdf04529345ac1595f", "1495937311.7478454+1574b14fe412ba17b9809a3b66f740c55e4309e2", "1495937311.765794+2c51b44ba76b9094f9b90887a4a0b18c74588913", "1495937375.451767+70d17463b2354b1cc7e3952bf7b986a0243f0f53", "1495937375.4710574+014a22dcd096e1ce2ce6775f1b95f9fe17b39f6d", "1495937375.4834585+ea57a5774816e3c677d1adaadbf50d01727381ca", "1495937375.4966388+4cea3859c71244b279e918bbd10987e1e10bcbe5", "1495937375.5112286+b65b085c302c885dd8f69e772b1ed31e84d13307", "1495937375.5254216+961f61a040486fe381d3343f0f61ad728e953231", "1495937375.5401986+5e4b3c17750fa5f4ef68eb5ff88aa8334950cbbb", "1495937375.5530186+ae19e982b52403603b72ac8595760c414f29023d", "1495937375.5677586+633b1d2c334785ec46bef91acca2c460c9599d29", "1495937375.5797858+5d5f412c37316efc9c5a935da01d3718c75a4b6a", "1495937375.5910604+27b86ecb2f2cadb3b2af4f5489c2692ab6b99e06", "1495937375.6027756+7761763da3bc91494976a02cbefe44057d1e9712", "1495937375.6142364+725b62304a032a2a73eec2e261e8e9d29a272a6e", "1495937375.62567+9d441a94e197d39de062081314a9f85cc0fc1cc7", "1495938275.6851044+4eaf3e4e5cc052a8983e09912dce4e7ad2641119", "1495938275.6999283+359a9d26969afc9a6dee374f6254ee7c8b424c90", "1495938275.7184968+e66f11e085add94215952702c5ea82024adf1948", "1495938275.732946+31f6d621cc64a9cc5fdb9d2d999738daa912d640", "1495938275.7458124+ea5ee512d9e808311d5ed0c8e52f1c87f3562a93", "1495938275.7626867+2180a54c7cfc09c813a7cb03fd7ccdf59777e837", "1495938275.780764+9a2775edbc779495859035d83c4c1b4beeaadf26", "1495938275.7969909+8b8bd9a0efc19944f3089e0fae7979ab83f419f6", "1495938275.8127003+01bf972df87f7e4cfa3f0ae5b7f30a81b4fca74d", "1495938275.8327796+14c95a9db4287f4b7396ede7f2f7aeca525d9b70", "1495938275.8475044+50ec59d617b299437d91eb2dbb3cbece9b281853", "1495938275.864108+99cb03fcd9580c1eef5de34c3922d8529e619f18", "1495938275.88282+b9b1f5f1a70182e919d1737733ae829430734fbe", "1495938275.8974636+922d20344ba0ea837cffe2894a7377aef271d2d9", "1495938275.918574+a7a4b289c251a99a17cc1b2c0dc1deaed7d0434b", "1495938275.934086+389570cd70f022fe1da653906d243be1a7c579c3", "1495938275.9498599+866662e9160fc2180801025f03c43967c850b2f6", "1495938275.968158+e407cbab4a9a1eec64c8124a7eabaf6599f3dd1b", "1495938275.9829512+52faa8b06fca38cb10d5abbef8d226b23257965e", "1495938275.9991956+a52e2915860051c4b3f8d37f8caee89804c303f5", "1495938276.015193+c1039a1bef991d7a0809aff66ada680227637fda", "1495938276.0267553+c71de0c1b27361a80b948f82da157b86f5defca2", "1495938276.0467856+86e2c6d4974fe1ca66bb8451a07e9294a46f7df0", "1495938276.058769+05685277a766b2d07c1a30948a75662e38d6fd39", "1495938276.0781581+ce23892d5ab5f5652749f4a5f81f7ad17fb41986", "1495938276.0911183+ef61eb7368b6307a873703922142b7571c034b3c", "1495938276.103398+5a55e34f62e782952cc40e1dedc68f97915a980c", "1495938276.1161137+db6188f5cf10e9c8e1f0949ffcbad6b6a5652c62", "1495939176.2170727+69d51414709b9568e55e760147d8d9a47b717716", "1495939176.2328355+3936e2ab15005908c47527495af023d630302061", "1495939176.2485013+45b21df90eb506e5f429d25f35ae4a54c3f5eed5", "1495939176.266793+ed5983ac42ecf7e49260e738ca4ea1d41879a2de", "1495939176.2794309+04e20b2a892bf71db20b7a9f5d54fd2ddfcdeb89", "1495939176.2954674+b80627dedbe17164ebdbc6ff5d67df9fed317b1c", "1495939176.312415+5e0dcca349dc711243488cab440d194f46631d80", "1495939176.3291276+3bd10b6eb5db722846b2980d968adcff054b7c4c", "1495939176.342173+4aafe808f4fab945579779bd37ffece7b375a9dc", "1495939176.3581204+3cd5e51e517e0adb770f46b796e01eeeeb326dbd", "1495939176.374645+34cba03ad73241b5f0262edd88b977537d24758c", "1495939176.389597+0a726dad34ab68b94ffe038f15df37b57f2785f0", "1495939176.4046397+7e20544360e1a59b0bf7eac0f9a2049f2fc5db96", "1495939176.416288+548b1592bbad10f657c56ce749a07ebfb1007e0b", "1495939176.4332807+93ce5df63b2269f81b9ae9a89bab3ecd09cc7d80", "1495939176.4450097+d0a6e2ed588c79852234a186f0433b913a6f6d8b", "1495939176.4574661+c4d340757a566473bd2191e99456a40e1a4901a1", "1495939176.4791372+70cc4a2adddc7183f32ad16ab9039c42e4cdb5bb", "1495939176.4912205+d1aca8986b01a4fc09d38f6b2059224bc43cadbd", "1495939176.504315+f5399dbc7ffa7d0735e6b54f6500a7c62523a602", "1495939176.5157564+6a3ad7efd8bc58444d51ef52f07777418a49cab7", "1495939176.527553+9c792aae4bf5b1636dd281d74f0a05be263451de", "1495939176.5407357+3177ce3fd7e938067b737e3bcf40cbe010ec2ae6", "1495939176.5523202+428819bd8abcbd12f5581f541b465c94efa430c7", "1495939176.5636802+c097e6b01d8446f6433e820d104621a90ce5392c", "1495939176.5752034+6674d59e58ad88911e6b1765bd163cbd5aeccf75", "1495939176.5872386+d082506df1578069544839f79f349531ddd356cd", "1495939176.598891+adbb220ac3f916d98ac3f1c6a7a56e702f3e4e4b", "1495939584.8324928+1a40a094d2237a8ae7499f694d5955e32a5d1b16", "1495939584.8459415+0513e6e58b4cfea603a86fa49d1724a0b01fafdc", "1495939874.658145+982be9c9930a2a90dea22eb8f026fcc1c1a569e2", "1495939874.6707106+f74b2efa10170210400880d1619d2a40ff15c2e9", "1495939874.68596+c41204ad8ffb136d0a2e93e50dd36c858a26b892", "1495939874.7009284+0ff13b796c0f01621bb70edecf0a17c1e3111fc9", "1495939874.7160943+d9d1f64d916572ec514feffa1f003f26498cd083", "1495939874.7314246+47b413a7e58ade4bcb27f5e89cfadbe92cc9148a", "1495939874.746289+11e8a6ff7b45be2db621e29f306064ae55259582", "1495939874.7616036+6bbba195b3880576b4f95de56dfdae3dd0867827", "1495939874.7828183+3dd259b806f1711b40109bd446e462a34c62a6cc", "1495939874.7997205+b1cb47173aaea62d50b3523b740cd1c5807bd52e", "1495939874.8116827+327e870779111112deb5281a9ca3fd8516b29ff9", "1495939874.826871+743383fcf4b8505ac3353a4b69277bf09eba1ddf", "1495939874.8396008+86eaf9e85b8c24efcc85fda9fea6f98e0a6e7109", "1495939874.8606706+e1e7310415e41f05df32dea8b073c689c6b38a2c", "1495939874.8769567+9cfc82e46435f76dfb62b1101206718a71caaf16", "1495939874.8947096+fed8191b5644db8e84216c0f3cc2b755f87ca5c1", "1495939874.9101322+ac87d922d8d3d586154392a48d06addf18b7ab41", "1495939874.9261708+e14408633caace1f880cc5e09c9042f092acd4f2", "1495939874.9415846+3088806fba1c9be7e97382d3ccd528444e1a95dc", "1495939874.9549668+769500f59e31265900d0c0771a5a6375c6bc951a", "1495939874.9746056+d1fe63bc1ed69d3d59543adf2ae7de550d7b04ba", "1495939874.9867053+ada90bc01aed11306dc3921617bfe582443718d6", "1495939875.0083532+4a76035cc024a50b87858c1845f103301863d711", "1495939875.0228937+e2f857027d899313f9f52f5d296f1ef472148c7b", "1495939875.0350819+a71570db2da5cac4e693ec917db4d1fd57231375", "1495939875.0491176+1143212b53aaf432ed6cd124c83f93be9ed9f177", "1495939875.0614355+d03a4604d76047ee4d3737af380b69540b6cdbc6", "1495939875.0734153+052e3e856c2c49fe60530c8dcfcd0977e61d4e5e", "1495939875.0854971+882029ad2daddbce87a94d02723e07ae78548622", "1495939875.097414+70bb1d16be892b17b5fab6401f50bbe63468f864", "1495939875.109123+8e8a5dfdfe3efb7eaea757e41aa0c2498530e5b9", "1495939875.1211016+fde77d0130d6bd4995bf9e850dda1264e2fdd9e1", "1495939875.1329536+1a9c584e96d8e75de7295763d770a1ed29ddbf60", "1495939875.1446252+e9fc78f9e2b6f158d1d4a74e6b80cb94568569b0", "1495939875.1577203+c370ade8c4fda71cd2e7d23a2f30dfb0eb765595", "1495939875.1694226+979df2615073ceb00eddd72c9eabbeeccc3aef38", "1495939875.1831846+959b842df4e5c161fa09ba3c0e61f57bc937b450", "1495939875.1991496+0c149e383ebb6bb96b4f30c1eb0fc70c4128ddec", "1495939875.2140813+82680f833db4fe7335f74de34a2d60c225cfa0ae", "1495939875.2292857+bfe45bd8438eb3c69c24746c62bb196549aae717", "1495939875.2450485+d5b15339b06d39072c2f890133da2467510e81c5", "1495939875.2599742+70bfff5188ce719e51a40bc50e84ed3fa0e12811", "1495939875.2749243+6597fee1ca9a6be7ebf45d4db88f0e976d48d02f", "1495939875.2908287+ce998c160ee4863373988b3062014de836be1aab", "1495939875.311688+1e0bb339107af0d9f721332d58e40c949fedbf3a", "1495939875.3321452+cd51368754e31059e953b65768f845a38046d9ff", "1495939875.352233+e3c577ee1bbb28a5391930af4ed86710a86a9e10", "1495939875.3813133+5405e82e92e707e7b1f104eebe580d30eb61637d", "1495939875.3987973+b149bcd39505be12d32e80b64f8ce5e998a6f0c8", "1495939875.4148483+32ac5c84f33e081abb60df88f8991996765c786f", "1495939875.428774+e6fd65e372b4404cd570a3675629e568491fab0a", "1495939875.4414196+84d97edd3a607d215130a46850c505d129a02f29", "1495939875.4531353+a5fd6b2eb05d4680d342400c849800d44f49db6f", "1495939875.465708+99bc6ca806902c3e7736c4d0bcbf4f40625ec402", "1495939875.4940512+b6123a67e231594838c7cfb6c4ac83900d0978e9", "1495939875.5123756+b164bdd1021686616194cff1dec3812539f68ff2", "1495939875.52854+b67e589b1d97a0a33e99159fbaee699e3e96a850", "1495939875.541283+da5fa8b55f827f981415953a766435afbd19577a", "1495939875.5560434+5a0b7e2bbee3914b8b660947d40c2d2a93f7580a", "1495939875.5712254+773b5dd6ce5b36cfc13602372c8507e4b50a2b93", "1495939875.588858+01311874eb1fb17e83021e2cc1e2f920f1fc6df1", "1495939875.6009555+a222bdc83f85472bf5999a6e178236cfad3be511", "1495939875.6203845+b4247fd6c1003c46388309bbfa34482ba90aff41", "1495939875.6318126+4a4a4348b90b6c5b8f95aa61dc97f387c8fb4b03", "1495939875.6505818+e2b863b5cc61fed801f45b77663872dba143ba2c", "1495939875.6628535+6b6a5f2df18084975d07078440eb9a86012af9fa", "1495939875.6767607+09359a2d10dab441afc136cbae344e8e3d6949c0", "1495939875.691169+69dde1cfa67d2e4a353611350f6f8e2bb07a5d08", "1495939875.70362+caed55ec62503f0fa7e78c5caa2ddafd1d397d21", "1495939875.7163773+84df92856a3ef8370a4b58a87633683da17b3499", "1495939875.7324104+2f8ee0f6aad70f83124925e49afe96268bac5a47", "1495939875.752018+ceccb8ca70bff01b064d9f019052d672e56e942a", "1495939875.7666883+15fa3029bb46c8ac1d7540738f462e4638ddd4f3", "1495939875.779553+f0c46bd2e7961ee8b252ca07894c6b31f2858fa9", "1495939875.7920117+cee77533c8f1c3c37d57fac566e16eeb4a5a0ed0", "1495939875.8099954+008b017c8e98a5fdd159dea5df402a486fbef133", "1495939875.8312814+33e232eacccc1c8a854c06c5e2ef2a457ba5aa4e", "1495939875.8517003+de1add18861ad6c66304409ea241deb4e9aa1746", "1495939875.8707752+21e37a1ba40379eb936a04dce47865bddd532e58", "1495939875.8959918+4a3b1b91237085336a710e77a01836e6ef87dd08", "1495939875.9150856+206d2c203909e67d2d4ee046fd8e465b4c3858d0", "1495939875.934686+53061fc26bbe000a13943eb73aeec4ecd29f8d88", "1495939875.954755+72c0f8a8178326cc96110169479df3772169edb8", "1495939876.002347+15e19e1235ae7bcd1dd9d3662da496f4a2a63882", "1495939876.0200484+d486ebf0c5ea97b3cb8d25304d70fcc13fe7b9e5", "1495939876.0679355+86649736c1a80cc95ed59ee211f79f5f91ea3d50", "1495939876.116483+85b8b08857ca91fb468fbc411d1cb3427528a75d", "1495939876.1327872+4240fc5be46b7694205a43bbd0a8f55a6978f5bf", "1495939876.150785+9d6621a9d4c0b82fc5d408de841fd868375d5c66", "1495939876.1687725+61d2d3f5c0e32f0f33246ee8832e14481f634320", "1495939876.2108512+a7d2d6c0d32d68ceb50e1417c6da7354df43818d", "1495939876.2290883+074969e55db43d98207cff2e5a21651cfaa5da73", "1495939876.2793512+665642e37ca1cab0ad6adb57c283617482544a4a", "1495939876.2922997+fd7d4bf52340d31e7d2a6b3ea2d06d31a58c11c3", "1495942566.7415304+6571cbb8625748a95d3782918e33f4fd05b31199", "1495942566.7571304+74a51a03a12d753668403569f34f61783f67e2b6", "1495942566.7721949+fb5789fbf50b7d21e44320603fe393ed615bf02c", "1495942566.7868013+10595203f0115a8ccd29eced6307df652598176e", "1495942566.800728+476c7d10c46c652fe2cf87a9b74363ef022cb10b", "1495942566.8129442+b91a4d73e0ea9a78500bd8077990ad1fea24d505", "1495942566.8275177+c35e47540c56a2573edd6c83973c5de5bf2a22fb", "1495942566.8418508+216f000fb4198853ab9d8b1bf791df0b0a40691f", "1495942566.8601313+4cca0c4cd8d8b683a8cb3462c808a207a21cdc7b", "1495942566.8727627+760889309b0f7f8ce10ed219b621b90001817b2e", "1495942566.8946927+42f54053b23920714e21a0af4f207cb6fd8df0a7", "1495942566.9112344+f1bb233c14d5299f24db6f025df187e663532112", "1495942566.928124+ab7011d90f456d3e777c4153581ff82c3bf8e441", "1495942566.9413984+1f0e4a3a6f8bc87500b6a49e6c4d0ca83f48f2c0", "1495942566.9571157+6e51e35b659c9751e1271b9acce63a8794ec9b6d", "1495942566.9722939+48985be0ce1efa0bcfea6af97e212c8c5c03b6f8", "1495942566.9859147+793f8b39f61e098b38ce78210ca36a9832d709a7", "1495942567.00417+6fb56b098cd671e5a43af48a6a74d887b56e3aa3", "1495942567.0162728+8ac749a553449ed512bf39cb83c4875896850fb9", "1495942567.0310283+b8e1cbea9f4b6d258469f8a8575239eeab3574fc", "1495942567.0506935+1721e4df64fef1b5fa148a466c5aaf9ba08d50b9", "1495942567.0673594+30c769a06ad4b1803229f542385919f65cce5107", "1495942567.0800128+afc8edf993bf11cd5413ff6ec738c81162e30814", "1495942567.0937843+601b357a75e060d4dbd9664df268e960ad6c4540", "1495942567.1138093+04b99921090808a423b879a0aa3a0331f30acfa9", "1495942567.128391+a3c3af1a889ffabe49d92db304e336eaea6f2e02", "1495942567.1428246+4f10e5a725c076e2c4de707295253498fc986569", "1495942567.1569648+b4a0273dd04a0ad799f011d79f62a8158ad671be", "1495942567.172005+ec3aed51f5a14f28ba88a9753f7e3cb87aab459c", "1495942567.18567+f3ee48f522890341e5e4d59df16942a0253c0376", "1495942567.2046013+f8477ff41b1b7dff45291098872ea29074106d65", "1495942567.2274826+f4bf5860f79686fab6ef9ec026baff6617a98d86", "1495942567.246338+00c51fe1cdb743032e1180c15b0bc35e47be2ac8", "1495942567.2660427+0d29d9e5312105cc6e706887b9acf65edd2b49cc", "1495942567.2834795+bbdca5cf52c52295e7fc3fae3cac2cce87fe92e5", "1495942567.3021548+2521c6b01e5a12c03a60c740972627ed8762f96a", "1495942567.3231614+17cbee26695e2b37d4d237e8465ec97d3cd6c79e", "1495942567.3382182+7d9e7b4afe2ed12897ca963dc26d12076691be3e", "1495942567.3558097+32b6cb3aa37256e2f631b0b6f64fe2788f3b821c", "1495942567.3684149+1cbcd6a2993e1d107d9506c8a147aacfd042f3e7", "1495942567.3842912+346af1ba7923e9a85da975d1311b11661cd57707", "1495942567.3975136+cbc994ed0a90b4e59d44e31f9147ff338d029fb9", "1495942567.4101202+8490bbfa3221ef5cb78ee709d2349d9748e86835", "1495942567.42239+114be98c632ed8a164a425c36d264a2f5212fff1", "1495942821.6065452+262a8711d4cbe04b0e91152c2c870e1dacecc4a3", "1495942821.6200426+10015343f37873fb2ac335c758dba667b6e09d3c", "1495942821.632274+0ce2fd1f9930c47fd7203eb064e6413a64972a1c", "1495942821.651151+c4315c84dede4fc93590c49e60a720dcefe60342", "1495942821.667747+dc86634a5b611f0a575a031896218ceb53fd1619", "1495942821.6842747+47bbd80879c59e2cdaeeab59f9935e33881fbafe", "1495942821.6969712+4ca9205cf95e04e95af4e3cf84caaba00f02f62b", "1495942821.709876+2492f4a3e021b63ba19c566fcce2c3f0438355be", "1495942821.7273395+25355239207fadd2e1f5ee312e674c0fd4c0c6e6", "1495942821.7430315+ab2f9bb50e54b4cd38c9a80e23eb03a323e593fc", "1495942821.754943+40ab94ffe605316898f9847da33e5dba014df3b6", "1495942821.7669983+66c7773cd76b9d80aba49d9db20685c9bfae4f8f", "1495942821.7786486+3bb69d2cb18078671335d62e50c7b6d6b8f318d6", "1495942821.7905688+da730792a5c5b9803d30be586da416a135c1412d", "1497760317.8593829+5e6b42e84f3a30b74806a47ba7d9d019650e4a19", "1497760317.8694003+6c898c9f5104d3d3ae9665389381892c9a8e04ce", "1497760317.8957505+68dffb372a6e6e518e56c7c79df4eee9a2abfae5", "1497760317.9078526+814d561b61632ecaf79c4b79b2e7ccc8fa4f3d31", "1497760317.9199383+3080e50b4db5db3b05bfb013ae0fd58b37b71402", "1497760317.9319332+6fbe9a046a0ade466a73d7968d024791e100c8e7", "1497760317.9527853+dd3a06bc6369fb0035ca03db92c23f394197dbcf", "1497760317.9716117+d3292b2bcc9ba5f749a61cb2b2e763071e57afc6", "1497760317.9917667+5fa9a1212c11806a243e023ff97b2e2d8f0660e6", "1497760318.0040622+e52398361121fae19e5896d7178084cdffc0e1bc", "1497760318.0159457+d85d8a6a78d3bf01eb4d8d6452abd97297717749", "1497760318.0275784+b8092e8cf240c8dba9b15b4aeab7168ecd54e1d6", "1497760318.0494797+7ca81a2ffcad0f5d5e29d67647631707753bcfc9", "1497760318.0610042+1573fd1b0f5a1f43ba0acbe4e2ce201e2e84ff88", "1497760953.8782187+bb84a02ca1ab91a5f3b5e5051af64328ddba8f9f", "1497760953.8843946+48796eae34243c2219be3d36310ccf3b05b75ed7", "1497760953.8901818+5a5a93ef256508c4ae66505d3ce75f3fd3efd5cb", "1497760953.8963575+70391890e5f9ae8fcd2160e19befb9451301f5ba", "1497760953.902642+28ef7734762bc5218cde4ec30ed5aed29d72f4d4", "1497760953.9085157+575296a1684427c33bb0337e4ab294629774ffd3", "1497760953.9148762+bd9de7b6e1f76cfdda8170cf8157c3831224e103", "1497760953.920617+2da96746508dcf6049b4e8547f7afaeb37d4966e", "1497760953.926189+64ebef872916184c9accd9b1159d5e97ecc9a74d", "1497760953.9321105+518d815848931399edad84cb5482ae806d01ccf9", "1497760953.9392326+af2799249f1af0f8581af478737549752f09741c", "1497760953.9445915+d9d7258929e9829be106d7f37cebc3dfe6c495b3", "1497760953.9496446+4fac1fdcc4468fb7b1f9997d802ab1108f6dc558", "1497760953.9536164+59e960960bb3089068fe3e9e01e1164448ac66e3"], "http_etag": "\"afa1c0720cb475edd650d54afd23cd7b7da70da5\"", "name": "shunt", "self_link": "http://localhost:9001/3.1/queues/shunt"}, {"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/virgin", "files": ["1497761008.9721775+b00da38d241518ec7f40f63a9bc45943fa1fb312"], "http_etag": "\"839f7d65e27c999ff5b8135807549e39f3ff281e\"", "name": "virgin", "self_link": "http://localhost:9001/3.1/queues/virgin"}], "http_etag": "\"675ff44c6cf9c01d2e8498bf84a62affd6e07135\"", "self_link": "http://localhost:9001/3.1/queues", "start": 0, "total_size": 12}'} headers: content-length: ['103006'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'text=From%3A+nomember%40example.com%0ATo%3A+test-1%40example.com%0ASubject%3A+Something%0AMessage-ID%3A+%3Cmoderated_01%3E%0A%0ASome+text.%0A%0A&list_id=test-1.example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] location: ['http://localhost:9001/3.1/queues/in/1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 1, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": ["1497761009.0654283+5def81357593550bf60cb32e9a7ad82954b37148"], "http_etag": "\"e94ac6924b57b42ec2af640efba301a5a22fa3f3\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['275'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/queues/in response: body: {string: !!python/unicode '{"count": 0, "directory": "/home/maxking/Documents/mm3/core/var/queue/in", "files": [], "http_etag": "\"8a3a2468b5f526624f1893b85fe30a1a9d10179c\"", "name": "in", "self_link": "http://localhost:9001/3.1/queues/in"}'} headers: content-length: ['214'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/held response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:29 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/held response: body: {string: !!python/unicode '{"entries": [{"_parsemsg": false, "envsender": "noreply@example.com", "hold_date": "2005-08-01T07:49:23", "http_etag": "\"17b2be78e5eddcd3c5df685965b43f20229ee2e9\"", "lang": "en", "listid": "test-1.example.com", "message_id": "", "moderation_action": "hold", "moderation_reasons": ["The message is not from a list member"], "moderation_sender": "nomember@example.com", "msg": "From: nomember@example.com\nTo: test-1@example.com\nSubject: Something\nMessage-ID: \nDate: Sat, 17 Jun 2017 21:43:29 -0700\nX-Mailman-Rule-Hits: nonmember-moderation\nX-Mailman-Rule-Misses: dmarc-mitigation; approved; emergency; loop; banned-address; member-moderation\nMessage-ID-Hash: KU3PI265JYL67T3OV6XE5CQP3QOXKKHB\nX-Message-ID-Hash: KU3PI265JYL67T3OV6XE5CQP3QOXKKHB\n\nSome text.\n\n", "original_size": 249, "original_subject": "Something", "reason": "The message is not from a list member", "request_id": 1, "rule_hits": ["nonmember-moderation"], "rule_misses": ["dmarc-mitigation", "approved", "emergency", "loop", "banned-address", "member-moderation"], "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/held/1", "sender": "nomember@example.com", "subject": "Something", "version": 3}], "http_etag": "\"9a1d6b3e8b6f08b9ddff61a8dc5039c4698bd727\"", "start": 0, "total_size": 1}'} headers: content-length: ['1308'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/held/1 response: body: {string: !!python/unicode '{"_parsemsg": false, "envsender": "noreply@example.com", "hold_date": "2005-08-01T07:49:23", "http_etag": "\"17b2be78e5eddcd3c5df685965b43f20229ee2e9\"", "lang": "en", "listid": "test-1.example.com", "message_id": "", "moderation_action": "hold", "moderation_reasons": ["The message is not from a list member"], "moderation_sender": "nomember@example.com", "msg": "From: nomember@example.com\nTo: test-1@example.com\nSubject: Something\nMessage-ID: \nDate: Sat, 17 Jun 2017 21:43:29 -0700\nX-Mailman-Rule-Hits: nonmember-moderation\nX-Mailman-Rule-Misses: dmarc-mitigation; approved; emergency; loop; banned-address; member-moderation\nMessage-ID-Hash: KU3PI265JYL67T3OV6XE5CQP3QOXKKHB\nX-Message-ID-Hash: KU3PI265JYL67T3OV6XE5CQP3QOXKKHB\n\nSome text.\n\n", "original_size": 249, "original_subject": "Something", "reason": "The message is not from a list member", "request_id": 1, "rule_hits": ["nonmember-moderation"], "rule_misses": ["dmarc-mitigation", "approved", "emergency", "loop", "banned-address", "member-moderation"], "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/held/1", "sender": "nomember@example.com", "subject": "Something", "version": 3}'} headers: content-length: ['1203'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=defer' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/test-1@example.com/held/1 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/held response: body: {string: !!python/unicode '{"entries": [{"_parsemsg": false, "envsender": "noreply@example.com", "hold_date": "2005-08-01T07:49:23", "http_etag": "\"17b2be78e5eddcd3c5df685965b43f20229ee2e9\"", "lang": "en", "listid": "test-1.example.com", "message_id": "", "moderation_action": "hold", "moderation_reasons": ["The message is not from a list member"], "moderation_sender": "nomember@example.com", "msg": "From: nomember@example.com\nTo: test-1@example.com\nSubject: Something\nMessage-ID: \nDate: Sat, 17 Jun 2017 21:43:29 -0700\nX-Mailman-Rule-Hits: nonmember-moderation\nX-Mailman-Rule-Misses: dmarc-mitigation; approved; emergency; loop; banned-address; member-moderation\nMessage-ID-Hash: KU3PI265JYL67T3OV6XE5CQP3QOXKKHB\nX-Message-ID-Hash: KU3PI265JYL67T3OV6XE5CQP3QOXKKHB\n\nSome text.\n\n", "original_size": 249, "original_subject": "Something", "reason": "The message is not from a list member", "request_id": 1, "rule_hits": ["nonmember-moderation"], "rule_misses": ["dmarc-mitigation", "approved", "emergency", "loop", "banned-address", "member-moderation"], "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/held/1", "sender": "nomember@example.com", "subject": "Something", "version": 3}], "http_etag": "\"9a1d6b3e8b6f08b9ddff61a8dc5039c4698bd727\"", "start": 0, "total_size": 1}'} headers: content-length: ['1308'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=discard' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/test-1@example.com/held/1 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1@example.com/held response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/member/bill@example.com response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"38c6296dce7384ac4ae4e28bd7dd067741f30700\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}'} headers: content-length: ['444'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'moderation_action=hold' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/members/0000000000000000000000000000033f response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/member/bill@example.com response: body: {string: !!python/unicode '{"address": "http://localhost:9001/3.1/addresses/bill@example.com", "delivery_mode": "regular", "email": "bill@example.com", "http_etag": "\"5a3628a9037881300fa30a90c307422227d78064\"", "list_id": "test-1.example.com", "member_id": "0000000000000000000000000000033f", "moderation_action": "hold", "role": "member", "self_link": "http://localhost:9001/3.1/members/0000000000000000000000000000033f", "user": "http://localhost:9001/3.1/users/0000000000000000000000000000047a"}'} headers: content-length: ['473'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'email=anna%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] location: ['http://localhost:9001/3.1/bans/anna@example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans/anna@example.com response: body: {string: !!python/unicode '{"email": "anna@example.com", "http_etag": "\"f1342f7d4e2a74f0011c08e4b9cd09fdfa61bdf2\"", "self_link": "http://localhost:9001/3.1/bans/anna@example.com"}'} headers: content-length: ['154'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans/anna@example.com response: body: {string: !!python/unicode '{"email": "anna@example.com", "http_etag": "\"f1342f7d4e2a74f0011c08e4b9cd09fdfa61bdf2\"", "self_link": "http://localhost:9001/3.1/bans/anna@example.com"}'} headers: content-length: ['154'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'email=bill%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] location: ['http://localhost:9001/3.1/bans/bill@example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans/bill@example.com response: body: {string: !!python/unicode '{"email": "bill@example.com", "http_etag": "\"6620b2c134912dfa3def6cb9262dcf5acfda162b\"", "self_link": "http://localhost:9001/3.1/bans/bill@example.com"}'} headers: content-length: ['154'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode '{"entries": [{"email": "anna@example.com", "http_etag": "\"f1342f7d4e2a74f0011c08e4b9cd09fdfa61bdf2\"", "self_link": "http://localhost:9001/3.1/bans/anna@example.com"}, {"email": "bill@example.com", "http_etag": "\"6620b2c134912dfa3def6cb9262dcf5acfda162b\"", "self_link": "http://localhost:9001/3.1/bans/bill@example.com"}], "http_etag": "\"9b6337a6cff45d9c10520949a639724566fd7f94\"", "start": 0, "total_size": 2}'} headers: content-length: ['415'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans?count=1&page=1 response: body: {string: !!python/unicode '{"entries": [{"email": "anna@example.com", "http_etag": "\"f1342f7d4e2a74f0011c08e4b9cd09fdfa61bdf2\"", "self_link": "http://localhost:9001/3.1/bans/anna@example.com"}], "http_etag": "\"5f99d16e5080aa1765e08b170cbf0e27808370a6\"", "start": 0, "total_size": 2}'} headers: content-length: ['259'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans?count=1&page=2 response: body: {string: !!python/unicode '{"entries": [{"email": "bill@example.com", "http_etag": "\"6620b2c134912dfa3def6cb9262dcf5acfda162b\"", "self_link": "http://localhost:9001/3.1/bans/bill@example.com"}], "http_etag": "\"4c6471649f58278dfd6257ee46beefeeae119ddf\"", "start": 1, "total_size": 2}'} headers: content-length: ['259'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/bans/anna@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans/anna@example.com response: body: {string: !!python/unicode 'Email is not banned: anna@example.com'} headers: content-length: ['37'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 404, message: Not Found} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode '{"entries": [{"email": "bill@example.com", "http_etag": "\"6620b2c134912dfa3def6cb9262dcf5acfda162b\"", "self_link": "http://localhost:9001/3.1/bans/bill@example.com"}], "http_etag": "\"d44404c42754a3a877e56c43c16aec84a0bae79a\"", "start": 0, "total_size": 1}'} headers: content-length: ['259'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode '{"entries": [{"email": "bill@example.com", "http_etag": "\"6620b2c134912dfa3def6cb9262dcf5acfda162b\"", "self_link": "http://localhost:9001/3.1/bans/bill@example.com"}], "http_etag": "\"d44404c42754a3a877e56c43c16aec84a0bae79a\"", "start": 0, "total_size": 1}'} headers: content-length: ['259'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/bans/bill@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans/bill@example.com response: body: {string: !!python/unicode 'Email is not banned: bill@example.com'} headers: content-length: ['37'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 404, message: Not Found} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/bans response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'email=anna%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] location: ['http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com response: body: {string: !!python/unicode '{"email": "anna@example.com", "http_etag": "\"f281df5e13fbd64e7fc9bc96bdb903b183b035b3\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com"}'} headers: content-length: ['212'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'email=bill%40example.com' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] location: ['http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com response: body: {string: !!python/unicode '{"email": "bill@example.com", "http_etag": "\"e172d4abbacb492faa6dfeb4e1c8cfe433d3cc76\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com"}'} headers: content-length: ['212'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans response: body: {string: !!python/unicode '{"entries": [{"email": "anna@example.com", "http_etag": "\"f281df5e13fbd64e7fc9bc96bdb903b183b035b3\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com"}, {"email": "bill@example.com", "http_etag": "\"e172d4abbacb492faa6dfeb4e1c8cfe433d3cc76\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com"}], "http_etag": "\"7ee94f764975e2402d233e9fb5aeb7025a694a55\"", "start": 0, "total_size": 2}'} headers: content-length: ['531'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans?count=1&page=1 response: body: {string: !!python/unicode '{"entries": [{"email": "anna@example.com", "http_etag": "\"f281df5e13fbd64e7fc9bc96bdb903b183b035b3\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com"}], "http_etag": "\"de615d2cddc8e479019349451e5b9f97d0fec26e\"", "start": 0, "total_size": 2}'} headers: content-length: ['317'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans?count=1&page=2 response: body: {string: !!python/unicode '{"entries": [{"email": "bill@example.com", "http_etag": "\"e172d4abbacb492faa6dfeb4e1c8cfe433d3cc76\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com"}], "http_etag": "\"e21cb5f21519eb4df8688f4a7343403b1b11e4d3\"", "start": 1, "total_size": 2}'} headers: content-length: ['317'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans/anna@example.com response: body: {string: !!python/unicode 'Email is not banned: anna@example.com'} headers: content-length: ['37'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 404, message: Not Found} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans response: body: {string: !!python/unicode '{"entries": [{"email": "bill@example.com", "http_etag": "\"e172d4abbacb492faa6dfeb4e1c8cfe433d3cc76\"", "list_id": "test-1.example.com", "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com"}], "http_etag": "\"d395d80fd06077cdcd8ca944b04f7d62936a8ee9\"", "start": 0, "total_size": 1}'} headers: content-length: ['317'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans/bill@example.com response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/bans response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/archivers response: body: {string: !!python/unicode '{"http_etag": "\"3dbbbaad592a043938314db0e5249a1ca71d0dc6\"", "mail-archive": true, "mhonarc": true, "prototype": true}'} headers: content-length: ['119'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'mail-archive=False' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/lists/test-1.example.com/archivers response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/archivers response: body: {string: !!python/unicode '{"http_etag": "\"9f3e82fa9d7dc70277565c9703a90ad3fbeb9a03\"", "mail-archive": false, "mhonarc": true, "prototype": true}'} headers: content-length: ['120'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'mhonarc=False' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'PATCH' uri: http://localhost:9001/3.1/lists/test-1.example.com/archivers response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/archivers response: body: {string: !!python/unicode '{"http_etag": "\"f8ecaeeadc4cf5d8900d7c7ed3990e675116ad31\"", "mail-archive": false, "mhonarc": false, "prototype": true}'} headers: content-length: ['121'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=discard&pattern=%5Etest%3A+&header=Subject' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] location: ['http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0 response: body: {string: !!python/unicode '{"action": "discard", "header": "subject", "http_etag": "\"f2270af6050c5791d8518371258f8f7c003925e2\"", "pattern": "^test: ", "position": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0"}'} headers: content-length: ['224'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode '{"entries": [{"action": "discard", "header": "subject", "http_etag": "\"f2270af6050c5791d8518371258f8f7c003925e2\"", "pattern": "^test: ", "position": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0"}], "http_etag": "\"20f331c3aab98676cdc1887ce783669a121440a3\"", "start": 0, "total_size": 1}'} headers: content-length: ['329'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: !!python/unicode 'action=discard&pattern=%5Etest%3A+&header=Subject' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:30 GMT'] location: ['http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0 response: body: {string: !!python/unicode '{"action": "discard", "header": "subject", "http_etag": "\"f2270af6050c5791d8518371258f8f7c003925e2\"", "pattern": "^test: ", "position": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0"}'} headers: content-length: ['224'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode '{"entries": [{"action": "discard", "header": "subject", "http_etag": "\"f2270af6050c5791d8518371258f8f7c003925e2\"", "pattern": "^test: ", "position": 0, "self_link": "http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0"}], "http_etag": "\"20f331c3aab98676cdc1887ce783669a121440a3\"", "start": 0, "total_size": 1}'} headers: content-length: ['329'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches/0 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/lists/test-1.example.com/header-matches response: body: {string: !!python/unicode '{"http_etag": "\"32223434a0f3af4cdc4673d1fbc5bac1f6d98fd3\"", "start": 0, "total_size": 0}'} headers: content-length: ['90'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/system/configuration response: body: {string: !!python/unicode '{"http_etag": "\"a6c4f90da94e597d71a9ce70a0fade7c17425de9\"", "sections": ["antispam", "archiver.mail_archive", "archiver.master", "archiver.mhonarc", "archiver.prototype", "bounces", "database", "devmode", "digests", "dmarc", "language.ar", "language.ast", "language.ca", "language.cs", "language.da", "language.de", "language.el", "language.en", "language.es", "language.et", "language.eu", "language.fi", "language.fr", "language.gl", "language.he", "language.hr", "language.hu", "language.ia", "language.it", "language.ja", "language.ko", "language.lt", "language.nl", "language.no", "language.pl", "language.pt", "language.pt_BR", "language.ro", "language.ru", "language.sk", "language.sl", "language.sr", "language.sv", "language.tr", "language.uk", "language.vi", "language.zh_CN", "language.zh_TW", "logging.archiver", "logging.bounce", "logging.config", "logging.database", "logging.debug", "logging.error", "logging.fromusenet", "logging.http", "logging.locks", "logging.mischief", "logging.root", "logging.runner", "logging.smtp", "logging.subscribe", "logging.vette", "mailman", "mta", "nntp", "passwords", "paths.dev", "paths.fhs", "paths.here", "paths.local", "runner.archive", "runner.bad", "runner.bounces", "runner.command", "runner.digest", "runner.in", "runner.lmtp", "runner.nntp", "runner.out", "runner.pipeline", "runner.rest", "runner.retry", "runner.shunt", "runner.virgin", "shell", "styles", "webservice"], "self_link": "http://localhost:9001/3.1/system/configuration"}'} headers: content-length: ['1495'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/system/configuration/mailman response: body: {string: !!python/unicode '{"cache_life": "7d", "default_language": "en", "email_commands_max_lines": "10", "filtered_messages_are_preservable": "no", "html_to_plain_text_command": "/usr/bin/lynx -dump $filename", "http_etag": "\"21cc055500f21d5c757534dfbddd7d7f95522b2f\"", "layout": "here", "listname_chars": "[-_.0-9a-z]", "noreply_address": "noreply", "pending_request_life": "3d", "post_hook": "", "pre_hook": "", "self_link": "http://localhost:9001/3.1/system/configuration/mailman", "sender_headers": "from from_ reply-to sender", "site_owner": "changeme@example.com"}'} headers: content-length: ['548'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users response: body: {string: !!python/unicode '{"entries": [{"created_on": "2005-08-01T07:49:23", "display_name": "Unverified", "http_etag": "\"c1122b8a2734e8e4a8a93f574782939315a5af25\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000477", "user_id": "00000000000000000000000000000477"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Unconfirmed", "http_etag": "\"a3f755e773a108a25f54e68048b6c735bbe1ba77\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000478", "user_id": "00000000000000000000000000000478"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Anna", "http_etag": "\"d75a29d94399449661d955fae2269182c0ecbce8\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000479", "user_id": "00000000000000000000000000000479"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Bill", "http_etag": "\"083120bb35acbf4593cfd55fb1d23cb3e113ac15\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047a", "user_id": "0000000000000000000000000000047a"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Cris", "http_etag": "\"f4f189f89c559b376caccdfe4ba3a16e3a6112e7\"", "is_server_owner": false, "password": "$6$rounds=656000$.q0SmTobhYqCQXAQ$HsRDORbQwHtBH4CKPlP.Y.yiKl5HTwOfvgzfh9CxRKf8TXMEnvhQnzeJAYVW4mzba5jr32xd2o.pgi8yJ.YgM1", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047b", "user_id": "0000000000000000000000000000047b"}, {"created_on": "2005-08-01T07:49:23", "display_name": "Sir Ler", "http_etag": "\"50447df82c18d9a1797764a18962585ffff81eca\"", "is_server_owner": false, "password": "$6$rounds=656000$vxCVBA6LZfVsFYGH$qegjTOweTyGZMzwnTJe3KeczIzn2QFGAHQjJBsRHIp0Sb9HKZIU1.lPO7EZ/ptZHCLeBjULzEVTHmOvGhP6d..", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047d", "user_id": "0000000000000000000000000000047d"}, {"created_on": "2005-08-01T07:49:23", "http_etag": "\"4f46cce5bcca214cc9592b9e10d007995a338215\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047e", "user_id": "0000000000000000000000000000047e"}, {"created_on": "2005-08-01T07:49:23", "http_etag": "\"8a9a98d22c6f9cfb4ed71ea844c11cbaa61dd24a\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000047f", "user_id": "0000000000000000000000000000047f"}, {"created_on": "2005-08-01T07:49:23", "display_name": "None", "http_etag": "\"a26dae9f19026e60b1efc8ccd54f1e43c3b9df65\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000480", "user_id": "00000000000000000000000000000480"}, {"created_on": "2005-08-01T07:49:23", "display_name": "None", "http_etag": "\"3834ab5731a2501848e6eeb882a7d6766fb452ef\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000481", "user_id": "00000000000000000000000000000481"}, {"created_on": "2005-08-01T07:49:23", "display_name": "None", "http_etag": "\"a1f132db62c32486d06f4af33a05f51e312458cf\"", "is_server_owner": false, "self_link": "http://localhost:9001/3.1/users/00000000000000000000000000000482", "user_id": "00000000000000000000000000000482"}], "http_etag": "\"485907decf8e679edda4ee6c78defe47571a0e79\"", "start": 0, "total_size": 11}'} headers: content-length: ['3402'] content-type: [application/json; charset=UTF-8] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/00000000000000000000000000000477 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/00000000000000000000000000000478 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/00000000000000000000000000000479 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047a response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047b response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047d response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047e response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/0000000000000000000000000000047f response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/00000000000000000000000000000480 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/00000000000000000000000000000481 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} - request: body: null headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'authorization': [!!python/unicode 'Basic cmVzdGFkbWluOnJlc3RwYXNz'] !!python/unicode 'user-agent': [!!python/unicode 'GNU Mailman REST client v3.1.1'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/00000000000000000000000000000482 response: body: {string: !!python/unicode ''} headers: content-length: ['0'] date: ['Sun, 18 Jun 2017 04:43:31 GMT'] server: [WSGIServer/0.2 CPython/3.5.3] status: {code: 204, message: No Content} version: 1 mailmanclient-3.1.1/src/mailmanclient/tests/data/TestUnicode.test_create_user.yaml0000664000175000017500000000506513114444407031611 0ustar maxkingmaxking00000000000000interactions: - request: body: !!python/unicode 'display_name=J%C3%A9r%C3%B4me&email=jeremy%40example.com&password=1234' headers: accept-encoding: ['gzip, deflate'] !!python/unicode 'content-type': [!!python/unicode 'application/x-www-form-urlencoded'] method: !!python/unicode 'POST' uri: http://localhost:9001/3.1/users response: body: {string: !!python/unicode ''} headers: content-length: ['0'] content-type: [application/json; charset=UTF-8] location: ['http://localhost:9001/3.1/users/0000000000000000000000000000000d'] status: {code: 201, message: Created} - request: body: null headers: accept-encoding: ['gzip, deflate'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/0000000000000000000000000000000d response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "J\u00e9r\u00f4me", "http_etag": "\"d78f048ae1392154b9563088e8f784ef26e5be62\"", "is_server_owner": false, "password": "$6$rounds=656000$OnXXy2o/Ekoi2lAu$F4C.1ma.fdl9ovvmkjWloLrdn4z2.Z47vV1wvcBQK008zDXw0Dyl2Gp2GH3qQmCAuuY7MC5qmnkPR9vKE2j.u/", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000000d", "user_id": "0000000000000000000000000000000d"}'} headers: content-length: ['424'] content-type: [application/json; charset=UTF-8] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.1/users/jeremy@example.com response: body: {string: !!python/unicode '{"created_on": "2005-08-01T07:49:23", "display_name": "J\u00e9r\u00f4me", "http_etag": "\"d78f048ae1392154b9563088e8f784ef26e5be62\"", "is_server_owner": false, "password": "$6$rounds=656000$OnXXy2o/Ekoi2lAu$F4C.1ma.fdl9ovvmkjWloLrdn4z2.Z47vV1wvcBQK008zDXw0Dyl2Gp2GH3qQmCAuuY7MC5qmnkPR9vKE2j.u/", "self_link": "http://localhost:9001/3.1/users/0000000000000000000000000000000d", "user_id": "0000000000000000000000000000000d"}'} headers: content-length: ['424'] content-type: [application/json; charset=UTF-8] status: {code: 200, message: OK} - request: body: null headers: accept-encoding: ['gzip, deflate'] method: !!python/unicode 'DELETE' uri: http://localhost:9001/3.1/users/0000000000000000000000000000000d response: body: {string: !!python/unicode ''} headers: content-length: ['0'] status: {code: 204, message: No Content} version: 1 mailmanclient-3.1.1/src/mailmanclient/tests/data/TestDomains.test_no_domain.yaml0000664000175000017500000000062013114444407031247 0ustar maxkingmaxking00000000000000interactions: - request: body: null headers: accept-encoding: ['gzip, deflate'] method: !!python/unicode 'GET' uri: http://localhost:9001/3.0/domains/example.org response: body: {string: !!python/unicode '404 Not Found'} headers: content-length: ['13'] content-type: [application/json; charset=UTF-8] status: {code: 404, message: Not Found} version: 1 mailmanclient-3.1.1/src/mailmanclient/tests/test_page.py0000664000175000017500000000367113145013731024551 0ustar maxkingmaxking00000000000000# Copyright (C) 2016-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . """Test Page corner cases.""" from __future__ import absolute_import, print_function, unicode_literals import unittest import pytest from mock import Mock from six.moves.urllib_parse import urlsplit, parse_qs from mailmanclient.constants import DEFAULT_PAGE_ITEM_COUNT from mailmanclient.restbase.page import Page __metaclass__ = type __all__ = [ 'TestPage', ] @pytest.mark.vcr() class TestPage(unittest.TestCase): def test_url_simple(self): connection = Mock() connection.call.return_value = (None, {'start': 0, 'total_size': 0}) page = Page(connection, '/some-path', None) built_qs = parse_qs(urlsplit(page._build_url()).query) self.assertEqual(built_qs, dict( count=[str(DEFAULT_PAGE_ITEM_COUNT)], page=["1"])) def test_url_with_qs(self): connection = Mock() connection.call.return_value = (None, {'start': 0, 'total_size': 0}) page = Page(connection, '/some-path?with=a&query=string', None) built_qs = parse_qs(urlsplit(page._build_url()).query) self.assertEqual(built_qs, { "with": ["a"], "query": ["string"], "count": [str(DEFAULT_PAGE_ITEM_COUNT)], "page": ["1"], }) mailmanclient-3.1.1/src/mailmanclient/tests/test_unicode.py0000664000175000017500000000325313145013731025257 0ustar maxkingmaxking00000000000000# coding: utf-8 # Copyright (C) 2015 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . """Test unicode data when using REST endpoint.""" from __future__ import absolute_import, print_function, unicode_literals import pytest import unittest from mailmanclient import Client from six.moves.urllib_error import HTTPError __metaclass__ = type __all__ = [ 'TestUnicode', ] @pytest.mark.vcr() class TestUnicode(unittest.TestCase): def setUp(self): self._client = Client( 'http://localhost:9001/3.1', 'restadmin', 'restpass') self.email = 'jeremy@example.com' self.unicode_string = u'Jérôme' def tearDown(self): try: self._client.get_user(self.email).delete() except HTTPError as error: if error.status_code == 404: pass def test_create_user(self): user = self._client.create_user( email=self.email, password='1234', display_name=self.unicode_string) self.assertEqual(user.display_name, self.unicode_string) mailmanclient-3.1.1/src/mailmanclient/tests/__init__.py0000664000175000017500000000000013111417101024304 0ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/tests/test_domain.py0000664000175000017500000000303313145013731025074 0ustar maxkingmaxking00000000000000# Copyright (C) 2015-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . """Test domain corner cases.""" from __future__ import absolute_import, print_function, unicode_literals import unittest import pytest from mailmanclient import Client from six.moves.urllib_error import HTTPError __metaclass__ = type __all__ = [ 'TestDomains', ] @pytest.mark.vcr() class TestDomains(unittest.TestCase): def setUp(self): self._client = Client( 'http://localhost:9001/3.0', 'restadmin', 'restpass') def test_no_domain(self): # Trying to get a non-existent domain returns a 404. # # We can't use `with self.assertRaises()` until we drop Python 2.6 try: self._client.get_domain('example.org') except HTTPError as error: self.assertEqual(error.code, 404) else: raise AssertionError('Expected HTTPError 404') mailmanclient-3.1.1/src/mailmanclient/__init__.py0000664000175000017500000000430413166325043023172 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . # # flake8: noqa """Package contents.""" from __future__ import absolute_import, print_function, unicode_literals import six from mailmanclient.client import Client from mailmanclient.constants import __version__ from mailmanclient.restbase.connection import MailmanConnectionError from mailmanclient.restobjects.address import Address, Addresses from mailmanclient.restobjects.ban import Bans, BannedAddress from mailmanclient.restobjects.configuration import Configuration from mailmanclient.restobjects.header_match import HeaderMatch, HeaderMatches from mailmanclient.restobjects.held_message import HeldMessage from mailmanclient.restobjects.archivers import ListArchivers from mailmanclient.restobjects.mailinglist import MailingList from mailmanclient.restobjects.member import Member from mailmanclient.restobjects.preferences import Preferences, PreferencesMixin from mailmanclient.restobjects.queue import Queue from mailmanclient.restobjects.settings import Settings from mailmanclient.restobjects.user import User __metaclass__ = type __all__ = [ 'Address', 'Addresses', 'Bans', 'BannedAddress', 'Client', 'Configuration', 'HeaderMatch', 'HeaderMatches', 'HeldMessage', 'ListArchivers', 'MailingList', 'MailmanConnectionError', 'Member', 'Preferences', 'PreferencesMixin', 'Queue', 'Settings', 'User', '__version__', ] if six.PY2: __all__ = [str(x) for x in __all__] elif six.PY3: __all__ = [bytes(x, 'utf-8') for x in __all__] mailmanclient-3.1.1/src/mailmanclient/client.py0000664000175000017500000001736713145014171022720 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . """Client code.""" from __future__ import absolute_import, unicode_literals import warnings from operator import itemgetter from mailmanclient.constants import (MISSING) from mailmanclient.restobjects.address import Address from mailmanclient.restobjects.ban import Bans, BannedAddress from mailmanclient.restobjects.configuration import Configuration from mailmanclient.restobjects.domain import Domain from mailmanclient.restobjects.mailinglist import MailingList from mailmanclient.restobjects.member import Member from mailmanclient.restobjects.preferences import Preferences from mailmanclient.restobjects.queue import Queue from mailmanclient.restobjects.user import User from mailmanclient.restbase.connection import Connection from mailmanclient.restbase.page import Page __metaclass__ = type __all__ = [ 'Client' ] # # --- The following classes are part of the API # class Client: """Access the Mailman REST API root.""" def __init__(self, baseurl, name=None, password=None): """Initialize client access to the REST API. :param baseurl: The base url to access the Mailman 3 REST API. :param name: The Basic Auth user name. If given, the `password` must also be given. :param password: The Basic Auth password. If given the `name` must also be given. """ self._connection = Connection(baseurl, name, password) def __repr__(self): return ''.format( self._connection) @property def system(self): return self._connection.call('system/versions')[1] @property def preferences(self): return Preferences(self._connection, 'system/preferences') @property def configuration(self): response, content = self._connection.call('system/configuration') return {section: Configuration( self._connection, section) for section in content['sections']} @property def pipelines(self): response, content = self._connection.call('system/pipelines') return content @property def chains(self): response, content = self._connection.call('system/chains') return content @property def queues(self): response, content = self._connection.call('queues') queues = {} for entry in content['entries']: queues[entry['name']] = Queue( self._connection, entry['self_link'], entry) return queues @property def lists(self): return self.get_lists() def get_lists(self, advertised=None): url = 'lists' if advertised: url += '?advertised=true' response, content = self._connection.call(url) if 'entries' not in content: return [] return [MailingList(self._connection, entry['self_link'], entry) for entry in content['entries']] def get_list_page(self, count=50, page=1, advertised=None): url = 'lists' if advertised: url += '?advertised=true' return Page(self._connection, url, MailingList, count, page) @property def domains(self): response, content = self._connection.call('domains') if 'entries' not in content: return [] return [Domain(self._connection, entry['self_link']) for entry in sorted(content['entries'], key=itemgetter('mail_host'))] @property def members(self): response, content = self._connection.call('members') if 'entries' not in content: return [] return [Member(self._connection, entry['self_link'], entry) for entry in content['entries']] def get_member(self, fqdn_listname, subscriber_address): return self.get_list(fqdn_listname).get_member(subscriber_address) def get_member_page(self, count=50, page=1): return Page(self._connection, 'members', Member, count, page) @property def users(self): response, content = self._connection.call('users') if 'entries' not in content: return [] return [User(self._connection, entry['self_link'], entry) for entry in sorted(content['entries'], key=itemgetter('self_link'))] def get_user_page(self, count=50, page=1): return Page(self._connection, 'users', User, count, page) def create_domain(self, mail_host, base_url=MISSING, description=None, owner=None): if base_url is not MISSING: warnings.warn( 'The `base_url` parameter in the `create_domain()` method is ' 'deprecated. It is not used any more and will be removed in ' 'the future.', DeprecationWarning, stacklevel=2) data = dict(mail_host=mail_host) if description is not None: data['description'] = description if owner is not None: data['owner'] = owner response, content = self._connection.call('domains', data) return Domain(self._connection, response['location']) def delete_domain(self, mail_host): response, content = self._connection.call( 'domains/{0}'.format(mail_host), None, 'DELETE') def get_domain(self, mail_host, web_host=MISSING): """Get domain by its mail_host or its web_host.""" if web_host is not MISSING: warnings.warn( 'The `web_host` parameter in the `get_domain()` method is ' 'deprecated. It is not used any more and will be removed in ' 'the future.', DeprecationWarning, stacklevel=2) response, content = self._connection.call( 'domains/{0}'.format(mail_host)) return Domain(self._connection, content['self_link']) def create_user(self, email, password, display_name=''): response, content = self._connection.call( 'users', dict(email=email, password=password, display_name=display_name)) return User(self._connection, response['location']) def get_user(self, address): response, content = self._connection.call( 'users/{0}'.format(address)) return User(self._connection, content['self_link'], content) def get_address(self, address): response, content = self._connection.call( 'addresses/{0}'.format(address)) return Address(self._connection, content['self_link'], content) def get_list(self, fqdn_listname): response, content = self._connection.call( 'lists/{0}'.format(fqdn_listname)) return MailingList(self._connection, content['self_link'], content) def delete_list(self, fqdn_listname): response, content = self._connection.call( 'lists/{0}'.format(fqdn_listname), None, 'DELETE') @property def bans(self): return Bans(self._connection, 'bans', mlist=None) def get_bans_page(self, count=50, page=1): return Page(self._connection, 'bans', BannedAddress, count, page) mailmanclient-3.1.1/src/mailmanclient/restobjects/0000775000175000017500000000000013166327535023417 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/restobjects/header_match.py0000664000175000017500000000447213145013731026367 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restbase.base import RESTList, RESTObject __metaclass__ = type __all__ = [ 'HeaderMatch', 'HeaderMatches' ] class HeaderMatches(RESTList): """ The list of header matches for a mailing-list. """ def __init__(self, connection, url, mlist): """ :param mlist: The corresponding list object. :type mlist: MailingList. """ super(HeaderMatches, self).__init__(connection, url) self._mlist = mlist self._factory = lambda data: HeaderMatch( self._connection, data['self_link'], data) def __repr__(self): return ''.format(self._mlist.list_id) def add(self, header, pattern, action=None): """ :param header: The header to consider. :type header: str :param pattern: The regular expression to use for filtering. :type pattern: str :param action: The action to take when the header matches the pattern. This can be 'accept', 'discard', 'reject', or 'hold'. :type action: str """ data = dict(header=header, pattern=pattern) if action is not None: data['action'] = action response, content = self._connection.call(self._url, data) self._reset_cache() return HeaderMatch(self._connection, response['location']) class HeaderMatch(RESTObject): _properties = ('header', 'pattern', 'position', 'action', 'self_link') _writable_properties = ('header', 'pattern', 'position', 'action') def __repr__(self): return ''.format(self.header) mailmanclient-3.1.1/src/mailmanclient/restobjects/preferences.py0000664000175000017500000000274313145013731026263 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restbase.base import RESTDict __metaclass__ = type __all__ = [ 'Preferences', 'PreferencesMixin' ] class Preferences(RESTDict): _properties = ( 'acknowledge_posts', 'delivery_mode', 'delivery_status', 'hide_address', 'preferred_language', 'receive_list_copy', 'receive_own_postings', ) def delete(self): response, content = self._connection.call(self._url, method='DELETE') class PreferencesMixin: """Mixin for restobjects that have preferences.""" @property def preferences(self): if getattr(self, '_preferences', None) is None: path = '{0}/preferences'.format(self.self_link) self._preferences = Preferences(self._connection, path) return self._preferences mailmanclient-3.1.1/src/mailmanclient/restobjects/archivers.py0000664000175000017500000000274213145015115025745 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restbase.base import RESTDict __metaclass__ = type __all__ = [ 'ListArchivers' ] class ListArchivers(RESTDict): """ Represents the activation status for each site-wide available archiver for a given list. """ _autosave = True def __init__(self, connection, url, mlist): """ :param connection: An API connection object. :type connection: Connection. :param url: The API url of the list's archiver endpoint. :type url: str. :param mlist: The corresponding list object. :type mlist: MailingList. """ super(ListArchivers, self).__init__(connection, url) self._mlist = mlist def __repr__(self): return ''.format(self._mlist.list_id) mailmanclient-3.1.1/src/mailmanclient/restobjects/held_message.py0000664000175000017500000000353713145013731026404 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . import six from mailmanclient.restbase.base import RESTObject __metaclass__ = type __all__ = [ 'HeldMessage' ] class HeldMessage(RESTObject): _properties = ('hold_date', 'message_id', 'msg', 'reason', 'request_id', 'self_link', 'sender', 'subject', 'type') def __repr__(self): return ''.format( self.request_id, self.sender) def __unicode__(self): return six.text_type(self.rest_data) def moderate(self, action): """Moderate a held message. :param action: Action to perform on held message. :type action: String. """ response, content = self._connection.call( self._url, dict(action=action), 'POST') return response def discard(self): """Shortcut for moderate.""" return self.moderate('discard') def reject(self): """Shortcut for moderate.""" return self.moderate('reject') def defer(self): """Shortcut for moderate.""" return self.moderate('defer') def accept(self): """Shortcut for moderate.""" return self.moderate('accept') mailmanclient-3.1.1/src/mailmanclient/restobjects/__init__.py0000664000175000017500000000000013145013731025501 0ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/restobjects/queue.py0000664000175000017500000000231113145013731025075 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restbase.base import RESTObject __metaclass__ = type __all__ = [ 'Queue' ] class Queue(RESTObject): _properties = ('name', 'directory', 'files') def __repr__(self): return ''.format(self.name) def inject(self, list_id, text): self._connection.call(self._url, dict(list_id=list_id, text=text)) @property def files(self): # No caching. response, content = self._connection.call(self._url) return content['files'] mailmanclient-3.1.1/src/mailmanclient/restobjects/domain.py0000664000175000017500000000647013145014214025227 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . import warnings from mailmanclient.restobjects.mailinglist import MailingList from mailmanclient.restbase.base import RESTObject from mailmanclient.restbase.page import Page __metaclass__ = type __all__ = [ 'Domain' ] class Domain(RESTObject): _properties = ('description', 'mail_host', 'self_link') def __repr__(self): return ''.format(self.mail_host) @property def web_host(self): warnings.warn( 'The `Domain.web_host` attribute is deprecated. It is not used ' 'any more and will be removed in the future.', DeprecationWarning, stacklevel=2) return 'http://{}'.format(self.mail_host) @property def base_url(self): warnings.warn( 'The `Domain.base_url` attribute is deprecated. It is not used ' 'any more and will be removed in the future.', DeprecationWarning, stacklevel=2) return 'http://{}'.format(self.mail_host) @property def owners(self): url = self._url + '/owners' response, content = self._connection.call(url) if 'entries' not in content: return [] else: return [item for item in content['entries']] @property def lists(self): return self.get_lists() def get_lists(self, advertised=None): url = 'domains/{0}/lists'.format(self.mail_host) if advertised: url += '?advertised=true' response, content = self._connection.call(url) if 'entries' not in content: return [] return [MailingList(self._connection, entry['self_link'], entry) for entry in content['entries']] def get_list_page(self, count=50, page=1, advertised=None): url = 'domains/{0}/lists'.format(self.mail_host) if advertised: url += '?advertised=true' return Page(self._connection, url, MailingList, count, page) def create_list(self, list_name): fqdn_listname = '{0}@{1}'.format(list_name, self.mail_host) response, content = self._connection.call( 'lists', dict(fqdn_listname=fqdn_listname)) return MailingList(self._connection, response['location']) # def remove_owner(self, owner): # TODO: add this when API supports it. # pass def remove_all_owners(self): url = self._url + '/owners' response, content = self._connection.call( url, method='DELETE') return response def add_owner(self, owner): url = self._url + '/owners' response, content = self._connection.call( url, {'owner': owner}) mailmanclient-3.1.1/src/mailmanclient/restobjects/member.py0000664000175000017500000000346113145013731025227 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restobjects.preferences import PreferencesMixin from mailmanclient.restbase.base import RESTObject __metaclass__ = type __all__ = [ 'Member' ] class Member(RESTObject, PreferencesMixin): _properties = ('delivery_mode', 'email', 'list_id', 'moderation_action', 'role', 'self_link') _writable_properties = ('address', 'delivery_mode', 'moderation_action') def __repr__(self): return ''.format(self.email, self.list_id) def __unicode__(self): return ''.format(self.email, self.list_id) @property def address(self): from mailmanclient.restobjects.address import Address return Address(self._connection, self.rest_data['address']) @property def user(self): from mailmanclient.restobjects.user import User return User(self._connection, self.rest_data['user']) def unsubscribe(self): """Unsubscribe the member from a mailing list. """ # TODO: call .delete() instead? self._connection.call(self.self_link, method='DELETE') mailmanclient-3.1.1/src/mailmanclient/restobjects/address.py0000664000175000017500000000455713145013731025414 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restobjects.preferences import PreferencesMixin from mailmanclient.restbase.base import RESTList, RESTObject __metaclass__ = type __all__ = [ 'Address', 'Addresses' ] class Addresses(RESTList): def __init__(self, connection, url, data=None): super(Addresses, self).__init__(connection, url, data) self._factory = lambda data: Address( self._connection, data['self_link'], data) def find_by_email(self, email): for address in self: if address.email == email: return address return None def remove(self, email): address = self.find_by_email(email) if address is not None: address.delete() self._reset_cache() else: raise ValueError('The address {} does not exist'.format(email)) class Address(RESTObject, PreferencesMixin): _properties = ('display_name', 'email', 'original_email', 'registered_on', 'self_link', 'verified_on') def __repr__(self): return self.email @property def user(self): from mailmanclient.restobjects.user import User if 'user' in self.rest_data: return User(self._connection, self.rest_data['user']) else: return None @property def verified(self): return self.verified_on is not None def verify(self): self._connection.call( 'addresses/{0}/verify'.format(self.email), method='POST') self._reset_cache() def unverify(self): self._connection.call( 'addresses/{0}/unverify'.format(self.email), method='POST') self._reset_cache() mailmanclient-3.1.1/src/mailmanclient/restobjects/settings.py0000664000175000017500000000251213145013731025614 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restbase.base import RESTDict __metaclass__ = type __all__ = [ 'Settings' ] class Settings(RESTDict): _read_only_properties = ( 'bounces_address', 'created_at', 'digest_last_sent_at', 'fqdn_listname', 'join_address', 'last_post_at', 'leave_address', 'list_id', 'list_name', 'mail_host', 'next_digest_number', 'no_reply_address', 'owner_address', 'post_id', 'posting_address', 'request_address', 'scheme', 'self_link', 'volume', 'web_host', ) mailmanclient-3.1.1/src/mailmanclient/restobjects/ban.py0000664000175000017500000000626013145014227024521 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from six.moves.urllib_error import HTTPError from mailmanclient.restobjects.mailinglist import MailingList from mailmanclient.restbase.base import RESTList, RESTObject __metaclass__ = type __all__ = [ 'Bans', 'BannedAddress' ] class Bans(RESTList): """ The list of banned addresses from a mailing-list or from the whole site. """ def __init__(self, connection, url, data=None, mlist=None): """ :param mlist: The corresponding list object, or None if it is a global ban list. :type mlist: MailingList or None. """ super(Bans, self).__init__(connection, url, data) self._mlist = mlist self._factory = lambda data: BannedAddress( self._connection, data['self_link'], data) def __repr__(self): if self._mlist is None: return '' else: return ''.format(self._mlist.list_id) def __contains__(self, item): # Accept email addresses and BannedAddress restobjects if isinstance(item, BannedAddress): item = item.email if self._rest_data is not None: return item in [data['email'] for data in self._rest_data] else: # Avoid getting the whole list just to check membership try: response, content = self._connection.call( '{}/{}'.format(self._url, item)) except HTTPError as e: if e.code == 404: return False else: raise else: return True def add(self, email): response, content = self._connection.call(self._url, dict(email=email)) self._reset_cache() return BannedAddress(self._connection, response['location']) def find_by_email(self, email): for ban in self: if ban.email == email: return ban return None def remove(self, email): ban = self.find_by_email(email) if ban is not None: ban.delete() self._reset_cache() else: raise ValueError('The address {} is not banned'.format(email)) class BannedAddress(RESTObject): _properties = ('email', 'list_id', 'self_link') _writable_properties = [] def __repr__(self): return self.email @property def mailinglist(self): return MailingList( self._connection, 'lists/{0}'.format(self.list_id)) mailmanclient-3.1.1/src/mailmanclient/restobjects/mailinglist.py0000664000175000017500000003055113145016017026274 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . import warnings from operator import itemgetter from six.moves.urllib_error import HTTPError from six.moves.urllib_parse import urlencode from mailmanclient.restobjects.header_match import HeaderMatches from mailmanclient.restobjects.archivers import ListArchivers from mailmanclient.restobjects.member import Member from mailmanclient.restobjects.settings import Settings from mailmanclient.restobjects.held_message import HeldMessage from mailmanclient.restbase.base import RESTObject from mailmanclient.restbase.page import Page __metaclass__ = type __all__ = [ 'MailingList' ] class MailingList(RESTObject): _properties = ('display_name', 'fqdn_listname', 'list_id', 'list_name', 'mail_host', 'member_count', 'volume', 'self_link') def __init__(self, connection, url, data=None): super(MailingList, self).__init__(connection, url, data) self._settings = None def __repr__(self): return ''.format(self.fqdn_listname) @property def owners(self): url = self._url + '/roster/owner' response, content = self._connection.call(url) if 'entries' not in content: return [] else: return [item['email'] for item in content['entries']] @property def moderators(self): url = self._url + '/roster/moderator' response, content = self._connection.call(url) if 'entries' not in content: return [] else: return [item['email'] for item in content['entries']] @property def members(self): url = 'lists/{0}/roster/member'.format(self.fqdn_listname) response, content = self._connection.call(url) if 'entries' not in content: return [] return [Member(self._connection, entry['self_link'], entry) for entry in sorted(content['entries'], key=itemgetter('address'))] @property def nonmembers(self): url = 'members/find' data = {'role': 'nonmember', 'list_id': self.list_id} response, content = self._connection.call(url, data) if 'entries' not in content: return [] return [Member(self._connection, entry['self_link'], entry) for entry in sorted(content['entries'], key=itemgetter('address'))] def get_member_page(self, count=50, page=1): url = 'lists/{0}/roster/member'.format(self.fqdn_listname) return Page(self._connection, url, Member, count, page) def find_members(self, address, role='member', page=None, count=50): data = { 'subscriber': address, 'role': role, 'list_id': self.list_id, } url = 'members/find?{}'.format(urlencode(data, doseq=True)) if page is None: response, content = self._connection.call(url, data) if 'entries' not in content: return [] return [Member(self._connection, entry['self_link'], entry) for entry in content['entries']] else: return Page(self._connection, url, Member, count, page) @property def settings(self): if self._settings is None: self._settings = Settings( self._connection, 'lists/{0}/config'.format(self.fqdn_listname)) return self._settings @property def held(self): """Return a list of dicts with held message information.""" response, content = self._connection.call( 'lists/{0}/held'.format(self.fqdn_listname), None, 'GET') if 'entries' not in content: return [] return [HeldMessage(self._connection, entry['self_link'], entry) for entry in content['entries']] def get_held_page(self, count=50, page=1): url = 'lists/{0}/held'.format(self.fqdn_listname) return Page(self._connection, url, HeldMessage, count, page) def get_held_message(self, held_id): url = 'lists/{0}/held/{1}'.format(self.fqdn_listname, held_id) return HeldMessage(self._connection, url) @property def requests(self): """Return a list of dicts with subscription requests.""" response, content = self._connection.call( 'lists/{0}/requests'.format(self.fqdn_listname), None, 'GET') if 'entries' not in content: return [] else: entries = [] for entry in content['entries']: request = dict(email=entry['email'], token=entry['token'], token_owner=entry['token_owner'], list_id=entry['list_id'], request_date=entry['when']) entries.append(request) return entries @property def archivers(self): url = 'lists/{0}/archivers'.format(self.list_id) return ListArchivers(self._connection, url, self) @archivers.setter def archivers(self, new_value): url = 'lists/{0}/archivers'.format(self.list_id) archivers = ListArchivers(self._connection, url, self) archivers.update(new_value) archivers.save() def add_owner(self, address): self.add_role('owner', address) def add_moderator(self, address): self.add_role('moderator', address) def add_role(self, role, address): data = dict(list_id=self.list_id, subscriber=address, role=role) self._connection.call('members', data) def remove_owner(self, address): self.remove_role('owner', address) def remove_moderator(self, address): self.remove_role('moderator', address) def remove_role(self, role, address): url = 'lists/%s/%s/%s' % (self.fqdn_listname, role, address) self._connection.call(url, method='DELETE') def moderate_message(self, request_id, action): """Moderate a held message. :param request_id: Id of the held message. :type request_id: Int. :param action: Action to perform on held message. :type action: String. """ path = 'lists/{0}/held/{1}'.format( self.fqdn_listname, str(request_id)) response, content = self._connection.call( path, dict(action=action), 'POST') return response def discard_message(self, request_id): """Shortcut for moderate_message.""" return self.moderate_message(request_id, 'discard') def reject_message(self, request_id): """Shortcut for moderate_message.""" return self.moderate_message(request_id, 'reject') def defer_message(self, request_id): """Shortcut for moderate_message.""" return self.moderate_message(request_id, 'defer') def accept_message(self, request_id): """Shortcut for moderate_message.""" return self.moderate_message(request_id, 'accept') def moderate_request(self, request_id, action): """ Moderate a subscription request. :param action: accept|reject|discard|defer :type action: str. """ path = 'lists/{0}/requests/{1}'.format(self.list_id, request_id) response, content = self._connection.call(path, {'action': action}) return response def manage_request(self, token, action): """Alias for moderate_request, kept for compatibility""" warnings.warn( 'The `manage_request()` method has been replaced by ' '`moderate_request()` and will be removed in the future.', DeprecationWarning, stacklevel=2) return self.moderate_request(token, action) def accept_request(self, request_id): """Shortcut to accept a subscription request.""" return self.moderate_request(request_id, 'accept') def reject_request(self, request_id): """Shortcut to reject a subscription request.""" return self.moderate_request(request_id, 'reject') def discard_request(self, request_id): """Shortcut to discard a subscription request.""" return self.moderate_request(request_id, 'discard') def defer_request(self, request_id): """Shortcut to defer a subscription request.""" return self.moderate_request(request_id, 'defer') def get_member(self, email): """Get a membership. :param address: The email address of the member for this list. :return: A member proxy object. """ # In order to get the member object we query the REST API for # the member. Incase there is no matching subscription, an # HTTPError is returned instead. try: path = 'lists/{0}/member/{1}'.format(self.list_id, email) response, content = self._connection.call(path) return Member(self._connection, content['self_link'], content) except HTTPError: raise ValueError('%s is not a member address of %s' % (email, self.fqdn_listname)) def subscribe(self, address, display_name=None, pre_verified=False, pre_confirmed=False, pre_approved=False): """Subscribe an email address to a mailing list. :param address: Email address to subscribe to the list. :type address: str :param display_name: The real name of the new member. :param pre_verified: True if the address has been verified. :type pre_verified: bool :param pre_confirmed: True if membership has been approved by the user. :type pre_confirmed: bool :param pre_approved: True if membership is moderator-approved. :type pre_approved: bool :type display_name: str :return: A member proxy object. """ data = dict( list_id=self.list_id, subscriber=address, display_name=display_name, ) if pre_verified: data['pre_verified'] = True if pre_confirmed: data['pre_confirmed'] = True if pre_approved: data['pre_approved'] = True response, content = self._connection.call('members', data) # If a member is not immediately subscribed (i.e. verificatoin, # confirmation or approval need), the response content is returned. if response.status == 202: return content # I the subscription is executed immediately, a member object # is returned. return Member(self._connection, response['location']) def unsubscribe(self, email): """Unsubscribe an email address from a mailing list. :param address: The address to unsubscribe. """ # In order to get the member object we need to # iterate over the existing member list try: path = 'lists/{0}/member/{1}'.format(self.list_id, email) self._connection.call(path, method='DELETE') except HTTPError: # The member link does not exist, i.e. he is not a member raise ValueError('%s is not a member address of %s' % (email, self.fqdn_listname)) @property def bans(self): from mailmanclient.restobjects.ban import Bans url = 'lists/{0}/bans'.format(self.list_id) return Bans(self._connection, url, mlist=self) def get_bans_page(self, count=50, page=1): from mailmanclient.restobjects.ban import BannedAddress url = 'lists/{0}/bans'.format(self.list_id) return Page(self._connection, url, BannedAddress, count, page) @property def header_matches(self): url = 'lists/{0}/header-matches'.format(self.list_id) return HeaderMatches(self._connection, url, self) mailmanclient-3.1.1/src/mailmanclient/restobjects/configuration.py0000664000175000017500000000216513145013731026627 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restbase.base import RESTDict __metaclass__ = type __all__ = [ 'Configuration' ] class Configuration(RESTDict): _writable_properties = () def __init__(self, connection, name): super(Configuration, self).__init__( connection, 'system/configuration/{}'.format(name)) self.name = name def __repr__(self): return ''.format(self.name) mailmanclient-3.1.1/src/mailmanclient/restobjects/user.py0000664000175000017500000000741713145013731024743 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . from mailmanclient.restobjects.preferences import PreferencesMixin from mailmanclient.restobjects.address import Addresses, Address from mailmanclient.restbase.base import RESTObject __metaclass__ = type __all__ = [ 'User' ] class User(RESTObject, PreferencesMixin): _properties = ('created_on', 'display_name', 'is_server_owner', 'password', 'self_link', 'user_id') _writable_properties = ('cleartext_password', 'display_name', 'is_server_owner') def __init__(self, connection, url, data=None): super(User, self).__init__(connection, url, data) self._subscriptions = None self._subscription_list_ids = None def __repr__(self): return ''.format(self.display_name, self.user_id) @property def addresses(self): return Addresses( self._connection, 'users/{0}/addresses'.format(self.user_id)) def __setattr__(self, name, value): """Special case for the password""" if name == 'password': self._changed_rest_data['cleartext_password'] = value if self._autosave: self.save() else: super(User, self).__setattr__(name, value) @property def subscriptions(self): from mailmanclient.restobjects.member import Member if self._subscriptions is None: subscriptions = [] for address in self.addresses: response, content = self._connection.call( 'members/find', data={'subscriber': address}) try: for entry in content['entries']: subscriptions.append(Member( self._connection, entry['self_link'], entry)) except KeyError: pass self._subscriptions = subscriptions return self._subscriptions @property def subscription_list_ids(self): if self._subscription_list_ids is None: list_ids = [] for sub in self.subscriptions: list_ids.append(sub.list_id) self._subscription_list_ids = list_ids return self._subscription_list_ids def add_address(self, email, absorb_existing=False): """ Adds another email adress to the user record and returns an _Address object. :param email: The address to add :type email: str. :param absorb_existing: set this to True if you want to add the address even if it already exists. It will import the existing user into the current one, not overwriting any previously set value. :type absorb_existing: bool. """ url = '{0}/addresses'.format(self._url) data = {'email': email} if absorb_existing: data['absorb_existing'] = 1 response, content = self._connection.call(url, data) address = { 'email': email, 'self_link': response['location'], } return Address(self._connection, address['self_link'], address) mailmanclient-3.1.1/src/mailmanclient/docs/0000775000175000017500000000000013166327535022020 5ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/docs/testing.rst0000664000175000017500000000527713145013731024225 0ustar maxkingmaxking00000000000000======================== Developing MailmanClient ======================== Running Tests ============= The test suite is run with the `tox`_ tool, which allows it to be run against multiple versions of Python. There are two modes to the test suite: * *Record mode* which is used to record the HTTP traffic against a live Mailman 3 REST server. * *Replay mode* which allows you to run the test suite off-line, without running the REST server. Whenever you add tests for other parts of the REST API, you need to run the suite once in record mode to generate the YAML file of HTTP requests and responses. Then you can run the test suite in replay mode as often as you want, and Mailman 3 needn't even be installed on your system. Since this branch ships with a recording file, you don't need to run in record mode to start with. Replay mode =========== To run the test suite in replay mode (the default), just run the following:: $ tox This will attempt to run the test suite against Python 2.7, 3.4, 3.5 and 3.6 or whatever combination of those that are available on your system. Record mode =========== Start by branching the Mailman 3 code base, then you should install it into a virtual environment. The easiest way to do this is with `tox`:: $ tox --notest -r Now, use the virtual environment that `tox` creates to create a template `var` directory in the current directory:: $ .tox/py34/bin/mailman info Now you need to modify the ``var/etc/mailman.cfg`` configuration file, so that it contains the following:: [devmode] enabled: yes testing: yes recipient: you@yourdomain.com [mta] smtp_port: 9025 lmtp_port: 9024 incoming: mailman.testing.mta.FakeMTA [webservice] port: 9001 [archiver.mhonarc] enable: yes [archiver.mail_archive] enable: yes [archiver.prototype] enable: yes Now you can start Mailman 3:: $ .tox/py34/bin/mailman start Back in your ``mailmanclient`` branch, run the test suite in record mode:: $ tox -e record You should now have an updated recording file (``tape.yaml``). If you find you need to re-run the test suite, you *must* first stop the Mailman REST server, and then delete the ``mailman.db`` file, since it contains state that will mess up the ``mailmanclient`` test suite:: $ cd $ .tox/py34/bin/mailman stop $ rm -f var/data/mailman.db $ .tox/py34/bin/mailman start $ cd $ tox -e record Once you're done recording the HTTP traffic, you can stop the Mailman 3 server and you won't need it again. It's a good idea to commit the ``tape.yaml`` changes for other users of your branch. .. _`tox`: https://testrun.org/tox/latest/ mailmanclient-3.1.1/src/mailmanclient/docs/conftest.py0000664000175000017500000000241213145013731024201 0ustar maxkingmaxking00000000000000# Copyright (C) 2017 The Free Software Foundation, Inc. # # This file is part of mailmanclient. # # mailmanclient is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailmanclient is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailmanclient. If not, see . """Wrappers for doctests to run with pytest""" from __future__ import absolute_import, print_function, unicode_literals import pytest from mailmanclient.testing.documentation import dump def pytest_collection_modifyitems(items): for item in items: item.add_marker(pytest.mark.vcr) @pytest.fixture(autouse=True) def import_stuff(doctest_namespace): doctest_namespace['absolute_import'] = absolute_import doctest_namespace['print_function'] = print_function doctest_namespace['unicode_literals'] = unicode_literals doctest_namespace['dump'] = dump mailmanclient-3.1.1/src/mailmanclient/docs/apiref.rst0000664000175000017500000000251013111463241023777 0ustar maxkingmaxking00000000000000============= API Reference ============= .. autoclass:: mailmanclient.Client :members: :undoc-members: :private-members: :inherited-members: .. autoclass:: mailmanclient._client.Domain :members: :undoc-members: .. autoclass:: mailmanclient._client.MailingList :members: :undoc-members: .. autoclass:: mailmanclient._client.ListArchivers :members: :undoc-members: .. autoclass:: mailmanclient._client.Bans :members: :undoc-members: .. autoclass:: mailmanclient._client.BannedAddress :members: :undoc-members: .. autoclass:: mailmanclient._client.HeaderMatches :members: :undoc-members: .. autoclass:: mailmanclient._client.HeaderMatch :members: :undoc-members: .. autoclass:: mailmanclient._client.Member :members: :undoc-members: .. autoclass:: mailmanclient._client.User :members: :undoc-members: .. autoclass:: mailmanclient._client.Addresses :members: :undoc-members: .. autoclass:: mailmanclient._client.Address :members: :undoc-members: .. autoclass:: mailmanclient._client.HeldMessage :members: :undoc-members: .. autoclass:: mailmanclient._client.Preferences :members: :undoc-members: .. autoclass:: mailmanclient._client.Settings :members: :undoc-members: .. autoclass:: mailmanclient._client.Queue :members: :undoc-members: mailmanclient-3.1.1/src/mailmanclient/docs/using.rst0000664000175000017500000010412413145013731023664 0ustar maxkingmaxking00000000000000============= Example Usage ============= This is the official Python bindings for the GNU Mailman REST API. In order to talk to Mailman, the engine's REST server must be running. You begin by instantiating a client object to access the root of the REST hierarchy, providing it the base URL, user name and password (for Basic Auth). >>> from mailmanclient import Client >>> client = Client('http://localhost:9001/3.1', 'restadmin', 'restpass') .. note:: Please note that port '9001' is used above, since mailman's test server runs on port *9001*. In production Mailman's REST API usually listens on port *8001*. We can retrieve basic information about the server. >>> dump(client.system) api_version: 3.1 http_etag: "..." mailman_version: GNU Mailman ... (...) python_version: ... self_link: http://localhost:9001/3.1/system/versions To start with, there are no known mailing lists. >>> client.lists [] Domains ======= Before new mailing lists can be added, the domain that the list will live in must be added. By default, there are no known domains. >>> client.domains [] It's easy to create a new domain; when you do, a proxy object for that domain is returned. >>> example_dot_com = client.create_domain('example.com') >>> example_dot_com >>> print(example_dot_com.description) None >>> print(example_dot_com.mail_host) example.com You can also get an existing domain independently using its mail host. >>> example = client.get_domain('example.com') >>> example After creating a few more domains, we can print the list of all domains. >>> client.create_domain('example.net') >>> example_org = client.create_domain('example.org') >>> print(example_org) >>> for mail_host in client.domains: ... print(mail_host) Also, domain can be deleted. >>> example_org.delete() >>> for mail_host in client.domains: ... print(mail_host) Mailing lists ============= Once you have a domain, you can create mailing lists in that domain. >>> test_one = example.create_list('test-1') >>> test_one >>> print(test_one.fqdn_listname) test-1@example.com >>> print(test_one.mail_host) example.com >>> print(test_one.list_name) test-1 >>> print(test_one.display_name) Test-1 You can also retrieve the mailing list after the fact. >>> my_list = client.get_list('test-1@example.com') >>> my_list And you can print all the known mailing lists. :: >>> example.create_list('test-2') >>> domain = client.get_domain('example.net') >>> domain.create_list('test-3') >>> example.create_list('test-3') >>> for mlist in client.lists: ... print(mlist) You can also select advertised lists only. :: >>> my_list.settings['advertised'] = False >>> my_list.settings.save() >>> for mlist in client.get_lists(advertised=True): ... print(mlist) List results can be retrieved as pages: >>> page = client.get_list_page(count=2, page=1) >>> page.nr 1 >>> len(page) 2 >>> page.total_size 4 >>> for m_list in page: ... print(m_list) >>> page = page.next >>> page.nr 2 >>> for m_list in page: ... print(m_list) Pages can also use the advertised filter: >>> page = client.get_list_page(count=2, page=1, advertised=True) >>> for m_list in page: ... print(m_list) If you only want to know all lists for a specific domain, use the domain object. >>> for mlist in example.lists: ... print(mlist) It is also possible to display only advertised lists when using the domain. >>> for mlist in example.get_lists(advertised=True): ... print(mlist) >>> for mlist in example.get_list_page(count=2, page=1, advertised=True): ... print(mlist) You can use a list instance to delete the list. >>> test_three = client.get_list('test-3@example.net') >>> test_three.delete() You can also delete a list using the client instance's delete_list method. >>> client.delete_list('test-3@example.com') >>> for mlist in client.lists: ... print(mlist) Membership ========== Email addresses can subscribe to existing mailing lists, becoming members of that list. The address is a unique id for a specific user in the system, and a member is a user that is subscribed to a mailing list. Email addresses need not be pre-registered, though the auto-registered user will be unique for each email address. The system starts out with no members. >>> client.members [] New members can be easily added; users are automatically registered. :: >>> test_two = client.get_list('test-2@example.com') >>> print(test_two.settings['subscription_policy']) confirm Email addresses need to be verified first, so if we try to subscribe a user, we get a response with a token: >>> data = test_one.subscribe('unverified@example.com', 'Unverified') >>> data['token'] is not None True >>> print(data['token_owner']) subscriber If we know the email address to be valid, we can set the ``pre_verified`` flag. However, the list's subscription policy is "confirm", so if we try to subscribe a user, we will also get a token back: >>> data = test_one.subscribe('unconfirmed@example.com', ... 'Unconfirmed', ... pre_verified=True) >>> data['token'] is not None True >>> print(data['token_owner']) subscriber If we know the user originated the subscription (for example if she or he has been authenticated elsewhere), we can set the ``pre_confirmed`` flag. The ``pre_approved`` flag is used for lists that require moderator approval and should only be used if the subscription is initiated by a moderator or admin. >>> test_one.subscribe('anna@example.com', 'Anna', ... pre_verified=True, ... pre_confirmed=True) >>> test_one.subscribe('bill@example.com', 'Bill', ... pre_verified=True, ... pre_confirmed=True) >>> test_two.subscribe('anna@example.com', ... pre_verified=True, ... pre_confirmed=True) >>> test_two.subscribe('cris@example.com', 'Cris', ... pre_verified=True, ... pre_confirmed=True) We can retrieve all known memberships. These are sorted first by mailing list name, then by email address. >>> for member in client.members: ... print(member) We can also view the memberships for a single mailing list. >>> for member in test_one.members: ... print(member) Membership lists can be paginated, to recieve only a part of the result. >>> page = client.get_member_page(count=2, page=1) >>> page.nr 1 >>> page.total_size 4 >>> for member in page: ... print(member) >>> page = page.next >>> page.nr 2 >>> for member in page: ... print(member) >>> page = test_one.get_member_page(count=1, page=1) >>> page.nr 1 >>> page.total_size 2 >>> for member in page: ... print(member) >>> page = page.next >>> page.nr 2 >>> page.total_size 2 >>> for member in page: ... print(member) We can get a single membership too. >>> cris_test_two = test_two.get_member('cris@example.com') >>> cris_test_two >>> print(cris_test_two.role) member A membership can also be retrieved without instantiating the list object first: >>> client.get_member('test-2@example.com', 'cris@example.com') A membership has preferences. >>> prefs = cris_test_two.preferences >>> print(prefs['delivery_mode']) None >>> print(prefs['acknowledge_posts']) None >>> print(prefs['delivery_status']) None >>> print(prefs['hide_address']) None >>> print(prefs['preferred_language']) None >>> print(prefs['receive_list_copy']) None >>> print(prefs['receive_own_postings']) None The membership object's ``user`` attribute will return a User object: >>> cris_test_two.user If you use an address which is not a member of test_two `ValueError` is raised: >>> test_two.unsubscribe('nomember@example.com') Traceback (most recent call last): ... ValueError: nomember@example.com is not a member address of test-2@example.com After a while, Anna decides to unsubscribe from the Test One mailing list, though she keeps her Test Two membership active. >>> import time >>> time.sleep(2) >>> test_one.unsubscribe('anna@example.com') >>> for member in client.members: ... print(member) A little later, Cris decides to unsubscribe from the Test Two mailing list. >>> cris_test_two.unsubscribe() >>> for member in client.members: ... print(member) If you try to unsubscribe an address which is not a member address `ValueError` is raised: >>> test_one.unsubscribe('nomember@example.com') Traceback (most recent call last): ... ValueError: nomember@example.com is not a member address of test-1@example.com Non-Members =========== When someone attempts to post to a list but is not a member, then they are listed as a "non-member" of that list so that a moderator can choose how to handle their messages going forward. In some cases, one might wish to accept or reject their future messages automatically. Just like with regular members, they are given a unique id. The list starts out with no nonmembers. >>> test_one.nonmembers [] When someone tries to send a message to the list and they are not a subscriber, they get added to the nonmember list. Users ===== Users are people with one or more list memberships. To get a list of all users, access the clients user property. >>> for user in client.users: ... print(user) The list of users can also be paginated: >>> page = client.get_user_page(count=4, page=1) >>> page.nr 1 >>> page.total_size 5 >>> for user in page: ... print(user) You can get the next or previous pages without calling ``get_userpage`` again. >>> page = page.next >>> page.nr 2 >>> for user in page: ... print(user) >>> page = page.previous >>> page.nr 1 >>> for user in page: ... print(user) A single user can be retrieved using their email address. >>> cris = client.get_user('cris@example.com') >>> print(cris.display_name) Cris Every user has a list of one or more addresses. >>> for address in cris.addresses: ... print(address) ... print(address.display_name) ... print(address.registered_on) cris@example.com Cris ... Multiple addresses can be assigned to a user record: >>> cris.add_address('cris.person@example.org') cris.person@example.org >>> print(client.get_address('cris.person@example.org')) cris.person@example.org >>> for address in cris.addresses: ... print(address) cris.person@example.org cris@example.com Trying to add an existing address will raise an error: >>> client.create_user(email='dana@example.org', ... password='somepass', ... display_name='Dana') >>> cris.add_address('dana@example.org') # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... HTTPError: HTTP Error 400: Address already exists This can be overridden by using the ``absorb_existing`` flag: >>> cris.add_address('dana@example.org', absorb_existing=True) dana@example.org The user Chris will then be merged with Dana, acquiring all its subscriptions and preferences. In case of conflict, Chris' original preferences will prevail. >>> for address in cris.addresses: ... print(address) cris.person@example.org cris@example.com dana@example.org Addresses ========= Addresses can be accessed directly: >>> address = client.get_address('dana@example.org') >>> print(address) dana@example.org >>> print(address.display_name) Dana The address has not been verified: >>> print(address.verified) False But that can be done via the address object: >>> address.verify() >>> print(address.verified) True It can also be unverified: >>> address.unverify() >>> print(address.verified) False Addresses can be deleted by calling their ``delete()`` method or by removing them from their user's ``addresses`` list: >>> cris.addresses.remove('dana@example.org') >>> for address in cris.addresses: ... print(address) cris.person@example.org cris@example.com Users can be added using ``create_user``. The display_name is optional: >>> client.create_user(email='ler@primus.org', ... password='somepass', ... display_name='Ler') >>> ler = client.get_user('ler@primus.org') >>> print(ler.password) $... >>> print(ler.display_name) Ler User attributes can be changed through assignment, but you need to call the object's ``save`` method to store the changes in the mailman core database. >>> ler.display_name = 'Sir Ler' >>> ler.save() >>> ler = client.get_user('ler@primus.org') >>> print(ler.display_name) Sir Ler Passwords can be changed as well: >>> old_pwd = ler.password >>> ler.password = 'easy' >>> old_pwd == ler.password True >>> ler.save() >>> old_pwd == ler.password False User Subscriptions ------------------ A User's subscriptions can be access through their ``subscriptions`` property. >>> bill = client.get_user('bill@example.com') >>> for subscription in bill.subscriptions: ... print(subscription) 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. >>> for list_id in bill.subscription_list_ids: ... print(list_id) test-1.example.com List Settings ============= 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. >>> settings = test_one.settings >>> len(settings) 56 >>> for attr in sorted(settings): ... print(attr + ': ' + str(settings[attr])) acceptable_aliases: [] ... volume: 1 >>> print(settings['display_name']) Test-1 We can access all valid list settings as attributes. >>> print(settings['fqdn_listname']) test-1@example.com >>> print(settings['description']) >>> settings['description'] = 'A very meaningful description.' >>> settings['display_name'] = 'Test Numero Uno' >>> settings.save() >>> settings_new = test_one.settings >>> print(settings_new['description']) A very meaningful description. >>> print(settings_new['display_name']) Test Numero Uno The settings object also supports the `get` method of usual Python dictionaries: >>> print(settings_new.get('OhNoIForgotTheKey', ... 'HowGoodIPlacedOneUnderTheDoormat')) HowGoodIPlacedOneUnderTheDoormat Preferences =========== Preferences can be accessed and set for users, members and addresses. 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. >>> global_prefs = client.preferences >>> print(global_prefs['acknowledge_posts']) False >>> print(global_prefs['delivery_mode']) regular >>> print(global_prefs['delivery_status']) enabled >>> print(global_prefs['hide_address']) True >>> print(global_prefs['preferred_language']) en >>> print(global_prefs['receive_list_copy']) True >>> print(global_prefs['receive_own_postings']) True Preferences can be set, but you have to call ``save`` to make your changes permanent. >>> prefs = test_two.get_member('anna@example.com').preferences >>> prefs['delivery_status'] = 'by_user' >>> prefs.save() >>> prefs = test_two.get_member('anna@example.com').preferences >>> print(prefs['delivery_status']) by_user Pipelines and Chains ==================== The available pipelines and chains can also be retrieved: >>> pipelines = client.pipelines['pipelines'] >>> for pipeline in pipelines: ... print(pipeline) default-owner-pipeline default-posting-pipeline virgin >>> chains = client.chains['chains'] >>> for chain in chains: ... print(chain) accept default-owner-chain default-posting-chain discard header-match hold moderation reject Owners and Moderators ===================== Owners and moderators are properties of the list object. >>> test_one.owners [] >>> test_one.moderators [] Owners can be added via the ``add_owner`` method: >>> test_one.add_owner('foo@example.com') >>> for owner in test_one.owners: ... print(owner) foo@example.com The owner of the list not automatically added as a member: >>> test_one.members [] Moderators can be added similarly: >>> test_one.add_moderator('bar@example.com') >>> for moderator in test_one.moderators: ... print(moderator) bar@example.com Moderators are also not automatically added as members: >>> test_one.members [] Members and owners/moderators are separate entries in in the general members list: >>> test_one.subscribe('bar@example.com', 'Bar', ... pre_verified=True, ... pre_confirmed=True) >>> for member in client.members: ... print('%s: %s' %(member, member.role)) : owner : moderator : member : member : member Both owners and moderators can be removed: >>> test_one.remove_owner('foo@example.com') >>> test_one.owners [] test_one.remove_moderator('bar@example.com') test_one.moderators [] Moderation ========== Subscription Moderation ----------------------- Subscription requests can be accessed through the list object's `request` property. So let's create a non-open list first. >>> confirm_first = example_dot_com.create_list('confirm-first') >>> settings = confirm_first.settings >>> settings['subscription_policy'] = 'moderate' >>> settings.save() >>> confirm_first = client.get_list('confirm-first.example.com') >>> print(confirm_first.settings['subscription_policy']) moderate Initially there are no requests, so let's to subscribe someone to the list. We'll get a token back. >>> confirm_first.requests [] >>> data = confirm_first.subscribe('groucho@example.com', ... pre_verified=True, ... pre_confirmed=True) >>> print(data['token_owner']) moderator Now the request shows up in the list of requests: >>> import time; time.sleep(5) >>> len(confirm_first.requests) 1 >>> request_1 = confirm_first.requests[0] >>> print(request_1['email']) groucho@example.com >>> print (request_1['token'] is not None) True >>> print(request_1['token_owner']) moderator >>> print(request_1['request_date'] is not None) True >>> print(request_1['list_id']) confirm-first.example.com Subscription requests can be accepted, deferred, rejected or discarded using the request token. >>> data = confirm_first.subscribe('harpo@example.com', ... pre_verified=True, ... pre_confirmed=True) >>> data = confirm_first.subscribe('zeppo@example.com', ... pre_verified=True, ... pre_confirmed=True) >>> len(confirm_first.requests) 3 Let's accept Groucho: >>> response = confirm_first.moderate_request(request_1['token'], 'accept') >>> len(confirm_first.requests) 2 >>> request_2 = confirm_first.requests[0] >>> print(request_2['email']) harpo@example.com >>> request_3 = confirm_first.requests[1] >>> print(request_3['email']) zeppo@example.com Let's reject Harpo: >>> response = confirm_first.moderate_request(request_2['token'], 'reject') >>> len(confirm_first.requests) 1 Let's discard Zeppo's request: >>> response = confirm_first.moderate_request(request_3['token'], 'discard') >>> len(confirm_first.requests) 0 Message Moderation ------------------ By injecting a message by a non-member into the incoming queue, we can simulate a message being held for moderator approval. >>> msg = """From: nomember@example.com ... To: test-1@example.com ... Subject: Something ... Message-ID: ... ... Some text. ... ... """ >>> inq = client.queues['in'] >>> inq.inject('test-1.example.com', msg) Now wait until the message has been processed. >>> while True: ... if len(inq.files) == 0: ... break ... time.sleep(0.1) It might take a few moments for the message to show up in the moderation queue. >>> while True: ... all_held = test_one.held ... if len(all_held) > 0: ... break ... time.sleep(0.1) Messages held for moderation can be listed on a per list basis. >>> print(all_held[0].request_id) 1 A held message can be retrieved by ID, and have attributes: >>> heldmsg = test_one.get_held_message(1) >>> print(heldmsg.subject) Something >>> print(heldmsg.reason) The message is not from a list member >>> print(heldmsg.sender) nomember@example.com >>> 'Message-ID: ' in heldmsg.msg True A moderation action can be taken on them using the list methods or the held message's methods. >>> print(test_one.defer_message(heldmsg.request_id)['status']) 204 >>> len(test_one.held) 1 >>> print(heldmsg.discard()['status']) 204 >>> len(test_one.held) 0 Member moderation ----------------- Each member or non-member can have a specific moderation action. It is set using the 'moderation_action' property: >>> bill_member = test_one.get_member('bill@example.com') >>> print(bill_member.moderation_action) None >>> bill_member.moderation_action = 'hold' >>> bill_member.save() >>> print(test_one.get_member('bill@example.com').moderation_action) hold Banning addresses ----------------- A ban list is a list of email addresses that are not allowed to subscribe to a mailing-list. There are two types of ban lists: each mailing-list has its ban list, and there is a site-wide list. Addresses on the site-wide list are prevented from subscribing to every mailing-list on the server. To view the site-wide ban list, use the `bans` property:: >>> list(client.bans) [] You can use the `add` method on the ban list to ban an email address:: >>> banned_anna = client.bans.add('anna@example.com') >>> print(banned_anna) anna@example.com >>> 'anna@example.com' in client.bans True >>> client.bans.add('bill@example.com') bill@example.com >>> print(list(client.bans)) [anna@example.com, bill@example.com] The list of banned addresses can be paginated using the ``get_bans_page()`` method:: >>> print(list(client.get_bans_page(count=1, page=1))) [anna@example.com] >>> print(list(client.get_bans_page(count=1, page=2))) [bill@example.com] You can use the ``delete()`` method on a banned address to unban it, or the ``remove()`` method on the ban list:: >>> banned_anna.delete() >>> 'anna@example.com' in client.bans False >>> print(list(client.bans)) [bill@example.com] >>> client.bans.remove('bill@example.com') >>> 'bill@example.com' in client.bans False >>> print(list(client.bans)) [] The mailing-list-specific ban lists work in the same way:: >>> print(list(test_one.bans)) [] >>> banned_anna = test_one.bans.add('anna@example.com') >>> 'anna@example.com' in test_one.bans True >>> test_one.bans.add('bill@example.com') bill@example.com >>> print(list(test_one.bans)) [anna@example.com, bill@example.com] >>> print(list(test_one.get_bans_page(count=1, page=1))) [anna@example.com] >>> print(list(test_one.get_bans_page(count=1, page=2))) [bill@example.com] >>> banned_anna.delete() >>> 'anna@example.com' in test_one.bans False >>> test_one.bans.remove('bill@example.com') >>> print(list(test_one.bans)) [] Archivers ========= Each list object has an ``archivers`` attribute. >>> archivers = test_one.archivers >>> print(archivers) The activation status of each available archiver can be accessed like a key in a dictionary. >>> archivers = test_one.archivers >>> for archiver in sorted(archivers.keys()): ... print('{0}: {1}'.format(archiver, archivers[archiver])) mail-archive: True mhonarc: True prototype: True >>> archivers['mail-archive'] True >>> archivers['mhonarc'] True They can also be set like items in dictionary. >>> archivers['mail-archive'] = False >>> archivers['mhonarc'] = False So if we get a new ``archivers`` object from the API (by accessing the list's archiver attribute again), we can see that the archiver stati have now been set. >>> archivers = test_one.archivers >>> archivers['mail-archive'] False >>> archivers['mhonarc'] False Header matches ============== Header matches are filtering rules that apply to messages sent to a mailing list. They match a header to a pattern using a regular expression, and matching patterns can trigger specific moderation actions. They are accessible via the mailing list's ``header_matches`` attribute, which behaves like a list. >>> header_matches = test_one.header_matches >>> print(header_matches) >>> len(header_matches) 0 Header matches can be added using the ``add()`` method. The arguments are: - the header to consider (``str``). Il will be lower-cased. - the regular expression to use for filtering (``str``) - the action to take when the header matches the pattern. This can be ``'accept'``, ``'discard'``, ``'reject'``, or ``'hold'``. >>> header_matches.add('Subject', '^test: ', 'discard') >>> print(header_matches) >>> len(header_matches) 1 >>> print(list(header_matches)) [] You can delete a header match by deleting it from the ``header_matches`` collection. >>> del header_matches[0] >>> len(header_matches) 0 You can also delete a header match using its ``delete()`` method, but be aware that the collection will not automatically be updated. Get a new collection from the list's ``header_matches`` attribute to see the change. >>> header_matches.add('Subject', '^test: ', 'discard') >>> header_matches[0].delete() >>> len(header_matches) # not automatically updated 1 >>> len(test_one.header_matches) 0 Configuration ============= Mailman Core exposes all its configuration through REST API. All these configuration options are read-only. >>> cfg = client.configuration >>> for key in sorted(cfg): ... print(cfg[key]) Each configuration object is a dictionary and you can iterate over them: >>> for key in sorted(cfg['mailman']): ... print('{} : {}'.format(key, cfg['mailman'][key])) cache_life : 7d default_language : en email_commands_max_lines : 10 filtered_messages_are_preservable : no html_to_plain_text_command : /usr/bin/lynx -dump $filename layout : here listname_chars : [-_.0-9a-z] noreply_address : noreply pending_request_life : 3d post_hook : pre_hook : self_link : http://localhost:9001/3.1/system/configuration/mailman sender_headers : from from_ reply-to sender site_owner : changeme@example.com .. >>> for domain in client.domains: ... domain.delete() >>> for user in client.users: ... user.delete() mailmanclient-3.1.1/src/mailmanclient/docs/__init__.py0000664000175000017500000000000013111417101024072 0ustar maxkingmaxking00000000000000mailmanclient-3.1.1/src/mailmanclient/docs/NEWS.rst0000664000175000017500000000177213166327122023325 0ustar maxkingmaxking00000000000000======================= NEWS for mailmanclient ======================= 3.1.1 (2017-10-07) ================== * Python3 compatibility is fixed, mailmanclient is now compatible through Python2.7 - Python3.6 * Internal source code is now split into several class-specific modules as compared to previously a single giant _client module. * All the RestObjects, like MailingList, are now exposed from the top level import. * Old `mailmanclient._client` module is added back for compatibility with versions of Postorius that use some internal APIs. 3.1 (2017-05-25) ================ * Bug fixes. * Align with Mailman 3.1 Core REST API. * Python3 compatibility is broken because of a urllib bug. 1.0.1 (2015-11-14) ================== * Bugfix release. 1.0.0 (2015-04-17) ================== * Port to Python 3.4. * Run test suite with `tox`. * Use vcrpy for HTTP testing. * Add list archiver access. * Add subscription moderation 1.0.0a1 (2014-03-15) ==================== * Initial release. mailmanclient-3.1.1/COPYING.LESSER0000664000175000017500000001672513111417101017501 0ustar maxkingmaxking00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. mailmanclient-3.1.1/tox.ini0000664000175000017500000000102313145013731016756 0ustar maxkingmaxking00000000000000[tox] envlist = py{27,34,35,36},lint [testenv] usedevelop = True commands = python -m pytest --vcr-record-mode=none deps = WebTest contextlib2 mock requests pytest pytest-vcr [testenv:record] basepython = python2 commands = pytest --vcr-record-mode=once [testenv:lint] deps = six flake8 > 3.0 commands = python -m flake8 {posargs} [testenv:docs] deps = sphinx commands = sphinx-build -t html . build/ [flake8] show-source = true exclude = .git,.tox,dist,*egg,src/mailmanclient/docs mailmanclient-3.1.1/setup.cfg0000664000175000017500000000022513166327535017304 0ustar maxkingmaxking00000000000000[build_sphinx] source_dir = mailman/client [upload_docs] upload_dir = build/sphinx/html [egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 mailmanclient-3.1.1/Makefile0000664000175000017500000000603513111417101017103 0ustar maxkingmaxking00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf _build/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html @echo @echo "Build finished. The HTML pages are in _build/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) _build/dirhtml @echo @echo "Build finished. The HTML pages are in _build/dirhtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) _build/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in _build/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) _build/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in _build/qthelp, like this:" @echo "# qcollectiongenerator _build/qthelp/munepy.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile _build/qthelp/munepy.qhc" latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex @echo @echo "Build finished; the LaTeX files are in _build/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes @echo @echo "The overview file is in _build/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in _build/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) _build/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in _build/doctest/output.txt." pypi: html (cd _build/html; \ rm -f index.html; \ ln -s README.html index.html; \ zip -r ../pypi .) mailmanclient-3.1.1/template.py0000664000175000017500000000152213111661414017634 0ustar maxkingmaxking00000000000000# Copyright (C) 2017 The Free Software Foundation, Inc. # # This file is part of mailman.client. # # mailman.client is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailman.client is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailman.client. If not, see . """Module contents.""" from __future__ import absolute_import, print_function, unicode_literals __metaclass__ = type __all__ = [ ] mailmanclient-3.1.1/setup_helpers.py0000664000175000017500000001127413165056657020730 0ustar maxkingmaxking00000000000000# Copyright (C) 2009-2017 The Free Software Foundation, Inc. # # This file is part of mailman.client # # mailman.client is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, version 3 of the License. # # mailman.client is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with mailman.client. If not, see . """setup.py helper functions.""" from __future__ import absolute_import, print_function, unicode_literals import os import re import sys import codecs __metaclass__ = type __all__ = [ 'description', 'find_doctests', 'get_version', 'long_description', 'require_python', ] DEFAULT_VERSION_RE = re.compile(r'(?P\d+\.\d(?:\.\w+)?)') NL = '\n' def require_python(minimum): """Require at least a minimum Python version. The version number is expressed in terms of `sys.hexversion`. E.g. to require a minimum of Python 2.6, use:: >>> require_python(0x206000f0) :param minimum: Minimum Python version supported. :type minimum: integer """ if sys.hexversion < minimum: hversion = hex(minimum)[2:] if len(hversion) % 2 != 0: hversion = '0' + hversion split = list(hversion) parts = [] while split: parts.append(int(''.join((split.pop(0), split.pop(0))), 16)) major, minor, micro, release = parts if release == 0xf0: print('Python {0}.{1}.{2} or better is required'.format( major, minor, micro)) else: print('Python {0}.{1}.{2} ({3}) or better is required'.format( major, minor, micro, hex(release)[2:])) sys.exit(1) def get_version(filename, pattern=None): """Extract the __version__ from a file without importing it. While you could get the __version__ by importing the module, the very act of importing can cause unintended consequences. For example, Distribute's automatic 2to3 support will break. Instead, this searches the file for a line that starts with __version__, and extract the version number by regular expression matching. By default, two or three dot-separated digits are recognized, but by passing a pattern parameter, you can recognize just about anything. Use the `version` group name to specify the match group. :param filename: The name of the file to search. :type filename: string :param pattern: Optional alternative regular expression pattern to use. :type pattern: string :return: The version that was extracted. :rtype: string """ if pattern is None: cre = DEFAULT_VERSION_RE else: cre = re.compile(pattern) with open(filename) as fp: for line in fp: if line.startswith('__version__'): mo = cre.search(line) assert mo, 'No valid __version__ string found' return mo.group('version') raise AssertionError('No __version__ assignment found') def find_doctests(start='.', extension='.txt'): """Find separate-file doctests in the package. This is useful for Distribute's automatic 2to3 conversion support. The `setup()` keyword argument `convert_2to3_doctests` requires file names, which may be difficult to track automatically as you add new doctests. :param start: Directory to start searching in (default is cwd) :type start: string :param extension: Doctest file extension (default is .txt) :type extension: string :return: The doctest files found. :rtype: list """ doctests = [] for dirpath, dirnames, filenames in os.walk(start): doctests.extend(os.path.join(dirpath, filename) for filename in filenames if filename.endswith(extension)) return doctests def long_description(*filenames): """Provide a long description.""" res = [] for value in filenames: base, ext = os.path.splitext(value) if ext in ('.txt', '.rst'): with codecs.open(value, 'r', encoding='utf-8') as fp: value = fp.read() res.append(value) if not value.endswith(NL): res.append('') return NL.join(res) def description(filename): """Provide a short description.""" with codecs.open(filename, 'r', encoding='utf-8') as fp: for line in fp: return line.strip() mailmanclient-3.1.1/setup.py0000664000175000017500000000345113165056657017204 0ustar maxkingmaxking00000000000000# Copyright (C) 2010-2017 The Free Software Foundation, Inc. # # This file is part of mailman.client. # # mailman.client is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # mailman.client is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License # for more details. # # You should have received a copy of the GNU Lesser General Public License # along with mailman.client. If not, see . from setup_helpers import description, get_version, require_python from setuptools import setup, find_packages require_python(0x20600f0) __version__ = get_version('src/mailmanclient/constants.py') setup( name='mailmanclient', version=__version__, packages=find_packages('src'), description='mailmanclient -- python library for Mailman REST API', long_description=description('README.rst'), package_dir={'': 'src'}, include_package_data=True, maintainer='Barry Warsaw', maintainer_email='barry@list.org', license='LGPLv3', url='https://www.list.org/', classifiers=[ 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', # noqa 'Operating System :: POSIX', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Topic :: Internet :: WWW/HTTP ', ], install_requires=[ 'httplib2', 'six', ], ) mailmanclient-3.1.1/MANIFEST.in0000664000175000017500000000023513111417101017175 0ustar maxkingmaxking00000000000000include *.py MANIFEST.in *.cfg *.ini COPYING.LESSER global-include *.txt *.rst *.yaml include Makefile prune _build prune dist prune .tox exclude .bzrignore mailmanclient-3.1.1/PKG-INFO0000664000175000017500000000115413166327535016562 0ustar maxkingmaxking00000000000000Metadata-Version: 1.1 Name: mailmanclient Version: 3.1.1 Summary: mailmanclient -- python library for Mailman REST API Home-page: https://www.list.org/ Author: Barry Warsaw Author-email: barry@list.org License: LGPLv3 Description: .. Platform: UNKNOWN Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Topic :: Internet :: WWW/HTTP mailmanclient-3.1.1/README.rst0000664000175000017500000000563513115057273017155 0ustar maxkingmaxking00000000000000.. This file is part of mailmanclient. mailmanclient is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 3 of the License. mailmanclient is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with mailman.client. If not, see . ============== Mailman Client ============== .. image:: https://gitlab.com/mailman/mailmanclient/badges/master/build.svg :target: https://gitlab.com/mailman/mailmanclient/commits/master .. image:: https://readthedocs.org/projects/mailmanclient/badge :target: https://mailmanclient.readthedocs.io .. image:: http://img.shields.io/pypi/v/mailmanclient.svg :target: https://pypi.python.org/pypi/mailmanclient .. image:: http://img.shields.io/pypi/dm/mailmanclient.svg :target: https://pypi.python.org/pypi/mailmanclient The ``mailmanclient`` library provides official Python bindings for the GNU Mailman 3 REST API. Requirements ============ ``mailmanclient`` requires Python 2.7 or newer. Documentation ============= A `simple guide`_ to using the library is available within this package, in the form of doctests. The manual is also available online at: http://mailmanclient.readthedocs.org/en/latest/ Project details =============== The project home page is: https://gitlab.com/mailman/mailmanclient You should report bugs at: https://gitlab.com/mailman/mailmanclient/issues You can download the latest version of the package either from the `Cheese Shop`_: http://pypi.python.org/pypi/mailmanclient or from the GitLab page above. Of course you can also just install it with ``pip`` from the command line:: $ pip install mailmanclient You can grab the latest development copy of the code using Git, from the Gitlab home page above. If you have Git installed, you can grab your own branch of the code like this:: $ git clone https://gitlab.com/mailman/mailmanclient.git You may contact the developers via mailman-developers@python.org Acknowledgements ================ Many thanks to Florian Fuchs for his contribution of an initial REST client. Also thanks to all the contributors of Mailman Client who have contributed code, raised issues or devoted their time in any capacity! .. toctree:: :maxdepth: 2 :caption: Table of Contents src/mailmanclient/docs/NEWS.rst src/mailmanclient/docs/using.rst src/mailmanclient/docs/apiref.rst src/mailmanclient/docs/testing.rst .. _`simple guide`: https://mailmanclient.readthedocs.io/en/latest/using.html .. _`Cheese Shop`: https://pypi.python.org/pypi/mailmanclient