[Python-modules-team] Bug#955104: sphinxcontrib-websupport: FTBFS with Sphinx 2.4: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.7 3.8" returned exit code 13

Lucas Nussbaum lucas at debian.org
Fri Mar 27 14:52:18 GMT 2020


Source: sphinxcontrib-websupport
Version: 1.2.0-1
Severity: important
Tags: ftbfs
User: python-modules-team at lists.alioth.debian.org
Usertags: sphinx2.4

Hi,

sphinxcontrib-websupport fails to build with Sphinx 2.4, currently available in
experimental.

Relevant part (hopefully):
> dpkg-buildpackage
> -----------------
> 
> Command: dpkg-buildpackage -us -uc -sa -rfakeroot
> dpkg-buildpackage: info: source package sphinxcontrib-websupport
> dpkg-buildpackage: info: source version 1.2.0-1
> dpkg-buildpackage: info: source distribution unstable
> dpkg-buildpackage: info: source changed by Dmitry Shachnev <mitya57 at debian.org>
>  dpkg-source --before-build .
> dpkg-buildpackage: info: host architecture amd64
>  debian/rules clean
> dh clean --with python3 --buildsystem=pybuild
>    dh_auto_clean -O--buildsystem=pybuild
> I: pybuild base:217: python3.7 setup.py clean 
> running clean
> removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build' (and everything under it)
> 'build/bdist.linux-x86_64' does not exist -- can't clean it
> 'build/scripts-3.7' does not exist -- can't clean it
> I: pybuild base:217: python3.8 setup.py clean 
> running clean
> removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build' (and everything under it)
> 'build/bdist.linux-x86_64' does not exist -- can't clean it
> 'build/scripts-3.8' does not exist -- can't clean it
>    dh_autoreconf_clean -O--buildsystem=pybuild
>    dh_clean -O--buildsystem=pybuild
>  dpkg-source -b .
> dpkg-source: info: using source format '3.0 (quilt)'
> dpkg-source: info: building sphinxcontrib-websupport using existing ./sphinxcontrib-websupport_1.2.0.orig.tar.gz
> dpkg-source: info: using patch list from debian/patches/series
> dpkg-source: warning: ignoring deletion of file PKG-INFO, use --include-removal to override
> dpkg-source: warning: ignoring deletion of directory sphinxcontrib_websupport.egg-info
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/SOURCES.txt, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/top_level.txt, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/namespace_packages.txt, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/dependency_links.txt, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/PKG-INFO, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/requires.txt, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/not-zip-safe, use --include-removal to override
> dpkg-source: warning: ignoring deletion of file sphinxcontrib_websupport.egg-info/entry_points.txt, use --include-removal to override
> dpkg-source: info: building sphinxcontrib-websupport in sphinxcontrib-websupport_1.2.0-1.debian.tar.xz
> dpkg-source: info: building sphinxcontrib-websupport in sphinxcontrib-websupport_1.2.0-1.dsc
>  debian/rules binary
> dh binary --with python3 --buildsystem=pybuild
>    dh_update_autotools_config -O--buildsystem=pybuild
>    dh_autoreconf -O--buildsystem=pybuild
>    dh_auto_configure -O--buildsystem=pybuild
> I: pybuild base:217: python3.7 setup.py config 
> running config
> I: pybuild base:217: python3.8 setup.py config 
> running config
>    dh_auto_build -O--buildsystem=pybuild
> I: pybuild base:217: /usr/bin/python3.7 setup.py build 
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib
> copying sphinxcontrib/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/errors.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/core.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/builder.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/version.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/writer.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/sqlalchemy_db.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/sqlalchemystorage.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/differ.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/storage
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/whooshsearch.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/nullsearch.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/xapiansearch.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/search
> running egg_info
> creating sphinxcontrib_websupport.egg-info
> writing sphinxcontrib_websupport.egg-info/PKG-INFO
> writing dependency_links to sphinxcontrib_websupport.egg-info/dependency_links.txt
> writing entry points to sphinxcontrib_websupport.egg-info/entry_points.txt
> writing namespace_packages to sphinxcontrib_websupport.egg-info/namespace_packages.txt
> writing requirements to sphinxcontrib_websupport.egg-info/requires.txt
> writing top-level names to sphinxcontrib_websupport.egg-info/top_level.txt
> writing manifest file 'sphinxcontrib_websupport.egg-info/SOURCES.txt'
> reading manifest file 'sphinxcontrib_websupport.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> writing manifest file 'sphinxcontrib_websupport.egg-info/SOURCES.txt'
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/ajax-loader.gif -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/comment-bright.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/comment-close.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/comment.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/down-pressed.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/down.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/up-pressed.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/up.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/websupport.js -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/files
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/templates
> copying sphinxcontrib/websupport/templates/searchresults.html -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/templates
> I: pybuild base:217: /usr/bin/python3 setup.py build 
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib
> copying sphinxcontrib/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/errors.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/core.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/builder.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/version.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/writer.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> copying sphinxcontrib/websupport/utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/sqlalchemy_db.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/sqlalchemystorage.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/storage
> copying sphinxcontrib/websupport/storage/differ.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/storage
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/whooshsearch.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/nullsearch.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/search
> copying sphinxcontrib/websupport/search/xapiansearch.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/search
> running egg_info
> writing sphinxcontrib_websupport.egg-info/PKG-INFO
> writing dependency_links to sphinxcontrib_websupport.egg-info/dependency_links.txt
> writing entry points to sphinxcontrib_websupport.egg-info/entry_points.txt
> writing namespace_packages to sphinxcontrib_websupport.egg-info/namespace_packages.txt
> writing requirements to sphinxcontrib_websupport.egg-info/requires.txt
> writing top-level names to sphinxcontrib_websupport.egg-info/top_level.txt
> reading manifest file 'sphinxcontrib_websupport.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> writing manifest file 'sphinxcontrib_websupport.egg-info/SOURCES.txt'
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/ajax-loader.gif -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/comment-bright.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/comment-close.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/comment.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/down-pressed.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/down.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/up-pressed.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/up.png -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> copying sphinxcontrib/websupport/files/websupport.js -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/files
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/templates
> copying sphinxcontrib/websupport/templates/searchresults.html -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.8/build/sphinxcontrib/websupport/templates
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:217: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build; python3.7 -m pytest tests
> ============================= test session starts ==============================
> platform linux -- Python 3.7.7, pytest-4.6.9, py-1.8.1, pluggy-0.13.0
> rootdir: /<<PKGBUILDDIR>>, inifile: setup.cfg
> collected 13 items
> 
> tests/test_searchadapters.py FF                                          [ 15%]
> tests/test_websupport.py FFFFFFFFFF.                                     [100%]
> 
> =================================== FAILURES ===================================
> _________________________________ test_xapian __________________________________
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9cc509850>
> app = <sphinx.application.Sphinx object at 0x7ff9cbbc1f10>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
> >               mod = import_module(extname)
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:453: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None
> 
>     def import_module(name, package=None):
>         """Import a module.
>     
>         The 'package' argument is required when performing a relative import. It
>         specifies the package to use as the anchor point from which to resolve the
>         relative import to an absolute import.
>     
>         """
>         level = 0
>         if name.startswith('.'):
>             if not package:
>                 msg = ("the 'package' argument is required to perform a relative "
>                        "import for {!r}")
>                 raise TypeError(msg.format(name))
>             for character in name:
>                 if character != '.':
>                     break
>                 level += 1
> >       return _bootstrap._gcd_import(name[level:], package, level)
> 
> /usr/lib/python3.7/importlib/__init__.py:127: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None, level = 0
> 
> >   ???
> 
> <frozen importlib._bootstrap>:1006: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:983: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:967: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> spec = ModuleSpec(name='sphinxcontrib.websupport.builder', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f...trib-websupport-hkeho8/sphinxcontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py')
> 
> >   ???
> 
> <frozen importlib._bootstrap>:677: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <_frozen_importlib_external.SourceFileLoader object at 0x7ff9caea23d0>
> module = <module 'sphinxcontrib.websupport.builder' from '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py'>
> 
> >   ???
> 
> <frozen importlib._bootstrap_external>:728: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> f = <built-in function exec>
> args = (<code object <module> at 0x7ff9caea6c00, file "/<<PKGBUILDDIR>>/...ontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/__pycache__/builder.cpython-37.pyc', ...})
> kwds = {}
> 
> >   ???
> 
> <frozen importlib._bootstrap>:219: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     """
>     
>     from os import path
>     import posixpath
>     import shutil
>     
>     from docutils.io import StringOutput
>     
>     from sphinx import version_info as sphinx_version
>     from sphinx.jinja2glue import BuiltinTemplateLoader
>     from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile
> >   from sphinx.builders.html import PickleHTMLBuilder
> E   ImportError: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location)
> 
> sphinxcontrib/websupport/builder.py:21: ImportError
> 
> During handling of the above exception, another exception occurred:
> 
>     @skip_unless_importable('xapian', 'needs xapian bindings installed')
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     def test_xapian():
> >       search_adapter_helper('xapian')
> 
> tests/test_searchadapters.py:64: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/test_searchadapters.py:32: in search_adapter_helper
>     support.build()
> sphinxcontrib/websupport/core.py:139: in build
>     warning=self.warning)
> /usr/lib/python3/dist-packages/sphinx/application.py:239: in __init__
>     self.setup_extension(extension)
> /usr/lib/python3/dist-packages/sphinx/application.py:391: in setup_extension
>     self.registry.load_extension(self, extname)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9cc509850>
> app = <sphinx.application.Sphinx object at 0x7ff9cbbc1f10>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
>                 mod = import_module(extname)
>             except ImportError as err:
>                 logger.verbose(__('Original exception:\n') + traceback.format_exc())
> >               raise ExtensionError(__('Could not import extension %s') % extname, err)
> E               sphinx.errors.ExtensionError: Could not import extension sphinxcontrib.websupport.builder (exception: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location))
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:456: ExtensionError
> _________________________________ test_whoosh __________________________________
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9cbb48150>
> app = <sphinx.application.Sphinx object at 0x7ff9cbba0e10>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
> >               mod = import_module(extname)
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:453: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None
> 
>     def import_module(name, package=None):
>         """Import a module.
>     
>         The 'package' argument is required when performing a relative import. It
>         specifies the package to use as the anchor point from which to resolve the
>         relative import to an absolute import.
>     
>         """
>         level = 0
>         if name.startswith('.'):
>             if not package:
>                 msg = ("the 'package' argument is required to perform a relative "
>                        "import for {!r}")
>                 raise TypeError(msg.format(name))
>             for character in name:
>                 if character != '.':
>                     break
>                 level += 1
> >       return _bootstrap._gcd_import(name[level:], package, level)
> 
> /usr/lib/python3.7/importlib/__init__.py:127: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None, level = 0
> 
> >   ???
> 
> <frozen importlib._bootstrap>:1006: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:983: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:967: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> spec = ModuleSpec(name='sphinxcontrib.websupport.builder', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f...trib-websupport-hkeho8/sphinxcontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py')
> 
> >   ???
> 
> <frozen importlib._bootstrap>:677: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <_frozen_importlib_external.SourceFileLoader object at 0x7ff9caba0750>
> module = <module 'sphinxcontrib.websupport.builder' from '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py'>
> 
> >   ???
> 
> <frozen importlib._bootstrap_external>:728: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> f = <built-in function exec>
> args = (<code object <module> at 0x7ff9cae51c00, file "/<<PKGBUILDDIR>>/...ontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/__pycache__/builder.cpython-37.pyc', ...})
> kwds = {}
> 
> >   ???
> 
> <frozen importlib._bootstrap>:219: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     """
>     
>     from os import path
>     import posixpath
>     import shutil
>     
>     from docutils.io import StringOutput
>     
>     from sphinx import version_info as sphinx_version
>     from sphinx.jinja2glue import BuiltinTemplateLoader
>     from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile
> >   from sphinx.builders.html import PickleHTMLBuilder
> E   ImportError: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location)
> 
> sphinxcontrib/websupport/builder.py:21: ImportError
> 
> During handling of the above exception, another exception occurred:
> 
>     @skip_unless_importable('whoosh', 'needs whoosh package installed')
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     def test_whoosh():
> >       search_adapter_helper('whoosh')
> 
> tests/test_searchadapters.py:70: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/test_searchadapters.py:32: in search_adapter_helper
>     support.build()
> sphinxcontrib/websupport/core.py:139: in build
>     warning=self.warning)
> /usr/lib/python3/dist-packages/sphinx/application.py:239: in __init__
>     self.setup_extension(extension)
> /usr/lib/python3/dist-packages/sphinx/application.py:391: in setup_extension
>     self.registry.load_extension(self, extname)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9cbb48150>
> app = <sphinx.application.Sphinx object at 0x7ff9cbba0e10>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
>                 mod = import_module(extname)
>             except ImportError as err:
>                 logger.verbose(__('Original exception:\n') + traceback.format_exc())
> >               raise ExtensionError(__('Could not import extension %s') % extname, err)
> E               sphinx.errors.ExtensionError: Could not import extension sphinxcontrib.websupport.builder (exception: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location))
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:456: ExtensionError
> ________________________________ test_no_srcdir ________________________________
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9cabb5290>
> app = <sphinx.application.Sphinx object at 0x7ff9cabb5210>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
> >               mod = import_module(extname)
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:453: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None
> 
>     def import_module(name, package=None):
>         """Import a module.
>     
>         The 'package' argument is required when performing a relative import. It
>         specifies the package to use as the anchor point from which to resolve the
>         relative import to an absolute import.
>     
>         """
>         level = 0
>         if name.startswith('.'):
>             if not package:
>                 msg = ("the 'package' argument is required to perform a relative "
>                        "import for {!r}")
>                 raise TypeError(msg.format(name))
>             for character in name:
>                 if character != '.':
>                     break
>                 level += 1
> >       return _bootstrap._gcd_import(name[level:], package, level)
> 
> /usr/lib/python3.7/importlib/__init__.py:127: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None, level = 0
> 
> >   ???
> 
> <frozen importlib._bootstrap>:1006: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:983: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:967: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> spec = ModuleSpec(name='sphinxcontrib.websupport.builder', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f...trib-websupport-hkeho8/sphinxcontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py')
> 
> >   ???
> 
> <frozen importlib._bootstrap>:677: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <_frozen_importlib_external.SourceFileLoader object at 0x7ff9caa06c90>
> module = <module 'sphinxcontrib.websupport.builder' from '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py'>
> 
> >   ???
> 
> <frozen importlib._bootstrap_external>:728: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> f = <built-in function exec>
> args = (<code object <module> at 0x7ff9cabb1c00, file "/<<PKGBUILDDIR>>/...ontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/__pycache__/builder.cpython-37.pyc', ...})
> kwds = {}
> 
> >   ???
> 
> <frozen importlib._bootstrap>:219: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     """
>     
>     from os import path
>     import posixpath
>     import shutil
>     
>     from docutils.io import StringOutput
>     
>     from sphinx import version_info as sphinx_version
>     from sphinx.jinja2glue import BuiltinTemplateLoader
>     from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile
> >   from sphinx.builders.html import PickleHTMLBuilder
> E   ImportError: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location)
> 
> sphinxcontrib/websupport/builder.py:21: ImportError
> 
> During handling of the above exception, another exception occurred:
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9cabad1d0>
> 
>     @with_support(storage=NullStorage())
>     def test_no_srcdir(support):
>         # make sure the correct exception is raised if srcdir is not given.
>         with pytest.raises(RuntimeError):
> >           support.build()
> 
> tests/test_websupport.py:57: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> sphinxcontrib/websupport/core.py:139: in build
>     warning=self.warning)
> /usr/lib/python3/dist-packages/sphinx/application.py:239: in __init__
>     self.setup_extension(extension)
> /usr/lib/python3/dist-packages/sphinx/application.py:391: in setup_extension
>     self.registry.load_extension(self, extname)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9cabb5290>
> app = <sphinx.application.Sphinx object at 0x7ff9cabb5210>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
>                 mod = import_module(extname)
>             except ImportError as err:
>                 logger.verbose(__('Original exception:\n') + traceback.format_exc())
> >               raise ExtensionError(__('Could not import extension %s') % extname, err)
> E               sphinx.errors.ExtensionError: Could not import extension sphinxcontrib.websupport.builder (exception: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location))
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:456: ExtensionError
> ----------------------------- Captured stdout call -----------------------------
> Running Sphinx v2.4.3
> __________________________________ test_build __________________________________
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9ca993150>
> app = <sphinx.application.Sphinx object at 0x7ff9ca993210>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
> >               mod = import_module(extname)
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:453: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None
> 
>     def import_module(name, package=None):
>         """Import a module.
>     
>         The 'package' argument is required when performing a relative import. It
>         specifies the package to use as the anchor point from which to resolve the
>         relative import to an absolute import.
>     
>         """
>         level = 0
>         if name.startswith('.'):
>             if not package:
>                 msg = ("the 'package' argument is required to perform a relative "
>                        "import for {!r}")
>                 raise TypeError(msg.format(name))
>             for character in name:
>                 if character != '.':
>                     break
>                 level += 1
> >       return _bootstrap._gcd_import(name[level:], package, level)
> 
> /usr/lib/python3.7/importlib/__init__.py:127: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder', package = None, level = 0
> 
> >   ???
> 
> <frozen importlib._bootstrap>:1006: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:983: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> name = 'sphinxcontrib.websupport.builder'
> import_ = <function _gcd_import at 0x7ff9ce10cb00>
> 
> >   ???
> 
> <frozen importlib._bootstrap>:967: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> spec = ModuleSpec(name='sphinxcontrib.websupport.builder', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f...trib-websupport-hkeho8/sphinxcontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py')
> 
> >   ???
> 
> <frozen importlib._bootstrap>:677: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <_frozen_importlib_external.SourceFileLoader object at 0x7ff9cab50b90>
> module = <module 'sphinxcontrib.websupport.builder' from '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/builder.py'>
> 
> >   ???
> 
> <frozen importlib._bootstrap_external>:728: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> f = <built-in function exec>
> args = (<code object <module> at 0x7ff9cab53300, file "/<<PKGBUILDDIR>>/...ontrib-websupport-1.2.0/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/__pycache__/builder.cpython-37.pyc', ...})
> kwds = {}
> 
> >   ???
> 
> <frozen importlib._bootstrap>:219: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     """
>     
>     from os import path
>     import posixpath
>     import shutil
>     
>     from docutils.io import StringOutput
>     
>     from sphinx import version_info as sphinx_version
>     from sphinx.jinja2glue import BuiltinTemplateLoader
>     from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile
> >   from sphinx.builders.html import PickleHTMLBuilder
> E   ImportError: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location)
> 
> sphinxcontrib/websupport/builder.py:21: ImportError
> 
> During handling of the above exception, another exception occurred:
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9ca998610>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_build(support):
> >       support.build()
> 
> tests/test_websupport.py:63: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> sphinxcontrib/websupport/core.py:139: in build
>     warning=self.warning)
> /usr/lib/python3/dist-packages/sphinx/application.py:239: in __init__
>     self.setup_extension(extension)
> /usr/lib/python3/dist-packages/sphinx/application.py:391: in setup_extension
>     self.registry.load_extension(self, extname)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <sphinx.registry.SphinxComponentRegistry object at 0x7ff9ca993150>
> app = <sphinx.application.Sphinx object at 0x7ff9ca993210>
> extname = 'sphinxcontrib.websupport.builder'
> 
>     def load_extension(self, app: "Sphinx", extname: str) -> None:
>         """Load a Sphinx extension."""
>         if extname in app.extensions:  # alread loaded
>             return
>         if extname in EXTENSION_BLACKLIST:
>             logger.warning(__('the extension %r was already merged with Sphinx since '
>                               'version %s; this extension is ignored.'),
>                            extname, EXTENSION_BLACKLIST[extname])
>             return
>     
>         # update loading context
>         prefix = __('while setting up extension %s:') % extname
>         with prefixed_warnings(prefix):
>             try:
>                 mod = import_module(extname)
>             except ImportError as err:
>                 logger.verbose(__('Original exception:\n') + traceback.format_exc())
> >               raise ExtensionError(__('Could not import extension %s') % extname, err)
> E               sphinx.errors.ExtensionError: Could not import extension sphinxcontrib.websupport.builder (exception: cannot import name 'PickleHTMLBuilder' from 'sphinx.builders.html' (unknown location))
> 
> /usr/lib/python3/dist-packages/sphinx/registry.py:456: ExtensionError
> ----------------------------- Captured stdout call -----------------------------
> Running Sphinx v2.4.3
> ______________________________ test_get_document _______________________________
> 
> self = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9ca9391d0>
> docname = 'contents', username = '', moderator = False
> 
>     def get_document(self, docname, username='', moderator=False):
>         """Load and return a document from a pickle. The document will
>         be a dict object which can be used to render a template::
>     
>             support = WebSupport(datadir=datadir)
>             support.get_document('index', username, moderator)
>     
>         In most cases `docname` will be taken from the request path and
>         passed directly to this function. In Flask, that would be something
>         like this::
>     
>             @app.route('/<path:docname>')
>             def index(docname):
>                 username = g.user.name if g.user else ''
>                 moderator = g.user.moderator if g.user else False
>                 try:
>                     document = support.get_document(docname, username,
>                                                     moderator)
>                 except DocumentNotFoundError:
>                     abort(404)
>                 render_template('doc.html', document=document)
>     
>         The document dict that is returned contains the following items
>         to be used during template rendering.
>     
>         * **body**: The main body of the document as HTML
>         * **sidebar**: The sidebar of the document as HTML
>         * **relbar**: A div containing links to related documents
>         * **title**: The title of the document
>         * **css**: Links to css files used by Sphinx
>         * **script**: Javascript containing comment options
>     
>         This raises :class:`~sphinxcontrib.websupport.errors.DocumentNotFoundError`
>         if a document matching `docname` is not found.
>     
>         :param docname: the name of the document to load.
>         """
>         docpath = path.join(self.datadir, 'pickles', docname)
>         if path.isdir(docpath):
>             infilename = docpath + '/index.fpickle'
>             if not docname:
>                 docname = 'index'
>             else:
>                 docname += '/index'
>         else:
>             infilename = docpath + '.fpickle'
>     
>         try:
> >           with open(infilename, 'rb') as f:
> E           FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpcy3d8f89/websupport/data/pickles/contents.fpickle'
> 
> sphinxcontrib/websupport/core.py:203: FileNotFoundError
> 
> During handling of the above exception, another exception occurred:
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9ca9391d0>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_get_document(support):
>         with pytest.raises(DocumentNotFoundError):
>             support.get_document('nonexisting')
>     
> >       contents = support.get_document('contents')
> 
> tests/test_websupport.py:72: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9ca9391d0>
> docname = 'contents', username = '', moderator = False
> 
>     def get_document(self, docname, username='', moderator=False):
>         """Load and return a document from a pickle. The document will
>         be a dict object which can be used to render a template::
>     
>             support = WebSupport(datadir=datadir)
>             support.get_document('index', username, moderator)
>     
>         In most cases `docname` will be taken from the request path and
>         passed directly to this function. In Flask, that would be something
>         like this::
>     
>             @app.route('/<path:docname>')
>             def index(docname):
>                 username = g.user.name if g.user else ''
>                 moderator = g.user.moderator if g.user else False
>                 try:
>                     document = support.get_document(docname, username,
>                                                     moderator)
>                 except DocumentNotFoundError:
>                     abort(404)
>                 render_template('doc.html', document=document)
>     
>         The document dict that is returned contains the following items
>         to be used during template rendering.
>     
>         * **body**: The main body of the document as HTML
>         * **sidebar**: The sidebar of the document as HTML
>         * **relbar**: A div containing links to related documents
>         * **title**: The title of the document
>         * **css**: Links to css files used by Sphinx
>         * **script**: Javascript containing comment options
>     
>         This raises :class:`~sphinxcontrib.websupport.errors.DocumentNotFoundError`
>         if a document matching `docname` is not found.
>     
>         :param docname: the name of the document to load.
>         """
>         docpath = path.join(self.datadir, 'pickles', docname)
>         if path.isdir(docpath):
>             infilename = docpath + '/index.fpickle'
>             if not docname:
>                 docname = 'index'
>             else:
>                 docname += '/index'
>         else:
>             infilename = docpath + '.fpickle'
>     
>         try:
>             with open(infilename, 'rb') as f:
>                 document = pickle.load(f)
>         except IOError:
>             raise errors.DocumentNotFoundError(
> >               'The document "%s" could not be found' % docname)
> E           sphinxcontrib.websupport.errors.DocumentNotFoundError: The document "contents" could not be found
> 
> sphinxcontrib/websupport/core.py:207: DocumentNotFoundError
> ________________________________ test_comments _________________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9cc509850>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_comments(support):
>         session = Session()
>         nodes = session.query(Node).all()
> >       first_node = nodes[0]
> E       IndexError: list index out of range
> 
> tests/test_websupport.py:82: IndexError
> __________________________ test_user_delete_comments ___________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9cab50e10>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_user_delete_comments(support):
>         def get_comment():
>             session = Session()
>             node = session.query(Node).first()
>             session.close()
>             return support.get_data(node.id)['comments'][0]
>     
> >       comment = get_comment()
> 
> tests/test_websupport.py:135: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def get_comment():
>         session = Session()
>         node = session.query(Node).first()
>         session.close()
> >       return support.get_data(node.id)['comments'][0]
> E       AttributeError: 'NoneType' object has no attribute 'id'
> 
> tests/test_websupport.py:133: AttributeError
> _______________________________ test_moderation ________________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9cabad450>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support(moderation_callback=moderation_callback)
>     def test_moderation(support):
>         session = Session()
>         nodes = session.query(Node).all()
> >       node = nodes[7]
> E       IndexError: list index out of range
> 
> tests/test_websupport.py:160: IndexError
> ________________________ test_moderator_delete_comments ________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9ca998690>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_moderator_delete_comments(support):
>         def get_comment():
>             session = Session()
>             node = session.query(Node).first()
>             session.close()
>             return support.get_data(node.id, moderator=True)['comments'][1]
>     
> >       comment = get_comment()
> 
> tests/test_websupport.py:190: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def get_comment():
>         session = Session()
>         node = session.query(Node).first()
>         session.close()
> >       return support.get_data(node.id, moderator=True)['comments'][1]
> E       AttributeError: 'NoneType' object has no attribute 'id'
> 
> tests/test_websupport.py:188: AttributeError
> _____________________________ test_update_username _____________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9cab89b50>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_update_username(support):
>         support.update_username('user_two', 'new_user_two')
>         session = Session()
>         comments = session.query(Comment).\
>             filter(Comment.username == 'user_two').all()
>         assert len(comments) == 0
>         votes = session.query(CommentVote).\
>             filter(CommentVote.username == 'user_two').all()
>         assert len(votes) == 0
>         comments = session.query(Comment).\
>             filter(Comment.username == 'new_user_two').all()
> >       assert len(comments) == 1
> E       assert 0 == 1
> E        +  where 0 = len([])
> 
> tests/test_websupport.py:210: AssertionError
> ________________________________ test_proposals ________________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9caa86950>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_proposals(support):
>         session = Session()
>         node = session.query(Node).first()
>     
> >       data = support.get_data(node.id)
> E       AttributeError: 'NoneType' object has no attribute 'id'
> 
> tests/test_websupport.py:222: AttributeError
> _________________________________ test_voting __________________________________
> 
> support = <sphinxcontrib.websupport.core.WebSupport object at 0x7ff9cab52390>
> 
>     @pytest.mark.skipif(sqlalchemy_missing, reason='needs sqlalchemy')
>     @with_support()
>     def test_voting(support):
>         session = Session()
>         nodes = session.query(Node).all()
> >       node = nodes[0]
> E       IndexError: list index out of range
> 
> tests/test_websupport.py:237: IndexError
> =============================== warnings summary ===============================
> sphinxcontrib/websupport/__init__.py:18
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/__init__.py:18: RemovedInSphinx40Warning: sphinx.util.pycompat.htmlescape is deprecated. Check CHANGES for Sphinx API modifications.
>     from sphinxcontrib.websupport.core import WebSupport  # NOQA
> 
> sphinxcontrib/websupport/core.py:32
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build/sphinxcontrib/websupport/core.py:32: RemovedInSphinx40Warning: sphinx.util.jsonimpl is deprecated
>     from sphinx.util.jsonimpl import dumps as dump_json
> 
> .pybuild/cpython3_3.7/build/tests/test_searchadapters.py::test_xapian
>   /usr/lib/python3/dist-packages/jinja2/sandbox.py:19: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
>     from collections import Mapping
> 
> -- Docs: https://docs.pytest.org/en/latest/warnings.html
> =============== 12 failed, 1 passed, 3 warnings in 0.91 seconds ================
> E: pybuild pybuild:352: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.7/build; python3.7 -m pytest tests
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.7 3.8" returned exit code 13

The full build log is available from:
   http://qa-logs.debian.net/2020/03/26/sphinxcontrib-websupport_1.2.0-1_unstable_sphinx243.log

Please see [1] for Sphinx changelog, which may give a hint of what changes in
Sphinx caused this error.

Also see [2] for the list of deprecated/removed APIs and possible alternatives
to them.

Sphinx 2.4 is going to be uploaded to unstable in a couple of weeks. When that
happens, the severity of this bug will be bumped to serious.

In case you have questions, please Cc sphinx at packages.debian.org on reply.

[1]: https://www.sphinx-doc.org/en/2.0/changes.html
[2]: https://www.sphinx-doc.org/en/2.0/extdev/deprecated.html#dev-deprecated-apis

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.



More information about the Python-modules-team mailing list