From 5783ab81ba908d43694ddde9e7cb717dcc004eb5 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 26 Apr 2018 09:20:10 +0200 Subject: [PATCH 001/159] Initial commit --- packages/sphinx-test-reports/LICENSE | 21 +++++++++++++++++++++ packages/sphinx-test-reports/README.md | 1 + 2 files changed, 22 insertions(+) create mode 100644 packages/sphinx-test-reports/LICENSE create mode 100644 packages/sphinx-test-reports/README.md diff --git a/packages/sphinx-test-reports/LICENSE b/packages/sphinx-test-reports/LICENSE new file mode 100644 index 000000000..616fe15fc --- /dev/null +++ b/packages/sphinx-test-reports/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 useblocks + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/sphinx-test-reports/README.md b/packages/sphinx-test-reports/README.md new file mode 100644 index 000000000..3612b5534 --- /dev/null +++ b/packages/sphinx-test-reports/README.md @@ -0,0 +1 @@ +# sphinx-test-reports \ No newline at end of file From 791cd5b9c2121f0917ecb3caa1dc8034d98397ae Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 26 Apr 2018 10:12:24 +0200 Subject: [PATCH 002/159] initial commit --- packages/sphinx-test-reports/.gitignore | 13 + packages/sphinx-test-reports/.travis.yml | 13 + packages/sphinx-test-reports/AUTHORS | 4 + packages/sphinx-test-reports/README.md | 1 - packages/sphinx-test-reports/README.rst | 15 + packages/sphinx-test-reports/docs/Makefile | 20 ++ packages/sphinx-test-reports/docs/make.bat | 36 +++ .../_static/sphinx-test-reports-logo.png | Bin 0 -> 17449 bytes .../_static/sphinx-test-reports-logo.svg | 284 ++++++++++++++++++ .../sphinx-test-reports/docs/source/conf.py | 171 +++++++++++ .../sphinx-test-reports/docs/source/index.rst | 32 ++ packages/sphinx-test-reports/setup.py | 42 +++ packages/sphinx-test-reports/tox.ini | 26 ++ 13 files changed, 656 insertions(+), 1 deletion(-) create mode 100644 packages/sphinx-test-reports/.gitignore create mode 100644 packages/sphinx-test-reports/.travis.yml create mode 100644 packages/sphinx-test-reports/AUTHORS delete mode 100644 packages/sphinx-test-reports/README.md create mode 100644 packages/sphinx-test-reports/README.rst create mode 100644 packages/sphinx-test-reports/docs/Makefile create mode 100644 packages/sphinx-test-reports/docs/make.bat create mode 100644 packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.png create mode 100644 packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.svg create mode 100644 packages/sphinx-test-reports/docs/source/conf.py create mode 100644 packages/sphinx-test-reports/docs/source/index.rst create mode 100644 packages/sphinx-test-reports/setup.py create mode 100644 packages/sphinx-test-reports/tox.ini diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore new file mode 100644 index 000000000..f26983a1c --- /dev/null +++ b/packages/sphinx-test-reports/.gitignore @@ -0,0 +1,13 @@ +.idea +*.pyc +*.egg-info +*egg-info/ +dist +build +_build +.cache/ +*pycache* +.tox/ +.cache/ +.pytest_cache +.coverage \ No newline at end of file diff --git a/packages/sphinx-test-reports/.travis.yml b/packages/sphinx-test-reports/.travis.yml new file mode 100644 index 000000000..8bbdca942 --- /dev/null +++ b/packages/sphinx-test-reports/.travis.yml @@ -0,0 +1,13 @@ +os: +- linux +language: python +python: +- '2.7' +- '3.4' +- '3.5' +- '3.6' +install: +- pip install tox-travis +- python setup.py install +script: tox + diff --git a/packages/sphinx-test-reports/AUTHORS b/packages/sphinx-test-reports/AUTHORS new file mode 100644 index 000000000..5fc5f17a4 --- /dev/null +++ b/packages/sphinx-test-reports/AUTHORS @@ -0,0 +1,4 @@ +Maintainers +----------- + +Daniel Woste diff --git a/packages/sphinx-test-reports/README.md b/packages/sphinx-test-reports/README.md deleted file mode 100644 index 3612b5534..000000000 --- a/packages/sphinx-test-reports/README.md +++ /dev/null @@ -1 +0,0 @@ -# sphinx-test-reports \ No newline at end of file diff --git a/packages/sphinx-test-reports/README.rst b/packages/sphinx-test-reports/README.rst new file mode 100644 index 000000000..6c4695380 --- /dev/null +++ b/packages/sphinx-test-reports/README.rst @@ -0,0 +1,15 @@ +Sphinx-Test-Reports +=================== + +.. image:: docs/source/static/sphinx-test-reports-logo.png + +Sphinx-Test-Reports shows test results of your unit tests inside your sphinx documentation. + + +Functions +--------- + +* Shows test results of **junit based test xml reports** as table +* Shows test environment information of **tox-envreport based json reports** as table + + diff --git a/packages/sphinx-test-reports/docs/Makefile b/packages/sphinx-test-reports/docs/Makefile new file mode 100644 index 000000000..20bb7fcc2 --- /dev/null +++ b/packages/sphinx-test-reports/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = sphinx-test-reports +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/make.bat b/packages/sphinx-test-reports/docs/make.bat new file mode 100644 index 000000000..e02d3cd88 --- /dev/null +++ b/packages/sphinx-test-reports/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build +set SPHINXPROJ=sphinx-test-reports + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.png b/packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..87418fbb7375e0652f6acb8003a02a8e7a98eebd GIT binary patch literal 17449 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

yF(r4w=c+b@9)aIT%nz&x4c|GQA|d}p?suu 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�MWE}mWMqL$9IZO3#8yo4P;Md!K?whq$STh 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 H$p8NU#J0 + + + + + Liste + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test + Reports + Sphinx + + + + + image/svg+xml + + + + + Openclipart + + + Liste + 2011-02-16T02:07:12 + A lineart of a list + https://openclipart.org/detail/118645/list--liste-by-lmproulx + + + lmproulx + + + + + action + check + checklist + line art + list + planification + verification + + + + + + + + + + + diff --git a/packages/sphinx-test-reports/docs/source/conf.py b/packages/sphinx-test-reports/docs/source/conf.py new file mode 100644 index 000000000..4057eb769 --- /dev/null +++ b/packages/sphinx-test-reports/docs/source/conf.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/stable/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import os +# import sys +import datetime +# sys.path.insert(0, os.path.abspath('.')) + + + +# -- Project information ----------------------------------------------------- + +project = 'sphinx-test-reports' +now = datetime.datetime.now() +copyright = '2017-{year}, team useblocks'.format(year=now.year) +author = 'team useblocks' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '0.1' + + +# -- 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 = [ +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- 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 = 'alabaster' + +# 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 = { + 'logo': 'sphinx-test-reports-logo.png', + 'logo_name': False, + # 'description': "an extension for sphinx", + 'logo_text_align': "center", + 'github_user': 'useblocks', + 'github_repo': 'sphinx-test-reports', + 'github_banner': True, + 'github_button': False, + 'fixed_sidebar': True, + 'extra_nav_links': {'needs@PyPi': "https://pypi.python.org/pypi/sphinx-test-reports", + 'needs@github': "https://github.com/useblocks/sphinx-test-reports", + 'needs@travis': "https://travis-ci.org/useblocks/sphinx-test-reports"} +} + +# 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'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +html_sidebars = {'**': ['about.html', 'navigation.html'], } + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'sphinx-test-reportsdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'sphinx-test-reports.tex', 'sphinx-test-reports Documentation', + 'team useblocks', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'sphinx-test-reports', 'sphinx-test-reports Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'sphinx-test-reports', 'sphinx-test-reports Documentation', + author, 'sphinx-test-reports', 'One line description of project.', + 'Miscellaneous'), +] \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/source/index.rst b/packages/sphinx-test-reports/docs/source/index.rst new file mode 100644 index 000000000..5eb13ecdd --- /dev/null +++ b/packages/sphinx-test-reports/docs/source/index.rst @@ -0,0 +1,32 @@ +.. sphinx-test-reports documentation master file, created by + sphinx-quickstart on Thu Apr 26 09:23:44 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Sphinx-Test-Reports +=================== + +Sphinx-Test-Reports shows test results inside sphinx documentations. + + +Functions +--------- + +* Shows **test results** of *junit based xml reports* as table. + Junit exports are supported by: + + * `pytest `_ + * `nosetest `_ + +* Shows **test environment information** from `tox-envreport `_ + based exports as table. (E.g. used operating system, python version, installed packages, ...) + + + + +Contents +-------- + +.. toctree:: + :maxdepth: 2 + :caption: Contents: diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py new file mode 100644 index 000000000..19ad778a8 --- /dev/null +++ b/packages/sphinx-test-reports/setup.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +from setuptools import setup, find_packages + +requires = ['Sphinx'] + +setup( + name='sphinx-test-reports', + # If you raise, think about versions in conf.py and needs.py!!! + version='0.1.0', + url='http://github.com/useblocks/sphinx-test-reports', + download_url='http://pypi.python.org/pypi/sphinx-test-reports', + license='MIT', + author='team useblocks', + author_email='info@useblocks.com', + description='Sphinx extension for showing test results and test environment ' + 'information inside sphinx documentations', + long_description=open(os.path.join(os.path.dirname(__file__), "README.rst")).read(), + zip_safe=False, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Topic :: Documentation', + 'Topic :: Utilities', + ], + platforms='any', + packages=find_packages(), + include_package_data=True, + install_requires=requires, + namespace_packages=['sphinxcontrib'], +) diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini new file mode 100644 index 000000000..e57518fad --- /dev/null +++ b/packages/sphinx-test-reports/tox.ini @@ -0,0 +1,26 @@ +[tox] +envlist = py{27,34,35,36}-sphinx{15,16,17} + +[testenv] +passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH +deps= + -rtest-requirements.txt + sphinx15: Sphinx>=1.5,<1.6 + sphinx16: Sphinx>=1.6,<1.7 + sphinx17: Sphinx>=1.7,<1.8 + +commands= + py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml + nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests + + +usedevelop=True + + +[pytest] +flake8-max-line-length=120 +;flake8-ignore = +; docs/_themes/* ALL +; __init__.py F401 +; groundwork/recipes/* E999 E227 +; bootstrap.py E402 F811 \ No newline at end of file From e1b730d9c92d944ccf884bf13848c24ea2ab1757 Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 26 Apr 2018 10:17:11 +0200 Subject: [PATCH 003/159] moved docs to sphinx-root folder --- packages/sphinx-test-reports/docs/Makefile | 2 +- .../_static/sphinx-test-reports-logo.png | Bin .../_static/sphinx-test-reports-logo.svg | 0 .../sphinx-test-reports/docs/{source => }/conf.py | 0 .../sphinx-test-reports/docs/{source => }/index.rst | 0 packages/sphinx-test-reports/docs/make.bat | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) rename packages/sphinx-test-reports/docs/{source => }/_static/sphinx-test-reports-logo.png (100%) rename packages/sphinx-test-reports/docs/{source => }/_static/sphinx-test-reports-logo.svg (100%) rename packages/sphinx-test-reports/docs/{source => }/conf.py (100%) rename packages/sphinx-test-reports/docs/{source => }/index.rst (100%) diff --git a/packages/sphinx-test-reports/docs/Makefile b/packages/sphinx-test-reports/docs/Makefile index 20bb7fcc2..28a4ee246 100644 --- a/packages/sphinx-test-reports/docs/Makefile +++ b/packages/sphinx-test-reports/docs/Makefile @@ -5,7 +5,7 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = sphinx-test-reports -SOURCEDIR = source +SOURCEDIR = . BUILDDIR = build # Put it first so that "make" without argument is like "make help". diff --git a/packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.png b/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png similarity index 100% rename from packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.png rename to packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png diff --git a/packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.svg b/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.svg similarity index 100% rename from packages/sphinx-test-reports/docs/source/_static/sphinx-test-reports-logo.svg rename to packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.svg diff --git a/packages/sphinx-test-reports/docs/source/conf.py b/packages/sphinx-test-reports/docs/conf.py similarity index 100% rename from packages/sphinx-test-reports/docs/source/conf.py rename to packages/sphinx-test-reports/docs/conf.py diff --git a/packages/sphinx-test-reports/docs/source/index.rst b/packages/sphinx-test-reports/docs/index.rst similarity index 100% rename from packages/sphinx-test-reports/docs/source/index.rst rename to packages/sphinx-test-reports/docs/index.rst diff --git a/packages/sphinx-test-reports/docs/make.bat b/packages/sphinx-test-reports/docs/make.bat index e02d3cd88..aed9853cc 100644 --- a/packages/sphinx-test-reports/docs/make.bat +++ b/packages/sphinx-test-reports/docs/make.bat @@ -7,7 +7,7 @@ REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) -set SOURCEDIR=source +set SOURCEDIR=. set BUILDDIR=build set SPHINXPROJ=sphinx-test-reports From 6372af5848fe8daa03c6722bdf70f919ff4bc3a3 Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 26 Apr 2018 10:19:08 +0200 Subject: [PATCH 004/159] added shields to doc --- packages/sphinx-test-reports/docs/index.rst | 15 +++++++++++++++ .../sphinx-test-reports/sphinxcontrib/__init__.py | 0 .../sphinxcontrib/test_reports/__init__.py | 0 3 files changed, 15 insertions(+) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/__init__.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 5eb13ecdd..ef07f244a 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -3,6 +3,21 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. +.. image:: https://img.shields.io/pypi/l/sphinx-test-reports.svg + :target: https://pypi.python.org/pypi/sphinx-test-reports + :alt: License +.. image:: https://img.shields.io/pypi/pyversions/sphinx-test-reports.svg + :target: https://pypi.python.org/pypi/sphinx-test-reports + :alt: Supported versions +.. image:: https://readthedocs.org/projects/sphinx-test-reports/badge/?version=latest + :target: https://readthedocs.org/projects/sphinx-test-reports/ +.. image:: https://travis-ci.org/useblocks/sphinx-test-reports.svg?branch=master + :target: https://travis-ci.org/useblocks/sphinx-test-reports + :alt: Travis-CI Build Status +.. image:: https://img.shields.io/pypi/v/sphinx-test-reports.svg + :target: https://pypi.python.org/pypi/sphinx-test-reports + :alt: PyPI Package latest release + Sphinx-Test-Reports =================== diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py new file mode 100644 index 000000000..e69de29bb From 3c7a255507d08debf514b8adfcf882b7cc8211d4 Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 26 Apr 2018 10:24:45 +0200 Subject: [PATCH 005/159] corrected setup.py setup and namespace handling --- .../sphinxcontrib/__init__.py | 1 + .../sphinxcontrib/test_reports/__init__.py | 1 + .../sphinxcontrib/test_reports/test_reports.py | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py index e69de29bb..de40ea7ca 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index e69de29bb..45eeb8a7e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -0,0 +1 @@ +from sphinxcontrib.test_reports.test_reports import setup # NOQA diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py new file mode 100644 index 000000000..dd2601642 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -0,0 +1,16 @@ + +import sphinx +from docutils import nodes +from pkg_resources import parse_version + +sphinx_version = sphinx.__version__ +if parse_version(sphinx_version) >= parse_version("1.6"): + from sphinx.util import logging +else: + import logging + + +def setup(app): + log = logging.getLogger(__name__) + + return {'version': '0.1.0'} # identifies the version of our extension \ No newline at end of file From 5daeff3742e4799b0eab865e084c961699567963 Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 26 Apr 2018 10:40:44 +0200 Subject: [PATCH 006/159] Setup done for correct testing --- packages/sphinx-test-reports/docs/conf.py | 4 +- packages/sphinx-test-reports/docs/index.rst | 9 +- .../test_reports/schemas/JUnit.xsd | 206 ++++++++++++++++++ .../test_reports/test_reports.py | 5 +- .../sphinx-test-reports/test-requirements.txt | 7 + .../sphinx-test-reports/tests/test_dummy.py | 2 + packages/sphinx-test-reports/tox.ini | 10 +- 7 files changed, 229 insertions(+), 14 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd create mode 100644 packages/sphinx-test-reports/test-requirements.txt create mode 100644 packages/sphinx-test-reports/tests/test_dummy.py diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 4057eb769..857093e7e 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -17,8 +17,6 @@ import datetime # sys.path.insert(0, os.path.abspath('.')) - - # -- Project information ----------------------------------------------------- project = 'sphinx-test-reports' @@ -168,4 +166,4 @@ (master_doc, 'sphinx-test-reports', 'sphinx-test-reports Documentation', author, 'sphinx-test-reports', 'One line description of project.', 'Miscellaneous'), -] \ No newline at end of file +] diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index ef07f244a..663159088 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -27,11 +27,12 @@ Sphinx-Test-Reports shows test results inside sphinx documentations. Functions --------- -* Shows **test results** of *junit based xml reports* as table. - Junit exports are supported by: +* Shows **test results** of *JUnit based xml reports* as table. + JUnit exports are supported by: - * `pytest `_ - * `nosetest `_ + * `pytest `_ + * `nosetest `_ + * Other test frameworks (including frameworks from java and co.) support also the JUnit format. * Shows **test environment information** from `tox-envreport `_ based exports as table. (E.g. used operating system, python version, installed packages, ...) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd b/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd new file mode 100644 index 000000000..403aef0e1 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd @@ -0,0 +1,206 @@ + + + + + JUnit test result schema for the Apache Ant JUnit and JUnitReport tasks +Copyright © 2011, Windy Road Technology Pty. Limited +The Apache Ant JUnit XML Schema is distributed under the terms of the Apache License Version 2.0 http://www.apache.org/licenses/ +Permission to waive conditions of this license may be requested from Windy Road Support (http://windyroad.org/support). + + + + + + + + + + Contains an aggregation of testsuite results + + + + + + + + + + Derived from testsuite/@name in the non-aggregated documents + + + + + Starts at '0' for the first testsuite and is incremented by 1 for each following testsuite + + + + + + + + + + + + Contains the results of exexuting a testsuite + + + + + Properties (e.g., environment settings) set during test execution + + + + + + + + + + + + + + + + + + + + + + + + Indicates that the test errored. An errored test is one that had an unanticipated problem. e.g., an unchecked throwable; or a problem with the implementation of the test. Contains as a text node relevant data for the error, e.g., a stack trace + + + + + + + The error message. e.g., if a java exception is thrown, the return value of getMessage() + + + + + The type of error that occured. e.g., if a java execption is thrown the full class name of the exception. + + + + + + + + + Indicates that the test failed. A failure is a test which the code has explicitly failed by using the mechanisms for that purpose. e.g., via an assertEquals. Contains as a text node relevant data for the failure, e.g., a stack trace + + + + + + + The message specified in the assert + + + + + The type of the assert. + + + + + + + + + + Name of the test method + + + + + Full class name for the class the test method is in. + + + + + Time taken (in seconds) to execute the test + + + + + + + Data that was written to standard out while the test was executed + + + + + + + + + + Data that was written to standard error while the test was executed + + + + + + + + + + + Full class name of the test for non-aggregated testsuite documents. Class name without the package for aggregated testsuites documents + + + + + + + + + + when the test was executed. Timezone may not be specified. + + + + + Host on which the tests were executed. 'localhost' should be used if the hostname cannot be determined. + + + + + + + + + + The total number of tests in the suite + + + + + The total number of tests in the suite that failed. A failure is a test which the code has explicitly failed by using the mechanisms for that purpose. e.g., via an assertEquals + + + + + The total number of tests in the suite that errored. An errored test is one that had an unanticipated problem. e.g., an unchecked throwable; or a problem with the implementation of the test. + + + + + Time taken (in seconds) to execute the tests in the suite + + + + + + + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index dd2601642..07cf052d1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,6 +1,6 @@ import sphinx -from docutils import nodes +# from docutils import nodes from pkg_resources import parse_version sphinx_version = sphinx.__version__ @@ -12,5 +12,6 @@ def setup(app): log = logging.getLogger(__name__) + log.info("Setting up sphinx-test-reports extension") - return {'version': '0.1.0'} # identifies the version of our extension \ No newline at end of file + return {'version': '0.1.0'} # identifies the version of our extension diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt new file mode 100644 index 000000000..80b6ce829 --- /dev/null +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -0,0 +1,7 @@ +pytest +pytest-flake8 +coverage +python-coveralls +tox +nose +sphinx_testing diff --git a/packages/sphinx-test-reports/tests/test_dummy.py b/packages/sphinx-test-reports/tests/test_dummy.py new file mode 100644 index 000000000..63ae41d1d --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_dummy.py @@ -0,0 +1,2 @@ +def test_dummy(): + assert True is True diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini index e57518fad..df875a419 100644 --- a/packages/sphinx-test-reports/tox.ini +++ b/packages/sphinx-test-reports/tox.ini @@ -19,8 +19,8 @@ usedevelop=True [pytest] flake8-max-line-length=120 -;flake8-ignore = -; docs/_themes/* ALL -; __init__.py F401 -; groundwork/recipes/* E999 E227 -; bootstrap.py E402 F811 \ No newline at end of file +flake8-ignore = + docs/_themes/* ALL + __init__.py F401 + groundwork/recipes/* E999 E227 + bootstrap.py E402 F811 \ No newline at end of file From 8722cef43bb13e3fe72b800f57230a90a7554cd2 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 4 Jun 2018 15:57:46 +0200 Subject: [PATCH 007/159] Added first directive and some working tests --- packages/sphinx-test-reports/.gitignore | 3 +- packages/sphinx-test-reports/docs/conf.py | 4 +- packages/sphinx-test-reports/docs/index.rst | 29 ++- packages/sphinx-test-reports/setup.py | 2 +- .../test_reports/directives/__init__.py | 0 .../test_reports/directives/test_env.py | 0 .../test_reports/directives/test_report.py | 0 .../test_reports/directives/test_results.py | 30 +++ .../sphinxcontrib/test_reports/junitparser.py | 27 +++ .../test_reports/schemas/JUnit.xsd | 206 ++++++++++++++++++ .../test_reports/test_reports.py | 22 +- .../sphinx-test-reports/test-requirements.txt | 7 + .../sphinx-test-reports/tests/conftest.py | 8 + .../tests/data/xml_data.xml | 7 + .../tests/doc_test/basic_doc/Makefile | 20 ++ .../tests/doc_test/basic_doc/conf.py | 150 +++++++++++++ .../tests/doc_test/basic_doc/index.rst | 6 + .../tests/doc_test/basic_doc/make.bat | 36 +++ .../tests/doc_test/empty_doc/Makefile | 20 ++ .../tests/doc_test/empty_doc/conf.py | 150 +++++++++++++ .../tests/doc_test/empty_doc/index.rst | 5 + .../tests/doc_test/empty_doc/make.bat | 36 +++ .../tests/test_basic_doc.py | 9 + .../sphinx-test-reports/tests/test_dummy.py | 2 + .../tests/test_empty_doc.py | 8 + .../tests/test_junit_parser.py | 16 ++ packages/sphinx-test-reports/tox.ini | 14 +- 27 files changed, 796 insertions(+), 21 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd create mode 100644 packages/sphinx-test-reports/test-requirements.txt create mode 100644 packages/sphinx-test-reports/tests/conftest.py create mode 100644 packages/sphinx-test-reports/tests/data/xml_data.xml create mode 100644 packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/basic_doc/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat create mode 100644 packages/sphinx-test-reports/tests/test_basic_doc.py create mode 100644 packages/sphinx-test-reports/tests/test_dummy.py create mode 100644 packages/sphinx-test-reports/tests/test_empty_doc.py create mode 100644 packages/sphinx-test-reports/tests/test_junit_parser.py diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index f26983a1c..5e607b032 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -10,4 +10,5 @@ _build .tox/ .cache/ .pytest_cache -.coverage \ No newline at end of file +.coverage +.directory \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 4057eb769..857093e7e 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -17,8 +17,6 @@ import datetime # sys.path.insert(0, os.path.abspath('.')) - - # -- Project information ----------------------------------------------------- project = 'sphinx-test-reports' @@ -168,4 +166,4 @@ (master_doc, 'sphinx-test-reports', 'sphinx-test-reports Documentation', author, 'sphinx-test-reports', 'One line description of project.', 'Miscellaneous'), -] \ No newline at end of file +] diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index ef07f244a..d814d487b 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -21,27 +21,42 @@ Sphinx-Test-Reports =================== -Sphinx-Test-Reports shows test results inside sphinx documentations. +``Sphinx-Test-Reports`` shows test results inside `Sphinx `_ documentations. Functions --------- -* Shows **test results** of *junit based xml reports* as table. - Junit exports are supported by: +* Shows **test results** of *JUnit based xml reports* as table. + JUnit exports are supported by: - * `pytest `_ - * `nosetest `_ + * `pytest `_ + * `nosetest `_ + * Other test frameworks (including frameworks from java and co.) support also the JUnit format. * Shows **test environment information** from `tox-envreport `_ based exports as table. (E.g. used operating system, python version, installed packages, ...) +Motivation +---------- +``Sphinx-Test-Reports`` was created for an automotive project, which needs to document test results and their used +environment configuration in an human-readable format. +The goal is to provide enough information to be able to setup an identical test environment in 20+ years. +``Sphinx-Test-Reports`` is part of a software bundle, which was designed to fulfill +the parameters of the `ISO 26262 `_ standard +for safety critical software in automotive companies. -Contents --------- +Other tools are: `sphinx-needs `_ +and `tox-envreport `_ + + +Content +------- .. toctree:: :maxdepth: 2 :caption: Contents: + + diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 19ad778a8..c1982b7b7 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -4,7 +4,7 @@ import os from setuptools import setup, find_packages -requires = ['Sphinx'] +requires = ['Sphinx', 'lxml'] setup( name='sphinx-test-reports', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py new file mode 100644 index 000000000..39a230d26 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -0,0 +1,30 @@ +import os +from docutils import nodes +from docutils.parsers.rst import Directive + +from sphinxcontrib.test_reports.junitparser import JUnitParser + +class TestResults(nodes.General, nodes.Element): + pass + + +class TestResultsDirective(Directive): + """ + Directive for showing test results. + """ + has_content = True + required_arguments = 1 + optional_arguments = 0 + + final_argument_whitespace = True + + def run(self): + env = self.state.document.settings.env + + xml_path = self.arguments[0] + root_path = env.app.config.test_reports_rootdir + if not os.path.isabs(xml_path): + xml_path = os.path.join(root_path, xml_path) + parser = JUnitParser(xml_path) + + return [nodes.Text(parser.junit_xml_string, parser.junit_xml_string)] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py new file mode 100644 index 000000000..394c38186 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -0,0 +1,27 @@ +import os +from lxml import etree, objectify + + +class JUnitParser: + def __init__(self, junit_xml, junit_xsd=None): + self.junit_xml_path = junit_xml + + if junit_xsd is None: + junit_xsd = os.path.join(os.path.dirname(__file__), "schemas", "JUnit.xsd") + self.junit_xsd_path = junit_xsd + + if not os.path.exists(self.junit_xml_path): + raise JUnitFileMissing("The given file does not exist: {0}".format(self.junit_xml_path)) + + self.junit_schema_doc = etree.parse(self.junit_xsd_path) + self.xmlschema = etree.XMLSchema(self.junit_schema_doc) + self.junit_xml_doc = etree.parse(self.junit_xml_path) + self.valid_xml = self.xmlschema.validate(self.junit_xml_doc) + + self.junit_xml_string = etree.tostring(self.junit_xml_doc) + + self.junit_xml_object = objectify.fromstring(self.junit_xml_string) + + +class JUnitFileMissing(BaseException): + pass diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd b/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd new file mode 100644 index 000000000..403aef0e1 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd @@ -0,0 +1,206 @@ + + + + + JUnit test result schema for the Apache Ant JUnit and JUnitReport tasks +Copyright © 2011, Windy Road Technology Pty. Limited +The Apache Ant JUnit XML Schema is distributed under the terms of the Apache License Version 2.0 http://www.apache.org/licenses/ +Permission to waive conditions of this license may be requested from Windy Road Support (http://windyroad.org/support). + + + + + + + + + + Contains an aggregation of testsuite results + + + + + + + + + + Derived from testsuite/@name in the non-aggregated documents + + + + + Starts at '0' for the first testsuite and is incremented by 1 for each following testsuite + + + + + + + + + + + + Contains the results of exexuting a testsuite + + + + + Properties (e.g., environment settings) set during test execution + + + + + + + + + + + + + + + + + + + + + + + + Indicates that the test errored. An errored test is one that had an unanticipated problem. e.g., an unchecked throwable; or a problem with the implementation of the test. Contains as a text node relevant data for the error, e.g., a stack trace + + + + + + + The error message. e.g., if a java exception is thrown, the return value of getMessage() + + + + + The type of error that occured. e.g., if a java execption is thrown the full class name of the exception. + + + + + + + + + Indicates that the test failed. A failure is a test which the code has explicitly failed by using the mechanisms for that purpose. e.g., via an assertEquals. Contains as a text node relevant data for the failure, e.g., a stack trace + + + + + + + The message specified in the assert + + + + + The type of the assert. + + + + + + + + + + Name of the test method + + + + + Full class name for the class the test method is in. + + + + + Time taken (in seconds) to execute the test + + + + + + + Data that was written to standard out while the test was executed + + + + + + + + + + Data that was written to standard error while the test was executed + + + + + + + + + + + Full class name of the test for non-aggregated testsuite documents. Class name without the package for aggregated testsuites documents + + + + + + + + + + when the test was executed. Timezone may not be specified. + + + + + Host on which the tests were executed. 'localhost' should be used if the hostname cannot be determined. + + + + + + + + + + The total number of tests in the suite + + + + + The total number of tests in the suite that failed. A failure is a test which the code has explicitly failed by using the mechanisms for that purpose. e.g., via an assertEquals + + + + + The total number of tests in the suite that errored. An errored test is one that had an unanticipated problem. e.g., an unchecked throwable; or a problem with the implementation of the test. + + + + + Time taken (in seconds) to execute the tests in the suite + + + + + + + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index dd2601642..db3b4bcd3 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,6 +1,6 @@ import sphinx -from docutils import nodes +# from docutils import nodes from pkg_resources import parse_version sphinx_version = sphinx.__version__ @@ -9,8 +9,26 @@ else: import logging +from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective + def setup(app): + """ + Setup following directives: + * test_results + * test_env + * test_report + """ log = logging.getLogger(__name__) + log.info("Setting up sphinx-test-reports extension") + + app.add_config_value('test_reports_rootdir', app.confdir, 'html') + + app.add_node(TestResults) + + app.add_directive('test-results', TestResultsDirective) + + return {'version': '0.1.0'} # identifies the version of our extension + + - return {'version': '0.1.0'} # identifies the version of our extension \ No newline at end of file diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt new file mode 100644 index 000000000..80b6ce829 --- /dev/null +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -0,0 +1,7 @@ +pytest +pytest-flake8 +coverage +python-coveralls +tox +nose +sphinx_testing diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py new file mode 100644 index 000000000..4554c174c --- /dev/null +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -0,0 +1,8 @@ +import os +import pytest + + +@pytest.fixture +def xml_path(): + path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") + return path diff --git a/packages/sphinx-test-reports/tests/data/xml_data.xml b/packages/sphinx-test-reports/tests/data/xml_data.xml new file mode 100644 index 000000000..7f5a502e9 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/xml_data.xml @@ -0,0 +1,7 @@ + + + + + details about failure + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py new file mode 100644 index 000000000..329940b0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports'] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst new file mode 100644 index 000000000..02d489a80 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst @@ -0,0 +1,6 @@ +Basic Document +============== + + +.. test-results:: ../../data/xml_data.xml + diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/basic_doc/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py new file mode 100644 index 000000000..329940b0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports'] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst new file mode 100644 index 000000000..eeb3f7ac0 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst @@ -0,0 +1,5 @@ +Empty Document +============== + +No plugin usage right now. + diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py new file mode 100644 index 000000000..581132086 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -0,0 +1,9 @@ +from sphinx_testing import with_app + + +@with_app(buildername='html', srcdir='tests/doc_test/basic_doc') +def test_doc_build_html(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text() + assert '

Basic Document' in html + assert 'ASuccessfulTest' in html diff --git a/packages/sphinx-test-reports/tests/test_dummy.py b/packages/sphinx-test-reports/tests/test_dummy.py new file mode 100644 index 000000000..63ae41d1d --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_dummy.py @@ -0,0 +1,2 @@ +def test_dummy(): + assert True is True diff --git a/packages/sphinx-test-reports/tests/test_empty_doc.py b/packages/sphinx-test-reports/tests/test_empty_doc.py new file mode 100644 index 000000000..6de1e9c62 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_empty_doc.py @@ -0,0 +1,8 @@ +from sphinx_testing import with_app + + +@with_app(buildername='html', srcdir='tests/doc_test/empty_doc') +def test_doc_build_html(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text() + assert '

Empty Document' in html diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py new file mode 100644 index 000000000..9fc421d1b --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -0,0 +1,16 @@ + + +def test_init_parser(xml_path): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_path) + + assert parser is not None + + +def test_xml_object(xml_path): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_path) + obj = parser.junit_xml_object + assert obj.tag == "testsuite" + assert len(obj.testcase) == 3 + assert obj.testcase[2].failure.text == " details about failure " diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini index e57518fad..ef5c06e2b 100644 --- a/packages/sphinx-test-reports/tox.ini +++ b/packages/sphinx-test-reports/tox.ini @@ -10,8 +10,8 @@ deps= sphinx17: Sphinx>=1.7,<1.8 commands= - py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml - nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests + py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml tests +; nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests usedevelop=True @@ -19,8 +19,8 @@ usedevelop=True [pytest] flake8-max-line-length=120 -;flake8-ignore = -; docs/_themes/* ALL -; __init__.py F401 -; groundwork/recipes/* E999 E227 -; bootstrap.py E402 F811 \ No newline at end of file +flake8-ignore = + docs/_themes/* ALL + __init__.py F401 + groundwork/recipes/* E999 E227 + bootstrap.py E402 F811 \ No newline at end of file From 4dd6c7944714b055f5313ac1c3745cee271187a9 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 4 Jun 2018 16:44:45 +0200 Subject: [PATCH 008/159] fixed tests --- .../sphinxcontrib/test_reports/directives/test_results.py | 1 + .../sphinxcontrib/test_reports/junitparser.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 6 +++--- packages/sphinx-test-reports/tests/conftest.py | 8 -------- packages/sphinx-test-reports/tests/test_basic_doc.py | 2 +- packages/sphinx-test-reports/tests/test_empty_doc.py | 2 +- packages/sphinx-test-reports/tests/test_junit_parser.py | 7 +++++-- packages/sphinx-test-reports/tox.ini | 4 ++-- 8 files changed, 14 insertions(+), 18 deletions(-) delete mode 100644 packages/sphinx-test-reports/tests/conftest.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index 39a230d26..bab683e5d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -4,6 +4,7 @@ from sphinxcontrib.test_reports.junitparser import JUnitParser + class TestResults(nodes.General, nodes.Element): pass diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 394c38186..8da1ad0b8 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -19,8 +19,8 @@ def __init__(self, junit_xml, junit_xsd=None): self.valid_xml = self.xmlschema.validate(self.junit_xml_doc) self.junit_xml_string = etree.tostring(self.junit_xml_doc) - self.junit_xml_object = objectify.fromstring(self.junit_xml_string) + self.junit_xml_string = str(self.junit_xml_string) class JUnitFileMissing(BaseException): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 00ec5e7b5..c140a4898 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -3,14 +3,14 @@ # from docutils import nodes from pkg_resources import parse_version +from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective + sphinx_version = sphinx.__version__ if parse_version(sphinx_version) >= parse_version("1.6"): from sphinx.util import logging else: import logging -from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective - def setup(app): """ @@ -28,4 +28,4 @@ def setup(app): app.add_directive('test-results', TestResultsDirective) - return {'version': '0.1.0'} # identifies the version of our extension \ No newline at end of file + return {'version': '0.1.0'} # identifies the version of our extension diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py deleted file mode 100644 index 4554c174c..000000000 --- a/packages/sphinx-test-reports/tests/conftest.py +++ /dev/null @@ -1,8 +0,0 @@ -import os -import pytest - - -@pytest.fixture -def xml_path(): - path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") - return path diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index 581132086..898ef936a 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -1,7 +1,7 @@ from sphinx_testing import with_app -@with_app(buildername='html', srcdir='tests/doc_test/basic_doc') +@with_app(buildername='html', srcdir='doc_test/basic_doc') def test_doc_build_html(app, status, warning): app.build() html = (app.outdir / 'index.html').read_text() diff --git a/packages/sphinx-test-reports/tests/test_empty_doc.py b/packages/sphinx-test-reports/tests/test_empty_doc.py index 6de1e9c62..391f99462 100644 --- a/packages/sphinx-test-reports/tests/test_empty_doc.py +++ b/packages/sphinx-test-reports/tests/test_empty_doc.py @@ -1,7 +1,7 @@ from sphinx_testing import with_app -@with_app(buildername='html', srcdir='tests/doc_test/empty_doc') +@with_app(buildername='html', srcdir='doc_test/empty_doc') def test_doc_build_html(app, status, warning): app.build() html = (app.outdir / 'index.html').read_text() diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 9fc421d1b..63cecf586 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -1,13 +1,16 @@ +import os +xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") -def test_init_parser(xml_path): + +def test_init_parser(): from sphinxcontrib.test_reports.junitparser import JUnitParser parser = JUnitParser(xml_path) assert parser is not None -def test_xml_object(xml_path): +def test_xml_object(): from sphinxcontrib.test_reports.junitparser import JUnitParser parser = JUnitParser(xml_path) obj = parser.junit_xml_object diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini index ef5c06e2b..df875a419 100644 --- a/packages/sphinx-test-reports/tox.ini +++ b/packages/sphinx-test-reports/tox.ini @@ -10,8 +10,8 @@ deps= sphinx17: Sphinx>=1.7,<1.8 commands= - py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml tests -; nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests + py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml + nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests usedevelop=True From ab5be94d4e27bd081e8779f50f6cad2f557aabf5 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 4 Jun 2018 22:05:08 +0200 Subject: [PATCH 009/159] added parse() to get a common obj from different xml-files. Added also test-files and tests for pytest and nosetest output xml files --- .../test_reports/directives/test_results.py | 6 ++ .../sphinxcontrib/test_reports/junitparser.py | 55 +++++++++++++++++++ .../sphinx-test-reports/test-requirements.txt | 2 +- .../tests/data/nose_data.xml | 7 +++ .../tests/data/pytest_data.xml | 52 ++++++++++++++++++ .../tests/test_junit_parser.py | 53 ++++++++++++++++++ 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 packages/sphinx-test-reports/tests/data/nose_data.xml create mode 100644 packages/sphinx-test-reports/tests/data/pytest_data.xml diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index bab683e5d..a0a137e9e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -28,4 +28,10 @@ def run(self): xml_path = os.path.join(root_path, xml_path) parser = JUnitParser(xml_path) + # Construction idea taken from http://agateau.com/2015/docutils-snippets/ + + # for testsuite in parser.junit_xml_object.testsuite: + # # table = nodes.table + # pass + return [nodes.Text(parser.junit_xml_string, parser.junit_xml_string)] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 8da1ad0b8..8cdfef6b0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -22,6 +22,61 @@ def __init__(self, junit_xml, junit_xsd=None): self.junit_xml_object = objectify.fromstring(self.junit_xml_string) self.junit_xml_string = str(self.junit_xml_string) + def parse(self): + """ + Creates a common python dictionary object, no matter what information are supported by the parsed xml file for + test results junit(). + + :return: dictionary + """ + + junit_dict = [] + + for testsuite in self.junit_xml_object: + ts_dict = { + "name": testsuite.attrib.get("name", "unknown"), + "tests": testsuite.attrib.get("tests", "-1"), + "errors": testsuite.attrib.get("errors", "-1"), + "failures": testsuite.attrib.get("failures", "-1"), + "skips": testsuite.attrib.get("skips", testsuite.attrib.get("skip", "-1")), + "time": testsuite.attrib.get("time", "-1"), + "testcases": [] + } + + for testcase in testsuite.testcase: + tc_dict = { + "classname": testcase.attrib.get("classname", "unknown"), + "file": testcase.attrib.get("file", "unknown"), + "line": testcase.attrib.get("line", "-1"), + "name": testcase.attrib.get("name", "unknown"), + "time": testcase.attrib.get("time", "-1"), + } + + # The following data is normally a subnode (e.g. skipped/failure). + # We integrate it right into the testcase for better handling + if hasattr(testcase, "skipped"): + result = testcase.skipped + tc_dict["result"] = "skipped" + tc_dict["type"] = result.attrib.get("message", "unknown") + tc_dict["type"] = result.attrib.get("type", "unknown") + tc_dict["text"] = result.text + elif hasattr(testcase, "failure"): + result = testcase.failure + tc_dict["result"] = "failure" + tc_dict["type"] = result.attrib.get("type", "unknown") + tc_dict["text"] = result.text + else: + tc_dict["result"] = "passed" + + ts_dict["testcases"].append(tc_dict) + + junit_dict.append(ts_dict) + + return junit_dict + + def docutils_table(self): + pass + class JUnitFileMissing(BaseException): pass diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt index 80b6ce829..ba4fa4853 100644 --- a/packages/sphinx-test-reports/test-requirements.txt +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -1,4 +1,4 @@ -pytest +pytest >=3.5 pytest-flake8 coverage python-coveralls diff --git a/packages/sphinx-test-reports/tests/data/nose_data.xml b/packages/sphinx-test-reports/tests/data/nose_data.xml new file mode 100644 index 000000000..1c5b629c4 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/nose_data.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/data/pytest_data.xml b/packages/sphinx-test-reports/tests/data/pytest_data.xml new file mode 100644 index 000000000..fd727087c --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/pytest_data.xml @@ -0,0 +1,52 @@ + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a8a0e950> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a8a0ea10> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a8497450> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a8497c10> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84a2350> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84a2a50> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84a2cd0> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84ae250> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84ae950> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84bf090> + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 63cecf586..1c67ef32e 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -1,6 +1,8 @@ import os xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") +xml_pytest_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data.xml") +xml_nose_path = os.path.join(os.path.dirname(__file__), "data", "nose_data.xml") def test_init_parser(): @@ -17,3 +19,54 @@ def test_xml_object(): assert obj.tag == "testsuite" assert len(obj.testcase) == 3 assert obj.testcase[2].failure.text == " details about failure " + + +def test_parse_easy_xml(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_path) + assert hasattr(parser, "parse") + results = parser.parse() + + assert len(results) == 1 + assert results[0]["name"] == "unknown" + assert results[0]["tests"] == "3" + assert results[0]["testcases"][0]["name"] == "ASuccessfulTest" + assert results[0]["testcases"][0]["classname"] == "foo1" + + +def test_parse_nosetest_xml(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_nose_path) + assert hasattr(parser, "parse") + results = parser.parse() + + assert len(results) == 1 + assert results[0]["name"] == "nosetests" + assert results[0]["tests"] == "5" + assert results[0]["errors"] == "0" + assert results[0]["failures"] == "0" + assert results[0]["skips"] == "0" + assert results[0]["time"] == "-1" + assert results[0]["testcases"][0]["name"] == "test_doc_build_html" + assert results[0]["testcases"][0]["classname"] == "test_basic_doc" + assert results[0]["testcases"][0]["time"] == "0.283" + + +def test_parse_pytest_xml(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_pytest_path) + assert hasattr(parser, "parse") + results = parser.parse() + + assert len(results) == 1 + assert results[0]["name"] == "pytest" + assert results[0]["tests"] == "10" + assert results[0]["errors"] == "0" + assert results[0]["failures"] == "0" + assert results[0]["skips"] == "10" + assert results[0]["time"] == "0.054" + assert results[0]["testcases"][0]["name"] == "FLAKE8" + assert results[0]["testcases"][0]["classname"] == "setup" + assert results[0]["testcases"][0]["time"] == "0.000252246856689" + assert results[0]["testcases"][0]["line"] == "-1" + assert results[0]["testcases"][0]["file"] == "setup.py" From 7a63821447a499a56a20a0540d5b1b652e21ba83 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 5 Jun 2018 13:48:37 +0200 Subject: [PATCH 010/159] Added initial table generation --- packages/sphinx-test-reports/docs/conf.py | 4 +- .../docs/directives/test_results.rst | 22 +++++++++ packages/sphinx-test-reports/docs/index.rst | 2 + .../test_reports/directives/test_results.py | 49 +++++++++++++++++-- .../sphinxcontrib/test_reports/junitparser.py | 6 ++- 5 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/directives/test_results.rst diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 857093e7e..383dca891 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -39,8 +39,8 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [ -] +extensions = [ "sphinxcontrib.test_reports"] + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/packages/sphinx-test-reports/docs/directives/test_results.rst b/packages/sphinx-test-reports/docs/directives/test_results.rst new file mode 100644 index 000000000..d901ec9b7 --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/test_results.rst @@ -0,0 +1,22 @@ +test-results +============ + +This directive adds a results table of a given junit xml file to the current page. + +.. code-block:: rst + + .. test-results: my/path/to/test.xml + + +.. test-results:: ../tests/data/xml_data.xml + +.. test-results:: ../tests/data/pytest_data.xml + +.. test-results:: ../tests/data/nose_data.xml + + +.. note:: + + Each test framework, like pytest or nosetest, generates a little different junit-xml file with more or less data. + If a specific data is not available in the given xml-file, sphinx-test-reports fills the information with + ``unknown`` for strings or ``-1`` for numbers. \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index d814d487b..a6f4e14bc 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -59,4 +59,6 @@ Content :maxdepth: 2 :caption: Contents: + directives/test_results + diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index a0a137e9e..3fb83532a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -27,11 +27,52 @@ def run(self): if not os.path.isabs(xml_path): xml_path = os.path.join(root_path, xml_path) parser = JUnitParser(xml_path) + results = parser.parse() # Construction idea taken from http://agateau.com/2015/docutils-snippets/ - # for testsuite in parser.junit_xml_object.testsuite: - # # table = nodes.table - # pass + main_section = [] - return [nodes.Text(parser.junit_xml_string, parser.junit_xml_string)] + header = ('class', 'name', 'status', 'reason') + colwidths = (1, 1, 1, 2) + + for testsuite in results: + section = nodes.section() + section += nodes.title(text=testsuite["name"]) + section += nodes.paragraph(text="Tests: {tests}, Failure: {failure}, Error: {error}, " + "Skipped: {skipped}".format(tests=testsuite["tests"], + failure=testsuite["failures"], + error=testsuite["errors"], + skipped=testsuite["skips"] + )) + section += nodes.paragraph(text="Time: {time}".format(time=testsuite["time"])) + + table = nodes.table() + section += table + + tgroup = nodes.tgroup(cols=len(header)) + table += tgroup + for colwidth in colwidths: + tgroup += nodes.colspec(colwidth=colwidth) + + thead = nodes.thead() + tgroup += thead + thead += self._create_table_row(header) + + tbody = nodes.tbody() + tgroup += tbody + for testcase in testsuite["testcases"]: + tbody += self._create_table_row((testcase["classname"], testcase["name"], + testcase["result"], testcase["text"],)) + + main_section += section + + return main_section + + def _create_table_row(self, row_cells): + row = nodes.row() + for cell in row_cells: + entry = nodes.entry() + row += entry + entry += nodes.paragraph(text=cell) + return row \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 8cdfef6b0..2d7693265 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -57,16 +57,20 @@ def parse(self): if hasattr(testcase, "skipped"): result = testcase.skipped tc_dict["result"] = "skipped" - tc_dict["type"] = result.attrib.get("message", "unknown") tc_dict["type"] = result.attrib.get("type", "unknown") tc_dict["text"] = result.text + tc_dict["message"] = result.attrib.get("message", "unknown") elif hasattr(testcase, "failure"): result = testcase.failure tc_dict["result"] = "failure" tc_dict["type"] = result.attrib.get("type", "unknown") tc_dict["text"] = result.text + tc_dict["message"] = "" else: tc_dict["result"] = "passed" + tc_dict["type"] = "" + tc_dict["text"] = "" + tc_dict["message"] = "" ts_dict["testcases"].append(tc_dict) From 5e9a4810e5e856ff55056ccce8447a543a3cc65d Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 5 Jun 2018 16:12:20 +0200 Subject: [PATCH 011/159] added test result layout --- packages/sphinx-test-reports/MANIFEST.in | 1 + packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/docs/index.rst | 27 ++++++ .../sphinxcontrib/test_reports/css/common.css | 32 +++++++ .../test_reports/directives/test_results.py | 43 ++++++--- .../sphinxcontrib/test_reports/environment.py | 94 +++++++++++++++++++ .../test_reports/test_reports.py | 4 + .../tests/data/xml_data_2.xml | 10 ++ 8 files changed, 197 insertions(+), 16 deletions(-) create mode 100644 packages/sphinx-test-reports/MANIFEST.in create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py create mode 100644 packages/sphinx-test-reports/tests/data/xml_data_2.xml diff --git a/packages/sphinx-test-reports/MANIFEST.in b/packages/sphinx-test-reports/MANIFEST.in new file mode 100644 index 000000000..3ee393d82 --- /dev/null +++ b/packages/sphinx-test-reports/MANIFEST.in @@ -0,0 +1 @@ +include sphinxcontrib/test_reports/css/common.css \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 383dca891..93808af79 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -39,7 +39,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = [ "sphinxcontrib.test_reports"] +extensions = ["sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index a6f4e14bc..9199ce4b2 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -38,6 +38,33 @@ Functions based exports as table. (E.g. used operating system, python version, installed packages, ...) +.. note:: This plugin is in an early alpha phase and under heavy development. + +Example +------- + +Input +~~~~~ + +**my_data.xml** + +.. literalinclude:: ../tests/data/xml_data_2.xml + +**my_document.rst** + +.. code-block:: rst + + My Test Results + =============== + + .. test-results:: my_data.xml + +Output +~~~~~~ + +.. test-results:: ../tests/data/xml_data_2.xml + + Motivation ---------- ``Sphinx-Test-Reports`` was created for an automotive project, which needs to document test results and their used diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css new file mode 100644 index 000000000..075e3653d --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css @@ -0,0 +1,32 @@ +tr.passed { + background-color: rgba(0,250,0,0.1); +} + +tr.failure { + background-color: rgba(250,0,0,0.1); +} + +tr.skipped { + background-color: rgba(0,0,0,0.05); +} + +td.status p { + padding: 3px 5px; + text-align: center; + border-radius: 10px; +} + +td.status p.passed{ + border: 1px solid #008000; + color: #008000; +} + +td.status p.failure{ + border: 1px solid #800000; + color: #800000; +} + +td.status p.skipped{ + border: 1px solid #555; + color: #555; +} \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index 3fb83532a..e2152a388 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -19,6 +19,11 @@ class TestResultsDirective(Directive): final_argument_whitespace = True + def __init__(self, *args, **kwargs): + super(TestResultsDirective, self).__init__(*args, **kwargs) + self.header = ('class', 'name', 'status', 'reason') + self.colwidths = (1, 1, 1, 2) + def run(self): env = self.state.document.settings.env @@ -33,46 +38,54 @@ def run(self): main_section = [] - header = ('class', 'name', 'status', 'reason') - colwidths = (1, 1, 1, 2) - for testsuite in results: section = nodes.section() section += nodes.title(text=testsuite["name"]) - section += nodes.paragraph(text="Tests: {tests}, Failure: {failure}, Error: {error}, " - "Skipped: {skipped}".format(tests=testsuite["tests"], - failure=testsuite["failures"], - error=testsuite["errors"], - skipped=testsuite["skips"] - )) + section += nodes.paragraph(text="Tests: {tests}, Failures: {failure}, Errors: {error}, " + "Skips: {skips}".format(tests=testsuite["tests"], + failure=testsuite["failures"], + error=testsuite["errors"], + skips=testsuite["skips"] + )) section += nodes.paragraph(text="Time: {time}".format(time=testsuite["time"])) table = nodes.table() section += table - tgroup = nodes.tgroup(cols=len(header)) + tgroup = nodes.tgroup(cols=len(self.header)) table += tgroup - for colwidth in colwidths: + for colwidth in self.colwidths: tgroup += nodes.colspec(colwidth=colwidth) thead = nodes.thead() tgroup += thead - thead += self._create_table_row(header) + thead += self._create_table_row(self.header) tbody = nodes.tbody() tgroup += tbody for testcase in testsuite["testcases"]: - tbody += self._create_table_row((testcase["classname"], testcase["name"], - testcase["result"], testcase["text"],)) + tbody += self._create_testcase_row(testcase) main_section += section return main_section + def _create_testcase_row(self, testcase): + row_cells = (testcase["classname"], testcase["name"], + testcase["result"], "\n\n".join([testcase["message"] if testcase["message"] != "unknown" else "", + testcase["text"]])) + + row = nodes.row(classes=[testcase["result"]]) + for index, cell in enumerate(row_cells): + entry = nodes.entry(classes=[testcase["result"], self.header[index]]) + row += entry + entry += nodes.paragraph(text=cell, classes=[testcase["result"]]) + return row + def _create_table_row(self, row_cells): row = nodes.row() for cell in row_cells: entry = nodes.entry() row += entry entry += nodes.paragraph(text=cell) - return row \ No newline at end of file + return row diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py new file mode 100644 index 000000000..1899f3330 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -0,0 +1,94 @@ +import os +from sphinx.util.osutil import copyfile +from sphinx.util.osutil import ensuredir +from sphinx.util.console import brown + +import sphinx +from pkg_resources import parse_version + +sphinx_version = sphinx.__version__ +if parse_version(sphinx_version) >= parse_version("1.6"): + from sphinx.util import status_iterator # NOQA Sphinx 1.5 + +STATICS_DIR_NAME = '_static' + + +def safe_add_file(filename, app): + """ + Adds files to builder resources only, if the given filename was not already registered. + Needed mainly for tests to avoid multiple registration of the same file and therefore also multiple execution + of e.g. a javascript file during page load. + + :param filename: filename to remove + :param app: app object + :return: None + """ + data_file = filename + static_data_file = os.path.join("_static", data_file) + + if data_file.split(".")[-1] == "js": + if hasattr(app.builder, "script_files") and static_data_file not in app.builder.script_files: + app.add_javascript(data_file) + elif data_file.split(".")[-1] == "css": + if hasattr(app.builder, "css_files") and static_data_file not in app.builder.css_files: + app.add_stylesheet(data_file) + else: + raise NotImplemented("File type {} not support by save_add_file".format(data_file.split(".")[-1])) + + +def safe_remove_file(filename, app): + """ + Removes a given resource file from builder resources. + Needed mostly during test, if multiple sphinx-build are started. + During these tests js/cass-files are not cleaned, so a css_file from run A is still registered in run B. + + :param filename: filename to remove + :param app: app object + :return: None + """ + data_file = filename + static_data_file = os.path.join("_static", data_file) + + if data_file.split(".")[-1] == "js": + if hasattr(app.builder, "script_files") and static_data_file in app.builder.script_files: + app.builder.script_files.remove(static_data_file) + elif data_file.split(".")[-1] == "css": + if hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files: + app.builder.css_files.remove(static_data_file) + + +# Base implementation from sphinxcontrib-images +# https://github.com/spinus/sphinxcontrib-images/blob/master/sphinxcontrib/images.py#L203 +def install_styles_static_files(app, env): + STATICS_DIR_PATH = os.path.join(app.builder.outdir, STATICS_DIR_NAME) + dest_path = os.path.join(STATICS_DIR_PATH, 'sphinx-test-results') + + files_to_copy = ["common.css"] + + # Be sure no "old" css layout is already set + safe_remove_file("sphinx-test-reports/common.css", app) + + if parse_version(sphinx_version) < parse_version("1.6"): + global status_iterator + status_iterator = app.status_iterator + + for source_file_path in status_iterator( + files_to_copy, + 'Copying static files for sphinx-test-results custom style support...', + brown, len(files_to_copy)): + + if not os.path.isabs(source_file_path): + source_file_path = os.path.join(os.path.dirname(__file__), "css", source_file_path) + + if not os.path.exists(source_file_path): + source_file_path = os.path.join(os.path.dirname(__file__), "css", "blank.css") + print("{0} not found. Copying sphinx-internal blank.css".format(source_file_path)) + + dest_file_path = os.path.join(dest_path, os.path.basename(source_file_path)) + + if not os.path.exists(os.path.dirname(dest_file_path)): + ensuredir(os.path.dirname(dest_file_path)) + + copyfile(source_file_path, dest_file_path) + + safe_add_file(os.path.relpath(dest_file_path, STATICS_DIR_PATH), app) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index c140a4898..c941813c5 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -4,6 +4,7 @@ from pkg_resources import parse_version from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective +from sphinxcontrib.test_reports.environment import install_styles_static_files sphinx_version = sphinx.__version__ if parse_version(sphinx_version) >= parse_version("1.6"): @@ -28,4 +29,7 @@ def setup(app): app.add_directive('test-results', TestResultsDirective) + # events + app.connect('env-updated', install_styles_static_files) + return {'version': '0.1.0'} # identifies the version of our extension diff --git a/packages/sphinx-test-reports/tests/data/xml_data_2.xml b/packages/sphinx-test-reports/tests/data/xml_data_2.xml new file mode 100644 index 000000000..a93be9da6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/xml_data_2.xml @@ -0,0 +1,10 @@ + + + + + key "name" could not be accessed in junit object + + + Passed on the last test run + + \ No newline at end of file From b5fef5edcf2d76b6289a1541f794fd9eced28993 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 5 Jun 2018 16:18:51 +0200 Subject: [PATCH 012/159] added doc requirements --- packages/sphinx-test-reports/doc-requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/sphinx-test-reports/doc-requirements.txt diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt new file mode 100644 index 000000000..752e68f07 --- /dev/null +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -0,0 +1 @@ +sphinx>=1.6 From 0a2423d48a799b24b465414064b57342c917f8a2 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 5 Jun 2018 16:28:55 +0200 Subject: [PATCH 013/159] removed xml validation from init and put it unto a specific function --- .../sphinxcontrib/test_reports/junitparser.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 2d7693265..0210136e0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -10,18 +10,25 @@ def __init__(self, junit_xml, junit_xsd=None): junit_xsd = os.path.join(os.path.dirname(__file__), "schemas", "JUnit.xsd") self.junit_xsd_path = junit_xsd + self.junit_schema_doc = None + self.xmlschema = None + self.valid_xml = None + if not os.path.exists(self.junit_xml_path): raise JUnitFileMissing("The given file does not exist: {0}".format(self.junit_xml_path)) - - self.junit_schema_doc = etree.parse(self.junit_xsd_path) - self.xmlschema = etree.XMLSchema(self.junit_schema_doc) self.junit_xml_doc = etree.parse(self.junit_xml_path) - self.valid_xml = self.xmlschema.validate(self.junit_xml_doc) self.junit_xml_string = etree.tostring(self.junit_xml_doc) self.junit_xml_object = objectify.fromstring(self.junit_xml_string) self.junit_xml_string = str(self.junit_xml_string) + def validate(self): + self.junit_schema_doc = etree.parse(self.junit_xsd_path) + self.xmlschema = etree.XMLSchema(self.junit_schema_doc) + self.valid_xml = self.xmlschema.validate(self.junit_xml_doc) + + return self.valid_xml + def parse(self): """ Creates a common python dictionary object, no matter what information are supported by the parsed xml file for From 72dc832bf0884e31ca1fb8025530c0894afa3e31 Mon Sep 17 00:00:00 2001 From: saifsayyad <44859469+saifsayyad@users.noreply.github.com> Date: Fri, 7 Dec 2018 13:03:42 +0530 Subject: [PATCH 014/159] Evn report (useblocks/sphinx-test-reports#2) * added directive test-env and its supporting doc * added test-env directive * added test-env directive and supporting docs * test cases and bug fix in directive * test case for Warning * warning test case, py27-sphinx15 fix --- .../sphinx-test-reports/docs/changelog.rst | 10 + .../docs/directives/test_env.rst | 38 +++ packages/sphinx-test-reports/docs/index.rst | 4 +- .../test_reports/directives/test_env.py | 221 ++++++++++++ .../sphinxcontrib/test_reports/environment.py | 2 +- .../test_reports/test_reports.py | 4 + .../tests/data/tox-report.json | 321 ++++++++++++++++++ .../tests/doc_test/env_report_doc/Makefile | 20 ++ .../tests/doc_test/env_report_doc/conf.py | 150 ++++++++ .../tests/doc_test/env_report_doc/index.rst | 6 + .../tests/doc_test/env_report_doc/make.bat | 36 ++ .../doc_test/env_report_doc_default/Makefile | 20 ++ .../doc_test/env_report_doc_default/conf.py | 150 ++++++++ .../doc_test/env_report_doc_default/index.rst | 4 + .../doc_test/env_report_doc_default/make.bat | 36 ++ .../doc_test/env_report_doc_raw/Makefile | 20 ++ .../tests/doc_test/env_report_doc_raw/conf.py | 150 ++++++++ .../doc_test/env_report_doc_raw/index.rst | 8 + .../doc_test/env_report_doc_raw/make.bat | 36 ++ .../doc_test/env_report_warnings/Makefile | 20 ++ .../doc_test/env_report_warnings/conf.py | 150 ++++++++ .../doc_test/env_report_warnings/index.rst | 6 + .../doc_test/env_report_warnings/make.bat | 36 ++ .../sphinx-test-reports/tests/test_env.py | 142 ++++++++ 24 files changed, 1587 insertions(+), 3 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/changelog.rst create mode 100644 packages/sphinx-test-reports/docs/directives/test_env.rst create mode 100644 packages/sphinx-test-reports/tests/data/tox-report.json create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_warnings/make.bat create mode 100644 packages/sphinx-test-reports/tests/test_env.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst new file mode 100644 index 000000000..86e5d40e4 --- /dev/null +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -0,0 +1,10 @@ +Changelog +========= + +0.2.0 +----- + +**Initial start for the changelog** + +* Improvement: added directive ``:test-env:`` to take tox-envreport.json as input and create a table. + diff --git a/packages/sphinx-test-reports/docs/directives/test_env.rst b/packages/sphinx-test-reports/docs/directives/test_env.rst new file mode 100644 index 000000000..1f3f51774 --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/test_env.rst @@ -0,0 +1,38 @@ +test-env +============ + +This directive adds a table which shows tox-envreport.json, user can control output of this directive by adding specific options, +please see below example + +How to use Example +------------------ + +.. code-block:: rst + + .. test-env: my/path/to/tox-envreport.json + :env: py35, flake8 + :data: name, host, installed_packages + +If ``:raw:`` flag is set all data is filtered according to ``:env:`` then ``:data:`` and shown in raw format +If any environment or data option is not present, it will throw a warning. + +Supported Parameters for ``:data:`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- name +- host +- installed_packages +- path +- platform +- reportversion +- setup +- test +- toxversion + +Example output +------------------- + +.. test-env:: ../tests/data/tox-report.json + :data: name, host, installed_packages , ,asd + :env: py35, flake8, , ads, + :raw: diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 9199ce4b2..73837c472 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -87,5 +87,5 @@ Content :caption: Contents: directives/test_results - - + directives/test_env + changelog diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index e69de29bb..8ea470666 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -0,0 +1,221 @@ +import copy +import os +import json +from docutils import nodes +from docutils.parsers.rst import Directive +from docutils.parsers.rst import directives +import sphinx +from pkg_resources import parse_version + +sphinx_version = sphinx.__version__ +if parse_version(sphinx_version) >= parse_version("1.6"): + from sphinx.util import logging +else: + import logging + logging.basicConfig() +logger = logging.getLogger(__name__) + + +class EnvReport(nodes.General, nodes.Element): + pass + + +class EnvReportDirective(Directive): + """ + Directive for showing test results. + """ + has_content = True + required_arguments = 1 + optional_arguments = 0 + option_spec = { + 'env': directives.unchanged_required, + 'data': directives.unchanged_required, + 'raw': directives.flag} + + final_argument_whitespace = True + + def __init__(self, *args, **kwargs): + super(EnvReportDirective, self).__init__(*args, **kwargs) + self.data_option = self.options.get('data', None) + self.environments = self.options.get('env', None) + + if self.environments is not None: + self.req_env_list_cpy = self.environments.split(',') + self.req_env_list = [] + for element in self.req_env_list_cpy: + if len(element) != 0: + self.req_env_list.append(element.lstrip().rstrip()) + else: + self.req_env_list = None + + if self.data_option is not None: + self.data_option_list_cpy = self.data_option.split(',') + self.data_option_list = [] + for element in self.data_option_list_cpy: + if len(element) != 0: + self.data_option_list.append(element.rstrip().lstrip()) + else: + self.data_option_list = None + + self.header = ('Variable', 'Data') + self.colwidths = (1, 1) + + def run(self): + env = self.state.document.settings.env + + json_path = self.arguments[0] + root_path = env.app.config.test_reports_rootdir + if not os.path.isabs(json_path): + json_path = os.path.join(root_path, json_path) + + if not os.path.exists(json_path): + raise JsonFileNotFound("The given file does not exist: {0}".format(json_path)) + + fp_json = open(json_path, 'r') + + try: + results = json.load(fp_json) + except ValueError: + raise InvalidJsonFile("The given file {0} is not a valid JSON".format(json_path.split('/')[-1])) + + # check to see if environment is present in JSON or not + if self.req_env_list is not None: + not_present_env = [] + for req_env in self.req_env_list: + if req_env not in results: + not_present_env.append(req_env) + for not_env in not_present_env: + self.req_env_list.remove(not_env) + logger.warning("environment \'{0}\' is not present in JSON file".format(not_env)) + del not_present_env + + # Construction idea taken from http://agateau.com/2015/docutils-snippets/ + main_section = [] + + if self.req_env_list is None and 'raw' not in self.options: + for enviro in results: + main_section += self._crete_table_b(enviro=enviro, results=results) + + elif 'raw' not in self.options and self.req_env_list is not None: + for req_env in self.req_env_list: + main_section += self._crete_table_b(enviro=req_env, results=results) + + elif 'raw' in self.options and self.req_env_list is None: + for enviro in results: + # data option handling + temp_dict = copy.deepcopy(results) + temp_dict2 = copy.deepcopy(results) + if self.data_option_list is not None: + for opt in temp_dict[enviro]: + if opt not in self.data_option_list: + del temp_dict2[enviro][opt] + # option check + for opt in self.data_option_list: + if opt not in temp_dict2[enviro]: + logger.warning("option \'{0}\' is not present in JSON file".format(opt)) + + del temp_dict + + section = nodes.section() + section += nodes.title(text=enviro) + results_string = json.dumps(temp_dict2[enviro], indent=4) + code_block = nodes.literal_block(results_string, results_string) + code_block['language'] = 'json' + section += code_block # nodes.literal_block(results, results) + main_section += section # nodes.literal_block(enviro, results[enviro]) + del temp_dict2 + + elif 'raw' in self.options and self.req_env_list is not None: + for enviro in self.req_env_list: + # data option handling + temp_dict = copy.deepcopy(results) + temp_dict2 = copy.deepcopy(results) + if self.data_option_list is not None: + for opt in temp_dict[enviro]: + if opt not in self.data_option_list: + del temp_dict2[enviro][opt] + + # option check + for opt in self.data_option_list: + if opt not in temp_dict2[enviro]: + logger.warning("option \'{0}\' is not present in \'{1}\' environment file".format(opt, enviro)) + + del temp_dict + + section = nodes.section() + section += nodes.title(text=enviro) + results_string = json.dumps(temp_dict2[enviro], indent=4) + code_block = nodes.literal_block(results_string, results_string) + code_block['language'] = 'json' + section += code_block + main_section += section + del temp_dict2 + + return main_section + + def _crete_table_b(self, enviro, results): + main_section = [] + section = nodes.section() + section += nodes.title(text=enviro) + + table = nodes.table() + section += table + + tgroup = nodes.tgroup(cols=len(self.header)) + table += tgroup + for colwidth in self.colwidths: + tgroup += nodes.colspec(colwidth=colwidth) + + thead = nodes.thead() + tgroup += thead + thead += self._create_rows(self.header) + + tbody = nodes.tbody() + tgroup += tbody + all_data = results[enviro] + + data_option = copy.deepcopy(self.data_option_list) + for data in all_data: + if data_option is not None: + if data in data_option: + data_option.remove(data) + tbody += self._create_rows((data, all_data[data])) + else: + tbody += self._create_rows((data, all_data[data])) + + main_section += section + + # data option check + if data_option is not None: + if len(data_option) != 0: + for opt in data_option: + logger.warning("option \'{0}\' is not present in JSON file".format(opt)) + del data_option + + return main_section + + def _create_rows(self, row_cells): + row = nodes.row() + for cell in row_cells: + entry = nodes.entry() + row += entry + if isinstance(cell, (list, dict)): + results_string = json.dumps(cell, indent=4) + code_block = nodes.literal_block(results_string, results_string) + code_block['language'] = 'json' + entry += code_block + else: + entry += nodes.paragraph(text=cell) + return row + + +class InvalidJsonFile(BaseException): + pass + + +class JsonFileNotFound(BaseException): + pass + + +class InvalidEnvRequested(BaseException): + pass diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 1899f3330..002ade2e6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -33,7 +33,7 @@ def safe_add_file(filename, app): if hasattr(app.builder, "css_files") and static_data_file not in app.builder.css_files: app.add_stylesheet(data_file) else: - raise NotImplemented("File type {} not support by save_add_file".format(data_file.split(".")[-1])) + raise NotImplementedError("File type {} not support by save_add_file".format(data_file.split(".")[-1])) def safe_remove_file(filename, app): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index c941813c5..6be9e39aa 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -4,6 +4,7 @@ from pkg_resources import parse_version from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective +from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective from sphinxcontrib.test_reports.environment import install_styles_static_files sphinx_version = sphinx.__version__ @@ -29,6 +30,9 @@ def setup(app): app.add_directive('test-results', TestResultsDirective) + app.add_node(EnvReport) + app.add_directive('test-env', EnvReportDirective) + # events app.connect('env-updated', install_styles_static_files) diff --git a/packages/sphinx-test-reports/tests/data/tox-report.json b/packages/sphinx-test-reports/tests/data/tox-report.json new file mode 100644 index 000000000..bce5c751a --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/tox-report.json @@ -0,0 +1,321 @@ +{ + "flake8": { + "host": "saif-HP-ProBook-6470b", + "installed_packages": [ + "arrow==0.10.0", + "attrs==18.2.0", + "binaryornot==0.4.4", + "blinker==1.4", + "certifi==2018.4.16", + "chardet==3.0.4", + "click==6.7", + "cookiecutter==1.5.1", + "docutils==0.14", + "envparse==0.2.0", + "erc-e2e==0.1.0", + "flake8==3.5.0", + "flake8-blind-except==0.1.1", + "flake8-bugbear==18.2.0", + "flake8-builtins==1.1.1", + "flake8-commas==2.0.0", + "flake8-comprehensions==1.4.1", + "flake8-debugger==3.1.0", + "flake8-deprecated==1.3", + "flake8-docstrings==1.3.0", + "flake8-formatter-abspath==1.0.1", + "flake8-import-order==0.17.1", + "flake8-mutable==1.2.0", + "flake8-pep3101==1.2", + "flake8-per-file-ignores==0.6", + "flake8-polyfill==1.0.2", + "flake8-quotes==0.14.0", + "flake8-rst-docstrings==0.0.8", + "flake8-string-format==0.2.3", + "flake8-tidy-imports==1.1.0", + "flake8-tuple==0.2.13", + "future==0.16.0", + "groundwork==0.1.13", + "idna==2.6", + "Jinja2==2.9.6", + "jinja2-time==0.2.0", + "jsonschema==2.6.0", + "lxml==4.0.0", + "MarkupSafe==1.0", + "mccabe==0.6.1", + "nose==1.3.7", + "pathlib==1.0.1", + "pathmatch==0.2.1", + "poyo==0.4.1", + "pycodestyle==2.3.1", + "pydocstyle==3.0.0", + "pyflakes==1.6.0", + "python-dateutil==2.6.1", + "requests==2.18.4", + "restructuredtext-lint==1.2.1", + "six==1.11.0", + "snowballstemmer==1.2.1", + "svn==0.3.45", + "typing==3.6.6", + "urllib3==1.22", + "whichcraft==0.4.1" + ], + "installpkg": { + "basename": "erc_e2e-0.1.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" + }, + "name": "flake8", + "path": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8", + "platform": "linux", + "python": { + "executable": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + }, + "reportversion": "1", + "setup": [ + { + "command": [ + "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/python", + "-m", + "pip", + "freeze" + ], + "output": "actionid: flake8\nmsg: envreport\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/python -m pip freeze'\n\narrow==0.10.0\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\ncertifi==2018.4.16\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ndocutils==0.14\nenvparse==0.2.0\nerc-e2e==0.1.0\nflake8==3.5.0\nflake8-blind-except==0.1.1\nflake8-bugbear==18.2.0\nflake8-builtins==1.1.1\nflake8-commas==2.0.0\nflake8-comprehensions==1.4.1\nflake8-debugger==3.1.0\nflake8-deprecated==1.3\nflake8-docstrings==1.3.0\nflake8-formatter-abspath==1.0.1\nflake8-import-order==0.17.1\nflake8-mutable==1.2.0\nflake8-pep3101==1.2\nflake8-per-file-ignores==0.6\nflake8-polyfill==1.0.2\nflake8-quotes==0.14.0\nflake8-rst-docstrings==0.0.8\nflake8-string-format==0.2.3\nflake8-tidy-imports==1.1.0\nflake8-tuple==0.2.13\nfuture==0.16.0\ngroundwork==0.1.13\nidna==2.6\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nnose==1.3.7\npathlib==1.0.1\npathmatch==0.2.1\npoyo==0.4.1\npycodestyle==2.3.1\npydocstyle==3.0.0\npyflakes==1.6.0\npython-dateutil==2.6.1\nrequests==2.18.4\nrestructuredtext-lint==1.2.1\nsix==1.11.0\nsnowballstemmer==1.2.1\nsvn==0.3.45\ntyping==3.6.6\nurllib3==1.22\nwhichcraft==0.4.1\n", + "retcode": "0" + } + ], + "test": [ + { + "command": [ + "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/flake8" + ], + "output": null, + "retcode": "0" + } + ], + "toxversion": "3.5.3" + }, + "py35": { + "host": "saif-HP-ProBook-6470b", + "installed_packages": [ + "arrow==0.10.0", + "atomicwrites==1.2.1", + "attrs==18.2.0", + "binaryornot==0.4.4", + "blinker==1.4", + "brotlipy==0.7.0", + "certifi==2018.4.16", + "cffi==1.11.5", + "chardet==3.0.4", + "click==6.7", + "cookiecutter==1.5.1", + "coverage==4.5.2", + "decorator==4.3.0", + "docutils==0.14", + "envparse==0.2.0", + "erc-e2e==0.1.0", + "filelock==3.0.10", + "Flask==1.0.2", + "future==0.16.0", + "groundwork==0.1.13", + "gw-utils==0.2.3", + "httpbin==0.7.0", + "idna==2.6", + "itsdangerous==1.1.0", + "Jinja2==2.9.6", + "jinja2-time==0.2.0", + "jsonschema==2.6.0", + "lxml==4.0.0", + "MarkupSafe==1.0", + "more-itertools==4.3.0", + "nose==1.3.7", + "pathlib==1.0.1", + "pathlib2==2.3.2", + "pluggy==0.8.0", + "poyo==0.4.1", + "py==1.7.0", + "pycparser==2.19", + "pyelftools===0.24-st1", + "pytest==4.0.0", + "pytest-cov==2.6.0", + "pytest-runner==4.2", + "python-dateutil==2.6.1", + "PyYAML==3.13", + "raven==6.9.0", + "requests==2.18.4", + "six==1.11.0", + "svn==0.3.45", + "toml==0.10.0", + "tox==3.5.3", + "typing==3.6.6", + "urllib3==1.22", + "virtualenv==16.1.0", + "Werkzeug==0.14.1", + "whichcraft==0.4.1", + "yamldirs==1.1.3" + ], + "installpkg": { + "basename": "erc_e2e-0.1.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" + }, + "name": "py35", + "path": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35", + "platform": "linux", + "python": { + "executable": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + }, + "reportversion": "1", + "setup": [ + { + "command": [ + "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python", + "-m", + "pip", + "install", + "--no-deps", + "-U", + "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/.tmp/package/1/erc_e2e-0.1.0.zip" + ], + "output": "actionid: py35\nmsg: installpkg\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python -m pip install --no-deps -U /home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/.tmp/package/1/erc_e2e-0.1.0.zip'\n\nProcessing ./.tox/.tmp/package/1/erc_e2e-0.1.0.zip\nBuilding wheels for collected packages: erc-e2e\n Running setup.py bdist_wheel for erc-e2e: started\n Running setup.py bdist_wheel for erc-e2e: finished with status 'done'\n Stored in directory: /home/saif/.cache/pip/wheels/f7/81/bb/85d03f88c7253c16a001851c961b6ed0a084ca296a0b5d296a\nSuccessfully built erc-e2e\nInstalling collected packages: erc-e2e\n Found existing installation: erc-e2e 0.1.0\n Not uninstalling erc-e2e at /home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e, outside environment /home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35\n Can't uninstall 'erc-e2e'. No files were found to uninstall.\nSuccessfully installed erc-e2e-0.1.0\n", + "retcode": "0" + }, + { + "command": [ + "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python", + "-m", + "pip", + "freeze" + ], + "output": "actionid: py35\nmsg: envreport\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python -m pip freeze'\n\narrow==0.10.0\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nerc-e2e==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\ngw-utils==0.2.3\nhttpbin==0.7.0\nidna==2.6\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npyelftools===0.24-st1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nyamldirs==1.1.3\n", + "retcode": "0" + } + ], + "test": [], + "toxversion": "3.5.3" + }, + "pylint": { + "host": "saif-HP-ProBook-6470b", + "installed_packages": [ + "arrow==0.10.0", + "astroid==2.0.4", + "atomicwrites==1.2.1", + "attrs==18.2.0", + "binaryornot==0.4.4", + "blinker==1.4", + "brotlipy==0.7.0", + "certifi==2018.4.16", + "cffi==1.11.5", + "chardet==3.0.4", + "click==6.7", + "cookiecutter==1.5.1", + "coverage==4.5.2", + "decorator==4.3.0", + "docutils==0.14", + "envparse==0.2.0", + "erc-e2e==0.1.0", + "filelock==3.0.10", + "Flask==1.0.2", + "future==0.16.0", + "groundwork==0.1.13", + "httpbin==0.7.0", + "idna==2.6", + "isort==4.3.4", + "itsdangerous==1.1.0", + "Jinja2==2.9.6", + "jinja2-time==0.2.0", + "jsonschema==2.6.0", + "lazy-object-proxy==1.3.1", + "lxml==4.0.0", + "MarkupSafe==1.0", + "mccabe==0.6.1", + "more-itertools==4.3.0", + "nose==1.3.7", + "pathlib==1.0.1", + "pathlib2==2.3.2", + "pluggy==0.8.0", + "poyo==0.4.1", + "py==1.7.0", + "pycparser==2.19", + "pylint==2.1.1", + "pytest==4.0.0", + "pytest-cov==2.6.0", + "pytest-runner==4.2", + "python-dateutil==2.6.1", + "PyYAML==3.13", + "raven==6.9.0", + "requests==2.18.4", + "six==1.11.0", + "svn==0.3.45", + "toml==0.10.0", + "tox==3.5.3", + "typed-ast==1.1.0", + "typing==3.6.6", + "urllib3==1.22", + "virtualenv==16.1.0", + "Werkzeug==0.14.1", + "whichcraft==0.4.1", + "wrapt==1.10.11", + "yamldirs==1.1.3" + ], + "installpkg": { + "basename": "erc_e2e-0.1.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" + }, + "name": "pylint", + "path": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint", + "platform": "linux", + "python": { + "executable": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + }, + "reportversion": "1", + "setup": [ + { + "command": [ + "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint/bin/python", + "-m", + "pip", + "freeze" + ], + "output": "actionid: pylint\nmsg: envreport\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint/bin/python -m pip freeze'\n\narrow==0.10.0\nastroid==2.0.4\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nerc-e2e==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\nhttpbin==0.7.0\nidna==2.6\nisort==4.3.4\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlazy-object-proxy==1.3.1\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npylint==2.1.1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyped-ast==1.1.0\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nwrapt==1.10.11\nyamldirs==1.1.3\n", + "retcode": "0" + } + ], + "test": [ + { + "command": [ + "/bin/bash", + "-c", + "set -o pipefail && pylint -f parseable --msg-template \"{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\" erc_e2e tests | tee pylint.log" + ], + "output": null, + "retcode": "0" + } + ], + "toxversion": "3.5.3" + } +} diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py new file mode 100644 index 000000000..329940b0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports'] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst new file mode 100644 index 000000000..e105d09c1 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst @@ -0,0 +1,6 @@ +Test-Env report +================== + +.. test-env:: ../../data/tox-report.json + :data: host, name, path + :env: py35, flake8 diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py new file mode 100644 index 000000000..329940b0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports'] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst new file mode 100644 index 000000000..82f0a72c2 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst @@ -0,0 +1,4 @@ +Test-Env report +================== + +.. test-env:: ../../data/tox-report.json diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/make.bat b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py new file mode 100644 index 000000000..329940b0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports'] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst new file mode 100644 index 000000000..95ff5bdda --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst @@ -0,0 +1,8 @@ +Test-Env report +================== + +.. test-env:: ../../data/tox-report.json + :data: host, name, path + :env: py35, flake8 + :raw: + diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/make.bat b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py new file mode 100644 index 000000000..329940b0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports'] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst new file mode 100644 index 000000000..fbba7fb1c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst @@ -0,0 +1,6 @@ +Test-Env report +================== + +.. test-env:: ../../data/tox-report.json + :data: host, name, path, abc,, + :env: py35, flake8,,defs \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/make.bat b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py new file mode 100644 index 000000000..168f929e6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -0,0 +1,142 @@ +from sphinx_testing import with_app +import re +import sphinx + +sphinx_version = int(sphinx.__version__.split('.')[0] + sphinx.__version__.split('.')[1]) + +try: + from pathlib import Path +except ImportError: + from pathlib2 import Path + +try: + from StringIO import StringIO # Python 2 +except ImportError: + from io import StringIO # Python 3 +from subprocess import check_output, STDOUT + + +@with_app(buildername='html', srcdir='doc_test/env_report_doc') +def test_doc_env_report_build_html(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text() + + assert '

Test-Env report' in html + assert 'Variable' in html + + tables = re.findall("()", html, re.DOTALL) + + assert len(tables) == 2 + + # All requested data should be in both tables + assert 'name' in tables[0] + assert 'path' in tables[0] + assert 'host' in tables[0] + + assert 'name' in tables[1] + assert 'path' in tables[1] + assert 'host' in tables[1] + + # table 0 should contain py35 + assert 'py35' in tables[0] + assert 'flake8' not in tables[0] + + # table 1 should contain flake8 + assert 'flake8' in tables[1] + assert 'py35' not in tables[1] + + +@with_app(buildername='html', srcdir='doc_test/env_report_doc_raw') +def test_doc_env_report_raw_build_html(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text() + + tables = re.findall("(
)", html, re.DOTALL) + assert len(tables) == 0 + + # only requested data should be in the output document + assert 'name' in html + assert 'path' in html + assert 'host' in html + assert 'installed_packages' not in html + + # only requested environment should be present in output document + assert 'py35' in html + assert 'flake8' in html + assert 'pylint' not in html + + +@with_app(buildername='html', srcdir='doc_test/env_report_doc_default') +def test_doc_env_report_default_build_html(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text() + + tables = re.findall("(
)", html, re.DOTALL) + assert len(tables) == 3 + + # checking if all env from JSON file is present in output or not in table format + assert 'pylint' in tables[0] or 'pylint' in tables[1] or 'pylint' in tables[2] + assert 'py35' in tables[0] or 'py35' in tables[1] or 'py35' in tables[2] + assert 'flake8' in tables[0] or 'flake8' in tables[1] or 'flake8' in tables[2] + assert 'py36' not in tables[0] or 'py36' not in tables[1] or 'py36' not in tables[2] + + # checking if all dataoptions are present in each output table or not + for table in tables: + assert 'path' in table + assert 'name' in table + assert 'reportversion' in table + assert 'host' in table + assert 'setup' in table + assert 'platform' in table + assert 'test' in table + assert 'toxversion' in table + assert 'python' in table + assert 'installed_packages' in table + assert 'installpkg' in table + + +@with_app(buildername='html', srcdir='doc_test/env_report_warnings') # , warningiserror=False, verbosity=2) +def test_doc_env_report_warning_build_html(app, status, warning): + + # it should pass all test cases from: test_doc_env_report_build_html + # generated output data will be stored here + output = str(check_output(["sphinx-build", "-a", "-E", "-b", "html", app.srcdir, app.outdir], + stderr=STDOUT, universal_newlines=True)) + # app.build() + html = (app.outdir / 'index.html').read_text() + + assert '

Test-Env report' in html + assert '

' in html + + tables = re.findall("(
Variable
)", html, re.DOTALL) + + assert len(tables) == 2 + + # All requested data should be in both tables + assert 'name' in tables[0] + assert 'path' in tables[0] + assert 'host' in tables[0] + + assert 'name' in tables[1] + assert 'path' in tables[1] + assert 'host' in tables[1] + + # table 0 should contain py35 + assert 'py35' in tables[0] + assert 'flake8' not in tables[0] + + # table 1 should contain flake8 + assert 'flake8' in tables[1] + assert 'py35' not in tables[1] + + """ + Taken from solution of this issue: + https://github.com/useblocks/sphinxcontrib-needs/issues/44 + """ + + if sphinx_version > 15: + assert "WARNING: environment 'defs' is not present in JSON file" in output + assert "WARNING: option 'abc' is not present in JSON file" in output + else: + assert "environment 'defs' is not present in JSON file" in output + assert "option 'abc' is not present in JSON file" in output \ No newline at end of file From 4302414b9cc3549911e3c00cfd0a90b1153da13a Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 7 Dec 2018 10:50:13 +0100 Subject: [PATCH 015/159] Better test-env doc --- packages/sphinx-test-reports/.gitignore | 4 +- packages/sphinx-test-reports/AUTHORS | 5 +- packages/sphinx-test-reports/docs/conf.py | 4 +- .../docs/directives/test_env.rst | 138 ++++++++++++++---- .../docs/directives/test_results.rst | 2 + packages/sphinx-test-reports/docs/index.rst | 68 ++++++--- packages/sphinx-test-reports/setup.py | 3 +- .../test_reports/test_reports.py | 2 +- .../tests/data/tox-report-short.json | 28 ++++ .../tests/data/tox-report.json | 52 +++---- .../sphinx-test-reports/tests/test_env.py | 4 +- packages/sphinx-test-reports/tox.ini | 1 - 12 files changed, 227 insertions(+), 84 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/data/tox-report-short.json diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index 5e607b032..8e25538ec 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -11,4 +11,6 @@ _build .cache/ .pytest_cache .coverage -.directory \ No newline at end of file +.directory + +{envlogdir} \ No newline at end of file diff --git a/packages/sphinx-test-reports/AUTHORS b/packages/sphinx-test-reports/AUTHORS index 5fc5f17a4..1e5bd27fc 100644 --- a/packages/sphinx-test-reports/AUTHORS +++ b/packages/sphinx-test-reports/AUTHORS @@ -1,4 +1,7 @@ Maintainers ----------- - Daniel Woste + +Contributors +------------ +Saifali Saiyyad \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 93808af79..ec26576c8 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -25,9 +25,9 @@ author = 'team useblocks' # The short X.Y version -version = '' +version = '0.2' # The full version, including alpha/beta/rc tags -release = '0.1' +release = '0.2' # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/docs/directives/test_env.rst b/packages/sphinx-test-reports/docs/directives/test_env.rst index 1f3f51774..8ed4b0390 100644 --- a/packages/sphinx-test-reports/docs/directives/test_env.rst +++ b/packages/sphinx-test-reports/docs/directives/test_env.rst @@ -1,38 +1,114 @@ +.. _test-env: + test-env -============ +======== + +Adds a table with information about the used test environment. +This can be operating system, used python version, installed package and much more. -This directive adds a table which shows tox-envreport.json, user can control output of this directive by adding specific options, -please see below example +This information needs to be provided via json-file. Currently **sphinx-test-reports** supports the output of +`tox-env-report `_ only. -How to use Example +tox based workflow ------------------ +#. Use `tox `_ for running your tests on different environments. +#. Install `tox-env-report `_. +#. Run your tests with tox +#. Locate generated file ``tox-envreport.json`` in your ``.tox`` folder +#. Use this file like ``.. test-env:: ../.tox/tox-envreport.json`` + +Options +------- + +.. contents:: + :local: + +data +~~~~ + +Use ``:data:`` to define which data shall be printed out. + +``:data:`` must contain a comma separated list and the requested data is the element key, which got stored in the +related dictionary of the requested environment. + +Sub-keys like ``python.version`` are currently not supported. + +**Example** + +.. code-block:: rst + + .. test-env:: ../.tox/tox-envreport.json + :data: hostname, python, toxversion + +Example of supported parameters (if using `tox-env-report `_): + +* name +* host +* installed_packages +* path +* platform +* reportversion +* setup +* test +* toxversion + +env +~~~ + +Prints out only the data of the given environment. ``:env:`` must be a comma separated list of environment names. + +The give name should exist in the given ``json-file``. + +**Example** + .. code-block:: rst - .. test-env: my/path/to/tox-envreport.json - :env: py35, flake8 - :data: name, host, installed_packages - -If ``:raw:`` flag is set all data is filtered according to ``:env:`` then ``:data:`` and shown in raw format -If any environment or data option is not present, it will throw a warning. - -Supported Parameters for ``:data:`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- name -- host -- installed_packages -- path -- platform -- reportversion -- setup -- test -- toxversion - -Example output -------------------- - -.. test-env:: ../tests/data/tox-report.json - :data: name, host, installed_packages , ,asd - :env: py35, flake8, , ads, - :raw: + .. test-env:: ../.tox/tox-envreport.json + :env: py27, py35, flake8 + +raw +~~~ + +``:raw:`` is a flag and if it is set, the output is a text interpretation of the json data. + +Other options like ``:data:`` and ``:env:`` can still be used to filter the output. + +**Example** + +.. code-block:: rst + + .. test-env:: ../.tox/tox-envreport.json + :raw: + +Examples +-------- + +Default output +~~~~~~~~~~~~~~ + +.. code-block:: rst + + .. test-env: my/path/to/tox-envreport-short.json + :env: py27 + :data: name, host, installed_packages + +.. test-env:: ../tests/data/tox-report-short.json + :data: name, host, installed_packages + :env: py27 + +Raw output +~~~~~~~~~~ + +.. code-block:: rst + + .. test-env: my/path/to/tox-envreport-short.json + :raw: + :env: py27 + :data: name, host, installed_packages + +.. test-env:: ../tests/data/tox-report-short.json + :raw: + :data: name, host, installed_packages + :env: py27 + diff --git a/packages/sphinx-test-reports/docs/directives/test_results.rst b/packages/sphinx-test-reports/docs/directives/test_results.rst index d901ec9b7..ca84c73fc 100644 --- a/packages/sphinx-test-reports/docs/directives/test_results.rst +++ b/packages/sphinx-test-reports/docs/directives/test_results.rst @@ -1,3 +1,5 @@ +.. _test-results: + test-results ============ diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 73837c472..4229c4cbe 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -27,24 +27,37 @@ Sphinx-Test-Reports Functions --------- -* Shows **test results** of *JUnit based xml reports* as table. +* By using :ref:`test-results` it shows **test results** of *JUnit based xml reports* as table. JUnit exports are supported by: * `pytest `_ * `nosetest `_ * Other test frameworks (including frameworks from java and co.) support also the JUnit format. -* Shows **test environment information** from `tox-envreport `_ +* By using :ref:`test-env` it shows **test environment information** + from `tox-envreport `_ based exports as table. (E.g. used operating system, python version, installed packages, ...) -.. note:: This plugin is in an early alpha phase and under heavy development. - -Example +Content ------- +.. toctree:: + :maxdepth: 2 + + directives/test_results + directives/test_env + changelog + + +Examples +-------- + +test result report +~~~~~~~~~~~~~~~~~~ + Input -~~~~~ ++++++ **my_data.xml** @@ -60,11 +73,41 @@ Input .. test-results:: my_data.xml Output -~~~~~~ +++++++ .. test-results:: ../tests/data/xml_data_2.xml +test env report +~~~~~~~~~~~~~~~ + +Input ++++++ +The following lines are just an excerpt of a json-file generated by +`tox-env-report `_. + +**tox-reports.json** + +.. literalinclude:: ../tests/data/tox-report-short.json + :language: json + + +**my_documents.rst** + +.. code-block:: rst + + .. test-env:: ../tests/data/tox-report-short.json + :data: name, host, installed_packages, path + :env: py27 + +Output +++++++ + +.. test-env:: ../tests/data/tox-report-short.json + :data: name, host, installed_packages, path + :env: py27 + + Motivation ---------- ``Sphinx-Test-Reports`` was created for an automotive project, which needs to document test results and their used @@ -78,14 +121,3 @@ for safety critical software in automotive companies. Other tools are: `sphinx-needs `_ and `tox-envreport `_ - -Content -------- - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - directives/test_results - directives/test_env - changelog diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index c1982b7b7..6dccfadf6 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,8 +8,7 @@ setup( name='sphinx-test-reports', - # If you raise, think about versions in conf.py and needs.py!!! - version='0.1.0', + version='0.2.0', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 6be9e39aa..58f079930 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -36,4 +36,4 @@ def setup(app): # events app.connect('env-updated', install_styles_static_files) - return {'version': '0.1.0'} # identifies the version of our extension + return {'version': '0.2.0'} # identifies the version of our extension diff --git a/packages/sphinx-test-reports/tests/data/tox-report-short.json b/packages/sphinx-test-reports/tests/data/tox-report-short.json new file mode 100644 index 000000000..633ff0cf4 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/tox-report-short.json @@ -0,0 +1,28 @@ +{ + "py27": { + "host": "user_abc", + "installed_packages": [ + "arrow==0.10.0", + "atomicwrites==1.2.1" + ], + "installpkg": { + "basename": "erc_e2e-0.1.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" + }, + "name": "py35", + "path": "/home/user_abc/projects/sphinx-test-reports", + "platform": "linux", + "python": { + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + } + } +} diff --git a/packages/sphinx-test-reports/tests/data/tox-report.json b/packages/sphinx-test-reports/tests/data/tox-report.json index bce5c751a..6b5e5c2c4 100644 --- a/packages/sphinx-test-reports/tests/data/tox-report.json +++ b/packages/sphinx-test-reports/tests/data/tox-report.json @@ -1,6 +1,6 @@ { "flake8": { - "host": "saif-HP-ProBook-6470b", + "host": "user_abc", "installed_packages": [ "arrow==0.10.0", "attrs==18.2.0", @@ -12,7 +12,7 @@ "cookiecutter==1.5.1", "docutils==0.14", "envparse==0.2.0", - "erc-e2e==0.1.0", + "project==0.1.0", "flake8==3.5.0", "flake8-blind-except==0.1.1", "flake8-bugbear==18.2.0", @@ -60,15 +60,15 @@ "whichcraft==0.4.1" ], "installpkg": { - "basename": "erc_e2e-0.1.0.zip", + "basename": "project_1.2.0.zip", "md5": "df03855c61c10ddd32f2c888856cc51e", "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" }, "name": "flake8", - "path": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8", + "path": "/home/user_abc/projects/sphinx-test-reports/.tox/flake8", "platform": "linux", "python": { - "executable": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/python", + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python", "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", "version_info": [ 3, @@ -82,19 +82,19 @@ "setup": [ { "command": [ - "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/python", + "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python", "-m", "pip", "freeze" ], - "output": "actionid: flake8\nmsg: envreport\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/python -m pip freeze'\n\narrow==0.10.0\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\ncertifi==2018.4.16\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ndocutils==0.14\nenvparse==0.2.0\nerc-e2e==0.1.0\nflake8==3.5.0\nflake8-blind-except==0.1.1\nflake8-bugbear==18.2.0\nflake8-builtins==1.1.1\nflake8-commas==2.0.0\nflake8-comprehensions==1.4.1\nflake8-debugger==3.1.0\nflake8-deprecated==1.3\nflake8-docstrings==1.3.0\nflake8-formatter-abspath==1.0.1\nflake8-import-order==0.17.1\nflake8-mutable==1.2.0\nflake8-pep3101==1.2\nflake8-per-file-ignores==0.6\nflake8-polyfill==1.0.2\nflake8-quotes==0.14.0\nflake8-rst-docstrings==0.0.8\nflake8-string-format==0.2.3\nflake8-tidy-imports==1.1.0\nflake8-tuple==0.2.13\nfuture==0.16.0\ngroundwork==0.1.13\nidna==2.6\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nnose==1.3.7\npathlib==1.0.1\npathmatch==0.2.1\npoyo==0.4.1\npycodestyle==2.3.1\npydocstyle==3.0.0\npyflakes==1.6.0\npython-dateutil==2.6.1\nrequests==2.18.4\nrestructuredtext-lint==1.2.1\nsix==1.11.0\nsnowballstemmer==1.2.1\nsvn==0.3.45\ntyping==3.6.6\nurllib3==1.22\nwhichcraft==0.4.1\n", + "output": "actionid: flake8\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python -m pip freeze'\n\narrow==0.10.0\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\ncertifi==2018.4.16\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nflake8==3.5.0\nflake8-blind-except==0.1.1\nflake8-bugbear==18.2.0\nflake8-builtins==1.1.1\nflake8-commas==2.0.0\nflake8-comprehensions==1.4.1\nflake8-debugger==3.1.0\nflake8-deprecated==1.3\nflake8-docstrings==1.3.0\nflake8-formatter-abspath==1.0.1\nflake8-import-order==0.17.1\nflake8-mutable==1.2.0\nflake8-pep3101==1.2\nflake8-per-file-ignores==0.6\nflake8-polyfill==1.0.2\nflake8-quotes==0.14.0\nflake8-rst-docstrings==0.0.8\nflake8-string-format==0.2.3\nflake8-tidy-imports==1.1.0\nflake8-tuple==0.2.13\nfuture==0.16.0\ngroundwork==0.1.13\nidna==2.6\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nnose==1.3.7\npathlib==1.0.1\npathmatch==0.2.1\npoyo==0.4.1\npycodestyle==2.3.1\npydocstyle==3.0.0\npyflakes==1.6.0\npython-dateutil==2.6.1\nrequests==2.18.4\nrestructuredtext-lint==1.2.1\nsix==1.11.0\nsnowballstemmer==1.2.1\nsvn==0.3.45\ntyping==3.6.6\nurllib3==1.22\nwhichcraft==0.4.1\n", "retcode": "0" } ], "test": [ { "command": [ - "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/flake8/bin/flake8" + "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/flake8" ], "output": null, "retcode": "0" @@ -103,7 +103,7 @@ "toxversion": "3.5.3" }, "py35": { - "host": "saif-HP-ProBook-6470b", + "host": "user_abc", "installed_packages": [ "arrow==0.10.0", "atomicwrites==1.2.1", @@ -120,7 +120,7 @@ "decorator==4.3.0", "docutils==0.14", "envparse==0.2.0", - "erc-e2e==0.1.0", + "project==0.1.0", "filelock==3.0.10", "Flask==1.0.2", "future==0.16.0", @@ -162,15 +162,15 @@ "yamldirs==1.1.3" ], "installpkg": { - "basename": "erc_e2e-0.1.0.zip", + "basename": "project_1.2.0.zip", "md5": "df03855c61c10ddd32f2c888856cc51e", "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" }, "name": "py35", - "path": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35", + "path": "/home/user_abc/projects/sphinx-test-reports/.tox/py35", "platform": "linux", "python": { - "executable": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python", + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", "version_info": [ 3, @@ -184,25 +184,25 @@ "setup": [ { "command": [ - "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python", + "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", "-m", "pip", "install", "--no-deps", "-U", - "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/.tmp/package/1/erc_e2e-0.1.0.zip" + "/home/user_abc/projects/sphinx-test-reports/.tox/.tmp/package/1/project_1.2.0.zip" ], - "output": "actionid: py35\nmsg: installpkg\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python -m pip install --no-deps -U /home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/.tmp/package/1/erc_e2e-0.1.0.zip'\n\nProcessing ./.tox/.tmp/package/1/erc_e2e-0.1.0.zip\nBuilding wheels for collected packages: erc-e2e\n Running setup.py bdist_wheel for erc-e2e: started\n Running setup.py bdist_wheel for erc-e2e: finished with status 'done'\n Stored in directory: /home/saif/.cache/pip/wheels/f7/81/bb/85d03f88c7253c16a001851c961b6ed0a084ca296a0b5d296a\nSuccessfully built erc-e2e\nInstalling collected packages: erc-e2e\n Found existing installation: erc-e2e 0.1.0\n Not uninstalling erc-e2e at /home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e, outside environment /home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35\n Can't uninstall 'erc-e2e'. No files were found to uninstall.\nSuccessfully installed erc-e2e-0.1.0\n", + "output": "actionid: py35\nmsg: installpkg\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python -m pip install --no-deps -U /home/user_abc/projects/sphinx-test-reports/.tox/.tmp/package/1/project_1.2.0.zip'\n\nProcessing ./.tox/.tmp/package/1/project_1.2.0.zip\nBuilding wheels for collected packages: project\n Running setup.py bdist_wheel for project: started\n Running setup.py bdist_wheel for project: finished with status 'done'\n Stored in directory: /home/user_abc/.cache/pip/wheels/f7/81/bb/85d03f88c7253c16a001851c961b6ed0a084ca296a0b5d296a\nSuccessfully built project\nInstalling collected packages: project\n Found existing installation: project 0.1.0\n Not uninstalling project at /home/user_abc/projects/sphinx-test-reports, outside environment /home/user_abc/projects/sphinx-test-reports/.tox/py35\n Can't uninstall 'project'. No files were found to uninstall.\nSuccessfully installed project-0.1.0\n", "retcode": "0" }, { "command": [ - "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python", + "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", "-m", "pip", "freeze" ], - "output": "actionid: py35\nmsg: envreport\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/py35/bin/python -m pip freeze'\n\narrow==0.10.0\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nerc-e2e==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\ngw-utils==0.2.3\nhttpbin==0.7.0\nidna==2.6\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npyelftools===0.24-st1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nyamldirs==1.1.3\n", + "output": "actionid: py35\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python -m pip freeze'\n\narrow==0.10.0\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\ngw-utils==0.2.3\nhttpbin==0.7.0\nidna==2.6\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npyelftools===0.24-st1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nyamldirs==1.1.3\n", "retcode": "0" } ], @@ -210,7 +210,7 @@ "toxversion": "3.5.3" }, "pylint": { - "host": "saif-HP-ProBook-6470b", + "host": "user_abc", "installed_packages": [ "arrow==0.10.0", "astroid==2.0.4", @@ -228,7 +228,7 @@ "decorator==4.3.0", "docutils==0.14", "envparse==0.2.0", - "erc-e2e==0.1.0", + "project==0.1.0", "filelock==3.0.10", "Flask==1.0.2", "future==0.16.0", @@ -274,15 +274,15 @@ "yamldirs==1.1.3" ], "installpkg": { - "basename": "erc_e2e-0.1.0.zip", + "basename": "project_1.2.0.zip", "md5": "df03855c61c10ddd32f2c888856cc51e", "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" }, "name": "pylint", - "path": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint", + "path": "/home/user_abc/projects/sphinx-test-reports/.tox/pylint", "platform": "linux", "python": { - "executable": "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint/bin/python", + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python", "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", "version_info": [ 3, @@ -296,12 +296,12 @@ "setup": [ { "command": [ - "/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint/bin/python", + "/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python", "-m", "pip", "freeze" ], - "output": "actionid: pylint\nmsg: envreport\ncmdargs: '/home/saif/JC_env/Main_task/ascgit307.erc/erc_e2e/.tox/pylint/bin/python -m pip freeze'\n\narrow==0.10.0\nastroid==2.0.4\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nerc-e2e==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\nhttpbin==0.7.0\nidna==2.6\nisort==4.3.4\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlazy-object-proxy==1.3.1\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npylint==2.1.1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyped-ast==1.1.0\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nwrapt==1.10.11\nyamldirs==1.1.3\n", + "output": "actionid: pylint\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python -m pip freeze'\n\narrow==0.10.0\nastroid==2.0.4\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\nhttpbin==0.7.0\nidna==2.6\nisort==4.3.4\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlazy-object-proxy==1.3.1\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npylint==2.1.1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyped-ast==1.1.0\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nwrapt==1.10.11\nyamldirs==1.1.3\n", "retcode": "0" } ], @@ -310,7 +310,7 @@ "command": [ "/bin/bash", "-c", - "set -o pipefail && pylint -f parseable --msg-template \"{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\" erc_e2e tests | tee pylint.log" + "set -o pipefail && pylint -f parseable --msg-template \"{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\" project tests | tee pylint.log" ], "output": null, "retcode": "0" diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index 168f929e6..cb3017c5d 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -75,6 +75,8 @@ def test_doc_env_report_default_build_html(app, status, warning): assert len(tables) == 3 # checking if all env from JSON file is present in output or not in table format + # AS it is not clearm in which order the tablesget printed, we need to check all of them + # for the needed test case assert 'pylint' in tables[0] or 'pylint' in tables[1] or 'pylint' in tables[2] assert 'py35' in tables[0] or 'py35' in tables[1] or 'py35' in tables[2] assert 'flake8' in tables[0] or 'flake8' in tables[1] or 'flake8' in tables[2] @@ -139,4 +141,4 @@ def test_doc_env_report_warning_build_html(app, status, warning): assert "WARNING: option 'abc' is not present in JSON file" in output else: assert "environment 'defs' is not present in JSON file" in output - assert "option 'abc' is not present in JSON file" in output \ No newline at end of file + assert "option 'abc' is not present in JSON file" in output diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini index df875a419..032f19438 100644 --- a/packages/sphinx-test-reports/tox.ini +++ b/packages/sphinx-test-reports/tox.ini @@ -13,7 +13,6 @@ commands= py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests - usedevelop=True From 9cafb0912fa391ebefd471b6b86db73b3e7a1f5f Mon Sep 17 00:00:00 2001 From: Peter Tillemans Date: Mon, 26 Aug 2019 18:48:09 +0200 Subject: [PATCH 016/159] skip testsuites element if present --- .../sphinxcontrib/test_reports/junitparser.py | 2 + .../tests/data/pytest_data_5_1.xml | 93 +++++++++++++++++++ .../tests/test_junit_parser.py | 13 +++ 3 files changed, 108 insertions(+) create mode 100644 packages/sphinx-test-reports/tests/data/pytest_data_5_1.xml diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 0210136e0..3633cedb6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -20,6 +20,8 @@ def __init__(self, junit_xml, junit_xsd=None): self.junit_xml_string = etree.tostring(self.junit_xml_doc) self.junit_xml_object = objectify.fromstring(self.junit_xml_string) + if self.junit_xml_object.tag == 'testsuites': + self.junit_xml_object = self.junit_xml_object.testsuite self.junit_xml_string = str(self.junit_xml_string) def validate(self): diff --git a/packages/sphinx-test-reports/tests/data/pytest_data_5_1.xml b/packages/sphinx-test-reports/tests/data/pytest_data_5_1.xml new file mode 100644 index 000000000..1a429b924 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/pytest_data_5_1.xml @@ -0,0 +1,93 @@ + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a8a0e950> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a8a0ea10> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a8497450> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a8497c10> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a84a2350> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a84a2a50> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a84a2cd0> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a84ae250> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a84ae950> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: + <py._xmlgen.raw object at 0x7fd5a84bf090> + + + + diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 1c67ef32e..dbba6ce85 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -2,6 +2,9 @@ import os xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") xml_pytest_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data.xml") +xml_pytest51_path = os.path.join(os.path.dirname(__file__), + "data", + "pytest_data_5_1.xml") xml_nose_path = os.path.join(os.path.dirname(__file__), "data", "nose_data.xml") @@ -70,3 +73,13 @@ def test_parse_pytest_xml(): assert results[0]["testcases"][0]["time"] == "0.000252246856689" assert results[0]["testcases"][0]["line"] == "-1" assert results[0]["testcases"][0]["file"] == "setup.py" + + +def test_parse_pytest_51_xml(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_pytest51_path) + assert hasattr(parser, "parse") + results = parser.parse() + + assert len(results) == 1 + assert results[0]["name"] == "pytest" From c7cc20287498fee57a87a20b81ebd5b1e08155f3 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Tue, 27 Aug 2019 07:08:59 +0200 Subject: [PATCH 017/159] Raised version to 0.2.1 --- packages/sphinx-test-reports/AUTHORS | 3 ++- packages/sphinx-test-reports/docs/changelog.rst | 6 ++++++ packages/sphinx-test-reports/setup.py | 6 ++---- packages/sphinx-test-reports/tox.ini | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/sphinx-test-reports/AUTHORS b/packages/sphinx-test-reports/AUTHORS index 1e5bd27fc..bcd31ac5f 100644 --- a/packages/sphinx-test-reports/AUTHORS +++ b/packages/sphinx-test-reports/AUTHORS @@ -4,4 +4,5 @@ Daniel Woste Contributors ------------ -Saifali Saiyyad \ No newline at end of file +Peter Tillemans +Saifali Saiyyad diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 86e5d40e4..2143125cb 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,6 +1,12 @@ Changelog ========= +0.2.1 +----- +* Skipped support für Python < 3.5. +* Bugfix: junit-file-format of pytest > 5.1.0 supported. `#8 `_ + + 0.2.0 ----- diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 6dccfadf6..0d70b9757 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,7 +8,7 @@ setup( name='sphinx-test-reports', - version='0.2.0', + version='0.2.1', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', @@ -24,12 +24,10 @@ 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Topic :: Documentation', 'Topic :: Utilities', ], diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini index 032f19438..30919d1c5 100644 --- a/packages/sphinx-test-reports/tox.ini +++ b/packages/sphinx-test-reports/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{27,34,35,36}-sphinx{15,16,17} +envlist = py{35,36,37}-sphinx{15,16,17} [testenv] passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH @@ -22,4 +22,4 @@ flake8-ignore = docs/_themes/* ALL __init__.py F401 groundwork/recipes/* E999 E227 - bootstrap.py E402 F811 \ No newline at end of file + bootstrap.py E402 F811 From 132dad61ecafe40ca7319807d64971b1b0140890 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Tue, 27 Aug 2019 07:10:34 +0200 Subject: [PATCH 018/159] Removes py2.7 and 3.4 from travis config --- packages/sphinx-test-reports/.travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/.travis.yml b/packages/sphinx-test-reports/.travis.yml index 8bbdca942..bf9bee28d 100644 --- a/packages/sphinx-test-reports/.travis.yml +++ b/packages/sphinx-test-reports/.travis.yml @@ -2,10 +2,9 @@ os: - linux language: python python: -- '2.7' -- '3.4' - '3.5' - '3.6' +- '3.7' install: - pip install tox-travis - python setup.py install From dacfed9b8f63b5136e5dcf1404cc8a60457e52a0 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Tue, 12 Nov 2019 14:38:47 +0100 Subject: [PATCH 019/159] Adds test_file, test_suite and test_case directives --- packages/sphinx-test-reports/docs/conf.py | 18 +- .../docs/directives/index.rst | 11 ++ .../docs/directives/test_case.rst | 77 +++++++++ .../docs/directives/test_file.rst | 97 +++++++++++ .../docs/directives/test_suite.rst | 62 +++++++ packages/sphinx-test-reports/docs/filter.rst | 128 ++++++++++++++ packages/sphinx-test-reports/docs/index.rst | 4 +- .../sphinxcontrib/__init__.py | 1 + .../sphinxcontrib/test_reports/__init__.py | 3 +- .../test_reports/directives/__init__.py | 4 + .../test_reports/directives/test_case.py | 86 ++++++++++ .../test_reports/directives/test_common.py | 88 ++++++++++ .../test_reports/directives/test_file.py | 56 +++++++ .../test_reports/directives/test_results.py | 4 +- .../test_reports/directives/test_suite.py | 69 ++++++++ .../sphinxcontrib/test_reports/exceptions.py | 19 +++ .../sphinxcontrib/test_reports/junitparser.py | 20 ++- .../test_report.py => needs/__init__.py} | 0 .../test_reports/needs/dyn_functions.py | 90 ++++++++++ .../test_reports/test_reports.py | 45 ++++- .../doc_test/env_report_warnings/conf.py | 1 - .../doc_test/needs_dyn_function_doc/Makefile | 20 +++ .../doc_test/needs_dyn_function_doc/conf.py | 157 ++++++++++++++++++ .../doc_test/needs_dyn_function_doc/index.rst | 19 +++ .../doc_test/needs_dyn_function_doc/make.bat | 36 ++++ .../tests/test_needs_dyn_func.py | 7 + 26 files changed, 1107 insertions(+), 15 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/directives/index.rst create mode 100644 packages/sphinx-test-reports/docs/directives/test_case.rst create mode 100644 packages/sphinx-test-reports/docs/directives/test_file.rst create mode 100644 packages/sphinx-test-reports/docs/directives/test_suite.rst create mode 100644 packages/sphinx-test-reports/docs/filter.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py rename packages/sphinx-test-reports/sphinxcontrib/test_reports/{directives/test_report.py => needs/__init__.py} (100%) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat create mode 100644 packages/sphinx-test-reports/tests/test_needs_dyn_func.py diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index ec26576c8..4108257a7 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -15,6 +15,7 @@ # import os # import sys import datetime +import os # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- @@ -39,12 +40,27 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.test_reports"] +extensions = ["sphinxcontrib.needs", + "sphinxcontrib.test_reports", + 'sphinxcontrib.plantuml'] + +cwd = os.getcwd() +plantuml = 'java -jar %s' % os.path.join(cwd, "utils/plantuml_beta.jar") + +# If we are running on windows, we need to manipulate the path, +# otherwise plantuml will have problems. +if os.name == "nt": + plantuml = plantuml.replace("/", "\\") + plantuml = plantuml.replace("\\", "\\\\") + +plantuml_output_format = 'png' # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] + + # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # diff --git a/packages/sphinx-test-reports/docs/directives/index.rst b/packages/sphinx-test-reports/docs/directives/index.rst new file mode 100644 index 000000000..f01925d0d --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/index.rst @@ -0,0 +1,11 @@ +Directives +========== + +.. toctree:: + :maxdepth: 2 + + test_file + test_suite + test_case + test_results + test_env diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst new file mode 100644 index 000000000..3136b3d89 --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -0,0 +1,77 @@ +.. _test-case: + +test-case +========== + +``test-case`` loads the data from a given file path in ``file`` for a specified test case. + +Usage +..... + +.. code-block:: rst + + .. test-case:: My Test Suite + :file: my_test_data.xml + :suite: my_tested_suite + :case: my_case + :classname: my_test_class + :id: TESTCASE_1 + + +The following options can be set: + +* **id**: Unique id for the test file. If not given, generated from title. +* **file**: file path to test file. If relative, the location of ``conf.py`` folder is taken as base-folder. +* **suite**: Name of the suite. +* **case**: Name of the case. +* **classname**: Name of the test class, which contains the case. +* **status**: A status as string. +* **tags**: A comma-separated list of strings. +* **links**: A comma-separated list of IDs to other documented test_files / needs-objects. +* **collapse**: If set to "TRUE", meta data is collapsed. Can also be set to "FALSE". + +As different test-frameworks handle the values for test-name and test-classname differently, it is allowed +to specify only ``case`` or ``classname``. It depends on the loaded test-data, if this results in a unique test-case +or if it selects only the first found test case. The best case is to always try to specify both values, ``case`` and +``classname``. + +``test-suite`` creates a need of type ``Test-Suite`` and adds the following options automatically: + +* **result**: Result of the test case run. E.g passed or failed. +* **time**: Needed time for running the test case + +These options can also be used to :ref:`filter for certain Test-Files `. + +Example +------- + +.. code-block:: rst + + .. test-case:: Flake8 test case + :file: ../tests/data/pytest_data.xml + :suite: pytest + :id: TESTCASE_1 + + A test suite, containing the results of the suite ooly. + + +.. test-case:: Flake8 test case + :id: TESTCASE_1 + :file: ../tests/data/pytest_data.xml + :suite: pytest + :classname: sphinxcontrib.test_reports.test_reports + :case: FLAKE8 + :links: TESTSUITE_1 + + A pytest test case. + +.. test-case:: nose test case + :file: ../tests/data/nose_data.xml + :suite: nosetests + :classname: test_empty_doc + :id: TESTCASE_2 + + A nosetest test case. + + + diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst new file mode 100644 index 000000000..d0dabd8d6 --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -0,0 +1,97 @@ +.. _test-file: + +test-file +========= + +``test_file`` loads the data from a given file path in ``file``. + +Usage +..... + +.. code-block:: rst + + .. test-file:: My Test Data + :file: my_test_data.xml + :id: TESTFILE_1 + + +The following options can be set: + +* **id**: Unique id for the test file. If not given, generated from title. +* **file**: file path to test file. If relative, the location of ``conf.py`` folder is taken as base-folder. +* **status**: A status as string. +* **tags**: A comma-separated list of strings. +* **links**: A comma-separated list of IDs to other documented test_files / needs-objects. +* **collapse**: If set to "TRUE", meta data is collapsed. Can also be set to "FALSE". + +``test_file`` creates a need of type ``Test-File`` and adds the following options automatically: + +* **suites**: Amount of found suites in test file. +* **cases**: Amount of found cases in test file. +* **passed**: Amount of passed test cases. +* **skipped**: Amount of skipped test cases. +* **failed**: Amount of failed test cases. +* **errors**: Amount of test cases which have errors during tet execution. + +These options can also be used to :ref:`filter for certain Test-Files `. + +Example +------- + +.. code-block:: rst + + .. test-file:: common xml test data + :file: ../tests/data/xml_data.xml + :id: TESTFILE_1 + + This test_file has very common data. + Some options are net set, therefore their value is ``-1`` + + .. test-file:: pytest test data + :file: ../tests/data/pytest_data.xml + :id: TESTFILE_2 + :links: TESTFILE_1 + + This test_file was created by `pytest `_. + + .. test-file:: nose test data + :file: ../tests/data/nose_data.xml + :id: TESTFILE_3 + :links: TESTFILE_1 + :status: open + :tags: pytest, data, awesome + :collapse: FALSE + + This test_file was created by `nosetest `_. + + ``collapse`` was set to False, therefor we see its data directly. + Also ``status`` and ``tags`` are set. + + +.. test-file:: common xml test data + :file: ../tests/data/xml_data.xml + :id: TESTFILE_1 + + This test_file has very common data. + Some options are net set, therefore their value is ``-1`` + +.. test-file:: pytest test data + :file: ../tests/data/pytest_data.xml + :id: TESTFILE_2 + :links: TESTFILE_1 + + This test_file was created by `pytest `_. + +.. test-file:: nose test data + :file: ../tests/data/nose_data.xml + :id: TESTFILE_3 + :links: TESTFILE_1 + :status: open + :tags: pytest, data, awesome + :collapse: FALSE + + This test_file was created by `nosetest `_. + + ``collapse`` was set to False, therefor we see its data directly. + Also ``status`` and ``tags`` are set. + diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst new file mode 100644 index 000000000..b5bb988f8 --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -0,0 +1,62 @@ +.. _test-suite: + +test-suite +========== + +``test-suite`` loads the data from a given file path in ``file`` for a specified suite. + +Usage +..... + +.. code-block:: rst + + .. test-suite:: My Test Suite + :file: my_test_data.xml + :suite: my_tested_suite + :id: TESTSUITE_1 + + +The following options can be set: + +* **id**: Unique id for the test file. If not given, generated from title. +* **file**: file path to test file. If relative, the location of ``conf.py`` folder is taken as base-folder. +* **suite**: Name of the suite. +* **status**: A status as string. +* **tags**: A comma-separated list of strings. +* **links**: A comma-separated list of IDs to other documented test_files / needs-objects. +* **collapse**: If set to "TRUE", meta data is collapsed. Can also be set to "FALSE". + +``test-suite`` creates a need of type ``Test-Suite`` and adds the following options automatically: + +* **cases**: Amount of found cases in test file. +* **passed**: Amount of passed test cases. +* **skipped**: Amount of skipped test cases. +* **failed**: Amount of failed test cases. +* **errors**: Amount of test cases which have errors during tet execution. +* **time**: Needed time for running all test cases in suite. + +These options can also be used to :ref:`filter for certain Test-Files `. + +Example +------- + +.. code-block:: rst + + .. test-suite:: Flake8 results during pytest-run + :file: ../tests/data/pytest_data.xml + :suite: pytest + :id: TESTSUITE_1 + + A test suite, containing the results of the suite ooly. + + +.. test-suite:: Flake8 results during pytest-run + :file: ../tests/data/pytest_data.xml + :suite: pytest + :id: TESTSUITE_1 + :links: TESTFILE_2 + + A test suite, containing the results of the suite only. + + + diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst new file mode 100644 index 000000000..c88a55401 --- /dev/null +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -0,0 +1,128 @@ +.. _filter: + +Filtering Test Data +=================== + +You can filter the documented test-data by using the directives +`needlist `_, +`needtable `_ and +`needflow `_. + +These filter functions and others are provided by the Sphinx extension +`Sphinx-Needs `_. +Take a look to figure out what else is possible to customize your way of working with test cases. + +.. contents:: Contents + :local: + +Filterable data +--------------- +``Sphinx-Test-Reports`` adds to following data to a sphinx-need-configuration: + +* **Types** + + * test-file + * test_suite + * test_case + +* **Options** + + * **file**: Test file path. + * **suite**: Test suite name. + * **case**: Test case name. + * **suites**: Amount of test suites found inside a test file. + * **cases**: Amount of test cases found inside a test file. + * **passed**: Amount of passed test cases. + * **skipped**: Amount of skipped test cases. + * **errors**: Amount of test cases with errors during execution. + * **failed**: Amount of failed test cases. + +Not all options are set for all created needs. +E.g. ``test_file`` doesn't include ``case``, as it is not related to a single test case. + +The filtering possibilities are really powerful, so take a look into +`Filtering needs `_ to figure out how to get +most out of your test data. + +.. _needtable_filter: + +needtable - A table for all tests +--------------------------------- + +``needtable`` provides a feature-rich table of the needed test data. + +Use it like:: + + + .. needtable:: + :types: Test-File + :columns: id, file, suites, cases, passed + +We set ``types`` to ``test_file`` to document needs-objects from this type only. +``Sphinx-Test-Reports`` provides also ``test_suite`` and ``test_case``. + +With ``columns`` we can specify which data of a ``test_file`` we want to see. + + +**Example** + +.. needtable:: + :types: Test-File + :columns: id, file, suites, cases, passed + +.. _needlist_filter: + +needlist - A simple list +------------------------ + +``needlist`` provides a simple list of the filtered test-needs. + +The filter possibilities are the same as for :ref:`needtable ` and :ref:`needflow `. + +Usage:: + + .. needlist:: + :types: Test-File + :filter: cases.isdigit() and int(cases) > 4 + +``filter`` supports complex-filter operations by using a Python-statement. +In this case, we check that the ``cases`` value contains a number and this number must ne bigger as 4. + +Take a look into the +`Filter string section `_ +of the Sphinx-Needs documentations for more details and ideas how to use it. + + +**Example** + +.. needlist:: + :types: Test-File + :filter: cases.isdigit() and int(cases) >= 5 + + + +.. _needflow_filter: + +needflow - Flow charts of linked test data +------------------------------------------ + +``needflow`` draws a picture of the filtered need-objects and their connections/links. + +.. note:: + + This features needs the installed and configured sphinx-extension + `sphinxcontrib-plantuml `_. + +Usage:: + + .. needflow:: + :types: Test-File, Test-Suite, Test-Case + :filter: len(links) > 0 or len(links_back) > 0 + +The used ``:filter:`` allows needs only, if they have an outgoing or incoming link. + +**Example** + +.. needflow:: + :types: Test-File, Test-Suite, Test-Case + :filter: len(links) > 0 or len(links_back) > 0 diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 4229c4cbe..24f8e8bd2 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -45,8 +45,8 @@ Content .. toctree:: :maxdepth: 2 - directives/test_results - directives/test_env + directives/index + filter changelog diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py index de40ea7ca..8d17c21ca 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/__init__.py @@ -1 +1,2 @@ __import__('pkg_resources').declare_namespace(__name__) + diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index 45eeb8a7e..f546f90b7 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -1 +1,2 @@ -from sphinxcontrib.test_reports.test_reports import setup # NOQA +# from sphinxcontrib.test_reports.needs.dyn_functions import Results4Needs +from sphinxcontrib.test_reports.test_reports import setup diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py index e69de29bb..8d4189291 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py @@ -0,0 +1,4 @@ +from .test_common import TestCommonDirective +from .test_file import TestFileDirective, TestFile +from .test_suite import TestSuiteDirective, TestSuite +from .test_case import TestCaseDirective, TestCase diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py new file mode 100644 index 000000000..a3b3fbc3a --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -0,0 +1,86 @@ +import hashlib +import os +from docutils import nodes +from docutils.parsers.rst import Directive, directives + +from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption +from sphinxcontrib.needs.api import add_need + + +class TestCase(nodes.General, nodes.Element): + pass + + +class TestCaseDirective(TestCommonDirective): + """ + Directive for showing test suites. + """ + has_content = True + required_arguments = 1 + optional_arguments = 0 + option_spec = {'id': directives.unchanged_required, + 'status': directives.unchanged_required, + 'tags': directives.unchanged_required, + 'links': directives.unchanged_required, + 'collapse': directives.unchanged_required, + 'file': directives.unchanged_required, + 'suite': directives.unchanged_required, + 'case': directives.unchanged_required, + 'classname': directives.unchanged_required, + } + + final_argument_whitespace = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + self.prepare_basic_options() + self.load_test_file() + + suite_name = self.options.get('suite', None) + if suite_name is None: + raise TestReportInvalidOption('Suite not given!') + + case_name = self.options.get('case', None) + class_name = self.options.get('classname', None) + if case_name is None and class_name is None: + raise TestReportInvalidOption('Case or classname not given!') + + suite = None + for suite_obj in self.results: + if suite_obj['name'] == suite_name: + suite = suite_obj + break + + if suite is None: + raise TestReportInvalidOption('Suite {} not found in test file {}'.format(suite_name, self.test_file)) + + case = None + for case_obj in suite['testcases']: + if case_obj['name'] == case_name and class_name is None: + case = case_obj + elif case_obj['classname'] == class_name and case_name is None: + case = case_obj + break + elif case_obj['name'] == case_name and case_obj['classname'] == class_name: + case = case_obj + break + + if case is None: + raise TestReportInvalidOption('Case {} with classname {} not found in test file {} ' + 'and testsuite {}'.format(case_name, class_name, self.test_file, suite_name)) + + result = case['result'] + content = self.test_content + '\n\n**Text**: {}\n\n**Message**: {}'.format(case['text'], case['message']) + time = case['time'] + main_section = [] + docname = self.state.document.settings.env.docname + main_section += add_need(self.env.app, self.state, docname, self.lineno, + need_type="testcase", title=self.test_name, id=self.test_id, + content=content, links=self.test_links, tags=self.test_tags, + status=self.test_status, collapse=self.collapse, + file=self.test_file_given, suite=suite['name'], case=case_name, classname=class_name, + result=result, time=time) + return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py new file mode 100644 index 000000000..5cb9be234 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -0,0 +1,88 @@ +""" +A Common directive, from which all other test directives inherit the shared functions. +""" +import hashlib +import os +from docutils.parsers.rst import Directive + +from sphinxcontrib.needs.api import make_hashed_id + +from sphinxcontrib.test_reports.junitparser import JUnitParser +from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException, TestReportFileInvalidException + + +class TestCommonDirective(Directive): + """ + Common directive, which provides some shared functions to "real" directives. + """ + def __init__(self, *args, **kwargs): + super(TestCommonDirective, self).__init__(*args, **kwargs) + self.env = self.state.document.settings.env + if not hasattr(self.env, 'testreport_data'): + self.env.testreport_data = {} + + self.test_file = None + self.results = None + self.docname = None + self.test_name = None + self.test_id = None + self.test_content = None + self.test_file_given = None + self.test_links = None + self.test_tags = None + self.test_status = None + self.collapse = None + + def load_test_file(self): + """ + Loads the defined test_file under self.test_file. + + ``prepare_basic_options`` must be called first + + :return: None + """ + if self.test_file is None: + raise TestReportFileNotSetException('Option test_file must be set.') + + root_path = self.env.app.config.test_reports_rootdir + if not os.path.isabs(self.test_file): + self.test_file = os.path.join(root_path, self.test_file) + if not os.path.exists(self.test_file): + raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) + + if self.test_file not in self.env.testreport_data.keys(): + parser = JUnitParser(self.test_file) + self.env.testreport_data[self.test_file] = parser.parse() + + self.results = self.env.testreport_data[self.test_file] + return self.results + + def prepare_basic_options(self): + """ + Reads and checks the needed basic data like name, id, links, status, ... + :return: None + """ + self.docname = self.state.document.settings.env.docname + + self.test_name = self.arguments[0] + self.test_content = "\n".join(self.content) + need_type = self.name.replace('-', '').replace('_', '') + self.test_id = self.options.get('id', make_hashed_id(self.env.app, need_type, self.test_name, self.test_content)) + + self.test_file = self.options.get('file', None) + self.test_file_given = self.test_file[:] + + self.test_links = self.options.get('links', '') + self.test_tags = self.options.get('tags', '') + self.test_status = self.options.get('status', None) + + self.collapse = str(self.options.get("collapse", "")) + if isinstance(self.collapse, str) and len(self.collapse) > 0: + if self.collapse.upper() in ["TRUE", 1, "YES"]: + collapse = True + elif self.collapse.upper() in ["FALSE", 0, "NO"]: + collapse = False + else: + raise Exception("collapse attribute must be true or false") + else: + self.collapse = getattr(self.env.app.config, "needs_collapse_details", True) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py new file mode 100644 index 000000000..d4a20db39 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -0,0 +1,56 @@ +import hashlib +import os +from docutils import nodes +from docutils.parsers.rst import Directive, directives + +from sphinxcontrib.test_reports.junitparser import JUnitParser +from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException, TestReportFileInvalidException +from sphinxcontrib.needs.api import add_need + + +class TestFile(nodes.General, nodes.Element): + pass + + +class TestFileDirective(TestCommonDirective): + """ + Directive for showing test results. + """ + has_content = True + required_arguments = 1 + optional_arguments = 0 + option_spec = {'id': directives.unchanged_required, + 'status': directives.unchanged_required, + 'tags': directives.unchanged_required, + 'links': directives.unchanged_required, + 'collapse': directives.unchanged_required, + 'file': directives.unchanged_required, + } + + final_argument_whitespace = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + self.prepare_basic_options() + self.load_test_file() + + suites = len(self.results) + cases = sum([int(x['tests']) for x in self.results]) + + passed = sum([x['passed'] for x in self.results]) + skipped = sum([x['skips'] for x in self.results]) + errors = sum([x['errors'] for x in self.results]) + failed = sum([x['failures'] for x in self.results]) + + main_section = [] + docname = self.state.document.settings.env.docname + main_section += add_need(self.env.app, self.state, docname, self.lineno, + need_type="testfile", title=self.test_name, id=self.test_id, + content=self.test_content, links=self.test_links, tags=self.test_tags, + status=self.test_status, collapse=self.collapse, + file=self.test_file_given, suites=suites, cases=cases, + passed=passed, skipped=skipped, failed=failed, errors=errors) + return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index e2152a388..e2ea8b40e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -3,7 +3,7 @@ from docutils.parsers.rst import Directive from sphinxcontrib.test_reports.junitparser import JUnitParser - +from sphinxcontrib.needs.api import add_need class TestResults(nodes.General, nodes.Element): pass @@ -20,7 +20,7 @@ class TestResultsDirective(Directive): final_argument_whitespace = True def __init__(self, *args, **kwargs): - super(TestResultsDirective, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.header = ('class', 'name', 'status', 'reason') self.colwidths = (1, 1, 1, 2) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py new file mode 100644 index 000000000..a58defce7 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -0,0 +1,69 @@ +import hashlib +import os +from docutils import nodes +from docutils.parsers.rst import Directive, directives + +from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption +from sphinxcontrib.needs.api import add_need + + +class TestSuite(nodes.General, nodes.Element): + pass + + +class TestSuiteDirective(TestCommonDirective): + """ + Directive for showing test suites. + """ + has_content = True + required_arguments = 1 + optional_arguments = 0 + option_spec = {'id': directives.unchanged_required, + 'status': directives.unchanged_required, + 'tags': directives.unchanged_required, + 'links': directives.unchanged_required, + 'collapse': directives.unchanged_required, + 'file': directives.unchanged_required, + 'suite': directives.unchanged_required, + } + + final_argument_whitespace = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + self.prepare_basic_options() + self.load_test_file() + + suite_name = self.options.get('suite', None) + if suite_name is None: + raise TestReportInvalidOption('Suite not given!') + + + suite = None + for suite_obj in self.results: + if suite_obj['name'] == suite_name: + suite = suite_obj + break + + if suite is None: + raise TestReportInvalidOption('Suite {} not found in test file {}'.format(suite_name, self.test_file)) + + cases = suite['tests'] + + passed = suite['passed'] + skipped = suite['skips'] + errors = suite['errors'] + failed = suite['failures'] + + main_section = [] + docname = self.state.document.settings.env.docname + main_section += add_need(self.env.app, self.state, docname, self.lineno, + need_type="testsuite", title=self.test_name, id=self.test_id, + content=self.test_content, links=self.test_links, tags=self.test_tags, + status=self.test_status, collapse=self.collapse, + file=self.test_file_given, suite=suite['name'], cases=cases, + passed=passed, skipped=skipped, failed=failed, errors=errors) + return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py new file mode 100644 index 000000000..1fd4b5749 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py @@ -0,0 +1,19 @@ +from sphinx.errors import SphinxError + + +class TestReportFileNotSetException(SphinxError): + """ + Raised if a needed test_file path is not given in directive. + """ + + +class TestReportFileInvalidException(SphinxError): + """ + Raised if the given path is not valid. + """ + + +class TestReportInvalidOption(SphinxError): + """ + Raised if an option is not given or invalid. + """ diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 3633cedb6..d9454e37c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -1,4 +1,5 @@ import os +import re from lxml import etree, objectify @@ -42,12 +43,19 @@ def parse(self): junit_dict = [] for testsuite in self.junit_xml_object: + tests = int(testsuite.attrib.get("tests", "-1")) + errors = int(testsuite.attrib.get("errors", "-1")) + failures = int(testsuite.attrib.get("failures", "-1")) + skips = int(testsuite.attrib.get("skips", testsuite.attrib.get("skip", "-1"))) + passed = int(tests - sum(x for x in [errors, failures, skips] if x > 0)) + ts_dict = { "name": testsuite.attrib.get("name", "unknown"), - "tests": testsuite.attrib.get("tests", "-1"), - "errors": testsuite.attrib.get("errors", "-1"), - "failures": testsuite.attrib.get("failures", "-1"), - "skips": testsuite.attrib.get("skips", testsuite.attrib.get("skip", "-1")), + "tests": tests, + "errors": errors, + "failures": failures, + "skips": skips, + "passed": passed, "time": testsuite.attrib.get("time", "-1"), "testcases": [] } @@ -67,13 +75,13 @@ def parse(self): result = testcase.skipped tc_dict["result"] = "skipped" tc_dict["type"] = result.attrib.get("type", "unknown") - tc_dict["text"] = result.text + tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs tc_dict["message"] = result.attrib.get("message", "unknown") elif hasattr(testcase, "failure"): result = testcase.failure tc_dict["result"] = "failure" tc_dict["type"] = result.attrib.get("type", "unknown") - tc_dict["text"] = result.text + tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs tc_dict["message"] = "" else: tc_dict["result"] = "passed" diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/__init__.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py rename to packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/__init__.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py new file mode 100644 index 000000000..1d4d9034a --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py @@ -0,0 +1,90 @@ +import os + +from sphinxcontrib.test_reports.junitparser import JUnitParser, JUnitFileMissing + + +class Results4Needs: + """ + Class for providing dynamic functions for sphinx-needs. + + Inside your ``conf.py`` use it like this:: + + from sphinxcontrib.test_reports import Results4Needs + + my_results = Results4Needs('junit_results.xml') + + + needs_functions = [my_results.test_result] + See for details: https://sphinxcontrib-needs.readthedocs.io/en/latest/dynamic_functions.html + """ + + def __init__(self, junit_file): + self.junit_file = junit_file + self.results = None + + def testsuite_value(self, env, need, needs, value, suite=None, *args, **kwargs): + self.junit_file = self._check_file(env.app, self.junit_file) + results = self._load_file(self.junit_file) + return self._get_suite_data(results, value, suite) + + def testcase_value(self, env, need, needs, value, name, classname=None, suite=None, *args, **kwargs): + self.junit_file = self._check_file(env.app, self.junit_file) + results = self._load_file(self.junit_file) + return self._get_case_data(results, value, name, classname, suite) + + def _get_suite_data(self, results, parameter, suite=None): + target_test_suite = None + if suite is not None: + for test_suite in results: + if test_suite['name'] == suite: + target_test_suite = test_suite + break + if target_test_suite is None: + raise NameError('Unknown test suite: {} in file {}'.format(suite, self.junit_file)) + else: + target_test_suite = results[0] + + if parameter in target_test_suite.keys(): + return target_test_suite[parameter] + else: + return 'Unknown parameter' + + def _get_case_data(self, results, parameter, name, classname=None, suite=None): + target_test_suite = None + if suite is not None: + for test_suite in results: + if test_suite['name'] == suite: + target_test_suite = test_suite + break + if target_test_suite is None: + raise NameError('Unknown test suite: {} in file {}'.format(suite, self.junit_file)) + else: + target_test_suite = results[0] + + for test_case in target_test_suite['testcases']: + if name == test_case['name'] and (classname is None or classname == test_case['classname']): + if parameter in test_case.keys(): + return test_case[parameter] + else: + return 'unknown parameter' + return 'unknown testcase' + + def _load_file(self, junit_file): + if self.results is None: + parser = JUnitParser(junit_file) + results = parser.parse() + return results + else: + return self.results + + def _check_file(self, app, junit_file): + root_path = app.confdir + if not os.path.isabs(junit_file): + junit_file = os.path.join(root_path, junit_file) + + if not os.path.exists(junit_file): + raise JUnitFileMissing('{} not found.'.format(junit_file)) + + return junit_file + + diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 58f079930..acee2e777 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -3,7 +3,11 @@ # from docutils import nodes from pkg_resources import parse_version +from sphinxcontrib.needs.api import add_need_type, add_extra_option + from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective +from sphinxcontrib.test_reports.directives import TestFile, TestFileDirective, TestSuite, TestSuiteDirective, \ + TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective from sphinxcontrib.test_reports.environment import install_styles_static_files @@ -24,16 +28,53 @@ def setup(app): log = logging.getLogger(__name__) log.info("Setting up sphinx-test-reports extension") + # configurations app.add_config_value('test_reports_rootdir', app.confdir, 'html') + # nodes app.add_node(TestResults) + app.add_node(TestFile) + app.add_node(TestSuite) + app.add_node(TestCase) + app.add_node(EnvReport) + # directives app.add_directive('test-results', TestResultsDirective) - - app.add_node(EnvReport) + app.add_directive('test-file', TestFileDirective) + app.add_directive('test-suite', TestSuiteDirective) + app.add_directive('test-case', TestCaseDirective) app.add_directive('test-env', EnvReportDirective) # events app.connect('env-updated', install_styles_static_files) + ############################ + # sphinx-needs configuration + ############################ + + # Extra options + # For details read + # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_extra_option + add_extra_option(app, 'file') + add_extra_option(app, 'suite') + add_extra_option(app, 'case') + add_extra_option(app, 'classname') + add_extra_option(app, 'time') + + add_extra_option(app, 'suites') + add_extra_option(app, 'cases') + + add_extra_option(app, 'passed') + add_extra_option(app, 'skipped') + add_extra_option(app, 'failed') + add_extra_option(app, 'errors') + add_extra_option(app, 'result') # used by test cases only + + # Extra need types + # For details about usage read + # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_need_type + add_need_type(app, 'testfile', 'Test-File', 'TF_', '#ffffff', 'node') + add_need_type(app, 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'folder') + add_need_type(app, 'testcase', 'Test-Case', 'TC_', '#999999', 'rectangle') + return {'version': '0.2.0'} # identifies the version of our extension diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index 329940b0d..c58a08a62 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -33,7 +33,6 @@ extensions = ['sphinxcontrib.test_reports'] - # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py new file mode 100644 index 000000000..58f473a6b --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +from sphinxcontrib.test_reports import Results4Needs + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.test_reports', + 'sphinxcontrib.needs'] + +my_results = Results4Needs('../../data/nose_data.xml') + +needs_functions = [my_results.testcase_value, my_results.testsuite_value] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst new file mode 100644 index 000000000..615be39bf --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst @@ -0,0 +1,19 @@ +Basic Document +============== + +test_doc_build_html +------------------- + +.. test:: test some awesome stuff + :id: TEST_002 + :status: [[testcase_value("result", need.section_name)]] + + The test execution status is: **[[testcase_value("result", need.section_name)]]** + + This test case is part of [[testsuite_value('name')]] and has + + * [[testsuite_value('tests')]] tests + * [[testsuite_value('errors')]] errors + * [[testsuite_value('failures')]] failures + * [[testsuite_value('skips')]] skips + diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_needs_dyn_func.py b/packages/sphinx-test-reports/tests/test_needs_dyn_func.py new file mode 100644 index 000000000..7915baa0d --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_needs_dyn_func.py @@ -0,0 +1,7 @@ +from sphinx_testing import with_app + + +@with_app(buildername='html', srcdir='doc_test/needs_dyn_function_doc') +def test_needs_build_html(app, status, warning): + app.build() + pass From 92a5906b1560ec89b075fccac5ea07f4dcc40bee Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 13 Nov 2019 12:05:27 +0100 Subject: [PATCH 020/159] Adds needs support --- .../sphinx-test-reports/doc-requirements.txt | 3 +- .../docs/_static/useblocks_logo.png | Bin 0 -> 52308 bytes .../sphinx-test-reports/docs/changelog.rst | 9 ++ .../docs/directives/test_case.rst | 17 ++- .../docs/directives/test_file.rst | 67 +++++++++- .../docs/directives/test_suite.rst | 2 +- .../sphinx-test-reports/docs/examples.rst | 124 ++++++++++++++++++ packages/sphinx-test-reports/docs/filter.rst | 2 +- .../sphinx-test-reports/docs/functions.rst | 78 +++++++++++ packages/sphinx-test-reports/docs/index.rst | 3 + packages/sphinx-test-reports/docs/support.rst | 23 ++++ packages/sphinx-test-reports/setup.py | 4 +- .../test_reports/directives/test_common.py | 5 +- .../test_reports/directives/test_file.py | 39 +++++- .../test_reports/directives/test_suite.py | 28 +++- .../sphinxcontrib/test_reports/exceptions.py | 8 +- .../test_reports/functions/__init__.py | 13 ++ .../test_reports/test_reports.py | 8 +- 18 files changed, 415 insertions(+), 18 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/_static/useblocks_logo.png create mode 100644 packages/sphinx-test-reports/docs/examples.rst create mode 100644 packages/sphinx-test-reports/docs/functions.rst create mode 100644 packages/sphinx-test-reports/docs/support.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 752e68f07..19be64ab9 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1 +1,2 @@ -sphinx>=1.6 +sphinx>=2.0 +sphinxcontrib-needs>=0.4 diff --git a/packages/sphinx-test-reports/docs/_static/useblocks_logo.png b/packages/sphinx-test-reports/docs/_static/useblocks_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..17152fc6c9e664c266aa75406b7ea7aaf5126786 GIT binary patch literal 52308 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∨GT{#Yho7QBWK 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 V)Z4Dh*ogoD002ovPDHLkV1k28EA{{Y literal 0 HcmV?d00001 diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 2143125cb..020103040 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,6 +1,15 @@ Changelog ========= +0.3.0 +----- + +* Improvement: Using `sphinx-needs `_ for data representation + and filtering. +* Improvement: New directives :ref:`test-file`, :ref:`test-suite` and :ref:`test-case`. +* Improvement: New possibilities to :ref:`filter test data `. +* Improvement: Much better documentation. + 0.2.1 ----- * Skipped support für Python < 3.5. diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 3136b3d89..77ad145c5 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -6,7 +6,7 @@ test-case ``test-case`` loads the data from a given file path in ``file`` for a specified test case. Usage -..... +----- .. code-block:: rst @@ -48,11 +48,22 @@ Example .. code-block:: rst .. test-case:: Flake8 test case + :id: TESTCASE_1 :file: ../tests/data/pytest_data.xml :suite: pytest - :id: TESTCASE_1 + :classname: sphinxcontrib.test_reports.test_reports + :case: FLAKE8 + :links: TESTSUITE_1 + + A pytest test case. + + .. test-case:: nose test case + :file: ../tests/data/nose_data.xml + :suite: nosetests + :classname: test_empty_doc + :id: TESTCASE_2 - A test suite, containing the results of the suite ooly. + A nosetest test case. .. test-case:: Flake8 test case diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index d0dabd8d6..416f18079 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -6,7 +6,7 @@ test-file ``test_file`` loads the data from a given file path in ``file``. Usage -..... +----- .. code-block:: rst @@ -23,6 +23,9 @@ The following options can be set: * **tags**: A comma-separated list of strings. * **links**: A comma-separated list of IDs to other documented test_files / needs-objects. * **collapse**: If set to "TRUE", meta data is collapsed. Can also be set to "FALSE". +* **auto_suites**: If set (no value!), all contained suites will get documented (like using ``test-suite``). +* **auto_cases**: If set (no value!), all contained cases will get documented (like using ``test-cases``). + Must be used together with ``auto_suites``! ``test_file`` creates a need of type ``Test-File`` and adds the following options automatically: @@ -35,9 +38,32 @@ The following options can be set: These options can also be used to :ref:`filter for certain Test-Files `. +Autogenerated suites and cases +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By using the options ``auto_suites`` or ``auto_cases`` Sphinx-Test-Report will documented all found suites/cases +in the given test-file. + +So it will create sphinx-needs-objects, like you would manually use the directives ``test-suite`` or ``test-case``. + +It uses the ID of ``test_file`` as prefix for the IDs of the suites and cases. +Their ID will be hash-value based on their title. +So a suite ID may look like ``TESTFILE1_E2A5`` and a case ID ``TESTFILE1_E2A5_F39A``. + +These IDs should be stable between different sphinx builds, as long as their title of suites / cases does not change. + +All other options like ``tags``, ``links``, ``status`` are copied from ``test-file`` directive to the autogenerated +``test-suite`` and ``test-case`` directives. + +``links`` will also contain links to the parent objects, e.g. a ``test-case`` has links to the ``test_suite`` and also +to the ``test-file``. + Example ------- +Basics +~~~~~~ + .. code-block:: rst .. test-file:: common xml test data @@ -95,3 +121,42 @@ Example ``collapse`` was set to False, therefor we see its data directly. Also ``status`` and ``tags`` are set. +Autogenerated suite +~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: rst + + .. test-file:: pytest test data + :file: ../tests/data/pytest_data.xml + :id: TESTFILE_AUTO1 + :auto_suites: + :collapse: FALSE + :tags: auto + + +.. test-file:: pytest test data + :file: ../tests/data/pytest_data.xml + :id: TESTFILE_AUTO1 + :auto_suites: + :collapse: FALSE + :tags: auto + +Autogenerated suite and cases +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: rst + + .. test-file:: pytest test data + :file: ../tests/data/pytest_data.xml + :id: TESTFILE_AUTO2 + :auto_suites: + :auto_cases: + :tags: auto + + +.. test-file:: pytest test data + :file: ../tests/data/pytest_data.xml + :id: TESTFILE_AUTO2 + :auto_suites: + :auto_cases: + :tags: auto diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst index b5bb988f8..6e66ff42d 100644 --- a/packages/sphinx-test-reports/docs/directives/test_suite.rst +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -6,7 +6,7 @@ test-suite ``test-suite`` loads the data from a given file path in ``file`` for a specified suite. Usage -..... +----- .. code-block:: rst diff --git a/packages/sphinx-test-reports/docs/examples.rst b/packages/sphinx-test-reports/docs/examples.rst new file mode 100644 index 000000000..bfb580c6d --- /dev/null +++ b/packages/sphinx-test-reports/docs/examples.rst @@ -0,0 +1,124 @@ +Examples +======== +.. contents:: Contents + :local: + +Importing +--------- + +pytests +....... + +pytest junit file +~~~~~~~~~~~~~~~~~ + +.. literalinclude:: ../tests/data/pytest_data.xml + +Autogenerated documentation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. code-block:: rst + + .. test-file:: Pytest Test File + :id: PYTEST01 + :tags: pytest, example + :file: ../tests/data/pytest_data.xml + :auto_suites: + :auto_cases: + +.. test-file:: Pytest Test File + :id: PYTEST01 + :tags: pytest, example + :file: ../tests/data/pytest_data.xml + :auto_suites: + :auto_cases: + +nosetests +......... + +nosetests junit file +~~~~~~~~~~~~~~~~~~~~ + +.. literalinclude:: ../tests/data/nose_data.xml + +Autogenerated documentation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. code-block:: rst + + .. test-file:: Nosetests Test File + :id: NOSE01 + :tags: nose, example + :file: ../tests/data/nose_data.xml + :auto_suites: + :auto_cases: + +.. test-file:: Nosetests Test File + :id: NOSE01 + :tags: nose, example + :file: ../tests/data/nose_data.xml + :auto_suites: + :auto_cases: + + +Filtering +--------- + +Tables +...... + +Tags must include pytest +~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: rst + + .. needtable:: + :tags: pytest + :columns: id, title, result, time, tags + +.. needtable:: + :tags: pytest + :columns: id, title, result, time, tags + +Must be defined on this page +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This checks if the filtered needs (test-files, test-suites, test-cases) got defined inside a section called "Importing". + +.. code-block:: rst + + .. needtable:: + :filter: 'Importing' in sections + :columns: id, title, result, time, tags + + +.. needtable:: + :filter: 'Importing' in sections + :columns: id, title, result, time, tags + + +Flows +..... + +Related to specific id +~~~~~~~~~~~~~~~~~~~~~~ +.. code-block:: rst + + .. needflow:: + :filter: id == 'PYTEST01' or 'PYTEST01' in links + +.. needflow:: + :filter: id == 'PYTEST01' or 'PYTEST01' in links + + +All test-files and suites +~~~~~~~~~~~~~~~~~~~~~~~~~ +This shows all testfiles and testsuites, which are defined somewhere in the overall documentation. + +Please note to search for ``testfile`` and ``testsuite`` (no "-" ), as this are the names of the need-objects +Sphinx-Test-Reports creates when using the directives ``test-file`` or ``test-suite``. + +.. code-block:: rst + + .. needflow:: + :types: testfile, testsuite + +.. needflow:: + :types: testfile, testsuite diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index c88a55401..961e82f10 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -125,4 +125,4 @@ The used ``:filter:`` allows needs only, if they have an outgoing or incoming li .. needflow:: :types: Test-File, Test-Suite, Test-Case - :filter: len(links) > 0 or len(links_back) > 0 + :filter: (len(links) > 0 or len(links_back) > 0) and "example" not in tags and "auto" not in tags diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst new file mode 100644 index 000000000..9768ca655 --- /dev/null +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -0,0 +1,78 @@ +Dynamic functions +================= + +Sphinx-Test-Reports provides dynamic functions for Sphinx-Needs. + +Read chapter `Dynamic function `_ +from Sphinx-Needs documentation to know how to use them. + + +test_link +--------- +Links a need (e.g testcase) automatically to other needs, which have a specific value in a given option. + +**Usage**:: + + .. test-case:: My test case + :id: TESTCASE_1 + :file: my_test_file.xml + :suite: pytest + :classname: sphinxcontrib.test_reports.test_reports + :case: FLAKE8 + :links: [[test_link("source_option", "target_option")]] + +``test_link`` needs the following arguments: + +* **source_option**: Name of an option of the test-need, which is used for comparision. E.g. ``classname``. +* **target_option**: Name of an option of all other needs, which is used for comparision. E.g. ``title``. + +The function reads the ``target_option`` from the need, where it is used. +Then it goes through **all** other needs and checks if the value of their ``source_option`` is equal to +the ``target_option``. +If this is the case, their IDs get stored and finally returned. + +**Example**:: + + .. spec:: sphinxcontrib.test_reports.test_reports + :id: TESTSPEC_001 + :status: open + :tags: example, link_example + + This specification specifies the test case ``sphinxcontrib.test_reports.test_reports``. + + .. test-case:: Flake8 test case + :id: TESTLINK_1 + :file: ../tests/data/pytest_data.xml + :suite: pytest + :classname: sphinxcontrib.test_reports.test_reports + :case: FLAKE8 + :tags: example, link_example + :links: [[test_link('classname', 'title')]] + + A simple test case. + We will set a link to the need, which has our classname as title. + + .. needflow:: + :tags: link_example + +.. spec:: sphinxcontrib.test_reports.test_reports + :id: TESTSPEC_001 + :status: open + :tags: example, link_example + + This specification specifies the test case ``sphinxcontrib.test_reports.test_reports``. + +.. test-case:: Flake8 test case + :id: TESTLINK_1 + :file: ../tests/data/pytest_data.xml + :suite: pytest + :classname: sphinxcontrib.test_reports.test_reports + :case: FLAKE8 + :tags: example, link_example + :links: [[test_link('classname', 'title')]] + + A simple test case. + We will set a link to the need, which has our classname as title. + +.. needflow:: + :tags: link_example diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 24f8e8bd2..d76bc0fd9 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -47,6 +47,9 @@ Content directives/index filter + functions + examples + support changelog diff --git a/packages/sphinx-test-reports/docs/support.rst b/packages/sphinx-test-reports/docs/support.rst new file mode 100644 index 000000000..5a4cf64bc --- /dev/null +++ b/packages/sphinx-test-reports/docs/support.rst @@ -0,0 +1,23 @@ +Support +======= + +If you find any bugs or have an idea for an improvement, feel free to open an entry on our issue-tracker at github: +https://github.com/useblocks/sphinx-test-reports + +We are happy for each new entry and support wherever we can. + +Professional Support +-------------------- +If you need professional support you should get in contact with our company `useblocks `_. + +We are a bunch of passionated developers, who do normally process and tool related projects for automotive +companies around the world. + +Fastest way of reaching us is via e-mail: mail@useblocks.com. + +.. image:: _static/useblocks_logo.png + :align: center + :width: 100px + :target: http://useblocks.com + + diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 0d70b9757..6cce81ebd 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -4,11 +4,11 @@ import os from setuptools import setup, find_packages -requires = ['Sphinx', 'lxml'] +requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.4'] setup( name='sphinx-test-reports', - version='0.2.1', + version='0.3.0', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 5cb9be234..83e97db2a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -77,11 +77,12 @@ def prepare_basic_options(self): self.test_status = self.options.get('status', None) self.collapse = str(self.options.get("collapse", "")) + if isinstance(self.collapse, str) and len(self.collapse) > 0: if self.collapse.upper() in ["TRUE", 1, "YES"]: - collapse = True + self.collapse = True elif self.collapse.upper() in ["FALSE", 0, "NO"]: - collapse = False + self.collapse = False else: raise Exception("collapse attribute must be true or false") else: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index d4a20db39..5cbdc3d0b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -1,11 +1,11 @@ import hashlib -import os from docutils import nodes -from docutils.parsers.rst import Directive, directives +from docutils.parsers.rst import directives -from sphinxcontrib.test_reports.junitparser import JUnitParser from sphinxcontrib.test_reports.directives import TestCommonDirective -from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException, TestReportFileInvalidException +import sphinxcontrib.test_reports.directives.test_suite +from sphinxcontrib.test_reports.exceptions import TestReportIncompleteConfiguration + from sphinxcontrib.needs.api import add_need @@ -26,6 +26,8 @@ class TestFileDirective(TestCommonDirective): 'links': directives.unchanged_required, 'collapse': directives.unchanged_required, 'file': directives.unchanged_required, + 'auto_suites': directives.flag, + 'auto_cases': directives.flag, } final_argument_whitespace = True @@ -53,4 +55,33 @@ def run(self): status=self.test_status, collapse=self.collapse, file=self.test_file_given, suites=suites, cases=cases, passed=passed, skipped=skipped, failed=failed, errors=errors) + + if 'auto_cases' in self.options.keys() and 'auto_suites' not in self.options.keys(): + raise TestReportIncompleteConfiguration('option auto_cases must be used together with ' + 'auto_suites for test-file directives.') + + + if 'auto_suites' in self.options.keys(): + for suite in self.results: + suite_id = self.test_id + suite_id += '_' + hashlib.sha1(suite['name'].encode("UTF-8")).hexdigest().upper()[:3] + + options = self.options + options['suite'] = suite['name'] + options['id'] = suite_id + + if 'links' not in self.options: + options['links'] = self.test_id + elif self.test_id not in options['links']: + options['links'] = options['links'] + ';' + self.test_id + + arguments = [suite['name']] + suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + 'test-suite', arguments, options, + self.content, self.lineno, + self.content_offset, self.block_text, self.state, + self.state_machine) + + main_section += suite_directive.run() + return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index a58defce7..83608c74b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -4,6 +4,7 @@ from docutils.parsers.rst import Directive, directives from sphinxcontrib.test_reports.directives import TestCommonDirective +import sphinxcontrib.test_reports.directives.test_case from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption from sphinxcontrib.needs.api import add_need @@ -41,7 +42,6 @@ def run(self): if suite_name is None: raise TestReportInvalidOption('Suite not given!') - suite = None for suite_obj in self.results: if suite_obj['name'] == suite_name: @@ -66,4 +66,30 @@ def run(self): status=self.test_status, collapse=self.collapse, file=self.test_file_given, suite=suite['name'], cases=cases, passed=passed, skipped=skipped, failed=failed, errors=errors) + + if 'auto_cases' in self.options.keys(): + for case in suite['testcases']: + case_id = self.test_id + case_id += '_' + hashlib.sha1(case['classname'].encode("UTF-8") + case['name'].encode("UTF-8") + ).hexdigest().upper()[:3] + + options = self.options + options['case'] = case['name'] + options['classname'] = case['classname'] + options['id'] = case_id + + if 'links' not in self.options: + options['links'] = self.test_id + elif self.test_id not in options['links']: + options['links'] = options['links'] + ';' + self.test_id + + arguments = [case['name']] + case_directive = sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( + 'test-case', arguments, options, + self.content, self.lineno, + self.content_offset, self.block_text, self.state, + self.state_machine) + + main_section += case_directive.run() + return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py index 1fd4b5749..4b90f1461 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py @@ -1,4 +1,4 @@ -from sphinx.errors import SphinxError +from sphinx.errors import SphinxError, SphinxWarning class TestReportFileNotSetException(SphinxError): @@ -17,3 +17,9 @@ class TestReportInvalidOption(SphinxError): """ Raised if an option is not given or invalid. """ + + +class TestReportIncompleteConfiguration(SphinxWarning): + """ + Raised if given arguments / options are not correct configured + """ diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py new file mode 100644 index 000000000..f2ff00ff1 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py @@ -0,0 +1,13 @@ +def test_link(app, need, needs, test_option, target_option, *args, **kwargs): + if test_option not in need: + return "" + test_opt = need[test_option] + + links = [] + for need in needs.values(): + if target_option not in need: + continue + if test_opt == need[target_option]: + links.append(need['id']) + + return links diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index acee2e777..d752d607a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -3,13 +3,14 @@ # from docutils import nodes from pkg_resources import parse_version -from sphinxcontrib.needs.api import add_need_type, add_extra_option +from sphinxcontrib.needs.api import add_need_type, add_extra_option, add_dynamic_function from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective from sphinxcontrib.test_reports.directives import TestFile, TestFileDirective, TestSuite, TestSuiteDirective, \ TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective from sphinxcontrib.test_reports.environment import install_styles_static_files +from sphinxcontrib.test_reports.functions import test_link sphinx_version = sphinx.__version__ if parse_version(sphinx_version) >= parse_version("1.6"): @@ -70,6 +71,11 @@ def setup(app): add_extra_option(app, 'errors') add_extra_option(app, 'result') # used by test cases only + # Extra dynamic functions + # For details about usage read + # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_dynamic_function + add_dynamic_function(app, test_link) + # Extra need types # For details about usage read # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_need_type From 3ae363b9b7c36aa9ab32223dbf1565cd36c6455b Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 13 Nov 2019 13:42:23 +0100 Subject: [PATCH 021/159] Fixes FLAKE8 findings --- packages/sphinx-test-reports/.travis.yml | 1 + packages/sphinx-test-reports/docs/conf.py | 2 - .../sphinxcontrib/__init__.py | 1 - .../test_reports/directives/test_case.py | 4 +- .../test_reports/directives/test_common.py | 4 +- .../test_reports/directives/test_file.py | 1 - .../test_reports/directives/test_results.py | 2 +- .../test_reports/directives/test_suite.py | 3 +- .../sphinxcontrib/test_reports/junitparser.py | 14 +- .../test_reports/needs/__init__.py | 0 .../test_reports/needs/dyn_functions.py | 90 ---------- .../tests/doc_test/basic_doc/conf.py | 3 +- .../tests/doc_test/empty_doc/conf.py | 2 +- .../tests/doc_test/env_report_doc/conf.py | 2 +- .../doc_test/env_report_doc_default/conf.py | 2 +- .../tests/doc_test/env_report_doc_raw/conf.py | 2 +- .../doc_test/env_report_warnings/conf.py | 2 +- .../doc_test/needs_dyn_function_doc/Makefile | 20 --- .../doc_test/needs_dyn_function_doc/conf.py | 157 ------------------ .../doc_test/needs_dyn_function_doc/index.rst | 19 --- .../doc_test/needs_dyn_function_doc/make.bat | 36 ---- .../sphinx-test-reports/tests/test_env.py | 6 +- .../tests/test_junit_parser.py | 28 ++-- .../tests/test_needs_dyn_func.py | 7 - packages/sphinx-test-reports/tox.ini | 11 +- 25 files changed, 42 insertions(+), 377 deletions(-) delete mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/__init__.py delete mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py delete mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile delete mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py delete mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst delete mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat delete mode 100644 packages/sphinx-test-reports/tests/test_needs_dyn_func.py diff --git a/packages/sphinx-test-reports/.travis.yml b/packages/sphinx-test-reports/.travis.yml index bf9bee28d..a39956ca7 100644 --- a/packages/sphinx-test-reports/.travis.yml +++ b/packages/sphinx-test-reports/.travis.yml @@ -5,6 +5,7 @@ python: - '3.5' - '3.6' - '3.7' +- '3.8' install: - pip install tox-travis - python setup.py install diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 4108257a7..795d45201 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -59,8 +59,6 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] - - # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py index 8d17c21ca..de40ea7ca 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/__init__.py @@ -1,2 +1 @@ __import__('pkg_resources').declare_namespace(__name__) - diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index a3b3fbc3a..cac6bd396 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -1,7 +1,5 @@ -import hashlib -import os from docutils import nodes -from docutils.parsers.rst import Directive, directives +from docutils.parsers.rst import directives from sphinxcontrib.test_reports.directives import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 83e97db2a..d738b55ca 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -1,7 +1,6 @@ """ A Common directive, from which all other test directives inherit the shared functions. """ -import hashlib import os from docutils.parsers.rst import Directive @@ -67,7 +66,8 @@ def prepare_basic_options(self): self.test_name = self.arguments[0] self.test_content = "\n".join(self.content) need_type = self.name.replace('-', '').replace('_', '') - self.test_id = self.options.get('id', make_hashed_id(self.env.app, need_type, self.test_name, self.test_content)) + self.test_id = self.options.get('id', + make_hashed_id(self.env.app, need_type, self.test_name, self.test_content)) self.test_file = self.options.get('file', None) self.test_file_given = self.test_file[:] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 5cbdc3d0b..6cf5329e0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -60,7 +60,6 @@ def run(self): raise TestReportIncompleteConfiguration('option auto_cases must be used together with ' 'auto_suites for test-file directives.') - if 'auto_suites' in self.options.keys(): for suite in self.results: suite_id = self.test_id diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index e2ea8b40e..abda950dd 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -3,7 +3,7 @@ from docutils.parsers.rst import Directive from sphinxcontrib.test_reports.junitparser import JUnitParser -from sphinxcontrib.needs.api import add_need + class TestResults(nodes.General, nodes.Element): pass diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 83608c74b..08f0fcf1b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -1,7 +1,6 @@ import hashlib -import os from docutils import nodes -from docutils.parsers.rst import Directive, directives +from docutils.parsers.rst import directives from sphinxcontrib.test_reports.directives import TestCommonDirective import sphinxcontrib.test_reports.directives.test_case diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index d9454e37c..b6aa85c8f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -43,10 +43,10 @@ def parse(self): junit_dict = [] for testsuite in self.junit_xml_object: - tests = int(testsuite.attrib.get("tests", "-1")) - errors = int(testsuite.attrib.get("errors", "-1")) - failures = int(testsuite.attrib.get("failures", "-1")) - skips = int(testsuite.attrib.get("skips", testsuite.attrib.get("skip", "-1"))) + tests = int(testsuite.attrib.get("tests", -1)) + errors = int(testsuite.attrib.get("errors", -1)) + failures = int(testsuite.attrib.get("failures", -1)) + skips = int(testsuite.attrib.get("skips", testsuite.attrib.get("skip", -1))) passed = int(tests - sum(x for x in [errors, failures, skips] if x > 0)) ts_dict = { @@ -56,7 +56,7 @@ def parse(self): "failures": failures, "skips": skips, "passed": passed, - "time": testsuite.attrib.get("time", "-1"), + "time": float(testsuite.attrib.get("time", -1)), "testcases": [] } @@ -64,9 +64,9 @@ def parse(self): tc_dict = { "classname": testcase.attrib.get("classname", "unknown"), "file": testcase.attrib.get("file", "unknown"), - "line": testcase.attrib.get("line", "-1"), + "line": int(testcase.attrib.get("line", -1)), "name": testcase.attrib.get("name", "unknown"), - "time": testcase.attrib.get("time", "-1"), + "time": float(testcase.attrib.get("time", -1)), } # The following data is normally a subnode (e.g. skipped/failure). diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py deleted file mode 100644 index 1d4d9034a..000000000 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs/dyn_functions.py +++ /dev/null @@ -1,90 +0,0 @@ -import os - -from sphinxcontrib.test_reports.junitparser import JUnitParser, JUnitFileMissing - - -class Results4Needs: - """ - Class for providing dynamic functions for sphinx-needs. - - Inside your ``conf.py`` use it like this:: - - from sphinxcontrib.test_reports import Results4Needs - - my_results = Results4Needs('junit_results.xml') - - - needs_functions = [my_results.test_result] - See for details: https://sphinxcontrib-needs.readthedocs.io/en/latest/dynamic_functions.html - """ - - def __init__(self, junit_file): - self.junit_file = junit_file - self.results = None - - def testsuite_value(self, env, need, needs, value, suite=None, *args, **kwargs): - self.junit_file = self._check_file(env.app, self.junit_file) - results = self._load_file(self.junit_file) - return self._get_suite_data(results, value, suite) - - def testcase_value(self, env, need, needs, value, name, classname=None, suite=None, *args, **kwargs): - self.junit_file = self._check_file(env.app, self.junit_file) - results = self._load_file(self.junit_file) - return self._get_case_data(results, value, name, classname, suite) - - def _get_suite_data(self, results, parameter, suite=None): - target_test_suite = None - if suite is not None: - for test_suite in results: - if test_suite['name'] == suite: - target_test_suite = test_suite - break - if target_test_suite is None: - raise NameError('Unknown test suite: {} in file {}'.format(suite, self.junit_file)) - else: - target_test_suite = results[0] - - if parameter in target_test_suite.keys(): - return target_test_suite[parameter] - else: - return 'Unknown parameter' - - def _get_case_data(self, results, parameter, name, classname=None, suite=None): - target_test_suite = None - if suite is not None: - for test_suite in results: - if test_suite['name'] == suite: - target_test_suite = test_suite - break - if target_test_suite is None: - raise NameError('Unknown test suite: {} in file {}'.format(suite, self.junit_file)) - else: - target_test_suite = results[0] - - for test_case in target_test_suite['testcases']: - if name == test_case['name'] and (classname is None or classname == test_case['classname']): - if parameter in test_case.keys(): - return test_case[parameter] - else: - return 'unknown parameter' - return 'unknown testcase' - - def _load_file(self, junit_file): - if self.results is None: - parser = JUnitParser(junit_file) - results = parser.parse() - return results - else: - return self.results - - def _check_file(self, app, junit_file): - root_path = app.confdir - if not os.path.isabs(junit_file): - junit_file = os.path.join(root_path, junit_file) - - if not os.path.exists(junit_file): - raise JUnitFileMissing('{} not found.'.format(junit_file)) - - return junit_file - - diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index 329940b0d..fe2c7cb87 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -31,8 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.test_reports'] - +extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py index 329940b0d..f7798e55c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py @@ -31,7 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.test_reports'] +extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index 329940b0d..f7798e55c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -31,7 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.test_reports'] +extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index 329940b0d..f7798e55c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -31,7 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.test_reports'] +extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index 329940b0d..f7798e55c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -31,7 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.test_reports'] +extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index c58a08a62..fe2c7cb87 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -31,7 +31,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.test_reports'] +extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile deleted file mode 100644 index 47330b89c..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = needstestdocs -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py deleted file mode 100644 index 58f473a6b..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/conf.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- -# -# testreport test docs documentation build configuration file, created by -# sphinx-quickstart on Tue Mar 28 11:37:14 2017. -# -# 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. - -# 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. -# -import os -import sys - -from sphinxcontrib.test_reports import Results4Needs - -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) - -# -- General configuration ------------------------------------------------ - -# If your documentation testreport a minimal Sphinx version, state it here. -# -# testreport_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 = ['sphinxcontrib.test_reports', - 'sphinxcontrib.needs'] - -my_results = Results4Needs('../../data/nose_data.xml') - -needs_functions = [my_results.testcase_value, my_results.testsuite_value] - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' - -# 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. -version = '1.0' -# The full version, including alpha/beta/rc tags. -release = '1.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - -# -- 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 = 'alabaster' - -# 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 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'] - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), -] - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) -] - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), -] diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst deleted file mode 100644 index 615be39bf..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/index.rst +++ /dev/null @@ -1,19 +0,0 @@ -Basic Document -============== - -test_doc_build_html -------------------- - -.. test:: test some awesome stuff - :id: TEST_002 - :status: [[testcase_value("result", need.section_name)]] - - The test execution status is: **[[testcase_value("result", need.section_name)]]** - - This test case is part of [[testsuite_value('name')]] and has - - * [[testsuite_value('tests')]] tests - * [[testsuite_value('errors')]] errors - * [[testsuite_value('failures')]] failures - * [[testsuite_value('skips')]] skips - diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat deleted file mode 100644 index 489ed7dfd..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/needs_dyn_function_doc/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build -set SPHINXPROJ=needstestdocs - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index cb3017c5d..29e7cdf57 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -22,7 +22,7 @@ def test_doc_env_report_build_html(app, status, warning): html = (app.outdir / 'index.html').read_text() assert '

Test-Env report' in html - assert '

' in html + assert '' in html tables = re.findall("(
Variable

Variable

)", html, re.DOTALL) @@ -108,7 +108,7 @@ def test_doc_env_report_warning_build_html(app, status, warning): html = (app.outdir / 'index.html').read_text() assert '

Test-Env report' in html - assert '

' in html + assert '' in html tables = re.findall("(
Variable

Variable

)", html, re.DOTALL) @@ -135,7 +135,7 @@ def test_doc_env_report_warning_build_html(app, status, warning): Taken from solution of this issue: https://github.com/useblocks/sphinxcontrib-needs/issues/44 """ - + if sphinx_version > 15: assert "WARNING: environment 'defs' is not present in JSON file" in output assert "WARNING: option 'abc' is not present in JSON file" in output diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index dbba6ce85..f94c37b63 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -32,7 +32,7 @@ def test_parse_easy_xml(): assert len(results) == 1 assert results[0]["name"] == "unknown" - assert results[0]["tests"] == "3" + assert results[0]["tests"] == 3 assert results[0]["testcases"][0]["name"] == "ASuccessfulTest" assert results[0]["testcases"][0]["classname"] == "foo1" @@ -45,14 +45,14 @@ def test_parse_nosetest_xml(): assert len(results) == 1 assert results[0]["name"] == "nosetests" - assert results[0]["tests"] == "5" - assert results[0]["errors"] == "0" - assert results[0]["failures"] == "0" - assert results[0]["skips"] == "0" - assert results[0]["time"] == "-1" + assert results[0]["tests"] == 5 + assert results[0]["errors"] == 0 + assert results[0]["failures"] == 0 + assert results[0]["skips"] == 0 + assert results[0]["time"] == -1 assert results[0]["testcases"][0]["name"] == "test_doc_build_html" assert results[0]["testcases"][0]["classname"] == "test_basic_doc" - assert results[0]["testcases"][0]["time"] == "0.283" + assert results[0]["testcases"][0]["time"] == 0.283 def test_parse_pytest_xml(): @@ -63,15 +63,15 @@ def test_parse_pytest_xml(): assert len(results) == 1 assert results[0]["name"] == "pytest" - assert results[0]["tests"] == "10" - assert results[0]["errors"] == "0" - assert results[0]["failures"] == "0" - assert results[0]["skips"] == "10" - assert results[0]["time"] == "0.054" + assert results[0]["tests"] == 10 + assert results[0]["errors"] == 0 + assert results[0]["failures"] == 0 + assert results[0]["skips"] == 10 + assert results[0]["time"] == 0.054 assert results[0]["testcases"][0]["name"] == "FLAKE8" assert results[0]["testcases"][0]["classname"] == "setup" - assert results[0]["testcases"][0]["time"] == "0.000252246856689" - assert results[0]["testcases"][0]["line"] == "-1" + assert results[0]["testcases"][0]["time"] == 0.000252246856689 + assert results[0]["testcases"][0]["line"] == -1 assert results[0]["testcases"][0]["file"] == "setup.py" diff --git a/packages/sphinx-test-reports/tests/test_needs_dyn_func.py b/packages/sphinx-test-reports/tests/test_needs_dyn_func.py deleted file mode 100644 index 7915baa0d..000000000 --- a/packages/sphinx-test-reports/tests/test_needs_dyn_func.py +++ /dev/null @@ -1,7 +0,0 @@ -from sphinx_testing import with_app - - -@with_app(buildername='html', srcdir='doc_test/needs_dyn_function_doc') -def test_needs_build_html(app, status, warning): - app.build() - pass diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini index 30919d1c5..1fd296289 100644 --- a/packages/sphinx-test-reports/tox.ini +++ b/packages/sphinx-test-reports/tox.ini @@ -1,16 +1,17 @@ [tox] -envlist = py{35,36,37}-sphinx{15,16,17} +envlist = py{35,36,37}-sphinx{20,21,22} [testenv] passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH deps= -rtest-requirements.txt - sphinx15: Sphinx>=1.5,<1.6 - sphinx16: Sphinx>=1.6,<1.7 - sphinx17: Sphinx>=1.7,<1.8 + sphinx20: Sphinx>=2.0,<2.1 + sphinx21: Sphinx>=2.1,<2.2 + sphinx22: Sphinx>=2.2,<2.3 + commands= - py.test --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml + pytest --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests usedevelop=True From 6c898bd102957eb65792c587259fb6e3df81e97f Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 13 Nov 2019 13:56:23 +0100 Subject: [PATCH 022/159] Rename test_link to tr_link. Better pytest support *sigh* --- packages/sphinx-test-reports/docs/functions.rst | 10 +++++----- .../sphinxcontrib/test_reports/functions/__init__.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst index 9768ca655..a1d46d4b4 100644 --- a/packages/sphinx-test-reports/docs/functions.rst +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -7,7 +7,7 @@ Read chapter `Dynamic function = parse_version("1.6"): @@ -74,7 +74,7 @@ def setup(app): # Extra dynamic functions # For details about usage read # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_dynamic_function - add_dynamic_function(app, test_link) + add_dynamic_function(app, tr_link) # Extra need types # For details about usage read From 7c9b5414605c70605a4a3763eab343fd5e2bf53b Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 13 Nov 2019 14:08:17 +0100 Subject: [PATCH 023/159] Adds missing reqs for doc generation --- packages/sphinx-test-reports/doc-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 19be64ab9..e89771479 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,2 +1,3 @@ sphinx>=2.0 sphinxcontrib-needs>=0.4 +sphinx-test-reports>=0.3 From 7e3bf2d5c5c662e374375ad9cda9c876b6811dc4 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 13 Nov 2019 14:17:03 +0100 Subject: [PATCH 024/159] Adds plantuml deps --- packages/sphinx-test-reports/doc-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index e89771479..366190410 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,3 +1,4 @@ sphinx>=2.0 sphinxcontrib-needs>=0.4 sphinx-test-reports>=0.3 +sphinxcontrib-plantuml From c7c3d6787a7022964c78dfd791e96f71ff04ec2f Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 15 Nov 2019 12:45:18 +0100 Subject: [PATCH 025/159] Uses style for test-cases and tables. Better docs with more exmaples --- .../docs/examples/casperjs.rst | 12 + .../docs/{examples.rst => examples/index.rst} | 16 +- .../docs/examples/pytest.rst | 35 + packages/sphinx-test-reports/docs/index.rst | 3 +- packages/sphinx-test-reports/docs/install.rst | 22 + packages/sphinx-test-reports/docs/support.rst | 3 +- packages/sphinx-test-reports/setup.py | 2 +- .../sphinxcontrib/test_reports/css/common.css | 20 +- .../test_reports/directives/test_case.py | 33 +- .../test_reports/directives/test_results.py | 6 +- .../test_reports/directives/test_suite.py | 2 +- .../sphinxcontrib/test_reports/junitparser.py | 11 +- .../tests/data/casperjs.xml | 278 + .../tests/data/pytest_sphinx_data.xml | 61741 ++++++++++++++++ 14 files changed, 62161 insertions(+), 23 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/examples/casperjs.rst rename packages/sphinx-test-reports/docs/{examples.rst => examples/index.rst} (87%) create mode 100644 packages/sphinx-test-reports/docs/examples/pytest.rst create mode 100644 packages/sphinx-test-reports/docs/install.rst create mode 100644 packages/sphinx-test-reports/tests/data/casperjs.xml create mode 100644 packages/sphinx-test-reports/tests/data/pytest_sphinx_data.xml diff --git a/packages/sphinx-test-reports/docs/examples/casperjs.rst b/packages/sphinx-test-reports/docs/examples/casperjs.rst new file mode 100644 index 000000000..0a8272e57 --- /dev/null +++ b/packages/sphinx-test-reports/docs/examples/casperjs.rst @@ -0,0 +1,12 @@ +CasperJs +======== + +Example data taken from: https://gist.github.com/n1k0/4332371 + +Shorten the data and removed double-entries (same classname and test-name for multiple entries). + +.. test-file:: CasperJs tests - Multi test suites + :id: CASPERJS_001 + :file: ../tests/data/casperjs.xml + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/docs/examples.rst b/packages/sphinx-test-reports/docs/examples/index.rst similarity index 87% rename from packages/sphinx-test-reports/docs/examples.rst rename to packages/sphinx-test-reports/docs/examples/index.rst index bfb580c6d..869631418 100644 --- a/packages/sphinx-test-reports/docs/examples.rst +++ b/packages/sphinx-test-reports/docs/examples/index.rst @@ -12,7 +12,7 @@ pytests pytest junit file ~~~~~~~~~~~~~~~~~ -.. literalinclude:: ../tests/data/pytest_data.xml +.. literalinclude:: ../../tests/data/pytest_data.xml Autogenerated documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -38,7 +38,7 @@ nosetests nosetests junit file ~~~~~~~~~~~~~~~~~~~~ -.. literalinclude:: ../tests/data/nose_data.xml +.. literalinclude:: ../../tests/data/nose_data.xml Autogenerated documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -92,6 +92,7 @@ This checks if the filtered needs (test-files, test-suites, test-cases) got defi .. needtable:: :filter: 'Importing' in sections :columns: id, title, result, time, tags + :style_row: tr_[[copy('result')]] Flows @@ -119,6 +120,17 @@ Sphinx-Test-Reports creates when using the directives ``test-file`` or ``test-su .. needflow:: :types: testfile, testsuite + :filter: 'Examples' in sections .. needflow:: :types: testfile, testsuite + :filter: 'Examples' in sections + +Test framework related examples +------------------------------- + +.. toctree:: + :maxdepth: 1 + + pytest.rst + casperjs.rst diff --git a/packages/sphinx-test-reports/docs/examples/pytest.rst b/packages/sphinx-test-reports/docs/examples/pytest.rst new file mode 100644 index 000000000..30ae472b9 --- /dev/null +++ b/packages/sphinx-test-reports/docs/examples/pytest.rst @@ -0,0 +1,35 @@ +pytest +====== + +The data is coming from a pytest-run on the tests of the sphinx project. + +| Test suite: :need_count:`'pytest_sphinx' in tags and type=='testsuite'` +| Test cases: :need_count:`'pytest_sphinx' in tags and type=='testcase'` +| Failed test cases: :need_count:`'pytest_sphinx' in tags and 'failure' == result and type=='testcase'` +| Skipped test cases: :need_count:`'pytest_sphinx' in tags and 'skipped' == result and type=='testcase'` + +**Failed test cases**: + +.. needtable:: + :filter: 'pytest_sphinx' in tags and 'failure' == result + :columns: id, title, result + :style: table + :style_row: tr_[[copy('result')]] + +**Skipped test cases**: + +.. needtable:: + :filter: 'pytest_sphinx' in tags and 'skipped' == result + :columns: id, title, result + :style: table + :style_row: tr_[[copy('result')]] + +Imported data +------------- + +.. test-file:: pytest Sphinx data + :id: SPHINX + :tags: pytest_sphinx + :file: ../tests/data/pytest_sphinx_data.xml + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index d76bc0fd9..1cd84f10c 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -45,10 +45,11 @@ Content .. toctree:: :maxdepth: 2 + install directives/index filter functions - examples + examples/index support changelog diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst new file mode 100644 index 000000000..eef882eda --- /dev/null +++ b/packages/sphinx-test-reports/docs/install.rst @@ -0,0 +1,22 @@ +Installation +============ + +Install ``Sphinx-Test-Report`` via ``pip install sphinxcontrib-test-reports``. + +After that the extension must to be added to the ``conf.py`` file:: + + extensions = ['sphinxcontrib.needs', + 'sphinxcontrib.test_reports', + 'sphinxcontrib.plantuml'] + +Please note, ``Sphinx-Test-Report`` is based on the +`Sphinx-needs extension `_. +Therefore it must also be added to the ``extensions`` list! + +And same for `PlantUML `_, which is important to render flowcharts for filtered +test-cases. + +More details can be find in the +`installation-guide `_ +of ``Sphinx-Needs``. + diff --git a/packages/sphinx-test-reports/docs/support.rst b/packages/sphinx-test-reports/docs/support.rst index 5a4cf64bc..ed111fb5c 100644 --- a/packages/sphinx-test-reports/docs/support.rst +++ b/packages/sphinx-test-reports/docs/support.rst @@ -10,9 +10,10 @@ Professional Support -------------------- If you need professional support you should get in contact with our company `useblocks `_. -We are a bunch of passionated developers, who do normally process and tool related projects for automotive +We are a bunch of passionated developers, who normally work on process, tool or embedded related projects for automotive companies around the world. + Fastest way of reaching us is via e-mail: mail@useblocks.com. .. image:: _static/useblocks_logo.png diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 6cce81ebd..e8c514680 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -4,7 +4,7 @@ import os from setuptools import setup, find_packages -requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.4'] +requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.4.1'] setup( name='sphinx-test-reports', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css index 075e3653d..14b9cca2d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css @@ -1,13 +1,13 @@ -tr.passed { - background-color: rgba(0,250,0,0.1); +tr.tr_passed, div.tr_passed { + background-color: rgba(0,250,0,0.2) !important; } -tr.failure { - background-color: rgba(250,0,0,0.1); +tr.tr_failure, div.tr_failure { + background-color: rgba(250,0,0,0.2) !important; } -tr.skipped { - background-color: rgba(0,0,0,0.05); +tr.tr_skipped{ + background-color: rgba(0,0,0,0.1) !important; } td.status p { @@ -16,17 +16,17 @@ td.status p { border-radius: 10px; } -td.status p.passed{ +td.status p.tr_passed{ border: 1px solid #008000; color: #008000; } -td.status p.failure{ +td.status p.tr_failure{ border: 1px solid #800000; color: #800000; } -td.status p.skipped{ +td.status p.tr_skipped{ border: 1px solid #555; color: #555; -} \ No newline at end of file +} diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index cac6bd396..d3f1a6e78 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -71,8 +71,37 @@ def run(self): 'and testsuite {}'.format(case_name, class_name, self.test_file, suite_name)) result = case['result'] - content = self.test_content + '\n\n**Text**: {}\n\n**Message**: {}'.format(case['text'], case['message']) + content = self.test_content + if len(case['text']) > 0: + content += """ + +**Text**:: + + {} + +""".format('\n '.join([x.lstrip() for x in case['text'].split('\n')])) + + if len(case['message']) > 0: + content += """ + +**Message**:: + + {} + +""".format('\n '.join([x.lstrip() for x in case['message'].split('\n')])) + + if len(case['system-out']) > 0: + content += """ + +**System-out**:: + + {} + +""".format('\n '.join([x.lstrip() for x in case['system-out'].split('\n')])) + time = case['time'] + style = 'tr_' + case['result'] + main_section = [] docname = self.state.document.settings.env.docname main_section += add_need(self.env.app, self.state, docname, self.lineno, @@ -80,5 +109,5 @@ def run(self): content=content, links=self.test_links, tags=self.test_tags, status=self.test_status, collapse=self.collapse, file=self.test_file_given, suite=suite['name'], case=case_name, classname=class_name, - result=result, time=time) + result=result, time=time, style=style) return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index abda950dd..be5ff94aa 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -75,11 +75,11 @@ def _create_testcase_row(self, testcase): testcase["result"], "\n\n".join([testcase["message"] if testcase["message"] != "unknown" else "", testcase["text"]])) - row = nodes.row(classes=[testcase["result"]]) + row = nodes.row(classes=['tr_' + testcase["result"]]) for index, cell in enumerate(row_cells): - entry = nodes.entry(classes=[testcase["result"], self.header[index]]) + entry = nodes.entry(classes=['tr_' + testcase["result"], self.header[index]]) row += entry - entry += nodes.paragraph(text=cell, classes=[testcase["result"]]) + entry += nodes.paragraph(text=cell, classes=['tr_' + testcase["result"]]) return row def _create_table_row(self, row_cells): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 08f0fcf1b..5abccdd43 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -70,7 +70,7 @@ def run(self): for case in suite['testcases']: case_id = self.test_id case_id += '_' + hashlib.sha1(case['classname'].encode("UTF-8") + case['name'].encode("UTF-8") - ).hexdigest().upper()[:3] + ).hexdigest().upper()[:5] options = self.options options['case'] = case['name'] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index b6aa85c8f..153e62f26 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -75,13 +75,15 @@ def parse(self): result = testcase.skipped tc_dict["result"] = "skipped" tc_dict["type"] = result.attrib.get("type", "unknown") - tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs + # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs + tc_dict["text"] = result.text tc_dict["message"] = result.attrib.get("message", "unknown") elif hasattr(testcase, "failure"): result = testcase.failure tc_dict["result"] = "failure" tc_dict["type"] = result.attrib.get("type", "unknown") - tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs + # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs + tc_dict["text"] = result.text tc_dict["message"] = "" else: tc_dict["result"] = "passed" @@ -89,6 +91,11 @@ def parse(self): tc_dict["text"] = "" tc_dict["message"] = "" + if hasattr(testcase, 'system-out'): + tc_dict['system-out'] = testcase['system-out'].text + else: + tc_dict['system-out'] = "" + ts_dict["testcases"].append(tc_dict) junit_dict.append(ts_dict) diff --git a/packages/sphinx-test-reports/tests/data/casperjs.xml b/packages/sphinx-test-reports/tests/data/casperjs.xml new file mode 100644 index 000000000..b787e81a0 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/casperjs.xml @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/sphinx-test-reports/tests/data/pytest_sphinx_data.xml b/packages/sphinx-test-reports/tests/data/pytest_sphinx_data.xml new file mode 100644 index 000000000..e75a0a2dc --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/pytest_sphinx_data.xml @@ -0,0 +1,61741 @@ + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: pickle + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/pickle + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: json + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/json + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: man + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/man + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: texinfo + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/texinfo + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: pseudoxml + # srcdir: /tmp/api-set-translator + # outdir: /tmp/api-set-translator/_build/pseudoxml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mChange of translator for the dirhtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the singlehtml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pickle builder.#x1B[39;49;00m + #x1B[01mChange of translator for the json builder.#x1B[39;49;00m + #x1B[01mChange of translator for the latex builder.#x1B[39;49;00m + #x1B[01mChange of translator for the man builder.#x1B[39;49;00m + #x1B[01mChange of translator for the texinfo builder.#x1B[39;49;00m + #x1B[01mChange of translator for the text builder.#x1B[39;49;00m + #x1B[01mChange of translator for the websupport builder.#x1B[39;49;00m + #x1B[01mChange of translator for the xml builder.#x1B[39;49;00m + #x1B[01mChange of translator for the pseudoxml builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/autodoc_fodder.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/autodoc_missing_imports.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/conf.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/ext.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/parsermod.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_simple0/out/make.bat. + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 6 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m6 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mautodoc_fodder#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc_missing_imports#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mconf#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mparsermod#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mautodoc_fodder#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mautodoc_missing_imports#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mconf#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 83%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mparsermod#x1B[39;49;00m + #x1B[01mbuild succeeded, 4 warnings.#x1B[39;49;00m + + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_simple0/out/autodoc_fodder.rst:4: (WARNING/2) autodoc: + failed to import module 'autodoc_fodder'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'autodoc_fodder'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_simple0/out/autodoc_missing_imports.rst:4: (WARNING/2) + autodoc: failed to import module 'autodoc_missing_imports'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'autodoc_missing_imports'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_simple0/out/conf.rst:4: (WARNING/2) autodoc: failed to + import module 'conf'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'conf'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_simple0/out/parsermod.rst:4: (WARNING/2) autodoc: + failed to import module 'parsermod'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'parsermod'#x1B[39;49;00m + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/a.b.c.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/a.b.x.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/make.bat. + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 3 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35ma.b.c#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35ma.b.x#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32ma.b.c#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32ma.b.x#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/a.b.c.rst:10: (WARNING/2) + autodoc: failed to import module 'a.b.c.d'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'a'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/a.b.c.rst:19: (WARNING/2) + autodoc: failed to import module 'a.b.c'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'a'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_pep_0420_enabled0/out/a.b.x.rst:10: (WARNING/2) + autodoc: failed to import module 'a.b.x.y'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'a'#x1B[39;49;00m + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled0/out/make.bat. + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/c.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/make.bat. + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 2 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/c.rst:10: (WARNING/2) + autodoc: failed to import module 'c.d'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'c'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_pep_0420_disabled_top_lev0/out/c.rst:19: (WARNING/2) + autodoc: failed to import module 'c'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'c'#x1B[39;49;00m + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/package_.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/make.bat. + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 2 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mpackage_#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mpackage_#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/package_.rst:10: (WARNING/2) + autodoc: failed to import module 'package_.module_'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'package_'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_trailing_underscore0/out/package_.rst:19: (WARNING/2) + autodoc: failed to import module 'package_'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'package_'#x1B[39;49;00m + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/autodoc_fodder.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/autodoc_missing_imports.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/conf.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/ext.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/parsermod.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/make.bat. + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 6 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m6 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mautodoc_fodder#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc_missing_imports#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mconf#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mparsermod#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mautodoc_fodder#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mautodoc_missing_imports#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mconf#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 83%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mparsermod#x1B[39;49;00m + #x1B[01mbuild succeeded, 4 warnings.#x1B[39;49;00m + + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/autodoc_fodder.rst:4: + (WARNING/2) autodoc: failed to import module 'autodoc_fodder'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'autodoc_fodder'#x1B[39;49;00m + #x1B[31mWARNING: + /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/autodoc_missing_imports.rst:4: (WARNING/2) + autodoc: failed to import module 'autodoc_missing_imports'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'autodoc_missing_imports'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/conf.rst:4: (WARNING/2) + autodoc: failed to import module 'conf'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'conf'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/pytest-of-daniel/pytest-1/test_multibyte_parameters0/out/parsermod.rst:4: (WARNING/2) + autodoc: failed to import module 'parsermod'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'parsermod'#x1B[39;49;00m + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/autodoc_fodder.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/autodoc_missing_imports.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/conf.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/ext.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/parsermod.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extension_parsed0/out/make.bat. + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: extension 'shutil' has no setup() function; is it really a Sphinx extension + module?#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: the extension 'sphinxjp.themecore' was already merged with Sphinx since version + 1.2; this extension is ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/add_source_parser + # outdir: /tmp/add_source_parser/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + + + (a, b, c=1, **d) + (a, b, c, d) + (a, b, c=1, **d) -> None + (a='\\n') + + + (a, b=None) + (a, b=None) + (a, b) -> X + (a1, a2, kw1=True, kw2=False) + (a1, a2, kw1=True, kw2=False) + (b, *c) + (a) + (*c) + (d='\\n') + + 42 + (b, c) + (b, c=42) + (b, *c) + (b, c=42, *d, **e) + + + + [] + ['Docstring'] + ['Docstring'] + ['First line', '', 'Other', ' lines'] + ['Döcstring'] + ['Döcstring'] + ['Class docstring'] + ['Init docstring'] + ['Class docstring', '', 'Init docstring'] + ['Class docstring', '', 'Init docstring', '', 'Other', + ' lines'] + ['Class docstring'] + ['__init__(a1, a2, kw1=True, kw2=False)', '', 'Init docstring'] + ['Class docstring', '', '__init__(a1, a2, kw1=True, kw2=False)', '', + 'Init docstring'] + ['Class docstring'] + ['Init docstring'] + ['Class docstring', '', 'Init docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['Class docstring'] + ['New docstring'] + ['Class docstring', '', 'New docstring'] + ['Class docstring'] + ['New docstring'] + ['Class docstring', '', 'New docstring'] + + + + + + + + + + + + + + + + + + + + + + + + + + + # testroot: root + # builder: text + # srcdir: /tmp/circular + # outdir: /tmp/circular/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [text]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msub#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msub#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/circular/sub.rst: WARNING: circular toctree references detected, ignoring: sub <- contents + <- sub#x1B[39;49;00m + #x1B[31m/tmp/circular/contents.rst: WARNING: circular toctree references detected, ignoring: contents <- + sub <- contents#x1B[39;49;00m + + + + + # testroot: root + # builder: text + # srcdir: /tmp/numbered-circular + # outdir: /tmp/numbered-circular/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [text]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msub#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msub#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/numbered-circular/sub.rst:1: WARNING: contents is already assigned section numbers (nested + numbered toctree?)#x1B[39;49;00m + #x1B[31m/tmp/numbered-circular/sub.rst: WARNING: circular toctree references detected, ignoring: sub <- + contents <- sub#x1B[39;49;00m + #x1B[31m/tmp/numbered-circular/contents.rst: WARNING: circular toctree references detected, ignoring: + contents <- sub <- contents#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/images + # outdir: /tmp/images/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/index#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/index#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/images/subdir/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31mWARNING: Could not fetch remote image: http://example.com/NOT_EXIST.PNG [404]#x1B[39;49;00m + + + + + # testroot: root + # builder: applehelp + # srcdir: /tmp/applehelp_output + # outdir: /tmp/applehelp_output/_build/applehelp + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [applehelp]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mcopying localized files... #x1B[39;49;00mdone + #x1B[01mwriting Info.plist... #x1B[39;49;00mdone + #x1B[01mbuilding access page...#x1B[39;49;00mdone + #x1B[01mgenerating help index... #x1B[39;49;00mskipping + + # warning: + #x1B[31mWARNING: you will need to index this help book with: + /usr/bin/hiutil -Cf + /tmp/applehelp_output/_build/applehelp/Python.help/Contents/Resources/en.lproj/search.helpindex + /tmp/applehelp_output/_build/applehelp/Python.help/Contents/Resources/en.lproj -a -s en -l en#x1B[39;49;00m + + + + + # testroot: root + # builder: epub + # srcdir: /tmp/basic + # outdir: /tmp/basic/_build/epub + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [epub]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + writing mimetype file... + writing META-INF/container.xml file... + writing content.opf file... + writing nav.xhtml file... + writing toc.ncx file... + writing Python.epub file... + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: conf value "epub_copyright" (or "copyright")should not be empty for + EPUB3#x1B[39;49;00m + #x1B[31mWARNING: conf value "version" should not be empty for EPUB3#x1B[39;49;00m + + + + + # testroot: root + # builder: epub + # srcdir: /tmp/footnotes + # outdir: /tmp/footnotes/_build/epub + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [epub]#x1B[39;49;00m: targets for 3 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + writing mimetype file... + writing META-INF/container.xml file... + writing content.opf file... + writing nav.xhtml file... + writing toc.ncx file... + writing Python.epub file... + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: conf value "epub_copyright" (or "copyright")should not be empty for + EPUB3#x1B[39;49;00m + #x1B[31mWARNING: conf value "version" should not be empty for EPUB3#x1B[39;49;00m + + + + + # testroot: root + # builder: epub + # srcdir: /tmp/toctree + # outdir: /tmp/toctree/_build/epub + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [epub]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + writing mimetype file... + writing META-INF/container.xml file... + writing content.opf file... + writing nav.xhtml file... + writing toc.ncx file... + writing Python.epub file... + #x1B[01mbuild succeeded, 4 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/toctree/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/toctree/tocdepth.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31mWARNING: conf value "epub_copyright" (or "copyright")should not be empty for + EPUB3#x1B[39;49;00m + #x1B[31mWARNING: conf value "version" should not be empty for EPUB3#x1B[39;49;00m + + + + + # testroot: root + # builder: epub + # srcdir: /tmp/basic + # outdir: /tmp/basic/_build/epub + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [epub]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [epub]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + writing mimetype file... + writing META-INF/container.xml file... + writing content.opf file... + writing nav.xhtml file... + writing toc.ncx file... + writing Python.epub file... + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: conf value "epub_copyright" (or "copyright")should not be empty for + EPUB3#x1B[39;49;00m + #x1B[31mWARNING: conf value "version" should not be empty for EPUB3#x1B[39;49;00m + + + + + # testroot: root + # builder: gettext + # srcdir: /tmp/root-gettext + # outdir: /tmp/root-gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 3 template files + #x1B[01mreading templates... #x1B[39;49;00m[ 33%] + #x1B[35m/tmp/root-gettext/_templates/customsb.html#x1B[39;49;00m + #x1B[01mreading templates... #x1B[39;49;00m[ 66%] + #x1B[35m/tmp/root-gettext/_templates/contentssb.html#x1B[39;49;00m + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/root-gettext/_templates/layout.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m17 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 5%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 11%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 17%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 23%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 29%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 35%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 41%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 47%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 58%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 70%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 82%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35mrobots#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 94%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 5%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 17%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 23%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 29%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 35%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 41%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 47%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 58%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 70%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 82%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32mrobots#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 94%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 93%] #x1B[32mrobots#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32msubdir#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/root-gettext/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; + the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit + markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/includes.txt:4: WARNING: download file not readable: + /tmp/root-gettext/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/contents.txt:10: WARNING: extensions is already assigned section numbers (nested + numbered toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: gettext + # srcdir: /tmp/root-gettext + # outdir: /tmp/root-gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 3 template files + #x1B[01mreading templates... #x1B[39;49;00m[ 33%] + #x1B[35m/tmp/root-gettext/_templates/customsb.html#x1B[39;49;00m + #x1B[01mreading templates... #x1B[39;49;00m[ 66%] + #x1B[35m/tmp/root-gettext/_templates/contentssb.html#x1B[39;49;00m + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/root-gettext/_templates/layout.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 5%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 17%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 23%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 29%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 35%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 41%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 47%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 58%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 70%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 82%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32mrobots#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 94%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 93%] #x1B[32mrobots#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32msubdir#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/root-gettext/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; + the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit + markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/includes.txt:4: WARNING: download file not readable: + /tmp/root-gettext/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/contents.txt:10: WARNING: extensions is already assigned section numbers (nested + numbered toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root-gettext/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: gettext + # srcdir: /tmp/gettext + # outdir: /tmp/gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] #x1B[35m/tmp/gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/gettext/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/gettext/admonitions.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/label_target.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: gettext + # srcdir: /tmp/gettext + # outdir: /tmp/gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] #x1B[35m/tmp/gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/gettext/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/gettext/admonitions.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/label_target.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: gettext + # srcdir: /tmp/gettext + # outdir: /tmp/gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] #x1B[35m/tmp/gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/gettext/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/gettext/admonitions.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/label_target.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/warnings + # outdir: /tmp/warnings/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 2 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mundecodable#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mundecodable#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 10 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/warnings/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup + ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:19: WARNING: Encoding 'utf-8-sig' used for reading included file + '/tmp/warnings/wrongenc.inc' seems to be wrong, try giving an :encoding: option#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:11: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:24: WARNING: download file not readable: + /tmp/warnings/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:27: WARNING: invalid single index entry ''#x1B[39;49;00m + #x1B[31m/tmp/warnings/undecodable.rst:3: WARNING: undecodable source characters, replacing with "?": + b'here: >>>\xbb<<<'#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:41: WARNING: unknown option: &option#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:45: WARNING: citation not found: missing#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:14: WARNING: no matching candidate for image URI 'foo.*'#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:33: WARNING: Could not lex literal_block as "c". Highlighting + skipped.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_output + # outdir: /tmp/test_build_html_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_output/contents.txt:10: WARNING: extensions is already assigned section numbers + (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/build-html-translator + # outdir: /tmp/build-html-translator/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mChange of translator for the html builder.#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [singlehtml]#x1B[39;49;00m: all documents + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01massembling single document... #x1B[39;49;00m#x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting... #x1B[39;49;00mdone + #x1B[01mwriting additional files...#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_tocdepth + # outdir: /tmp/test_build_html_tocdepth/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig + # outdir: /tmp/test_build_html_numfig/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 13 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig/index.rst:47: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:48: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:49: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:50: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:51: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:52: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:53: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:54: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:55: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:56: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:57: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:58: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig/index.rst:59: WARNING: numfig is disabled. :numref: is + ignored.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree_warn + # outdir: /tmp/test_numfig_without_numbered_toctree_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 1 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00m3 found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:55: WARNING: no number is assigned for + section: index#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:53: WARNING: no number is assigned for + section: foo#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:54: WARNING: no number is assigned for + section: bar-a#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:55: WARNING: no number is assigned for + section: index#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree_warn/index.rst:59: WARNING: no number is assigned for + section: foo#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 6 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_numfig_without_numbered_toctree/index.rst:53: WARNING: no number is assigned for section: + foo#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree/index.rst:54: WARNING: no number is assigned for section: + bar-a#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + #x1B[31m/tmp/test_numfig_without_numbered_toctree/index.rst:59: WARNING: no number is assigned for section: + foo#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_numfig_without_numbered_toctree + # outdir: /tmp/test_numfig_without_numbered_toctree/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_format_warn + # outdir: /tmp/test_build_html_numfig_format_warn/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_format_warn/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html_numfig_depth_2 + # outdir: /tmp/test_build_html_numfig_depth_2/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:56: WARNING: invalid numfig_format: + invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_depth_2/index.rst:57: WARNING: invalid numfig_format: Fig %s + %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [singlehtml]#x1B[39;49;00m: all documents + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01massembling single document... #x1B[39;49;00m#x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting... #x1B[39;49;00mdone + #x1B[01mwriting additional files...#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + 9;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/test_build_html_numfig_on + # outdir: /tmp/test_build_html_numfig_on/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 4 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:55: WARNING: no number is assigned for section: + index#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/test_build_html_numfig_on/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test_enumerable_node + # outdir: /tmp/test_enumerable_node/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/html_assets + # outdir: /tmp/html_assets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/html_entity + # outdir: /tmp/html_entity/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: /tmp/html_entity/index.rst:9: (ERROR/3) Error in "list-table" directive: + invalid option block. + + .. list-table:: + :header-rows: 1 + - * un + * + * trois#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/basic + # outdir: /tmp/basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/directives-raw + # outdir: /tmp/directives-raw/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/stylesheets + # outdir: /tmp/stylesheets/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/images + # outdir: /tmp/images/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/index#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 20%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 40%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 60%] #x1B[33mtestimäge.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 80%] #x1B[33msubdir/rimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33msubdir/svgimg.svg#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + /tmp/test_build_html5_output/_build/html/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/images.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/subdir/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/includes.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/autodoc.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/autodoc.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/autodoc.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/extapi.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/extapi.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/markup.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/objects.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/contents.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/bom.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/extensions.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/extensions.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/extensions.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/_static/statictmpl.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/genindex.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/genindex.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/genindex.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/genindex.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/genindex.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/footnote.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/otherext.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + /tmp/test_build_html5_output/_build/html/otherext.html + # testroot: root + # builder: html + # srcdir: /tmp/test_build_html5_output + # outdir: /tmp/test_build_html5_output/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 16 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m16 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 6%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 18%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mextapi#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 31%] #x1B[35mextensions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 43%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35mlists#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mmarkup#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mmetadata#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 81%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35motherext#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 93%] #x1B[35msubdir/images#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/includes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 6%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 18%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mextapi#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 31%] #x1B[32mextensions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 43%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlists#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mmarkup#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mmetadata#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 81%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32motherext#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 93%] #x1B[32msubdir/images#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[ 50%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying downloadable files... #x1B[39;49;00m[100%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 5 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/test_build_html5_output/autodoc.txt:6: (WARNING/2) autodoc: failed to import module + 'util'; the following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: + Explicit markup ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/includes.txt:4: WARNING: download file not readable: + /tmp/test_build_html5_output/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/test_build_html5_output/contents.txt:10: WARNING: extensions is already assigned section + numbers (nested numbered toctree?)#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mrobots#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + app = <SphinxTestApp buildername='latex'>, status = <_io.StringIO object at + 0x7ff4c662a438>, warning = <_io.StringIO object at 0x7ff4c662a678> + engine = 'lualatex', docclass = 'howto' + + @skip_if_requested + @skip_if_stylefiles_notfound + @pytest.mark.parametrize( + "engine,docclass", + product(LATEX_ENGINES, DOCCLASSES), + ) + @pytest.mark.sphinx('latex') + def test_build_latex_doc(app, status, warning, engine, docclass): + app.config.latex_engine = engine + app.config.latex_documents[0] = app.config.latex_documents[0][:4] + (docclass,) + + LaTeXTranslator.ignore_missing_images = True + app.builder.build_all() + + # file from latex_additional_files + assert (app.outdir / 'svgimg.svg').isfile() + + > compile_latex_document(app) + + tests/test_build_latex.py:123: + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + + app = <SphinxTestApp buildername='latex'> + + def compile_latex_document(app): + # now, try to run latex over it + with cd(app.outdir): + try: + ensuredir(app.config.latex_engine) + # keep a copy of latex file for this engine in case test fails + copyfile('SphinxTests.tex', + app.config.latex_engine + '/SphinxTests.tex') + p = Popen([app.config.latex_engine, + '--interaction=nonstopmode', + '-output-directory=%s' % app.config.latex_engine, + 'SphinxTests.tex'], + stdout=PIPE, stderr=PIPE) + except OSError: # most likely the latex executable was not found + raise pytest.skip.Exception + else: + stdout, stderr = p.communicate() + if p.returncode != 0: + print(stdout) + print(stderr) + > assert False, '%s exited with return code %s' % ( + app.config.latex_engine, p.returncode) + E AssertionError: lualatex exited with return code 1 + E assert False + + tests/test_build_latex.py:86: AssertionError + + b"This is LuaTeX, Version 1.0.4 (TeX Live 2017/Debian) \n restricted system commands + enabled.\n(./lualatex/SphinxTests.tex\nLaTeX2e <2017-04-15>\n[\\directlua]:1: module 'luaotfload-main' + not found:\n\tno field package.preload['luaotfload-main']\n\t[kpse lua searcher] file not found: + 'luaotfload-main'\n\t[kpse C searcher] file not found: 'luaotfload-main'\nError in + luaotfload: reverting to OT1\nBabel <3.18> and hyphenation patterns for 1 language(s) loaded.\n\n! + Package sphinx Error: ** With this LuaTeX (100),Sphinx requires luatex85.sty \n**.\n\nSee the sphinx package + documentation for explanation.\nType H <return> for immediate help.\n ... \n \nl.9 + \\endinput\\fi\\fi}\n \n)\n! Emergency stop.\n<*> SphinxTests.tex\n \n 239 words of node memory still + in use:\n 1 dir, 34 glue_spec nodes\n avail lists: 2:12,3:1,4:1\n! ==> Fatal error occurred, no output + PDF file produced!\nTranscript written on SphinxTests.log.\n" + b'' + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + app = <SphinxTestApp buildername='latex'>, status = <_io.StringIO object at + 0x7ff4c662a1f8>, warning = <_io.StringIO object at 0x7ff4c662adc8> + engine = 'lualatex', docclass = 'manual' + + @skip_if_requested + @skip_if_stylefiles_notfound + @pytest.mark.parametrize( + "engine,docclass", + product(LATEX_ENGINES, DOCCLASSES), + ) + @pytest.mark.sphinx('latex') + def test_build_latex_doc(app, status, warning, engine, docclass): + app.config.latex_engine = engine + app.config.latex_documents[0] = app.config.latex_documents[0][:4] + (docclass,) + + LaTeXTranslator.ignore_missing_images = True + app.builder.build_all() + + # file from latex_additional_files + assert (app.outdir / 'svgimg.svg').isfile() + + > compile_latex_document(app) + + tests/test_build_latex.py:123: + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + + app = <SphinxTestApp buildername='latex'> + + def compile_latex_document(app): + # now, try to run latex over it + with cd(app.outdir): + try: + ensuredir(app.config.latex_engine) + # keep a copy of latex file for this engine in case test fails + copyfile('SphinxTests.tex', + app.config.latex_engine + '/SphinxTests.tex') + p = Popen([app.config.latex_engine, + '--interaction=nonstopmode', + '-output-directory=%s' % app.config.latex_engine, + 'SphinxTests.tex'], + stdout=PIPE, stderr=PIPE) + except OSError: # most likely the latex executable was not found + raise pytest.skip.Exception + else: + stdout, stderr = p.communicate() + if p.returncode != 0: + print(stdout) + print(stderr) + > assert False, '%s exited with return code %s' % ( + app.config.latex_engine, p.returncode) + E AssertionError: lualatex exited with return code 1 + E assert False + + tests/test_build_latex.py:86: AssertionError + + b"This is LuaTeX, Version 1.0.4 (TeX Live 2017/Debian) \n restricted system commands + enabled.\n(./lualatex/SphinxTests.tex\nLaTeX2e <2017-04-15>\n[\\directlua]:1: module 'luaotfload-main' + not found:\n\tno field package.preload['luaotfload-main']\n\t[kpse lua searcher] file not found: + 'luaotfload-main'\n\t[kpse C searcher] file not found: 'luaotfload-main'\nError in + luaotfload: reverting to OT1\nBabel <3.18> and hyphenation patterns for 1 language(s) loaded.\n\n! + Package sphinx Error: ** With this LuaTeX (100),Sphinx requires luatex85.sty \n**.\n\nSee the sphinx package + documentation for explanation.\nType H <return> for immediate help.\n ... \n \nl.9 + \\endinput\\fi\\fi}\n \n)\n! Emergency stop.\n<*> SphinxTests.tex\n \n 239 words of node memory still + in use:\n 1 dir, 34 glue_spec nodes\n avail lists: 2:12,3:1,4:1\n! ==> Fatal error occurred, no output + PDF file produced!\nTranscript written on SphinxTests.log.\n" + b'' + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/warnings + # outdir: /tmp/warnings/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mundecodable#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/warnings/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup + ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:19: WARNING: Encoding 'utf-8-sig' used for reading included file + '/tmp/warnings/wrongenc.inc' seems to be wrong, try giving an :encoding: option#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:11: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:24: WARNING: download file not readable: + /tmp/warnings/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:27: WARNING: invalid single index entry ''#x1B[39;49;00m + #x1B[31m/tmp/warnings/undecodable.rst:3: WARNING: undecodable source characters, replacing with "?": + b'here: >>>\xbb<<<'#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:41: WARNING: unknown option: &option#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:45: WARNING: citation not found: missing#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:14: WARNING: no matching candidate for image URI 'foo.*'#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:33: WARNING: Could not lex literal_block as "c". Highlighting + skipped.#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{report} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{The basic Sphinx documentation for testing} + \date{Nov 15, 2019} + \release{} + \author{Sphinx} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + Sphinx is a tool that makes it easy to create intelligent and beautiful + documentation for Python projects (or other documents consisting of multiple + reStructuredText sources), written by Georg Brandl. It was originally created + for the new Python documentation, and has excellent facilities for Python + project documentation, but C/C++ is supported as well, and more languages are + planned. + + Sphinx uses reStructuredText as its markup language, and many of its strengths + come from the power and straightforwardness of reStructuredText and its parsing + and translating suite, the Docutils. + + Among its features are the following: + \begin{itemize} + \item {} + Output formats: HTML (including derivative formats such as HTML Help, Epub + and Qt Help), plain text, manual pages and LaTeX or direct PDF output + using rst2pdf + + \item {} + Extensive cross-references: semantic markup and automatic links + for functions, classes, glossary terms and similar pieces of information + + \item {} + Hierarchical structure: easy definition of a document tree, with automatic + links to siblings, parents and children + + \item {} + Automatic indices: general index as well as a module index + + \item {} + Code handling: automatic highlighting using the Pygments highlighter + + \item {} + Flexible HTML output using the Jinja 2 templating engine + + \item {} + Various extensions are available, e.g. for automatic testing of snippets + and inclusion of appropriately formatted docstrings + + \item {} + Setuptools integration + + \end{itemize} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing test.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/basic + # outdir: /tmp/basic/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing test.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{report} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{test-latex-title} + \date{Nov 15, 2019} + \release{} + \author{Sphinx} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + \begin{sphinxadmonition}{note}{Notice} + + This generates nodes.title node before first section title. + \end{sphinxadmonition} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/latex-title/index.rst:8: WARNING: toctree contains reference to nonexisting document 'foo'#x1B[39;49;00m + #x1B[31m/tmp/latex-title/index.rst:8: WARNING: toctree contains reference to nonexisting document 'bar'#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-title + # outdir: /tmp/latex-title/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/latex-title/index.rst:8: WARNING: toctree contains reference to nonexisting document 'foo'#x1B[39;49;00m + #x1B[31m/tmp/latex-title/index.rst:8: WARNING: toctree contains reference to nonexisting document 'bar'#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:index}}\label{\detokenize{foo:id1}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}}\label{\detokenize{foo:foo}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.1}\label{\detokenize{foo:id6}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.1}\label{\detokenize{foo:id7}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id8}}} + \sphinxSetupCaptionForVerbatim{should be List 1.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Foo A} + \label{\detokenize{foo:id2}}\label{\detokenize{foo:foo-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.2}\label{\detokenize{foo:id9}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.3}\label{\detokenize{foo:id10}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.2}\label{\detokenize{foo:id11}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.3}\label{\detokenize{foo:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 1.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id14}}} + \sphinxSetupCaptionForVerbatim{should be List 1.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}}\label{\detokenize{foo:id3}} + + \section{Foo B} + \label{\detokenize{foo:id4}}\label{\detokenize{foo:foo-b}} + + \subsection{Foo B1} + \label{\detokenize{foo:id5}}\label{\detokenize{foo:foo-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.4}\label{\detokenize{foo:id15}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.4}\label{\detokenize{foo:id16}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id17}}} + \sphinxSetupCaptionForVerbatim{should be List 1.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \chapter{Bar} + \label{\detokenize{bar:id1}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + \section{Bar A} + \label{\detokenize{bar:id2}}\label{\detokenize{bar:bar-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.1}\label{\detokenize{bar:id5}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.1}\label{\detokenize{bar:id6}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id7}}} + \sphinxSetupCaptionForVerbatim{should be List 2.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}}\label{\detokenize{baz:id1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.2}\label{\detokenize{baz:fig22}}\label{\detokenize{baz:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.2}\label{\detokenize{baz:table22}}\label{\detokenize{baz:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{baz:code22}}\label{\detokenize{baz:id4}}} + \sphinxSetupCaptionForVerbatim{should be List 2.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.3}\label{\detokenize{bar:id8}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.3}\label{\detokenize{bar:id9}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id10}}} + \sphinxSetupCaptionForVerbatim{should be List 2.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Bar B} + \label{\detokenize{bar:id3}}\label{\detokenize{bar:bar-b}} + + \subsection{Bar B1} + \label{\detokenize{bar:id4}}\label{\detokenize{bar:bar-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.4}\label{\detokenize{bar:id11}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.4}\label{\detokenize{bar:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 2.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1}\label{\detokenize{index:fig1}}\label{\detokenize{index:id1}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2}\label{\detokenize{index:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1}\label{\detokenize{index:table-1}}\label{\detokenize{index:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2}\label{\detokenize{index:id4}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:code-1}}\label{\detokenize{index:id5}}} + \sphinxSetupCaptionForVerbatim{should be List 1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:id6}}} + \sphinxSetupCaptionForVerbatim{should be List 2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + \begin{itemize} + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Fig.\@ \ref{\detokenize{index:fig1}}} + + \item {} + Fig.2.2 is \hyperref[\detokenize{baz:fig22}]{Figure\ref{\detokenize{baz:fig22}}} + + \item {} + Table.1 is \hyperref[\detokenize{index:table-1}]{Table \ref{\detokenize{index:table-1}}} + + \item {} + Table.2.2 is \hyperref[\detokenize{baz:table22}]{Table:\ref{\detokenize{baz:table22}}} + + \item {} + List.1 is \hyperref[\detokenize{index:code-1}]{Listing \ref{\detokenize{index:code-1}}} + + \item {} + List.2.2 is \hyperref[\detokenize{baz:code22}]{Code-\ref{\detokenize{baz:code22}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{Section \ref{\detokenize{foo:foo}}} + + \item {} + Section.2.1 is \hyperref[\detokenize{bar:bar-a}]{Section \ref{\detokenize{bar:bar-a}}} + + \item {} + Unnumbered section is \hyperref[\detokenize{index:index}]{Section \ref{\detokenize{index:index}}} + + \item {} + Invalid numfig\_format 01: \sphinxcode{invalid} + + \item {} + Invalid numfig\_format 02: \sphinxcode{Fig \%s \%s} + + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Fig.\ref{\detokenize{index:fig1}} + \nameref{\detokenize{index:fig1}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{Sect.\ref{\detokenize{foo:foo}} \nameref{\detokenize{foo:foo}}} + + \end{itemize} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/numfig + # outdir: /tmp/numfig/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Figure:}} + \addto\captionsenglish{\renewcommand{\tablename}{Tab\_}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Code-}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:index}}\label{\detokenize{foo:id1}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}}\label{\detokenize{foo:foo}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.1}\label{\detokenize{foo:id6}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.1}\label{\detokenize{foo:id7}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id8}}} + \sphinxSetupCaptionForVerbatim{should be List 1.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Foo A} + \label{\detokenize{foo:id2}}\label{\detokenize{foo:foo-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.2}\label{\detokenize{foo:id9}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.3}\label{\detokenize{foo:id10}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.2}\label{\detokenize{foo:id11}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.3}\label{\detokenize{foo:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 1.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id14}}} + \sphinxSetupCaptionForVerbatim{should be List 1.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}}\label{\detokenize{foo:id3}} + + \section{Foo B} + \label{\detokenize{foo:id4}}\label{\detokenize{foo:foo-b}} + + \subsection{Foo B1} + \label{\detokenize{foo:id5}}\label{\detokenize{foo:foo-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.4}\label{\detokenize{foo:id15}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.4}\label{\detokenize{foo:id16}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id17}}} + \sphinxSetupCaptionForVerbatim{should be List 1.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \chapter{Bar} + \label{\detokenize{bar:id1}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + \section{Bar A} + \label{\detokenize{bar:id2}}\label{\detokenize{bar:bar-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.1}\label{\detokenize{bar:id5}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.1}\label{\detokenize{bar:id6}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id7}}} + \sphinxSetupCaptionForVerbatim{should be List 2.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}}\label{\detokenize{baz:id1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.2}\label{\detokenize{baz:fig22}}\label{\detokenize{baz:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.2}\label{\detokenize{baz:table22}}\label{\detokenize{baz:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{baz:code22}}\label{\detokenize{baz:id4}}} + \sphinxSetupCaptionForVerbatim{should be List 2.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.3}\label{\detokenize{bar:id8}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.3}\label{\detokenize{bar:id9}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id10}}} + \sphinxSetupCaptionForVerbatim{should be List 2.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Bar B} + \label{\detokenize{bar:id3}}\label{\detokenize{bar:bar-b}} + + \subsection{Bar B1} + \label{\detokenize{bar:id4}}\label{\detokenize{bar:bar-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.4}\label{\detokenize{bar:id11}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.4}\label{\detokenize{bar:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 2.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1}\label{\detokenize{index:fig1}}\label{\detokenize{index:id1}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2}\label{\detokenize{index:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1}\label{\detokenize{index:table-1}}\label{\detokenize{index:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2}\label{\detokenize{index:id4}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:code-1}}\label{\detokenize{index:id5}}} + \sphinxSetupCaptionForVerbatim{should be List 1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:id6}}} + \sphinxSetupCaptionForVerbatim{should be List 2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + \begin{itemize} + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Figure:\ref{\detokenize{index:fig1}}} + + \item {} + Fig.2.2 is \hyperref[\detokenize{baz:fig22}]{Figure\ref{\detokenize{baz:fig22}}} + + \item {} + Table.1 is \hyperref[\detokenize{index:table-1}]{Tab\_\ref{\detokenize{index:table-1}}} + + \item {} + Table.2.2 is \hyperref[\detokenize{baz:table22}]{Table:\ref{\detokenize{baz:table22}}} + + \item {} + List.1 is \hyperref[\detokenize{index:code-1}]{Code-\ref{\detokenize{index:code-1}}} + + \item {} + List.2.2 is \hyperref[\detokenize{baz:code22}]{Code-\ref{\detokenize{baz:code22}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{SECTION-\ref{\detokenize{foo:foo}}} + + \item {} + Section.2.1 is \hyperref[\detokenize{bar:bar-a}]{SECTION-\ref{\detokenize{bar:bar-a}}} + + \item {} + Unnumbered section is \hyperref[\detokenize{index:index}]{SECTION-\ref{\detokenize{index:index}}} + + \item {} + Invalid numfig\_format 01: \sphinxcode{invalid} + + \item {} + Invalid numfig\_format 02: \sphinxcode{Fig \%s \%s} + + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Fig.\ref{\detokenize{index:fig1}} + \nameref{\detokenize{index:fig1}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{Sect.\ref{\detokenize{foo:foo}} \nameref{\detokenize{foo:foo}}} + + \end{itemize} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/numfig + # outdir: /tmp/numfig/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Figure:}} + \makeatletter + \def\fnum@figure{\figurename\thefigure.} + \makeatother + \addto\captionsenglish{\renewcommand{\tablename}{Tab\_}} + \makeatletter + \def\fnum@table{\tablename\thetable:} + \makeatother + \addto\captionsenglish{\renewcommand{\literalblockname}{Code-}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:index}}\label{\detokenize{foo:id1}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}}\label{\detokenize{foo:foo}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.1}\label{\detokenize{foo:id6}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.1}\label{\detokenize{foo:id7}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id8}}} + \sphinxSetupCaptionForVerbatim{should be List 1.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Foo A} + \label{\detokenize{foo:id2}}\label{\detokenize{foo:foo-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.2}\label{\detokenize{foo:id9}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.3}\label{\detokenize{foo:id10}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.2}\label{\detokenize{foo:id11}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.3}\label{\detokenize{foo:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 1.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id14}}} + \sphinxSetupCaptionForVerbatim{should be List 1.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}}\label{\detokenize{foo:id3}} + + \section{Foo B} + \label{\detokenize{foo:id4}}\label{\detokenize{foo:foo-b}} + + \subsection{Foo B1} + \label{\detokenize{foo:id5}}\label{\detokenize{foo:foo-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.4}\label{\detokenize{foo:id15}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.4}\label{\detokenize{foo:id16}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id17}}} + \sphinxSetupCaptionForVerbatim{should be List 1.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \chapter{Bar} + \label{\detokenize{bar:id1}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + \section{Bar A} + \label{\detokenize{bar:id2}}\label{\detokenize{bar:bar-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.1}\label{\detokenize{bar:id5}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.1}\label{\detokenize{bar:id6}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id7}}} + \sphinxSetupCaptionForVerbatim{should be List 2.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}}\label{\detokenize{baz:id1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.2}\label{\detokenize{baz:fig22}}\label{\detokenize{baz:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.2}\label{\detokenize{baz:table22}}\label{\detokenize{baz:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{baz:code22}}\label{\detokenize{baz:id4}}} + \sphinxSetupCaptionForVerbatim{should be List 2.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.3}\label{\detokenize{bar:id8}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.3}\label{\detokenize{bar:id9}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id10}}} + \sphinxSetupCaptionForVerbatim{should be List 2.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Bar B} + \label{\detokenize{bar:id3}}\label{\detokenize{bar:bar-b}} + + \subsection{Bar B1} + \label{\detokenize{bar:id4}}\label{\detokenize{bar:bar-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.4}\label{\detokenize{bar:id11}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.4}\label{\detokenize{bar:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 2.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1}\label{\detokenize{index:fig1}}\label{\detokenize{index:id1}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2}\label{\detokenize{index:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1}\label{\detokenize{index:table-1}}\label{\detokenize{index:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2}\label{\detokenize{index:id4}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:code-1}}\label{\detokenize{index:id5}}} + \sphinxSetupCaptionForVerbatim{should be List 1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:id6}}} + \sphinxSetupCaptionForVerbatim{should be List 2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + \begin{itemize} + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Figure:\ref{\detokenize{index:fig1}}.\@} + + \item {} + Fig.2.2 is \hyperref[\detokenize{baz:fig22}]{Figure\ref{\detokenize{baz:fig22}}} + + \item {} + Table.1 is \hyperref[\detokenize{index:table-1}]{Tab\_\ref{\detokenize{index:table-1}}:} + + \item {} + Table.2.2 is \hyperref[\detokenize{baz:table22}]{Table:\ref{\detokenize{baz:table22}}} + + \item {} + List.1 is \hyperref[\detokenize{index:code-1}]{Code-\ref{\detokenize{index:code-1}} \textbar{} } + + \item {} + List.2.2 is \hyperref[\detokenize{baz:code22}]{Code-\ref{\detokenize{baz:code22}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{SECTION\_\ref{\detokenize{foo:foo}}\_} + + \item {} + Section.2.1 is \hyperref[\detokenize{bar:bar-a}]{SECTION\_\ref{\detokenize{bar:bar-a}}\_} + + \item {} + Unnumbered section is \hyperref[\detokenize{index:index}]{SECTION\_\ref{\detokenize{index:index}}\_} + + \item {} + Invalid numfig\_format 01: \sphinxcode{invalid} + + \item {} + Invalid numfig\_format 02: \sphinxcode{Fig \%s \%s} + + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Fig.\ref{\detokenize{index:fig1}} + \nameref{\detokenize{index:fig1}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{Sect.\ref{\detokenize{foo:foo}} \nameref{\detokenize{foo:foo}}} + + \end{itemize} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/numfig + # outdir: /tmp/numfig/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{jsbook} + \documentclass[letterpaper,10pt,dvipdfmx]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + + \usepackage{times} + + \usepackage{sphinx} + + \usepackage[dvipdfm]{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \renewcommand{\figurename}{図} + \renewcommand{\tablename}{表} + \renewcommand{\literalblockname}{リスト} + + \renewcommand{\literalblockcontinuedname}{continued from previous page} + \renewcommand{\literalblockcontinuesname}{continues on next page} + + \def\pageautorefname{ページ} + + + \title{Python} + \date{2019年11月15日} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{リリース} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:index}}\label{\detokenize{foo:id1}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}}\label{\detokenize{foo:foo}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.1}\label{\detokenize{foo:id6}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.1}\label{\detokenize{foo:id7}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id8}}} + \sphinxSetupCaptionForVerbatim{should be List 1.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Foo A} + \label{\detokenize{foo:id2}}\label{\detokenize{foo:foo-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.2}\label{\detokenize{foo:id9}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.3}\label{\detokenize{foo:id10}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.2}\label{\detokenize{foo:id11}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.3}\label{\detokenize{foo:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 1.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id14}}} + \sphinxSetupCaptionForVerbatim{should be List 1.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}}\label{\detokenize{foo:id3}} + + \section{Foo B} + \label{\detokenize{foo:id4}}\label{\detokenize{foo:foo-b}} + + \subsection{Foo B1} + \label{\detokenize{foo:id5}}\label{\detokenize{foo:foo-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1.4}\label{\detokenize{foo:id15}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1.4}\label{\detokenize{foo:id16}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{foo:id17}}} + \sphinxSetupCaptionForVerbatim{should be List 1.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \chapter{Bar} + \label{\detokenize{bar:id1}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + \section{Bar A} + \label{\detokenize{bar:id2}}\label{\detokenize{bar:bar-a}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.1}\label{\detokenize{bar:id5}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.1}\label{\detokenize{bar:id6}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id7}}} + \sphinxSetupCaptionForVerbatim{should be List 2.1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}}\label{\detokenize{baz:id1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.2}\label{\detokenize{baz:fig22}}\label{\detokenize{baz:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.2}\label{\detokenize{baz:table22}}\label{\detokenize{baz:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{baz:code22}}\label{\detokenize{baz:id4}}} + \sphinxSetupCaptionForVerbatim{should be List 2.2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.3}\label{\detokenize{bar:id8}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.3}\label{\detokenize{bar:id9}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id10}}} + \sphinxSetupCaptionForVerbatim{should be List 2.3} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Bar B} + \label{\detokenize{bar:id3}}\label{\detokenize{bar:bar-b}} + + \subsection{Bar B1} + \label{\detokenize{bar:id4}}\label{\detokenize{bar:bar-b1}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2.4}\label{\detokenize{bar:id11}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2.4}\label{\detokenize{bar:id12}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{bar:id13}}} + \sphinxSetupCaptionForVerbatim{should be List 2.4} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.1}\label{\detokenize{index:fig1}}\label{\detokenize{index:id1}}\end{figure} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{should be Fig.2}\label{\detokenize{index:id2}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 1}\label{\detokenize{index:table-1}}\label{\detokenize{index:id3}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{should be Table 2}\label{\detokenize{index:id4}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + hello + & + world + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:code-1}}\label{\detokenize{index:id5}}} + \sphinxSetupCaptionForVerbatim{should be List 1} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:id6}}} + \sphinxSetupCaptionForVerbatim{should be List 2} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{print}\PYG{p}{(}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{hello world}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + \begin{itemize} + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{図 \ref{\detokenize{index:fig1}}} + + \item {} + Fig.2.2 is \hyperref[\detokenize{baz:fig22}]{Figure\ref{\detokenize{baz:fig22}}} + + \item {} + Table.1 is \hyperref[\detokenize{index:table-1}]{表 \ref{\detokenize{index:table-1}}} + + \item {} + Table.2.2 is \hyperref[\detokenize{baz:table22}]{Table:\ref{\detokenize{baz:table22}}} + + \item {} + List.1 is \hyperref[\detokenize{index:code-1}]{リスト \ref{\detokenize{index:code-1}}} + + \item {} + List.2.2 is \hyperref[\detokenize{baz:code22}]{Code-\ref{\detokenize{baz:code22}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{\ref{\detokenize{foo:foo}} 章} + + \item {} + Section.2.1 is \hyperref[\detokenize{bar:bar-a}]{\ref{\detokenize{bar:bar-a}} 章} + + \item {} + Unnumbered section is \hyperref[\detokenize{index:index}]{\ref{\detokenize{index:index}} 章} + + \item {} + Invalid numfig\_format 01: \sphinxcode{invalid} + + \item {} + Invalid numfig\_format 02: \sphinxcode{Fig \%s \%s} + + \item {} + Fig.1 is \hyperref[\detokenize{index:fig1}]{Fig.\ref{\detokenize{index:fig1}} + \nameref{\detokenize{index:fig1}}} + + \item {} + Section.1 is \hyperref[\detokenize{foo:foo}]{Sect.\ref{\detokenize{foo:foo}} \nameref{\detokenize{foo:foo}}} + + \end{itemize} + + + \renewcommand{\indexname}{索引} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [ja]... #x1B[39;49;00m完了 + #x1B[01m保存された環境データを読み込み中...#x1B[39;49;00m完了 + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/numfig + # outdir: /tmp/numfig/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [ja]... #x1B[39;49;00m完了 + #x1B[01m保存された環境データを読み込み中...#x1B[39;49;00m完了 + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/numfig/index.rst:56: WARNING: invalid numfig_format: invalid#x1B[39;49;00m + #x1B[31m/tmp/numfig/index.rst:57: WARNING: invalid numfig_format: Fig %s %s#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \addto\captionsenglish{\renewcommand{\contentsname}{Table of content}} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table.}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}} + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-babel + # outdir: /tmp/latex-babel/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,ngerman]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Sonny]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \addto\captionsngerman{\renewcommand{\contentsname}{Table of content}} + + \addto\captionsngerman{\renewcommand{\figurename}{Fig.}} + \addto\captionsngerman{\renewcommand{\tablename}{Table.}} + + \addto\captionsngerman{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsngerman{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasngerman{\def\pageautorefname{Seite}} + + + \title{Python} + \date{15.11.2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + \ifnum\catcode`\"=\active\shorthandoff{"}\fi + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}} + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + + \renewcommand{\indexname}{Stichwortverzeichnis} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [de]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-babel + # outdir: /tmp/latex-babel/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [de]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,russian]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + + \usepackage[Sonny]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \addto\captionsrussian{\renewcommand{\contentsname}{Table of content}} + + \addto\captionsrussian{\renewcommand{\figurename}{Fig.}} + \addto\captionsrussian{\renewcommand{\tablename}{Table.}} + + \addto\captionsrussian{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsrussian{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasrussian{\def\pageautorefname{страница}} + + + \title{Python} + \date{нояб. 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Выпуск} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}} + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + + \renewcommand{\indexname}{Алфавитный указатель} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [ru]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-babel + # outdir: /tmp/latex-babel/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [ru]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,turkish]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Sonny]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \addto\captionsturkish{\renewcommand{\contentsname}{Table of content}} + + \addto\captionsturkish{\renewcommand{\figurename}{Fig.}} + \addto\captionsturkish{\renewcommand{\tablename}{Table.}} + + \addto\captionsturkish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsturkish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasturkish{\def\pageautorefname{sayfa}} + + + \title{Python} + \date{15 Kas 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Sürüm} + \makeindex + + \begin{document} + \ifnum\catcode`\=\string=\active\shorthandoff{=}\fi + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}} + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + + \renewcommand{\indexname}{Dizin} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [tr]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/latex-babel/bar.rst:: WARNING: language "tr" not supported: Docutils-generated text + will be in English.#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-babel + # outdir: /tmp/latex-babel/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [tr]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/latex-babel/bar.rst:: WARNING: language "tr" not supported: Docutils-generated text + will be in English.#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{jsbook} + \documentclass[letterpaper,10pt,dvipdfmx]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + + \usepackage{times} + + \usepackage{sphinx} + + \usepackage[dvipdfm]{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \renewcommand{\contentsname}{Table of content} + + \renewcommand{\figurename}{Fig.} + \renewcommand{\tablename}{Table.} + + \renewcommand{\literalblockcontinuedname}{continued from previous page} + \renewcommand{\literalblockcontinuesname}{continues on next page} + + \def\pageautorefname{ページ} + + + \title{Python} + \date{2019年11月15日} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{リリース} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}} + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + + \renewcommand{\indexname}{索引} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [ja]... #x1B[39;49;00m完了 + #x1B[01m保存された環境データを読み込み中...#x1B[39;49;00m完了 + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-babel + # outdir: /tmp/latex-babel/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [ja]... #x1B[39;49;00m完了 + #x1B[01m保存された環境データを読み込み中...#x1B[39;49;00m完了 + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Sonny]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \addto\captionsenglish{\renewcommand{\contentsname}{Table of content}} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table.}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-tocdepth}} + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [unknown]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/latex-babel/bar.rst:: WARNING: language "unknown" not supported: Docutils-generated + text will be in English.#x1B[39;49;00m + #x1B[31mWARNING: no Babel option known for language 'unknown'#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/latex-babel + # outdir: /tmp/latex-babel/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [unknown]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/latex-babel/bar.rst:: WARNING: language "unknown" not supported: Docutils-generated + text will be in English.#x1B[39;49;00m + #x1B[31mWARNING: no Babel option known for language 'unknown'#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + \addto\captionsenglish{\renewcommand{\contentsname}{Table of Contents}} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{1} + + + \title{Sphinx Tests Documentation} + \date{November 15, 2019} + \release{0.6alpha1} + \author{Georg Brandl \and someone else} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{contents::doc}} + + + Contents: + + + \chapter{Extension API tests} + \label{\detokenize{extapi:extension-api-tests}}\label{\detokenize{extapi:welcome-to-sphinx-tests-s-documentation}}\label{\detokenize{extapi::doc}} + Testing directives: + \sphinxstylestrong{from function: Foo}\sphinxstylestrong{from class: Bar} + + \chapter{Sphinx image handling} + \label{\detokenize{images::doc}}\label{\detokenize{images:sphinx-image-handling}} + \noindent\sphinxincludegraphics{{img}.png} + + \noindent\sphinxincludegraphics[width=200\sphinxpxdimen,height=100\sphinxpxdimen]{{img1}.png} + + \noindent\sphinxincludegraphics{{img}.pdf} + + \noindent\sphinxincludegraphics{{python-logo}.png} + + \noindent\sphinxincludegraphics{{simg}.png} + + \noindent\sphinxincludegraphics{{svgimg}.pdf} + + \noindent\sphinxincludegraphics{{img.foo}.png} + + + \chapter{Image including source in subdir} + \label{\detokenize{subdir/images:image-including-source-in-subdir}}\label{\detokenize{subdir/images::doc}} + \noindent\sphinxincludegraphics{{img1}.png} + + \noindent\sphinxincludegraphics{{rimg}.png} + + + \chapter{Including in subdir} + \label{\detokenize{subdir/includes::doc}}\label{\detokenize{subdir/includes:including-in-subdir}} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{line 1}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{line 2}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} + \end{sphinxVerbatim} + + Absolute \sphinxcode{/img.png} download. + + \noindent\sphinxincludegraphics{{img}.png} + + This is an include file. + + + \chapter{Testing downloadable files} + \label{\detokenize{includes::doc}}\label{\detokenize{includes:testing-downloadable-files}} + Download \sphinxcode{img.png} here. + Download \sphinxcode{this} there. + Don’t download \sphinxcode{this}. + + + \chapter{Test file and literal inclusion} + \label{\detokenize{includes:test-file-and-literal-inclusion}} + \noindent\sphinxincludegraphics{{img2}.png} + + \noindent\sphinxincludegraphics{{img2}.png} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{c+c1}{\PYGZsh{} Literally included file using Python highlighting} + \PYG{c+c1}{\PYGZsh{} \PYGZhy{}*\PYGZhy{} coding: utf\PYGZhy{}8 \PYGZhy{}*\PYGZhy{}} + + \PYG{n}{foo} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{Including Unicode characters: + üöä}\PYG{l+s+s2}{\PYGZdq{}} + + \PYG{k}{class} \PYG{n+nc}{Foo}\PYG{p}{:} + \PYG{k}{pass} + + \PYG{k}{class} \PYG{n+nc}{Bar}\PYG{p}{:} + \PYG{k}{def} \PYG{n+nf}{baz}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{pass} + + \PYG{k}{def} \PYG{n+nf}{bar}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:} \PYG{k}{pass} + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + This file is encoded in latin\PYGZhy{}1 but at first read as utf\PYGZhy{}8. + + Max Strauß aß in München eine Leberkässemmel. + \end{sphinxVerbatim} + + This file is encoded in latin-1 but at first read as utf-8. + + Max Strauß aß in München eine Leberkässemmel. + + + \chapter{Literalinclude options} + \label{\detokenize{includes:literalinclude-options}} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + class Foo: + pass + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + def baz(): + pass + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\},numbers=left,firstnumber=6,stepnumber=1] + class Foo: + pass + class Bar: + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{} + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + START CODE + \PYGZsh{} Literally included file using Python highlighting + \PYGZsh{} \PYGZhy{}*\PYGZhy{} coding: utf\PYGZhy{}8 \PYGZhy{}*\PYGZhy{} + + foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{} + + class Foo: + pass + + class Bar: + def baz(): + pass + + def bar(): pass + END CODE + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{} + + class Foo: + pass + + class Bar: + def baz(): + pass + + def bar(): pass + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYGZsh{} Literally included file using Python highlighting + \PYGZsh{} \PYGZhy{}*\PYGZhy{} coding: utf\PYGZhy{}8 \PYGZhy{}*\PYGZhy{} + + foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{} + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{g+gd}{\PYGZhy{}\PYGZhy{}\PYGZhy{} /tmp/root/literal\PYGZus{}orig.inc} + \PYG{g+gi}{+++ /tmp/root/literal.inc} + \PYG{g+gu}{@@ \PYGZhy{}1,12 +1,12 @@} + \PYGZsh{} Literally included file using Python highlighting + \PYGZsh{} \PYGZhy{}*\PYGZhy{} coding: utf\PYGZhy{}8 \PYGZhy{}*\PYGZhy{} + + \PYG{g+gd}{\PYGZhy{}foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{} \PYGZsh{} This will be + changed} + \PYG{g+gi}{+foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{}} + + \PYG{g+gd}{\PYGZhy{}class FooOrig:} + \PYG{g+gi}{+class Foo:} + pass + + \PYG{g+gd}{\PYGZhy{}class BarOrig:} + \PYG{g+gi}{+class Bar:} + def baz(): + pass + + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + Tabs include file test + \PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{}\PYGZhy{} + + The next line has a tab: + \PYGZhy{}\textbar{} \textbar{}\PYGZhy{} + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{n}{Tabs} \PYG{n}{include} \PYG{n+nb}{file} \PYG{n}{test} + \PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}} + + \PYG{n}{The} \PYG{n+nb}{next} \PYG{n}{line} \PYG{n}{has} \PYG{n}{a} \PYG{n}{tab}\PYG{p}{:} + \PYG{o}{\PYGZhy{}}\PYG{o}{\textbar{}} \PYG{o}{\textbar{}}\PYG{o}{\PYGZhy{}} + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\},numbers=left,firstnumber=6,stepnumber=1] + class Foo: + pass + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\},numbers=left,firstnumber=6,stepnumber=1] + class Foo: + pass + \end{sphinxVerbatim} + + \begin{sphinxVerbatim}[commandchars=\\\{\},numbers=left,firstnumber=3,stepnumber=1] + foo = \PYGZdq{}Including Unicode characters: üöä\PYGZdq{} + \end{sphinxVerbatim} + + Test if dedenting before parsing works. + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{baz}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{pass} + \end{sphinxVerbatim} + + + \chapter{Docutils include with “literal”} + \label{\detokenize{includes:docutils-include-with-literal}} + While not recommended, it should work (and leave quotes alone). + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{n}{Testing} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{quotes}\PYG{l+s+s2}{\PYGZdq{}} \PYG{o+ow}{in} + \PYG{n}{literal} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{included}\PYG{l+s+s1}{\PYGZsq{}} + \PYG{n}{text}\PYG{o}{.} + \end{sphinxVerbatim} + + + \chapter{Testing various markup} + \label{\detokenize{markup::doc}}\label{\detokenize{markup:testing-various-markup}} + + \section{Meta markup} + \label{\detokenize{markup:meta-markup}} + \sphinxstyleemphasis{Section author: Georg Brandl} + + \sphinxstyleemphasis{Module author: Georg Brandl} + + \begin{sphinxShadowBox} + \sphinxstyletopictitle{TOC} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{markup:id11}}{\hyperref[\detokenize{markup:testing-various-markup}]{\sphinxcrossref{Testing + various markup}}} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{markup:id12}}{\hyperref[\detokenize{markup:meta-markup}]{\sphinxcrossref{Meta + markup}}} + + \item {} + \phantomsection\label{\detokenize{markup:id13}}{\hyperref[\detokenize{markup:generic-rest}]{\sphinxcrossref{Generic + reST}}} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{markup:id14}}{\hyperref[\detokenize{markup:body-directives}]{\sphinxcrossref{Body + directives}}} + + \item {} + \phantomsection\label{\detokenize{markup:id15}}{\hyperref[\detokenize{markup:admonitions}]{\sphinxcrossref{Admonitions}}} + + \end{itemize} + + \item {} + \phantomsection\label{\detokenize{markup:id16}}{\hyperref[\detokenize{markup:inline-markup}]{\sphinxcrossref{Inline + markup}}} + + \item {} + \phantomsection\label{\detokenize{markup:id17}}{\hyperref[\detokenize{markup:with}]{\sphinxcrossref{With}}} + + \item {} + \phantomsection\label{\detokenize{markup:id18}}{\hyperref[\detokenize{markup:tables}]{\sphinxcrossref{Tables}}} + + \item {} + \phantomsection\label{\detokenize{markup:id19}}{\hyperref[\detokenize{markup:figures}]{\sphinxcrossref{Figures}}} + + \item {} + \phantomsection\label{\detokenize{markup:id20}}{\hyperref[\detokenize{markup:version-markup}]{\sphinxcrossref{Version + markup}}} + + \item {} + \phantomsection\label{\detokenize{markup:id21}}{\hyperref[\detokenize{markup:code-blocks}]{\sphinxcrossref{Code + blocks}}} + + \item {} + \phantomsection\label{\detokenize{markup:id22}}{\hyperref[\detokenize{markup:misc-stuff}]{\sphinxcrossref{Misc + stuff}}} + + \item {} + \phantomsection\label{\detokenize{markup:id23}}{\hyperref[\detokenize{markup:index-markup}]{\sphinxcrossref{Index + markup}}} + + \item {} + \phantomsection\label{\detokenize{markup:id24}}{\hyperref[\detokenize{markup:o-some-strange-characters}]{\sphinxcrossref{Ö… + Some strange characters}}} + + \item {} + \phantomsection\label{\detokenize{markup:id25}}{\hyperref[\detokenize{markup:only-directive}]{\sphinxcrossref{Only + directive}}} + + \item {} + \phantomsection\label{\detokenize{markup:id26}}{\hyperref[\detokenize{markup:any-role}]{\sphinxcrossref{Any + role}}} + + \item {} + \phantomsection\label{\detokenize{markup:id27}}{\hyperref[\detokenize{markup:smart-quotes}]{\sphinxcrossref{Smart + quotes}}} + + \end{itemize} + + \end{itemize} + \end{sphinxShadowBox} + + + \section{Generic reST} + \label{\detokenize{markup:generic-rest}} + A global substitution (the definition is in rst\_epilog). + \phantomsection\label{\detokenize{markup:label}} + \def\sphinxLiteralBlockLabel{\label{\detokenize{markup:label}}} + \begin{sphinxVerbatim}[commandchars=\\\{\}] + some code + \end{sphinxVerbatim} + \let\sphinxLiteralBlockLabel\empty + + Option list: + \begin{optionlist}{3cm} + \item [-h] + help + \item [-{-}help] + also help + \end{optionlist} + + Line block: + + \begin{DUlineblock}{0em} + \item[] line1 + \item[] + \begin{DUlineblock}{\DUlineblockindent} + \item[] line2 + \item[] + \begin{DUlineblock}{\DUlineblockindent} + \item[] line3 + \item[] + \begin{DUlineblock}{\DUlineblockindent} + \item[] line4 + \end{DUlineblock} + \end{DUlineblock} + \item[] line5 + \end{DUlineblock} + \item[] line6 + \item[] + \begin{DUlineblock}{\DUlineblockindent} + \item[] line7 + \end{DUlineblock} + \end{DUlineblock} + + + \subsection{Body directives} + \label{\detokenize{markup:body-directives}} + \begin{sphinxShadowBox} + \sphinxstyletopictitle{Title} + + Topic body. + \end{sphinxShadowBox} + + \begin{sphinxShadowBox} + \sphinxstylesidebartitle{Sidebar} + \sphinxstylesidebarsubtitle{Sidebar subtitle} + + Sidebar body. + \end{sphinxShadowBox} + \paragraph{Test rubric} + \begin{quote} + + Epigraph title + + Epigraph body. + + \begin{flushright} + ---Author + \end{flushright} + \end{quote} + \begin{quote} + + Highlights + + Highlights body. + \end{quote} + \begin{quote} + + Pull-quote + + Pull quote body. + \end{quote} + + a + + b + \begin{sphinxalltt} + with some \sphinxstyleemphasis{markup} inside + \end{sphinxalltt} + + + \subsection{Admonitions} + \label{\detokenize{markup:admonitions}}\label{\detokenize{markup:admonition-section}} + \begin{sphinxadmonition}{note}{My Admonition} + + Admonition text. + \end{sphinxadmonition} + + \begin{sphinxadmonition}{note}{Note:} + Note text. + \end{sphinxadmonition} + + \begin{sphinxadmonition}{warning}{Warning:} + Warning text. + \end{sphinxadmonition} + \phantomsection\label{\detokenize{markup:some-label}} + \begin{sphinxadmonition}{tip}{Tip:} + Tip text. + \end{sphinxadmonition} + + Indirect hyperlink targets + + + \section{Inline markup} + \label{\detokenize{markup:inline-markup}}\label{\detokenize{markup:some-label}}\label{\detokenize{markup:other-label}} + \sphinxstyleemphasis{Generic inline markup} + + Adding n to test unescaping. + \begin{itemize} + \item {} + \sphinxstyleliteralstrong{command\textbackslash{}n} + + \item {} + \sphinxstyleemphasis{dfn\textbackslash{}n} + + \item {} + \sphinxmenuselection{guilabel with \sphinxaccelerator{a}ccelerator and \textbackslash{}n} + + \item {} + \sphinxcode{kbd\textbackslash{}n} + + \item {} + \sphinxstyleliteralemphasis{mailheader\textbackslash{}n} + + \item {} + \sphinxstyleliteralstrong{makevar\textbackslash{}n} + + \item {} + \sphinxstyleliteralemphasis{manpage\textbackslash{}n} + + \item {} + \sphinxstyleliteralemphasis{mimetype\textbackslash{}n} + + \item {} + \sphinxstyleliteralemphasis{newsgroup\textbackslash{}n} + + \item {} + \sphinxstyleliteralstrong{program\textbackslash{}n} + + \item {} + \sphinxcode{regexp\textbackslash{}n} + + \item {} + \sphinxmenuselection{File \(\rightarrow\) Close\textbackslash{}n} + + \item {} + \sphinxmenuselection{\sphinxaccelerator{F}ile \(\rightarrow\) \sphinxaccelerator{P}rint} + + \item {} + \sphinxcode{a/\sphinxstyleemphasis{varpart}/b\textbackslash{}n} + + \item {} + \sphinxcode{print \sphinxstyleemphasis{i}\textbackslash{}n} + + \end{itemize} + + \sphinxstyleemphasis{Linking inline markup} + \begin{itemize} + \item {} + \index{Python Enhancement Proposals!PEP + 8}\sphinxhref{https://www.python.org/dev/peps/pep-0008}{\sphinxstylestrong{PEP 8}} + + \item {} + \index{Python Enhancement Proposals!PEP + 8}\sphinxhref{https://www.python.org/dev/peps/pep-0008}{\sphinxstylestrong{Python Enhancement Proposal \#8}} + + \item {} + \index{RFC!RFC 1}\sphinxhref{https://tools.ietf.org/html/rfc1.html}{\sphinxstylestrong{RFC 1}} + + \item {} + \index{RFC!RFC 1}\sphinxhref{https://tools.ietf.org/html/rfc1.html}{\sphinxstylestrong{Request for Comments + \#1}} + + \item {} + \index{HOME}\index{environment + variable!HOME}{\hyperref[\detokenize{objects:envvar-HOME}]{\sphinxcrossref{\sphinxcode{HOME}}}} + + \item {} + {\hyperref[\detokenize{markup:with}]{\sphinxcrossref{\sphinxcode{with}}}} + + \item {} + {\hyperref[\detokenize{markup:grammar-token-try_stmt}]{\sphinxcrossref{\sphinxcode{try statement}}}} + + \item {} + {\hyperref[\detokenize{markup:admonition-section}]{\sphinxcrossref{\DUrole{std,std-ref}{Admonitions}}}} + + \item {} + {\hyperref[\detokenize{markup:some-label}]{\sphinxcrossref{\DUrole{std,std-ref}{here}}}} + + \item {} + {\hyperref[\detokenize{markup:some-label}]{\sphinxcrossref{\DUrole{std,std-ref}{there}}}} + + \item {} + {\hyperref[\detokenize{markup:my-figure}]{\sphinxcrossref{\DUrole{std,std-ref}{My caption of the figure}}}} + + \item {} + {\hyperref[\detokenize{markup:my-figure-name}]{\sphinxcrossref{\DUrole{std,std-ref}{My caption of the + figure}}}} + + \item {} + {\hyperref[\detokenize{markup:my-table}]{\sphinxcrossref{\DUrole{std,std-ref}{my table}}}} + + \item {} + {\hyperref[\detokenize{markup:my-table-name}]{\sphinxcrossref{\DUrole{std,std-ref}{my table}}}} + + \item {} + {\hyperref[\detokenize{markup:my-code-block}]{\sphinxcrossref{\DUrole{std,std-ref}{my ruby code}}}} + + \item {} + {\hyperref[\detokenize{markup:my-code-block-name}]{\sphinxcrossref{\DUrole{std,std-ref}{my ruby code}}}} + + \item {} + \hyperref[\detokenize{markup:my-figure}]{Fig.\@ \ref{\detokenize{markup:my-figure}}} + + \item {} + \hyperref[\detokenize{markup:my-figure-name}]{Fig.\@ \ref{\detokenize{markup:my-figure-name}}} + + \item {} + \hyperref[\detokenize{markup:my-table}]{Table \ref{\detokenize{markup:my-table}}} + + \item {} + \hyperref[\detokenize{markup:my-table-name}]{Table \ref{\detokenize{markup:my-table-name}}} + + \item {} + \hyperref[\detokenize{markup:my-code-block}]{Listing \ref{\detokenize{markup:my-code-block}}} + + \item {} + \hyperref[\detokenize{markup:my-code-block-name}]{Listing \ref{\detokenize{markup:my-code-block-name}}} + + \item {} + {\hyperref[\detokenize{subdir/includes::doc}]{\sphinxcrossref{\DUrole{doc}{Including in subdir}}}} + + \item {} + \sphinxcode{:download:} is tested in includes.txt + + \item {} + {\hyperref[\detokenize{objects:cmdoption-python-c}]{\sphinxcrossref{\sphinxcode{Python -c option}}}} + + \end{itemize} + + Test \sphinxstyleabbreviation{abbr} (abbreviation) and another \sphinxstyleabbreviation{abbr}. + + Testing the \index{index}index role, also available with + \index{title!explicit}\index{explicit!title}explicit title. + + + \section{With} + \label{\detokenize{markup:with}}\label{\detokenize{markup:id1}} + (Empty section.) + + + \section{Tables} + \label{\detokenize{markup:tables}} + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{my table}\label{\detokenize{markup:my-table}}\label{\detokenize{markup:my-table-name}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|L|p{5cm}|R|} + \hline + + 1 + &\begin{itemize} + \item {} + Block elems + + \item {} + In table + + \end{itemize} + & + x + \\ + \hline + 2 + & + Empty cells: + &\\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{empty cell in table header}\label{\detokenize{markup:id6}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + + + &\sphinxstyletheadfamily \\ + \hline + 1 + & + 2 + \\ + \hline + 3 + & + 4 + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + Tables with multirow and multicol: + + + \begin{savenotes}\sphinxattablestart + \centering + \begin{tabulary}{\linewidth}[t]{|T|T|T|T|T|} + \hline + + 1 + &\sphinxstartmulticolumn{2}% + \begin{varwidth}[t]{\sphinxcolwidth{2}{5}} + test! + \par + \vskip-\baselineskip\strut\end{varwidth}% + \sphinxstopmulticolumn + &\sphinxstartmulticolumn{2}% + \sphinxmultirow{2}{3}{% + \begin{varwidth}[t]{\sphinxcolwidth{2}{5}} + c + \par + \vskip-\baselineskip\strut\end{varwidth}% + }% + \sphinxstopmulticolumn + \\ + \cline{1-3}\sphinxmultirow{2}{4}{% + \begin{varwidth}[t]{\sphinxcolwidth{1}{5}} + 2 + y + x + \par + \vskip-\baselineskip\strut\end{varwidth}% + }% + & + col + & + col + &\multicolumn{2}{l|}{\sphinxtablestrut{3}}\\ + \cline{2-5}\sphinxtablestrut{4}&\sphinxstartmulticolumn{3}% + \begin{varwidth}[t]{\sphinxcolwidth{3}{5}} + multi-column cell + \par + \vskip-\baselineskip\strut\end{varwidth}% + \sphinxstopmulticolumn + & + x + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \begin{tabulary}{\linewidth}[t]{|T|} + \hline + \sphinxmultirow{2}{1}{% + \begin{varwidth}[t]{\sphinxcolwidth{1}{1}} + 1 + \par + \vskip-\baselineskip\strut\end{varwidth}% + }% + \\ + \sphinxtablestrut{1}\\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxattablestart + \centering + \begin{tabulary}{\linewidth}[t]{|T|} + \hline + \begin{sphinxfigure-in-table} + \centering + \capstart + \noindent\sphinxincludegraphics{{img}.png} + \sphinxfigcaption{figure in table}\label{\detokenize{markup:id7}}\end{sphinxfigure-in-table}\relax + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \section{Figures} + \label{\detokenize{markup:figures}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{img}.png} + \caption{My caption of the figure} + \begin{sphinxlegend} + My description paragraph of the figure. + + Description paragraph is wraped with legend node. + \end{sphinxlegend} + \label{\detokenize{markup:my-figure}}\label{\detokenize{markup:my-figure-name}}\end{figure} + \begin{wrapfigure}{r}{0pt} + \centering + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{figure with align option}\label{\detokenize{markup:id8}}\end{wrapfigure} + \begin{wrapfigure}{r}{0.500\linewidth} + \centering + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{figure with align \& figwidth option}\label{\detokenize{markup:id9}}\end{wrapfigure} + \begin{wrapfigure}{r}{3cm} + \centering + \noindent\sphinxincludegraphics[width=3cm]{{rimg}.png} + \caption{figure with align \& width option}\label{\detokenize{markup:id10}}\end{wrapfigure} + + + \section{Version markup} + \label{\detokenize{markup:version-markup}} + \DUrole{versionmodified}{New in version 0.6: }Some funny \sphinxstylestrong{stuff}. + + \DUrole{versionmodified}{Changed in version 0.6: }Even more funny stuff. + + \DUrole{versionmodified}{Deprecated since version 0.6: }Boring stuff. + + \DUrole{versionmodified}{New in version 1.2: }First paragraph of versionadded. + + \DUrole{versionmodified}{Changed in version 1.2: }First paragraph of versionchanged. + + Second paragraph of versionchanged. + + + \section{Code blocks} + \label{\detokenize{markup:code-blocks}} + \def\sphinxLiteralBlockLabel{\label{\detokenize{markup:my-code-block}}\label{\detokenize{markup:my-code-block-name}}} + \sphinxSetupCaptionForVerbatim{my ruby code} + \begin{sphinxVerbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1] + \PYG{k}{def} \PYG{n+nf}{ruby?} + \PYG{k+kp}{false} + \PYG{k}{end} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + + + \section{Misc stuff} + \label{\detokenize{markup:misc-stuff}} + Stuff % + \begin{footnote}[1]\sphinxAtStartFootnote + Like footnotes. + % + \end{footnote} + + Reference lookup: + \phantomsection\label{\detokenize{markup:id3}}{\hyperref[\detokenize{markup:ref1}]{\sphinxcrossref{{[}Ref1{]}}}} + (defined in another file). + Reference lookup underscore: + \phantomsection\label{\detokenize{markup:id4}}{\hyperref[\detokenize{markup:ref-1}]{\sphinxcrossref{{[}Ref\_1{]}}}} + + + \sphinxstrong{See also:} + + + something, something else, something more + \begin{description} + \item[{\sphinxhref{http://www.google.com}{Google}}] \leavevmode + For everything. + + \end{description} + + + \begin{itemize}\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt} + \item {} + This + + \item {} + is + + \item {} + a horizontal + + \item {} + list + + \item {} + with several + + \item {} + items + + \end{itemize} + \paragraph{Side note} + + This is a side note. + + This tests \sphinxcode{role names in uppercase}. + + \begin{center}LICENSE AGREEMENT + \end{center} + + Terry Pratchett, Tolkien, Monty Python. + + \begin{description} + \item[{änhlich\index{änhlich|textbf}}] \leavevmode\phantomsection\label{\detokenize{markup:term-anhlich}} + Dinge + + \item[{boson\index{boson|textbf}}] \leavevmode\phantomsection\label{\detokenize{markup:term-boson}} + Particle with integer spin. + + \item[{\sphinxstyleemphasis{fermion}\index{fermion|textbf}}] + \leavevmode\phantomsection\label{\detokenize{markup:term-fermion}} + Particle with half-integer spin. + + \item[{tauon\index{tauon|textbf}}] + \leavevmode\phantomsection\label{\detokenize{markup:term-tauon}}\item[{myon\index{myon|textbf}}] + \leavevmode\phantomsection\label{\detokenize{markup:term-myon}}\item[{electron\index{electron|textbf}}] + \leavevmode\phantomsection\label{\detokenize{markup:term-electron}} + Examples for fermions. + + \item[{über\index{über|textbf}}] \leavevmode\phantomsection\label{\detokenize{markup:term-uber}} + Gewisse + + \end{description} + + + \begin{productionlist} + \phantomsection\label{\detokenize{markup:grammar-token-try_stmt}}\production{try\_stmt}{ + {\hyperref[\detokenize{markup:grammar-token-try1_stmt}]{\sphinxcrossref{\sphinxcode{try1\_stmt}}}} + \textbar{} + {\hyperref[\detokenize{markup:grammar-token-try2_stmt}]{\sphinxcrossref{\sphinxcode{try2\_stmt}}}}} + \phantomsection\label{\detokenize{markup:grammar-token-try1_stmt}}\production{try1\_stmt}{ "try" + ":" \sphinxcode{suite}} + \productioncont{ ("except" {[}\sphinxcode{expression} {[}"," \sphinxcode{target}{]}{]} + ":" \sphinxcode{suite})+} + \productioncont{ {[}"else" ":" \sphinxcode{suite}{]}} + \productioncont{ {[}"finally" ":" \sphinxcode{suite}{]}} + \phantomsection\label{\detokenize{markup:grammar-token-try2_stmt}}\production{try2\_stmt}{ "try" + ":" \sphinxcode{suite}} + \productioncont{ "finally" ":" \sphinxcode{suite}} + \end{productionlist} + + + \section{Index markup} + \label{\detokenize{markup:index-markup}} + \index{entry}\index{entry!pair}\index{pair!entry}\index{entry!double}\index{double!entry}\index{index!entry + triple}\index{entry!triple, index}\index{triple!index + entry}\index{keyword!with}\index{with!keyword}\index{from|see{to}}\index{fromalso|see{toalso}} + \index{Main|textbf}\index{Other|textbf}\index{entry!pair|textbf} + \index{Main|textbf}Main + + + \section{Ö… Some strange characters} + \label{\detokenize{markup:olabel}}\label{\detokenize{markup:o-some-strange-characters}} + Testing öäü… + + + \section{Only directive} + \label{\detokenize{markup:only-directive}} + In LaTeX. + + In both. + + + \section{Any role} + \label{\detokenize{markup:any-role}} + Test referencing to + {\hyperref[\detokenize{markup:with}]{\sphinxcrossref{\DUrole{std,std-ref,std,std-ref}{headings}}}} and + {\hyperref[\detokenize{objects:func_without_body}]{\sphinxcrossref{\sphinxcode{objects}}}}. + Also {\hyperref[\detokenize{objects:module-mod}]{\sphinxcrossref{\sphinxcode{modules}}}} and + {\hyperref[\detokenize{objects:Time}]{\sphinxcrossref{\sphinxcode{classes}}}}. + + More domains: + \begin{itemize} + \item {} + {\hyperref[\detokenize{objects:bar.baz}]{\sphinxcrossref{\sphinxcode{JS}}}} + + \item {} + {\hyperref[\detokenize{objects:c.SphinxType}]{\sphinxcrossref{\sphinxcode{C}}}} + + \item {} + {\hyperref[\detokenize{objects:userdesc-myobj}]{\sphinxcrossref{\sphinxcode{myobj}}}} (user markup) + + \item {} + {\hyperref[\detokenize{objects:_CPPv3N1n5ArrayE}]{\sphinxcrossref{\sphinxcode{n::Array}}}} + + \item {} + {\hyperref[\detokenize{objects:cmdoption-perl-c}]{\sphinxcrossref{\sphinxcode{perl -c}}}} + + \end{itemize} + + + \section{Smart quotes} + \label{\detokenize{markup:smart-quotes}}\begin{itemize} + \item {} + Smart “quotes” in English ‘text’. + + \item {} + Smart — long and \textendash{} short dashes. + + \item {} + Ellipsis… + + \item {} + No smartypants in literal blocks: \sphinxcode{foo-{-}"bar"...}. + + \end{itemize} + + + \chapter{Testing object descriptions} + \label{\detokenize{objects:testing-object-descriptions}}\label{\detokenize{objects::doc}}\index{func\_without\_module() + (built-in function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:func_without_module}}\pysiglinewithargsret{\sphinxbfcode{func\_without\_module}}{\emph{a}, + \emph{b}, \emph{*c}\sphinxoptional{, \emph{d}}}{} + Does something. + + \end{fulllineitems} + + \index{func\_without\_body() (built-in function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:func_without_body}}\pysiglinewithargsret{\sphinxbfcode{func\_without\_body}}{}{} + \end{fulllineitems} + + \index{func\_with\_unknown\_field() (built-in function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:func_with_unknown_field}}\pysiglinewithargsret{\sphinxbfcode{func\_with\_unknown\_field}}{}{} + : : + + : empty field name: + \begin{quote}\begin{description} + \item[{Field\_name}] \leavevmode + \item[{Field\_name all lower}] \leavevmode + \item[{FIELD\_NAME}] \leavevmode + \item[{FIELD\_NAME ALL CAPS}] \leavevmode + \item[{Field\_Name}] \leavevmode + \item[{Field\_Name All Word Caps}] \leavevmode + \item[{Field\_name}] \leavevmode + \item[{Field\_name First word cap}] \leavevmode + \item[{FIELd\_name}] \leavevmode + \item[{FIELd\_name PARTial caps}] \leavevmode + \end{description}\end{quote} + + \end{fulllineitems} + + + \begin{fulllineitems} + \pysiglinewithargsret{\sphinxbfcode{func\_noindex}}{}{} + \end{fulllineitems} + + \index{func\_with\_module() (in module foolib)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:foolib.func_with_module}}\pysiglinewithargsret{\sphinxcode{foolib.}\sphinxbfcode{func\_with\_module}}{}{} + \end{fulllineitems} + + + Referring to \sphinxcode{func with no index}. + Referring to \sphinxcode{nothing}. + \phantomsection\label{\detokenize{objects:module-mod}}\index{mod (module)}\index{func\_in\_module() (in + module mod)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.func_in_module}}\pysiglinewithargsret{\sphinxcode{mod.}\sphinxbfcode{func\_in\_module}}{}{} + \end{fulllineitems} + + \index{Cls (class in mod)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.Cls}}\pysigline{\sphinxbfcode{class + }\sphinxcode{mod.}\sphinxbfcode{Cls}}~\index{meth1() (mod.Cls method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.Cls.meth1}}\pysiglinewithargsret{\sphinxbfcode{meth1}}{}{} + \end{fulllineitems} + + \index{meths() (mod.Cls static method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.Cls.meths}}\pysiglinewithargsret{\sphinxbfcode{static + }\sphinxbfcode{meths}}{}{} + \end{fulllineitems} + + \index{attr (mod.Cls attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.Cls.attr}}\pysigline{\sphinxbfcode{attr}} + \end{fulllineitems} + + + \end{fulllineitems} + + \index{meth2() (mod.Cls method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.Cls.meth2}}\pysiglinewithargsret{\sphinxcode{Cls.}\sphinxbfcode{meth2}}{}{} + \end{fulllineitems} + + \index{Error} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:errmod.Error}}\pysiglinewithargsret{\sphinxbfcode{exception + }\sphinxcode{errmod.}\sphinxbfcode{Error}}{\emph{arg1}, \emph{arg2}}{} + \end{fulllineitems} + + \index{var (in module mod)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:mod.var}}\pysigline{\sphinxcode{mod.}\sphinxbfcode{var}} + \end{fulllineitems} + + \index{func\_without\_module2() (built-in function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:func_without_module2}}\pysiglinewithargsret{\sphinxbfcode{func\_without\_module2}}{}{{ + $\rightarrow$ annotation}} + \end{fulllineitems} + + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{long(parameter,~~~list)}}\pysigline{\sphinxbfcode{another~one}} + \end{fulllineitems} + + \index{TimeInt (built-in class)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:TimeInt}}\pysigline{\sphinxbfcode{class }\sphinxbfcode{TimeInt}} + Has only one parameter (triggers special behavior…) + \begin{quote}\begin{description} + \item[{Parameters}] \leavevmode + \sphinxstyleliteralstrong{moo} (Moo) \textendash{} Moo + + \end{description}\end{quote} + + \end{fulllineitems} + + \index{Time (built-in class)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:Time}}\pysiglinewithargsret{\sphinxbfcode{class + }\sphinxbfcode{Time}}{\emph{hour}, \emph{minute}, \emph{isdst}}{}~\begin{quote}\begin{description} + \item[{Parameters}] \leavevmode\begin{itemize} + \item {} + \sphinxstyleliteralstrong{year} + ({\hyperref[\detokenize{objects:TimeInt}]{\sphinxcrossref{\sphinxstyleliteralemphasis{TimeInt}}}}) + \textendash{} The year. + + \item {} + \sphinxstyleliteralstrong{minute} + ({\hyperref[\detokenize{objects:TimeInt}]{\sphinxcrossref{\sphinxstyleliteralemphasis{TimeInt}}}}) + \textendash{} The minute. + + \item {} + \sphinxstyleliteralstrong{isdst} \textendash{} whether it’s DST + + \item {} + \sphinxstyleliteralstrong{hour} (\sphinxstyleliteralemphasis{DuplicateType}) \textendash{} Some parameter + + \item {} + \sphinxstyleliteralstrong{hour} \textendash{} Duplicate param. Should not lead to crashes. + + \item {} + \sphinxstyleliteralstrong{extcls} + ({\hyperref[\detokenize{objects:mod.Cls}]{\sphinxcrossref{\sphinxstyleliteralemphasis{Cls}}}}) \textendash{} + A class from another module. + + \end{itemize} + + \item[{Returns}] \leavevmode + a new {\hyperref[\detokenize{objects:Time}]{\sphinxcrossref{\sphinxcode{Time}}}} instance + + \item[{Return type}] \leavevmode + {\hyperref[\detokenize{objects:Time}]{\sphinxcrossref{Time}}} + + \item[{Raises}] \leavevmode + {\hyperref[\detokenize{objects:errmod.Error}]{\sphinxcrossref{\sphinxstyleliteralstrong{Error}}}} + \textendash{} if the values are out of range + + \item[{Variables}] \leavevmode\begin{itemize} + \item {} + \sphinxstyleliteralstrong{hour} (\sphinxstyleliteralemphasis{int}) \textendash{} like + \sphinxstyleemphasis{hour} + + \item {} + \sphinxstyleliteralstrong{minute} (\sphinxstyleliteralemphasis{int}) \textendash{} like + \sphinxstyleemphasis{minute} + + \end{itemize} + + \end{description}\end{quote} + + \end{fulllineitems} + + + \chapter{C items} + \label{\detokenize{objects:c-items}}\index{Sphinx\_DoSomething (C function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:c.Sphinx_DoSomething}}\pysiglinewithargsret{\sphinxbfcode{Sphinx\_DoSomething}}{}{} + \end{fulllineitems} + + \index{SphinxStruct.member (C member)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:c.SphinxStruct.member}}\pysigline{\sphinxbfcode{SphinxStruct.member}} + \end{fulllineitems} + + \index{SPHINX\_USE\_PYTHON (C macro)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:c.SPHINX_USE_PYTHON}}\pysigline{\sphinxbfcode{SPHINX\_USE\_PYTHON}} + \end{fulllineitems} + + \index{SphinxType (C type)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:c.SphinxType}}\pysigline{\sphinxbfcode{SphinxType}} + \end{fulllineitems} + + \index{sphinx\_global (C variable)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:c.sphinx_global}}\pysigline{\sphinxbfcode{sphinx\_global}} + \end{fulllineitems} + + + \chapter{Javascript items} + \label{\detokenize{objects:javascript-items}}\index{foo() (built-in function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:foo}}\pysiglinewithargsret{\sphinxbfcode{foo}}{}{} + \end{fulllineitems} + + \index{bar (global variable or constant)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:bar}}\pysigline{\sphinxbfcode{bar}} + \end{fulllineitems} + + \index{bar.baz() (bar method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:bar.baz}}\pysiglinewithargsret{\sphinxcode{bar.}\sphinxbfcode{baz}}{\emph{href}, + \emph{callback}\sphinxoptional{, \emph{errback}}}{}~\begin{quote}\begin{description} + \item[{Arguments}] \leavevmode\begin{itemize} + \item {} + \sphinxstyleliteralstrong{href} (\sphinxstyleliteralemphasis{string}) \textendash{} The location of the + resource. + + \item {} + \sphinxstyleliteralstrong{callback} \textendash{} Get’s called with the data returned by the resource. + + \end{itemize} + + \item[{Throws}] \leavevmode + \sphinxstyleliteralstrong{InvalidHref} \textendash{} If the \sphinxtitleref{href} is invalid. + + \item[{Returns}] \leavevmode + \sphinxtitleref{undefined} + + \end{description}\end{quote} + + \end{fulllineitems} + + \index{bar.spam (bar attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:bar.spam}}\pysigline{\sphinxcode{bar.}\sphinxbfcode{spam}} + \end{fulllineitems} + + + \chapter{References} + \label{\detokenize{objects:references}} + Referencing {\hyperref[\detokenize{objects:mod.Cls}]{\sphinxcrossref{\sphinxcode{mod.Cls}}}} or + {\hyperref[\detokenize{objects:mod.Cls}]{\sphinxcrossref{\sphinxcode{mod.Cls}}}} should be the same. + + With target: + {\hyperref[\detokenize{objects:c.Sphinx_DoSomething}]{\sphinxcrossref{\sphinxcode{Sphinx\_DoSomething()}}}} + (parentheses are handled), + {\hyperref[\detokenize{objects:c.SphinxStruct.member}]{\sphinxcrossref{\sphinxcode{SphinxStruct.member}}}}, + {\hyperref[\detokenize{objects:c.SPHINX_USE_PYTHON}]{\sphinxcrossref{\sphinxcode{SPHINX\_USE\_PYTHON}}}}, + {\hyperref[\detokenize{objects:c.SphinxType}]{\sphinxcrossref{\sphinxcode{SphinxType *}}}} (pointer is + handled), {\hyperref[\detokenize{objects:c.sphinx_global}]{\sphinxcrossref{\sphinxcode{sphinx\_global}}}}. + + Without target: \sphinxcode{CFunction()}. \sphinxcode{malloc()}. + + {\hyperref[\detokenize{objects:foo}]{\sphinxcrossref{\sphinxcode{foo()}}}} + {\hyperref[\detokenize{objects:foo}]{\sphinxcrossref{\sphinxcode{foo()}}}} + + {\hyperref[\detokenize{objects:bar}]{\sphinxcrossref{\sphinxcode{bar}}}} + {\hyperref[\detokenize{objects:bar.baz}]{\sphinxcrossref{\sphinxcode{bar.baz()}}}} + {\hyperref[\detokenize{objects:bar.baz}]{\sphinxcrossref{\sphinxcode{bar.baz()}}}} + {\hyperref[\detokenize{objects:bar.baz}]{\sphinxcrossref{\sphinxcode{baz()}}}} + + {\hyperref[\detokenize{objects:bar.baz}]{\sphinxcrossref{\sphinxcode{bar.baz}}}} + + + \chapter{Others} + \label{\detokenize{objects:others}}\index{environment variable!HOME} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:envvar-HOME}}\pysigline{\sphinxbfcode{HOME}} + \end{fulllineitems} + + \index{python command line option!-c command}\index{-c command!python command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-python-c}}\pysigline{\sphinxbfcode{-c}\sphinxcode{~command}} + \end{fulllineitems} + + \index{perl command line option!-c}\index{-c!perl command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-perl-c}}\pysigline{\sphinxbfcode{-c}\sphinxcode{}} + \end{fulllineitems} + + \index{perl command line option!+p}\index{+p!perl command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-perl-arg-p}}\pysigline{\sphinxbfcode{+p}\sphinxcode{}} + \end{fulllineitems} + + \index{perl command line option!--ObjC++}\index{--ObjC++!perl command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-perl-objc}}\pysigline{\sphinxbfcode{-{-}ObjC++}\sphinxcode{}} + \end{fulllineitems} + + \index{perl command line option!--plugin.option}\index{--plugin.option!perl command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-perl-plugin-option}}\pysigline{\sphinxbfcode{-{-}plugin.option}\sphinxcode{}} + \end{fulllineitems} + + \index{perl command line option!create-auth-token}\index{create-auth-token!perl command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-perl-arg-create-auth-token}}\pysigline{\sphinxbfcode{create-auth-token}\sphinxcode{}} + \end{fulllineitems} + + \index{perl command line option!arg}\index{arg!perl command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-perl-arg-arg}}\pysigline{\sphinxbfcode{arg}\sphinxcode{}} + \end{fulllineitems} + + + Link to {\hyperref[\detokenize{objects:cmdoption-perl-arg-p}]{\sphinxcrossref{\sphinxcode{perl +p}}}}, + {\hyperref[\detokenize{objects:cmdoption-perl-objc}]{\sphinxcrossref{\sphinxcode{-{-}ObjC++}}}}, + {\hyperref[\detokenize{objects:cmdoption-perl-plugin-option}]{\sphinxcrossref{\sphinxcode{-{-}plugin.option}}}}, + {\hyperref[\detokenize{objects:cmdoption-perl-arg-create-auth-token}]{\sphinxcrossref{\sphinxcode{create-auth-token}}}} + and {\hyperref[\detokenize{objects:cmdoption-perl-arg-arg}]{\sphinxcrossref{\sphinxcode{arg}}}} + \index{hg command line option!commit}\index{commit!hg command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-hg-arg-commit}}\pysigline{\sphinxbfcode{commit}\sphinxcode{}} + \end{fulllineitems} + + \index{git-commit command line option!-p}\index{-p!git-commit command line option} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:cmdoption-git-commit-p}}\pysigline{\sphinxbfcode{-p}\sphinxcode{}} + \end{fulllineitems} + + + Link to {\hyperref[\detokenize{objects:cmdoption-hg-arg-commit}]{\sphinxcrossref{\sphinxcode{hg commit}}}} + and {\hyperref[\detokenize{objects:cmdoption-git-commit-p}]{\sphinxcrossref{\sphinxcode{git commit -p}}}}. + + + \chapter{User markup} + \label{\detokenize{objects:user-markup}}\index{myobj (userdesc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:userdesc-myobj}}\pysiglinewithargsret{\sphinxbfcode{myobj}}{\emph{parameter}}{} + Description of userdesc. + + \end{fulllineitems} + + + Referencing {\hyperref[\detokenize{objects:userdesc-myobj}]{\sphinxcrossref{\sphinxcode{myobj}}}}. + + + \chapter{CPP domain} + \label{\detokenize{objects:cpp-domain}}\index{n::Array (C++ class)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:_CPPv3N1n5ArrayE}}% + \pysigstartmultiline + \pysigline{\sphinxbfcode{class }\sphinxcode{n::}\sphinxbfcode{Array}}% + \pysigstopmultiline~\index{n::Array::operator{[}{]} (C++ function)}\index{n::Array::operator{[}{]} (C++ + function)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{objects:_CPPv3N1n5ArrayixEj}}% + \pysigstartmultiline + \pysiglinewithargsret{T \&\sphinxcode{}\sphinxbfcode{operator{[}{]}}}{unsigned + \sphinxstyleemphasis{j}}{}% + \pysigstopmultiline\phantomsection\label{\detokenize{objects:_CPPv3NK1n5ArrayixEj}}% + \pysigstartmultiline + \pysiglinewithargsret{\sphinxbfcode{const} T \&\sphinxcode{}\sphinxbfcode{operator{[}{]}}}{unsigned + \sphinxstyleemphasis{j}}{ \sphinxbfcode{const}}% + \pysigstopmultiline + \end{fulllineitems} + + + \end{fulllineitems} + + + \chapter{File with UTF-8 BOM} + \label{\detokenize{bom:file-with-utf-8-bom}}\label{\detokenize{bom::doc}} + This file has a UTF-8 “BOM”. + + + \chapter{Test math extensions \protect\(E = m c^2\protect\)} + \label{\detokenize{math:test-math-extensions}}\label{\detokenize{math::doc}} + This is inline math: \(a^2 + b^2 = c^2\). + \begin{equation*} + \begin{split}a^2 + b^2 = c^2\end{split} + \end{equation*}\begin{equation*} + \begin{split}a + 1 < b\end{split} + \end{equation*}\phantomsection\label{\detokenize{math:equation-foo}}\begin{equation}\label{equation:math:foo} + \begin{split}e^{i\pi} = 1\end{split} + \end{equation}\phantomsection\label{\detokenize{math:equation-math:0}}\begin{equation}\label{equation:math:math:0} + \begin{split}e^{ix} = \cos x + i\sin x\end{split} + \end{equation}\begin{equation*} + \begin{split}n \in \mathbb N\end{split} + \end{equation*}a + 1 < b + Referencing equation \eqref{equation:math:foo}. + + + \chapter{Autodoc tests} + \label{\detokenize{autodoc::doc}}\label{\detokenize{autodoc:autodoc-tests}} + Just testing a few autodoc possibilities… + + autodoc: failed to import module ‘util’; the following exception was raised: + Traceback (most recent call last): + File “/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/\_\_init\_\_.py”, line 397, in import\_object + \_\_import\_\_(self.modname) + ModuleNotFoundError: No module named ‘util’ + + + \phantomsection\label{\detokenize{autodoc:module-test_autodoc}}\index{test\_autodoc (module)} + + \section{test\_autodoc} + \label{\detokenize{autodoc:test-autodoc}} + Test the autodoc extension. This tests mainly the Documenters; the auto + directives are tested in a test source file translated by test\_build. + \begin{quote}\begin{description} + \item[{copyright}] \leavevmode + Copyright 2007-2017 by the Sphinx team, see AUTHORS. + + \item[{license}] \leavevmode + BSD, see LICENSE for details. + + \end{description}\end{quote} + \index{Class (class in test\_autodoc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class}}\pysiglinewithargsret{\sphinxbfcode{class + }\sphinxcode{test\_autodoc.}\sphinxbfcode{Class}}{\emph{arg}}{} + Class to document. + \index{attr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.attr}}\pysigline{\sphinxbfcode{attr}\sphinxbfcode{ + = 'bar'}} + should be documented \textendash{} süß + + \end{fulllineitems} + + \index{descr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.descr}}\pysigline{\sphinxbfcode{descr}} + Descriptor instance docstring. + + \end{fulllineitems} + + \index{docattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.docattr}}\pysigline{\sphinxbfcode{docattr}\sphinxbfcode{ + = 'baz'}} + should likewise be documented \textendash{} süß + + \end{fulllineitems} + + \index{excludemeth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.excludemeth}}\pysiglinewithargsret{\sphinxbfcode{excludemeth}}{}{} + Method that should be excluded. + + \end{fulllineitems} + + \index{inst\_attr\_comment (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.inst_attr_comment}}\pysigline{\sphinxbfcode{inst\_attr\_comment}\sphinxbfcode{ + = None}} + a documented instance attribute + + \end{fulllineitems} + + \index{inst\_attr\_inline (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.inst_attr_inline}}\pysigline{\sphinxbfcode{inst\_attr\_inline}\sphinxbfcode{ + = None}} + an inline documented instance attr + + \end{fulllineitems} + + \index{inst\_attr\_string (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.inst_attr_string}}\pysigline{\sphinxbfcode{inst\_attr\_string}\sphinxbfcode{ + = None}} + a documented instance attribute + + \end{fulllineitems} + + \index{mdocattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.mdocattr}}\pysigline{\sphinxbfcode{mdocattr}\sphinxbfcode{ + = \textless{}\_io.StringIO object\textgreater{}}} + should be documented as well - süß + + \end{fulllineitems} + + \index{meth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.meth}}\pysiglinewithargsret{\sphinxbfcode{meth}}{}{} + Function. + + \end{fulllineitems} + + \index{moore() (test\_autodoc.Class class method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.moore}}\pysiglinewithargsret{\sphinxbfcode{classmethod + }\sphinxbfcode{moore}}{\emph{a}, \emph{e}, \emph{f}}{{ $\rightarrow$ happiness}} + \end{fulllineitems} + + \index{prop (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.prop}}\pysigline{\sphinxbfcode{prop}} + Property. + + \end{fulllineitems} + + \index{skipmeth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.skipmeth}}\pysiglinewithargsret{\sphinxbfcode{skipmeth}}{}{} + Method that should be skipped. + + \end{fulllineitems} + + \index{udocattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.udocattr}}\pysigline{\sphinxbfcode{udocattr}\sphinxbfcode{ + = 'quux'}} + should be documented as well - süß + + \end{fulllineitems} + + + \end{fulllineitems} + + \index{function() (in module test\_autodoc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.function}}\pysiglinewithargsret{\sphinxcode{test\_autodoc.}\sphinxbfcode{function}}{\emph{foo}, + \emph{*args}, \emph{**kwds}}{} + Return spam. + + \end{fulllineitems} + + \index{Class (class in test\_autodoc)} + + \begin{fulllineitems} + \pysiglinewithargsret{\sphinxbfcode{class }\sphinxcode{test\_autodoc.}\sphinxbfcode{Class}}{\emph{arg}}{} + Class to document. + + Additional content. + \index{attr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{attr}\sphinxbfcode{ = 'bar'}} + should be documented \textendash{} süß + + \end{fulllineitems} + + \index{descr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{descr}} + Descriptor instance docstring. + + \end{fulllineitems} + + \index{docattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{docattr}\sphinxbfcode{ = 'baz'}} + should likewise be documented \textendash{} süß + + \end{fulllineitems} + + \index{excludemeth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \pysiglinewithargsret{\sphinxbfcode{excludemeth}}{}{} + Method that should be excluded. + + \end{fulllineitems} + + \index{inheritedmeth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Class.inheritedmeth}}\pysiglinewithargsret{\sphinxbfcode{inheritedmeth}}{}{} + Inherited function. + + \end{fulllineitems} + + \index{inst\_attr\_comment (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{inst\_attr\_comment}\sphinxbfcode{ = None}} + a documented instance attribute + + \end{fulllineitems} + + \index{inst\_attr\_inline (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{inst\_attr\_inline}\sphinxbfcode{ = None}} + an inline documented instance attr + + \end{fulllineitems} + + \index{inst\_attr\_string (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{inst\_attr\_string}\sphinxbfcode{ = None}} + a documented instance attribute + + \end{fulllineitems} + + \index{mdocattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{mdocattr}\sphinxbfcode{ = \textless{}\_io.StringIO object\textgreater{}}} + should be documented as well - süß + + \end{fulllineitems} + + \index{meth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \pysiglinewithargsret{\sphinxbfcode{meth}}{}{} + Function. + + \end{fulllineitems} + + \index{moore() (test\_autodoc.Class class method)} + + \begin{fulllineitems} + \pysiglinewithargsret{\sphinxbfcode{classmethod }\sphinxbfcode{moore}}{\emph{a}, \emph{e}, \emph{f}}{{ + $\rightarrow$ happiness}} + \end{fulllineitems} + + \index{prop (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{prop}} + Property. + + \end{fulllineitems} + + \index{skipmeth() (test\_autodoc.Class method)} + + \begin{fulllineitems} + \pysiglinewithargsret{\sphinxbfcode{skipmeth}}{}{} + Method that should be skipped. + + \end{fulllineitems} + + \index{udocattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{udocattr}\sphinxbfcode{ = 'quux'}} + should be documented as well - süß + + \end{fulllineitems} + + + \end{fulllineitems} + + \index{Outer (class in test\_autodoc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Outer}}\pysigline{\sphinxbfcode{class + }\sphinxcode{test\_autodoc.}\sphinxbfcode{Outer}} + Foo + \index{Outer.Inner (class in test\_autodoc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Outer.Inner}}\pysigline{\sphinxbfcode{class + }\sphinxbfcode{Inner}} + Foo + \index{meth() (test\_autodoc.Outer.Inner method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.Outer.Inner.meth}}\pysiglinewithargsret{\sphinxbfcode{meth}}{}{} + Foo + + \end{fulllineitems} + + + \end{fulllineitems} + + + \end{fulllineitems} + + \index{docattr (test\_autodoc.Class attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxcode{Class.}\sphinxbfcode{docattr}\sphinxbfcode{ = 'baz'}} + should likewise be documented \textendash{} süß + + \end{fulllineitems} + + \index{CustomEx} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.CustomEx}}\pysigline{\sphinxbfcode{exception + }\sphinxcode{test\_autodoc.}\sphinxbfcode{CustomEx}} + My custom exception. + \index{f() (test\_autodoc.CustomEx method)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.CustomEx.f}}\pysiglinewithargsret{\sphinxbfcode{f}}{}{} + Exception method. + + \end{fulllineitems} + + + \end{fulllineitems} + + \index{CustomDict (class in test\_autodoc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.CustomDict}}\pysigline{\sphinxbfcode{class + }\sphinxcode{test\_autodoc.}\sphinxbfcode{CustomDict}} + Bases: \sphinxcode{dict} + + Docstring. + + \end{fulllineitems} + + \index{MarkupError (class in autodoc\_fodder)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:autodoc_fodder.MarkupError}}\pysigline{\sphinxbfcode{class + }\sphinxcode{autodoc\_fodder.}\sphinxbfcode{MarkupError}}~ + \begin{sphinxadmonition}{note}{Note:} + This is a docstring with a + \end{sphinxadmonition} + + Explicit markup ends without a blank line; unexpected unindent. + + + small markup error which should have + correct location information. + + \end{fulllineitems} + + \index{InstAttCls (class in test\_autodoc)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.InstAttCls}}\pysigline{\sphinxbfcode{class + }\sphinxcode{test\_autodoc.}\sphinxbfcode{InstAttCls}} + Class with documented class and instance attributes. + + All members (5 total) + \index{ca1 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.InstAttCls.ca1}}\pysigline{\sphinxbfcode{ca1}\sphinxbfcode{ + = 'a'}} + Doc comment for class attribute InstAttCls.ca1. + It can have multiple lines. + + \end{fulllineitems} + + \index{ca2 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.InstAttCls.ca2}}\pysigline{\sphinxbfcode{ca2}\sphinxbfcode{ + = 'b'}} + Doc comment for InstAttCls.ca2. One line only. + + \end{fulllineitems} + + \index{ca3 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.InstAttCls.ca3}}\pysigline{\sphinxbfcode{ca3}\sphinxbfcode{ + = 'c'}} + Docstring for class attribute InstAttCls.ca3. + + \end{fulllineitems} + + \index{ia1 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.InstAttCls.ia1}}\pysigline{\sphinxbfcode{ia1}\sphinxbfcode{ + = None}} + Doc comment for instance attribute InstAttCls.ia1 + + \end{fulllineitems} + + \index{ia2 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \phantomsection\label{\detokenize{autodoc:test_autodoc.InstAttCls.ia2}}\pysigline{\sphinxbfcode{ia2}\sphinxbfcode{ + = None}} + Docstring for instance attribute InstAttCls.ia2. + + \end{fulllineitems} + + + \end{fulllineitems} + + \index{InstAttCls (class in test\_autodoc)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{class }\sphinxcode{test\_autodoc.}\sphinxbfcode{InstAttCls}} + Class with documented class and instance attributes. + + Specific members (2 total) + \index{ca1 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{ca1}\sphinxbfcode{ = 'a'}} + Doc comment for class attribute InstAttCls.ca1. + It can have multiple lines. + + \end{fulllineitems} + + \index{ia1 (test\_autodoc.InstAttCls attribute)} + + \begin{fulllineitems} + \pysigline{\sphinxbfcode{ia1}\sphinxbfcode{ = None}} + Doc comment for instance attribute InstAttCls.ia1 + + \end{fulllineitems} + + + \end{fulllineitems} + + \phantomsection\label{\detokenize{autodoc:module-autodoc_missing_imports}}\index{autodoc\_missing\_imports + (module)} + \begin{sphinxShadowBox} + \sphinxstyletopictitle{Dedication} + + For Docutils users \& co-developers. + \end{sphinxShadowBox} + + \begin{sphinxShadowBox} + \sphinxstyletopictitle{Abstract} + + This document is a demonstration of the reStructuredText markup + language, containing examples of all basic reStructuredText + constructs and many advanced constructs. + \end{sphinxShadowBox} + + + \chapter{reStructuredText Demonstration} + \label{\detokenize{metadata:restructuredtext-demonstration}}\label{\detokenize{metadata::doc}} + + \section{Examples of Syntax Constructs} + \label{\detokenize{metadata:examples-of-syntax-constructs}} + + \chapter{Test for diverse extensions} + \label{\detokenize{extensions:test-for-diverse-extensions}}\label{\detokenize{extensions::doc}} + + \section{extlinks} + \label{\detokenize{extensions:extlinks}} + Test diverse links: \sphinxhref{http://bugs.python.org/issue1000}{issue 1000} and + \sphinxurl{http://python.org/dev/}, also with + \sphinxhref{http://bugs.python.org/issue1042}{explicit caption}. + + + \section{todo} + \label{\detokenize{extensions:todo}} + + \subsection{list of all todos} + \label{\detokenize{extensions:list-of-all-todos}} + + \chapter{Testing footnote and citation} + \label{\detokenize{footnote:testing-footnote-and-citation}}\label{\detokenize{footnote::doc}} + + \section{numbered footnote} + \label{\detokenize{footnote:numbered-footnote}} + % + \begin{footnote}[1]\sphinxAtStartFootnote + numbered + % + \end{footnote} + + + \section{auto-numbered footnote} + \label{\detokenize{footnote:auto-numbered-footnote}} + % + \begin{footnote}[2]\sphinxAtStartFootnote + auto numbered + % + \end{footnote} + + + \section{named footnote} + \label{\detokenize{footnote:named-footnote}} + % + \begin{footnote}[3]\sphinxAtStartFootnote + named + % + \end{footnote} + + + \section{citation} + \label{\detokenize{footnote:citation}} + \phantomsection\label{\detokenize{footnote:id4}}{\hyperref[\detokenize{footnote:bar}]{\sphinxcrossref{{[}bar{]}}}} + \phantomsection\label{\detokenize{footnote:id5}}{\hyperref[\detokenize{footnote:baz-qux}]{\sphinxcrossref{{[}baz\_qux{]}}}} + + + \section{footnotes in table} + \label{\detokenize{footnote:footnotes-in-table}} + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{Table caption \sphinxfootnotemark[4]}\label{\detokenize{footnote:id14}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + \sphinxstyletheadfamily + name \sphinxfootnotemark[5] + &\sphinxstyletheadfamily + desription + \\ + \hline% + \begin{footnotetext}[4]\sphinxAtStartFootnote + footnote in table caption + % + \end{footnotetext}\ignorespaces % + \begin{footnotetext}[5]\sphinxAtStartFootnote + footnote in table header + % + \end{footnotetext}\ignorespaces + VIDIOC\_CROPCAP + & + Information about VIDIOC\_CROPCAP % + \begin{footnote}[6]\sphinxAtStartFootnote + footnote in table not in header + % + \end{footnote} + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + + + \section{footenotes} + \label{\detokenize{footnote:footenotes}}\paragraph{Citations} + + + \chapter{Various kinds of lists} + \label{\detokenize{lists:various-kinds-of-lists}}\label{\detokenize{lists::doc}} + + \section{nested enumerated lists} + \label{\detokenize{lists:nested-enumerated-lists}}\begin{enumerate} + \item {} + one + + \item {} + two + \begin{enumerate} + \item {} + two.1 + + \item {} + two.2 + + \end{enumerate} + + \item {} + three + + \end{enumerate} + + + \section{enumerated lists with non-default start values} + \label{\detokenize{lists:enumerated-lists-with-non-default-start-values}}\begin{enumerate} + \setcounter{enumi}{-1} + \item {} + zero + + \item {} + one + + \end{enumerate} + + + \bigskip\hrule\bigskip + + \begin{enumerate} + \item {} + one + + \item {} + two + + \end{enumerate} + + + \bigskip\hrule\bigskip + + \begin{enumerate} + \setcounter{enumi}{1} + \item {} + two + + \item {} + three + + \end{enumerate} + + + \section{enumerated lists using letters} + \label{\detokenize{lists:enumerated-lists-using-letters}}\begin{enumerate} + \item {} + a + + \item {} + b + + \item {} + c + + \item {} + d + + \end{enumerate} + + + \bigskip\hrule\bigskip + + \begin{enumerate} + \setcounter{enumi}{23} + \item {} + x + + \item {} + y + + \item {} + z + + \item {} + \{ + + \end{enumerate} + + + \section{definition lists} + \label{\detokenize{lists:definition-lists}}\begin{description} + \item[{term1}] \leavevmode + description + + \item[{term2 (\sphinxstylestrong{stronged partially})}] \leavevmode + description + + \end{description} + + + \chapter{Generated section} + \label{\detokenize{otherext::doc}}\label{\detokenize{otherext:id1}} + + \chapter{Indices and tables} + \label{\detokenize{contents:indices-and-tables}}\begin{itemize} + \item {} + \DUrole{xref,std,std-ref}{genindex} + + \item {} + \DUrole{xref,std,std-ref}{modindex} + + \item {} + \DUrole{xref,std,std-ref}{search} + + \end{itemize} + + + \chapter{References} + \label{\detokenize{contents:references}} + + \chapter{Test for issue \#1157} + \label{\detokenize{contents:test-for-issue-1157}} + This used to crash: + + + \chapter{Test for issue \#1700} + \label{\detokenize{contents:test-for-issue-1700}} + {\hyperref[\detokenize{contents:mastertoc}]{\sphinxcrossref{\DUrole{std,std-ref}{Table of Contents}}}} + + + \chapter{Test for indirect hyperlink targets} + \label{\detokenize{contents:test-for-indirect-hyperlink-targets}} + {\hyperref[\detokenize{markup:some-label}]{\sphinxcrossref{\DUrole{std,std-ref}{indirect hyperref}}}} + + \begin{sphinxthebibliography}{baz_qux} + \bibitem[bar]{\detokenize{bar}}{\phantomsection\label{\detokenize{footnote:bar}} + cite + } + \bibitem[baz\_qux]{\detokenize{baz_qux}}{\phantomsection\label{\detokenize{footnote:baz-qux}} + citation including underscore + } + \bibitem[Ref1]{\detokenize{Ref1}}{\phantomsection\label{\detokenize{contents:ref1}} + Reference target. + } + \bibitem[Ref\_1]{\detokenize{Ref_1}}{\phantomsection\label{\detokenize{contents:ref-1}} + Reference target 2. + } + \end{sphinxthebibliography} + + + \renewcommand{\indexname}{Python Module Index} + \begin{sphinxtheindex} + \def\bigletter#1{{\Large\sffamily#1}\nopagebreak\vspace{1mm}} + \bigletter{a} + \item + {\sphinxstyleindexentry{autodoc\_missing\_imports}}\sphinxstyleindexpageref{autodoc:\detokenize{module-autodoc_missing_imports}} + \indexspace + \bigletter{m} + \item + {\sphinxstyleindexentry{mod}}\sphinxstyleindexextra{UNIX}\sphinxstyleindexpageref{objects:\detokenize{module-mod}} + \indexspace + \bigletter{t} + \item + {\sphinxstyleindexentry{test\_autodoc}}\sphinxstyleindexpageref{autodoc:\detokenize{module-test_autodoc}} + \end{sphinxtheindex} + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{bar} + \label{\detokenize{bar:test-footenotes}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + Same footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in bar + % + \end{footnote} in bar.rst + + + \chapter{baz} + \label{\detokenize{baz:baz}}\label{\detokenize{baz::doc}} + Auto footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in baz + % + \end{footnote} in baz.rst + + \begin{sphinxShadowBox} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{index:id30}}{\hyperref[\detokenize{index:the-section-with-a-reference-to-authoryear}]{\sphinxcrossref{The + section with a reference to + \phantomsection\label{\detokenize{index:id1}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}}}} + + \item {} + \phantomsection\label{\detokenize{index:id31}}{\hyperref[\detokenize{index:the-section-with-a-reference-to}]{\sphinxcrossref{The + section with a reference to }}} + + \end{itemize} + \end{sphinxShadowBox} + + + \chapter{The section with a reference to {[}AuthorYear{]}} + \label{\detokenize{index:the-section-with-a-reference-to-authoryear}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a reference to + \label{\detokenize{index:id2}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}.}\label{\detokenize{index:id25}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{The table title with a reference to {[}AuthorYear{]}}\label{\detokenize{index:id26}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + \sphinxstyletheadfamily + Header1 + &\sphinxstyletheadfamily + Header2 + \\ + \hline + Content + & + Content + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + \paragraph{The rubric title with a reference to {[}AuthorYear{]}} + \begin{itemize} + \item {} + First footnote: % + \begin{footnote}[2]\sphinxAtStartFootnote + First + % + \end{footnote} + + \item {} + Second footnote: % + \begin{footnote}[1]\sphinxAtStartFootnote + Second + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/}{Sphinx} + + \item {} + Third footnote: % + \begin{footnote}[3]\sphinxAtStartFootnote + Third + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/~test/}{URL including tilde} + + \item {} + GitHub Page: \sphinxurl{https://github.com/sphinx-doc/sphinx} + + \item {} + Mailing list: \sphinxhref{mailto:sphinx-dev@googlegroups.com}{sphinx-dev@googlegroups.com} + + \end{itemize} + + + \chapter{The section with a reference to \sphinxfootnotemark[4]} + \label{\detokenize{index:the-section-with-a-reference-to}}% + \begin{footnotetext}[4]\sphinxAtStartFootnote + Footnote in section + % + \end{footnotetext}\ignorespaces \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{URL in term}}] \leavevmode + Description Description Description … + + \item[{Footnote in term \sphinxfootnotemark[5]}] \leavevmode% + \begin{footnotetext}[5]\sphinxAtStartFootnote + Footnote in term + % + \end{footnotetext}\ignorespaces + Description Description Description … + \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{Term in deflist}}] \leavevmode + Description2 + + \end{description} + + \end{description} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a footnote to + \sphinxfootnotemark[6].}\label{\detokenize{index:id27}}\end{figure} + % + \begin{footnotetext}[6]\sphinxAtStartFootnote + Footnote in caption + % + \end{footnotetext}\ignorespaces + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{footnote \sphinxfootnotemark[7] in caption of normal table}\label{\detokenize{index:id28}} + \sphinxaftercaption + \begin{tabular}[t]{|\X{1}{2}|\X{1}{2}|} + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline% + \begin{footnotetext}[7]\sphinxAtStartFootnote + Foot note in table + % + \end{footnotetext}\ignorespaces + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{tabular} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxatlongtablestart\begin{longtable}{|\X{1}{2}|\X{1}{2}|} + \caption{footnote \sphinxfootnotemark[8] in caption \sphinxfootnotemark[9] of + longtable\strut}\label{\detokenize{index:id29}}\\*[\sphinxlongtablecapskipadjust] + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endfirsthead + + \multicolumn{2}{c}% + {\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} -- continued from previous page}}}\\ + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endhead + + \hline + \multicolumn{2}{r}{\makebox[0pt][r]{\sphinxtablecontinued{Continued on next page}}}\\ + \endfoot + + \endlastfoot + % + \begin{footnotetext}[8]\sphinxAtStartFootnote + Foot note in longtable + % + \end{footnotetext}\ignorespaces % + \begin{footnotetext}[9]\sphinxAtStartFootnote + Second footnote in caption of longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinfootnote}}} + \sphinxSetupCaptionForVerbatim{I am in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{foo}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnotetext}\ignorespaces + + This is a reference to the code-block in the footnote: + {\hyperref[\detokenize{index:codeblockinfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am in a + footnote}}}} + & + This is one more footnote with some code in it % + \begin{footnote}[10]\sphinxAtStartFootnote + Third footnote in longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinanotherfootnote}}} + \sphinxSetupCaptionForVerbatim{I am also in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{bar}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnote}. + \\ + \hline + This is a reference to the other code block: + {\hyperref[\detokenize{index:codeblockinanotherfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am also in + a footnote}}}} + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{longtable}\sphinxatlongtableend\end{savenotes} + + \begin{sphinxthebibliography}{AuthorYear} + \bibitem[AuthorYear]{\detokenize{AuthorYear}}{\phantomsection\label{\detokenize{index:authoryear}} + Author, Title, Year + } + \end{sphinxthebibliography} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/footnotes + # outdir: /tmp/footnotes/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{bar} + \label{\detokenize{bar:test-footenotes}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + Same footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in bar + % + \end{footnote} in bar.rst + + + \chapter{baz} + \label{\detokenize{baz:baz}}\label{\detokenize{baz::doc}} + Auto footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in baz + % + \end{footnote} in baz.rst + + \begin{sphinxShadowBox} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{index:id30}}{\hyperref[\detokenize{index:the-section-with-a-reference-to-authoryear}]{\sphinxcrossref{The + section with a reference to + \phantomsection\label{\detokenize{index:id1}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}}}} + + \item {} + \phantomsection\label{\detokenize{index:id31}}{\hyperref[\detokenize{index:the-section-with-a-reference-to}]{\sphinxcrossref{The + section with a reference to }}} + + \end{itemize} + \end{sphinxShadowBox} + + + \chapter{The section with a reference to {[}AuthorYear{]}} + \label{\detokenize{index:the-section-with-a-reference-to-authoryear}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a reference to + \label{\detokenize{index:id2}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}.}\label{\detokenize{index:id25}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{The table title with a reference to {[}AuthorYear{]}}\label{\detokenize{index:id26}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + \sphinxstyletheadfamily + Header1 + &\sphinxstyletheadfamily + Header2 + \\ + \hline + Content + & + Content + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + \paragraph{The rubric title with a reference to {[}AuthorYear{]}} + \begin{itemize} + \item {} + First footnote: % + \begin{footnote}[2]\sphinxAtStartFootnote + First + % + \end{footnote} + + \item {} + Second footnote: % + \begin{footnote}[1]\sphinxAtStartFootnote + Second + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/}{Sphinx} (http://sphinx-doc.org/) + + \item {} + Third footnote: % + \begin{footnote}[3]\sphinxAtStartFootnote + Third + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/~test/}{URL including tilde} + (http://sphinx-doc.org/\textasciitilde{}test/) + + \item {} + GitHub Page: \sphinxurl{https://github.com/sphinx-doc/sphinx} + + \item {} + Mailing list: \sphinxhref{mailto:sphinx-dev@googlegroups.com}{sphinx-dev@googlegroups.com} + + \end{itemize} + + + \chapter{The section with a reference to \sphinxfootnotemark[4]} + \label{\detokenize{index:the-section-with-a-reference-to}}% + \begin{footnotetext}[4]\sphinxAtStartFootnote + Footnote in section + % + \end{footnotetext}\ignorespaces \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{URL in term} (http://sphinx-doc.org/)}] \leavevmode + Description Description Description … + + \item[{Footnote in term \sphinxfootnotemark[5]}] \leavevmode% + \begin{footnotetext}[5]\sphinxAtStartFootnote + Footnote in term + % + \end{footnotetext}\ignorespaces + Description Description Description … + \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{Term in deflist} (http://sphinx-doc.org/)}] \leavevmode + Description2 + + \end{description} + + \end{description} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a footnote to + \sphinxfootnotemark[6].}\label{\detokenize{index:id27}}\end{figure} + % + \begin{footnotetext}[6]\sphinxAtStartFootnote + Footnote in caption + % + \end{footnotetext}\ignorespaces + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{footnote \sphinxfootnotemark[7] in caption of normal table}\label{\detokenize{index:id28}} + \sphinxaftercaption + \begin{tabular}[t]{|\X{1}{2}|\X{1}{2}|} + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline% + \begin{footnotetext}[7]\sphinxAtStartFootnote + Foot note in table + % + \end{footnotetext}\ignorespaces + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{tabular} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxatlongtablestart\begin{longtable}{|\X{1}{2}|\X{1}{2}|} + \caption{footnote \sphinxfootnotemark[8] in caption \sphinxfootnotemark[9] of + longtable\strut}\label{\detokenize{index:id29}}\\*[\sphinxlongtablecapskipadjust] + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endfirsthead + + \multicolumn{2}{c}% + {\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} -- continued from previous page}}}\\ + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endhead + + \hline + \multicolumn{2}{r}{\makebox[0pt][r]{\sphinxtablecontinued{Continued on next page}}}\\ + \endfoot + + \endlastfoot + % + \begin{footnotetext}[8]\sphinxAtStartFootnote + Foot note in longtable + % + \end{footnotetext}\ignorespaces % + \begin{footnotetext}[9]\sphinxAtStartFootnote + Second footnote in caption of longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinfootnote}}} + \sphinxSetupCaptionForVerbatim{I am in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{foo}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnotetext}\ignorespaces + + This is a reference to the code-block in the footnote: + {\hyperref[\detokenize{index:codeblockinfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am in a + footnote}}}} + & + This is one more footnote with some code in it % + \begin{footnote}[10]\sphinxAtStartFootnote + Third footnote in longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinanotherfootnote}}} + \sphinxSetupCaptionForVerbatim{I am also in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{bar}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnote}. + \\ + \hline + This is a reference to the other code block: + {\hyperref[\detokenize{index:codeblockinanotherfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am also in + a footnote}}}} + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{longtable}\sphinxatlongtableend\end{savenotes} + + \begin{sphinxthebibliography}{AuthorYear} + \bibitem[AuthorYear]{\detokenize{AuthorYear}}{\phantomsection\label{\detokenize{index:authoryear}} + Author, Title, Year + } + \end{sphinxthebibliography} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/footnotes + # outdir: /tmp/footnotes/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{bar} + \label{\detokenize{bar:test-footenotes}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + Same footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in bar + % + \end{footnote} in bar.rst + + + \chapter{baz} + \label{\detokenize{baz:baz}}\label{\detokenize{baz::doc}} + Auto footnote number % + \begin{footnote}[2]\sphinxAtStartFootnote + footnote in baz + % + \end{footnote} in baz.rst + + \begin{sphinxShadowBox} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{index:id30}}{\hyperref[\detokenize{index:the-section-with-a-reference-to-authoryear}]{\sphinxcrossref{The + section with a reference to + \phantomsection\label{\detokenize{index:id1}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}}}} + + \item {} + \phantomsection\label{\detokenize{index:id31}}{\hyperref[\detokenize{index:the-section-with-a-reference-to}]{\sphinxcrossref{The + section with a reference to }}} + + \end{itemize} + \end{sphinxShadowBox} + + + \chapter{The section with a reference to {[}AuthorYear{]}} + \label{\detokenize{index:the-section-with-a-reference-to-authoryear}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a reference to + \label{\detokenize{index:id2}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}.}\label{\detokenize{index:id25}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{The table title with a reference to {[}AuthorYear{]}}\label{\detokenize{index:id26}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + \sphinxstyletheadfamily + Header1 + &\sphinxstyletheadfamily + Header2 + \\ + \hline + Content + & + Content + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + \paragraph{The rubric title with a reference to {[}AuthorYear{]}} + \begin{itemize} + \item {} + First footnote: % + \begin{footnote}[3]\sphinxAtStartFootnote + First + % + \end{footnote} + + \item {} + Second footnote: % + \begin{footnote}[1]\sphinxAtStartFootnote + Second + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/}{Sphinx}% + \begin{footnote}[4]\sphinxAtStartFootnote + \sphinxnolinkurl{http://sphinx-doc.org/} + % + \end{footnote} + + \item {} + Third footnote: % + \begin{footnote}[6]\sphinxAtStartFootnote + Third + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/~test/}{URL including tilde}% + \begin{footnote}[5]\sphinxAtStartFootnote + \sphinxnolinkurl{http://sphinx-doc.org/~test/} + % + \end{footnote} + + \item {} + GitHub Page: \sphinxurl{https://github.com/sphinx-doc/sphinx} + + \item {} + Mailing list: \sphinxhref{mailto:sphinx-dev@googlegroups.com}{sphinx-dev@googlegroups.com} + + \end{itemize} + + + \chapter{The section with a reference to \sphinxfootnotemark[7]} + \label{\detokenize{index:the-section-with-a-reference-to}}% + \begin{footnotetext}[7]\sphinxAtStartFootnote + Footnote in section + % + \end{footnotetext}\ignorespaces \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{URL in term}\sphinxfootnotemark[8]}] \leavevmode% + \begin{footnotetext}[8]\sphinxAtStartFootnote + \sphinxnolinkurl{http://sphinx-doc.org/} + % + \end{footnotetext}\ignorespaces + Description Description Description … + + \item[{Footnote in term \sphinxfootnotemark[10]}] \leavevmode% + \begin{footnotetext}[10]\sphinxAtStartFootnote + Footnote in term + % + \end{footnotetext}\ignorespaces + Description Description Description … + \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{Term in deflist}\sphinxfootnotemark[9]}] \leavevmode% + \begin{footnotetext}[9]\sphinxAtStartFootnote + \sphinxnolinkurl{http://sphinx-doc.org/} + % + \end{footnotetext}\ignorespaces + Description2 + + \end{description} + + \end{description} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a footnote to + \sphinxfootnotemark[11].}\label{\detokenize{index:id27}}\end{figure} + % + \begin{footnotetext}[11]\sphinxAtStartFootnote + Footnote in caption + % + \end{footnotetext}\ignorespaces + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{footnote \sphinxfootnotemark[12] in caption of normal table}\label{\detokenize{index:id28}} + \sphinxaftercaption + \begin{tabular}[t]{|\X{1}{2}|\X{1}{2}|} + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline% + \begin{footnotetext}[12]\sphinxAtStartFootnote + Foot note in table + % + \end{footnotetext}\ignorespaces + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{tabular} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxatlongtablestart\begin{longtable}{|\X{1}{2}|\X{1}{2}|} + \caption{footnote \sphinxfootnotemark[13] in caption \sphinxfootnotemark[14] of + longtable\strut}\label{\detokenize{index:id29}}\\*[\sphinxlongtablecapskipadjust] + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endfirsthead + + \multicolumn{2}{c}% + {\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} -- continued from previous page}}}\\ + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endhead + + \hline + \multicolumn{2}{r}{\makebox[0pt][r]{\sphinxtablecontinued{Continued on next page}}}\\ + \endfoot + + \endlastfoot + % + \begin{footnotetext}[13]\sphinxAtStartFootnote + Foot note in longtable + % + \end{footnotetext}\ignorespaces % + \begin{footnotetext}[14]\sphinxAtStartFootnote + Second footnote in caption of longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinfootnote}}} + \sphinxSetupCaptionForVerbatim{I am in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{foo}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnotetext}\ignorespaces + + This is a reference to the code-block in the footnote: + {\hyperref[\detokenize{index:codeblockinfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am in a + footnote}}}} + & + This is one more footnote with some code in it % + \begin{footnote}[15]\sphinxAtStartFootnote + Third footnote in longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinanotherfootnote}}} + \sphinxSetupCaptionForVerbatim{I am also in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{bar}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnote}. + \\ + \hline + This is a reference to the other code block: + {\hyperref[\detokenize{index:codeblockinanotherfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am also in + a footnote}}}} + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{longtable}\sphinxatlongtableend\end{savenotes} + + \begin{sphinxthebibliography}{AuthorYear} + \bibitem[AuthorYear]{\detokenize{AuthorYear}}{\phantomsection\label{\detokenize{index:authoryear}} + Author, Title, Year + } + \end{sphinxthebibliography} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/footnotes + # outdir: /tmp/footnotes/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{bar} + \label{\detokenize{bar:test-footenotes}}\label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + Same footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in bar + % + \end{footnote} in bar.rst + + + \chapter{baz} + \label{\detokenize{baz:baz}}\label{\detokenize{baz::doc}} + Auto footnote number % + \begin{footnote}[1]\sphinxAtStartFootnote + footnote in baz + % + \end{footnote} in baz.rst + + \begin{sphinxShadowBox} + \begin{itemize} + \item {} + \phantomsection\label{\detokenize{index:id30}}{\hyperref[\detokenize{index:the-section-with-a-reference-to-authoryear}]{\sphinxcrossref{The + section with a reference to + \phantomsection\label{\detokenize{index:id1}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}}}} + + \item {} + \phantomsection\label{\detokenize{index:id31}}{\hyperref[\detokenize{index:the-section-with-a-reference-to}]{\sphinxcrossref{The + section with a reference to }}} + + \end{itemize} + \end{sphinxShadowBox} + + + \chapter{The section with a reference to {[}AuthorYear{]}} + \label{\detokenize{index:the-section-with-a-reference-to-authoryear}} + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a reference to + \label{\detokenize{index:id2}}{\hyperref[\detokenize{index:authoryear}]{\sphinxcrossref{{[}AuthorYear{]}}}}.}\label{\detokenize{index:id25}}\end{figure} + + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{The table title with a reference to {[}AuthorYear{]}}\label{\detokenize{index:id26}} + \sphinxaftercaption + \begin{tabulary}{\linewidth}[t]{|T|T|} + \hline + \sphinxstyletheadfamily + Header1 + &\sphinxstyletheadfamily + Header2 + \\ + \hline + Content + & + Content + \\ + \hline + \end{tabulary} + \par + \sphinxattableend\end{savenotes} + \paragraph{The rubric title with a reference to {[}AuthorYear{]}} + \begin{itemize} + \item {} + First footnote: % + \begin{footnote}[2]\sphinxAtStartFootnote + First + % + \end{footnote} + + \item {} + Second footnote: % + \begin{footnote}[1]\sphinxAtStartFootnote + Second + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/}{Sphinx} + + \item {} + Third footnote: % + \begin{footnote}[3]\sphinxAtStartFootnote + Third + % + \end{footnote} + + \item {} + \sphinxhref{http://sphinx-doc.org/~test/}{URL including tilde} + + \item {} + GitHub Page: \sphinxurl{https://github.com/sphinx-doc/sphinx} + + \item {} + Mailing list: \sphinxhref{mailto:sphinx-dev@googlegroups.com}{sphinx-dev@googlegroups.com} + + \end{itemize} + + + \chapter{The section with a reference to \sphinxfootnotemark[4]} + \label{\detokenize{index:the-section-with-a-reference-to}}% + \begin{footnotetext}[4]\sphinxAtStartFootnote + Footnote in section + % + \end{footnotetext}\ignorespaces \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{URL in term}}] \leavevmode + Description Description Description … + + \item[{Footnote in term \sphinxfootnotemark[5]}] \leavevmode% + \begin{footnotetext}[5]\sphinxAtStartFootnote + Footnote in term + % + \end{footnotetext}\ignorespaces + Description Description Description … + \begin{description} + \item[{\sphinxhref{http://sphinx-doc.org/}{Term in deflist}}] \leavevmode + Description2 + + \end{description} + + \end{description} + + \begin{figure}[htbp] + \centering + \capstart + + \noindent\sphinxincludegraphics{{rimg}.png} + \caption{This is the figure caption with a footnote to + \sphinxfootnotemark[6].}\label{\detokenize{index:id27}}\end{figure} + % + \begin{footnotetext}[6]\sphinxAtStartFootnote + Footnote in caption + % + \end{footnotetext}\ignorespaces + + \begin{savenotes}\sphinxattablestart + \centering + \sphinxcapstartof{table} + \sphinxcaption{footnote \sphinxfootnotemark[7] in caption of normal table}\label{\detokenize{index:id28}} + \sphinxaftercaption + \begin{tabular}[t]{|\X{1}{2}|\X{1}{2}|} + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline% + \begin{footnotetext}[7]\sphinxAtStartFootnote + Foot note in table + % + \end{footnotetext}\ignorespaces + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{tabular} + \par + \sphinxattableend\end{savenotes} + + + \begin{savenotes}\sphinxatlongtablestart\begin{longtable}{|\X{1}{2}|\X{1}{2}|} + \caption{footnote \sphinxfootnotemark[8] in caption \sphinxfootnotemark[9] of + longtable\strut}\label{\detokenize{index:id29}}\\*[\sphinxlongtablecapskipadjust] + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endfirsthead + + \multicolumn{2}{c}% + {\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} -- continued from previous page}}}\\ + \hline + \sphinxstyletheadfamily + name + &\sphinxstyletheadfamily + desc + \\ + \hline + \endhead + + \hline + \multicolumn{2}{r}{\makebox[0pt][r]{\sphinxtablecontinued{Continued on next page}}}\\ + \endfoot + + \endlastfoot + % + \begin{footnotetext}[8]\sphinxAtStartFootnote + Foot note in longtable + % + \end{footnotetext}\ignorespaces % + \begin{footnotetext}[9]\sphinxAtStartFootnote + Second footnote in caption of longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinfootnote}}} + \sphinxSetupCaptionForVerbatim{I am in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{foo}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnotetext}\ignorespaces + + This is a reference to the code-block in the footnote: + {\hyperref[\detokenize{index:codeblockinfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am in a + footnote}}}} + & + This is one more footnote with some code in it % + \begin{footnote}[10]\sphinxAtStartFootnote + Third footnote in longtable + + \def\sphinxLiteralBlockLabel{\label{\detokenize{index:codeblockinanotherfootnote}}} + \sphinxSetupCaptionForVerbatim{I am also in a footnote} + \sphinxSetupCodeBlockInFootnote + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{bar}\PYG{p}{(}\PYG{n}{x}\PYG{p}{,}\PYG{n}{y}\PYG{p}{)}\PYG{p}{:} + \PYG{k}{return} \PYG{n}{x}\PYG{o}{+}\PYG{n}{y} + \end{sphinxVerbatim} + \let\sphinxVerbatimTitle\empty + \let\sphinxLiteralBlockLabel\empty + % + \end{footnote}. + \\ + \hline + This is a reference to the other code block: + {\hyperref[\detokenize{index:codeblockinanotherfootnote}]{\sphinxcrossref{\DUrole{std,std-ref}{I am also in + a footnote}}}} + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + a + & + b + \\ + \hline + \end{longtable}\sphinxatlongtableend\end{savenotes} + + \begin{sphinxthebibliography}{AuthorYear} + \bibitem[AuthorYear]{\detokenize{AuthorYear}}{\phantomsection\label{\detokenize{index:authoryear}} + Author, Title, Year + } + \end{sphinxthebibliography} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/footnotes + # outdir: /tmp/footnotes/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + this is dummy content + + + \chapter[Test section]{\lowercase{\sphinxincludegraphics[width=15bp,height=15bp]}{{pic}.png} Test section} + \label{\detokenize{index:picture-test-section}}\label{\detokenize{index:test-image-in-section}} + blah blah blah + + + \chapter{Another section} + \label{\detokenize{index:another-section}} + another blah + + + \chapter[Other {[}blah{]} section]{Other {[}blah{]} + \lowercase{\sphinxincludegraphics[width=15bp,height=15bp]}{{pic}.png} section} + \label{\detokenize{index:other-blah-picture-section}} + other blah + + + \chapter[]{\lowercase{\sphinxincludegraphics[width=15bp,height=15bp]}{{pic}.png}} + \label{\detokenize{index:picture}} + blah blah blah + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mpic.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/image-in-section + # outdir: /tmp/image-in-section/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mpic.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/root + # outdir: /tmp/root/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 11%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 22%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 33%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 44%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 55%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 66%] #x1B[33msvgimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 77%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 88%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + #x1B[01mcopying additional files...#x1B[39;49;00m svgimg.svg + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{1} + + + \title{Sphinx Tests Documentation} + \date{Nov 15, 2019} + \release{} + \author{Georg Brandl} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \section{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \section{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \subsection{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \section{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \section{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \subsection{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{article} + \documentclass[letterpaper,10pt,english]{sphinxhowto} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{2} + + + \title{Sphinx Tests Documentation} + \date{Nov 15, 2019} + \release{} + \author{Georg Brandl} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \section{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \subsection{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \subsubsection{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \subsection{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \subsubsection{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \section{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \subsection{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \subsubsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \subsection{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \subsubsection{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{foo::doc}} + + + should be 1 + + + \chapter{Foo A} + \label{\detokenize{foo:foo}}\label{\detokenize{foo:foo-a}} + should be 1.1 + + + \section{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \chapter{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \section{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mfoo#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mfoo#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{bar::doc}} + + + should be 2 + + + \chapter{Bar A} + \label{\detokenize{bar:bar-a}}\label{\detokenize{bar:bar}} + should be 2.1 + + + \section{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \chapter{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \section{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mbar#x1B[39;49;00m #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{3} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{qux::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \section{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \section{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \subsection{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \section{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \section{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \subsection{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mqux#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mqux#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{1} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \section{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \section{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \subsection{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \section{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \section{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \subsection{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31mWARNING: The config value `latex_toplevel_sectioning` has to be a one of ('part', 'chapter', + 'section'), but `None` is given.#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31mWARNING: The config value `latex_toplevel_sectioning` has to be a one of ('part', 'chapter', + 'section'), but `None` is given.#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/qux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{0} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \part{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \chapter{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \section{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \chapter{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \section{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \part{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \chapter{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \section{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \chapter{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \section{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{1} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \chapter{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \section{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \subsection{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \section{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \subsection{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \chapter{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \section{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \subsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \section{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \subsection{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{report} + \documentclass[letterpaper,10pt,english]{sphinxmanual} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + \setcounter{tocdepth}{2} + + + \title{Python} + \date{Nov 15, 2019} + \release{} + \author{} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + + \section{Foo} + \label{\detokenize{foo:foo}}\label{\detokenize{foo::doc}}\label{\detokenize{foo:test-toctree-max-depth}} + should be 1 + + + \subsection{Foo A} + \label{\detokenize{foo:foo-a}} + should be 1.1 + + + \subsubsection{Foo A1} + \label{\detokenize{foo:foo-a1}} + should be 1.1.1 + + + \subsection{Foo B} + \label{\detokenize{foo:foo-b}} + should be 1.2 + + + \subsubsection{Foo B1} + \label{\detokenize{foo:foo-b1}} + should be 1.2.1 + + + \section{Bar} + \label{\detokenize{bar::doc}}\label{\detokenize{bar:bar}} + should be 2 + + + \subsection{Bar A} + \label{\detokenize{bar:bar-a}} + should be 2.1 + + + \subsubsection{Baz A} + \label{\detokenize{baz:baz-a}}\label{\detokenize{baz::doc}} + should be 2.1.1 + + + \subsection{Bar B} + \label{\detokenize{bar:bar-b}} + should be 2.2 + + + \subsubsection{Bar B1} + \label{\detokenize{bar:bar-b1}} + should be 2.2.1 + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + # testroot: root + # builder: latex + # srcdir: /tmp/toctree-maxdepth + # outdir: /tmp/toctree-maxdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mfoo#x1B[39;49;00m #x1B[32mbar#x1B[39;49;00m + #x1B[32mbaz#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: foo is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/toctree-maxdepth/index.rst:4: WARNING: bar is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + + + + + %% Generated by Sphinx. + \def\sphinxdocclass{article} + \documentclass[letterpaper,10pt,english]{sphinxhowto} + \ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen + \fi \sphinxpxdimen=.75bp\relax + + \usepackage[utf8]{inputenc} + \ifdefined\DeclareUnicodeCharacter + \ifdefined\DeclareUnicodeCharacterAsOptional\else + \DeclareUnicodeCharacter{00A0}{\nobreakspace} + \fi\fi + \usepackage{cmap} + \usepackage[T1]{fontenc} + \usepackage{amsmath,amssymb,amstext} + \usepackage{babel} + \usepackage{times} + \usepackage[Bjarne]{fncychap} + \usepackage[,maxlistdepth=10]{sphinx} + + \usepackage{geometry} + + % Include hyperref last. + \usepackage{hyperref} + % Fix anchor placement for figures with captions. + \usepackage{hypcap}% it must be loaded after hyperref. + % Set up styles of URL: it should be placed after hyperref. + \urlstyle{same} + + \addto\captionsenglish{\renewcommand{\figurename}{Fig.}} + \addto\captionsenglish{\renewcommand{\tablename}{Table}} + \addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} + + \addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} + \addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} + + \addto\extrasenglish{\def\pageautorefname{page}} + + + \title{Testing maxlistdepth=10} + \date{Nov 15, 2019} + \release{} + \author{Georg Brandl} + \newcommand{\sphinxlogo}{\vbox{}} + \renewcommand{\releasename}{Release} + \makeindex + + \begin{document} + + \maketitle + \sphinxtableofcontents + \phantomsection\label{\detokenize{index::doc}} + + \begin{enumerate} + \item {} + 1 + \begin{enumerate} + \item {} + 2 + \begin{enumerate} + \item {} + 3 + \begin{enumerate} + \item {} + 4 + \begin{enumerate} + \item {} + 5 + \begin{enumerate} + \item {} + 6 + \begin{enumerate} + \item {} + 7 + \begin{enumerate} + \item {} + 8 + \begin{enumerate} + \item {} + 9 + \begin{quote} + + 10a + \end{quote} + \begin{itemize} + \item {} + 10b + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{foo}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:} + \end{sphinxVerbatim} + + \end{itemize} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + + \end{enumerate} + \begin{itemize} + \item {} + 1 + \begin{itemize} + \item {} + 2 + \begin{itemize} + \item {} + 3 + \begin{itemize} + \item {} + 4 + \begin{itemize} + \item {} + 5 + \begin{itemize} + \item {} + 6 + \begin{itemize} + \item {} + 7 + \begin{itemize} + \item {} + 8 + \begin{enumerate} + \item {} + 9 + \begin{quote} + + 10a + \end{quote} + \begin{enumerate} + \item {} + 10b + + \begin{sphinxVerbatim}[commandchars=\\\{\}] + \PYG{k}{def} \PYG{n+nf}{foo}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:} + \end{sphinxVerbatim} + + \end{enumerate} + + \end{enumerate} + + \end{itemize} + + \end{itemize} + + \end{itemize} + + \end{itemize} + + \end{itemize} + + \end{itemize} + + \end{itemize} + + \end{itemize} + + + \renewcommand{\indexname}{Index} + \printindex + \end{document} + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + + # testroot: root + # builder: latex + # srcdir: /tmp/maxlistdepth + # outdir: /tmp/maxlistdepth/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/test_latex_table + # outdir: /tmp/test_latex_table/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mcomplex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mlongtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtabular#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mtabular#x1B[39;49;00m + #x1B[32mlongtable#x1B[39;49;00m #x1B[32mcomplex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/test_latex_table + # outdir: /tmp/test_latex_table/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mtabular#x1B[39;49;00m + #x1B[32mlongtable#x1B[39;49;00m #x1B[32mcomplex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + [ 75%] #x1B[35mlongtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtabular#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mtabular#x1B[39;49;00m + #x1B[32mlongtable#x1B[39;49;00m #x1B[32mcomplex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/test_latex_table + # outdir: /tmp/test_latex_table/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mtabular#x1B[39;49;00m + #x1B[32mlongtable#x1B[39;49;00m #x1B[32mcomplex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + [ 75%] #x1B[35mlongtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtabular#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mtabular#x1B[39;49;00m + #x1B[32mlongtable#x1B[39;49;00m #x1B[32mcomplex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/directives-raw + # outdir: /tmp/directives-raw/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/images + # outdir: /tmp/images/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 25%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 50%] #x1B[33mimg.pdf#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 75%] #x1B[33mtestimäge.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + #x1B[31mWARNING: Could not fetch remote image: http://example.com/NOT_EXIST.PNG [404]#x1B[39;49;00m + + + + + links.txt:11: [broken] http://example.com/#top: Anchor 'top' not found + + # testroot: root + # builder: linkcheck + # srcdir: /tmp/linkcheck + # outdir: /tmp/linkcheck/_build/linkcheck + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mbuilding [linkcheck]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mlinks#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlinks#x1B[39;49;00m + (line 11) #x1B[31;01mbroken #x1B[39;49;00mhttp://example.com/#top#x1B[31;01m - Anchor 'top' not + found#x1B[39;49;00m + (line 10) #x1B[32mok #x1B[39;49;00mhttp://example.com#!bar + (line 9) #x1B[32mok #x1B[39;49;00mhttp://example.com/#!bar + (line 3) #x1B[32mok #x1B[39;49;00mhttps://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting + + + # warning: + #x1B[31m/tmp/linkcheck/links.txt:9: WARNING: Duplicate explicit target name: "example bar invalid".#x1B[39;49;00m + #x1B[31m/tmp/linkcheck/links.txt:9: WARNING: Duplicate explicit target name: "example bar invalid".#x1B[39;49;00m + #x1B[31m/tmp/linkcheck/links.txt:5: WARNING: Unknown target name: "http://www.sphinx-doc.org/en/1.4.8/tutorial.html#install-sphinx".#x1B[39;49;00m + + + + + # testroot: root + # builder: linkcheck + # srcdir: /tmp/linkcheck + # outdir: /tmp/linkcheck/_build/linkcheck + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mbuilding [linkcheck]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mlinks#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlinks#x1B[39;49;00m + (line 9) #x1B[32mok #x1B[39;49;00mhttp://example.com/#!bar + (line 11) #x1B[32mok #x1B[39;49;00mhttp://example.com/#top + (line 10) #x1B[32mok #x1B[39;49;00mhttp://example.com#!bar + (line 3) #x1B[32mok #x1B[39;49;00mhttps://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting + + + # warning: + #x1B[31m/tmp/linkcheck/links.txt:9: WARNING: Duplicate explicit target name: "example bar invalid".#x1B[39;49;00m + #x1B[31m/tmp/linkcheck/links.txt:9: WARNING: Duplicate explicit target name: "example bar invalid".#x1B[39;49;00m + #x1B[31m/tmp/linkcheck/links.txt:5: WARNING: Unknown target name: "http://www.sphinx-doc.org/en/1.4.8/tutorial.html#install-sphinx".#x1B[39;49;00m + + + + + # testroot: root + # builder: man + # srcdir: /tmp/root + # outdir: /tmp/root/_build/man + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [man]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mwriting... #x1B[39;49;00m#x1B[32mSphinxTests.1#x1B[39;49;00m { #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m } + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: texinfo + # srcdir: /tmp/warnings + # outdir: /tmp/warnings/_build/texinfo + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mbuilding [texinfo]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mundecodable#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing python.texi... #x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying Texinfo support files... #x1B[39;49;00m/tmp/warnings/_build/texinfo/Makefile done + + # warning: + #x1B[31m/tmp/warnings/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup + ends without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:19: WARNING: Encoding 'utf-8-sig' used for reading included file + '/tmp/warnings/wrongenc.inc' seems to be wrong, try giving an :encoding: option#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:11: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:24: WARNING: download file not readable: + /tmp/warnings/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:27: WARNING: invalid single index entry ''#x1B[39;49;00m + #x1B[31m/tmp/warnings/undecodable.rst:3: WARNING: undecodable source characters, replacing with "?": + b'here: >>>\xbb<<<'#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:41: WARNING: unknown option: &option#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:45: WARNING: citation not found: missing#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:14: WARNING: no matching candidate for image URI 'foo.*'#x1B[39;49;00m + #x1B[31m/tmp/warnings/index.rst:17: WARNING: no matching candidate for image URI 'svgimg.*'#x1B[39;49;00m + + + + + + /home/daniel/workspace/sphinx/sphinx/tests/test_build_texinfo.py:61: <py._xmlgen.raw object at + 0x7ff4c6fc0978> + + # testroot: root + # builder: texinfo + # srcdir: /tmp/root + # outdir: /tmp/root/_build/texinfo + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [texinfo]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing SphinxTests.texi... #x1B[32mcontents#x1B[39;49;00m #x1B[32mextapi#x1B[39;49;00m + #x1B[32mimages#x1B[39;49;00m #x1B[32msubdir/images#x1B[39;49;00m #x1B[32msubdir/includes#x1B[39;49;00m + #x1B[32mincludes#x1B[39;49;00m #x1B[32mmarkup#x1B[39;49;00m #x1B[32mobjects#x1B[39;49;00m + #x1B[32mbom#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m #x1B[32mautodoc#x1B[39;49;00m + #x1B[32mmetadata#x1B[39;49;00m #x1B[32mextensions#x1B[39;49;00m #x1B[32mfootnote#x1B[39;49;00m + #x1B[32mlists#x1B[39;49;00m #x1B[32motherext#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[ 14%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 28%] #x1B[33msubdir/img.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 42%] + #x1B[33mhttps://www.python.org/static/img/python-logo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 57%] #x1B[33msubdir/simg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 71%] #x1B[33mimg.foo.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[ 85%] #x1B[33mrimg.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33m../root/img.png#x1B[39;49;00m + #x1B[01mcopying Texinfo support files... #x1B[39;49;00m/tmp/root/_build/texinfo/Makefile done + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:26: WARNING: no matching candidate for image URI 'svgimg.*'#x1B[39;49;00m + #x1B[31m/tmp/root/objects.txt:214: WARNING: unknown node type: <desc_signature_line: <desc_annotation...><desc_addname...><desc_name...>>#x1B[39;49;00m + #x1B[31m/tmp/root/objects.txt:213: WARNING: unknown node type: <desc_signature_line: <#text: 'T'><#text: + ' '><#text: '&'><desc_addname...><de ...>#x1B[39;49;00m + #x1B[31m/tmp/root/objects.txt:213: WARNING: unknown node type: <desc_signature_line: <desc_annotation...><#text: + ' '><#text: 'T'><#text: ' '> ...>#x1B[39;49;00m + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 8 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m8 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mlineblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mlistitems#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mmaxwidth#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mnonascii_maxwidth#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mnonascii_table#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35mnonascii_title#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mlineblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mlistitems#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mmaxwidth#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mnonascii_maxwidth#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mnonascii_table#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32mnonascii_title#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtable#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/build-text/listitems.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/build-text/contents.txt:1: WARNING: toctree contains reference to document 'maxwidth' + that doesn't have a title: no link will be generated#x1B[39;49;00m + #x1B[31m/tmp/build-text/contents.txt:1: WARNING: toctree contains reference to document 'lineblock' + that doesn't have a title: no link will be generated#x1B[39;49;00m + #x1B[31m/tmp/build-text/contents.txt:1: WARNING: toctree contains reference to document 'nonascii_table' + that doesn't have a title: no link will be generated#x1B[39;49;00m + #x1B[31m/tmp/build-text/contents.txt:1: WARNING: toctree contains reference to document 'nonascii_maxwidth' + that doesn't have a title: no link will be generated#x1B[39;49;00m + #x1B[31m/tmp/build-text/contents.txt:1: WARNING: toctree contains reference to document 'table' + that doesn't have a title: no link will be generated#x1B[39;49;00m + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/build-text + # outdir: /tmp/build-text/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test-catalogs + # outdir: /tmp/test-catalogs/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mall of 25 po files + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32mlocale/en/LC_MESSAGES/raw.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] + #x1B[32mlocale/en/LC_MESSAGES/glossary_terms_inconsistency.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mlocale/en/LC_MESSAGES/sphinx.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mlocale/en/LC_MESSAGES/role_xref.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mlocale/en/LC_MESSAGES/label_target.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mlocale/en/LC_MESSAGES/docfields.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mlocale/en/LC_MESSAGES/literalblock.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mlocale/en/LC_MESSAGES/contents.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mlocale/en/LC_MESSAGES/admonitions.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mlocale/en/LC_MESSAGES/index_entries.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] + #x1B[32mlocale/en/LC_MESSAGES/definition_terms.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlocale/en/LC_MESSAGES/bom.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mlocale/en/LC_MESSAGES/only.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlocale/en/LC_MESSAGES/versionchange.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mlocale/en/LC_MESSAGES/seealso.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mlocale/en/LC_MESSAGES/external_links.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] + #x1B[32mlocale/en/LC_MESSAGES/refs_python_domain.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mlocale/en/LC_MESSAGES/refs.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mlocale/en/LC_MESSAGES/table.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mlocale/en/LC_MESSAGES/glossary_terms.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mlocale/en/LC_MESSAGES/figure.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32mlocale/en/LC_MESSAGES/footnote.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] + #x1B[32mlocale/en/LC_MESSAGES/refs_inconsistency.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mlocale/en/LC_MESSAGES/warnings.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlocale/en/LC_MESSAGES/rubric.mo#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test-catalogs + # outdir: /tmp/test-catalogs/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 1 po files that are specified + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlocale/en/LC_MESSAGES/admonitions.mo#x1B[39;49;00m + [39;49;00m[ 8%] #x1B[32mlocale/en/LC_MESSAGES/glossary_terms_inconsistency.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mlocale/en/LC_MESSAGES/sphinx.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mlocale/en/LC_MESSAGES/role_xref.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mlocale/en/LC_MESSAGES/label_target.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mlocale/en/LC_MESSAGES/docfields.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mlocale/en/LC_MESSAGES/literalblock.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mlocale/en/LC_MESSAGES/contents.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mlocale/en/LC_MESSAGES/admonitions.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mlocale/en/LC_MESSAGES/index_entries.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] + #x1B[32mlocale/en/LC_MESSAGES/definition_terms.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlocale/en/LC_MESSAGES/bom.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mlocale/en/LC_MESSAGES/only.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32mlocale/en/LC_MESSAGES/versionchange.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mlocale/en/LC_MESSAGES/seealso.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mlocale/en/LC_MESSAGES/external_links.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] + #x1B[32mlocale/en/LC_MESSAGES/refs_python_domain.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mlocale/en/LC_MESSAGES/refs.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mlocale/en/LC_MESSAGES/table.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mlocale/en/LC_MESSAGES/glossary_terms.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mlocale/en/LC_MESSAGES/figure.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32mlocale/en/LC_MESSAGES/footnote.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] + #x1B[32mlocale/en/LC_MESSAGES/refs_inconsistency.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mlocale/en/LC_MESSAGES/warnings.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlocale/en/LC_MESSAGES/rubric.mo#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/test-catalogs + # outdir: /tmp/test-catalogs/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [en]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 24 po files that are out of date + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32mlocale/en/LC_MESSAGES/raw.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] + #x1B[32mlocale/en/LC_MESSAGES/glossary_terms_inconsistency.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mlocale/en/LC_MESSAGES/role_xref.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mlocale/en/LC_MESSAGES/label_target.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mlocale/en/LC_MESSAGES/docfields.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mlocale/en/LC_MESSAGES/literalblock.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 29%] #x1B[32mlocale/en/LC_MESSAGES/contents.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mlocale/en/LC_MESSAGES/admonitions.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mlocale/en/LC_MESSAGES/index_entries.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 41%] + #x1B[32mlocale/en/LC_MESSAGES/definition_terms.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 45%] #x1B[32mlocale/en/LC_MESSAGES/bom.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mlocale/en/LC_MESSAGES/only.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 54%] #x1B[32mlocale/en/LC_MESSAGES/versionchange.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 58%] #x1B[32mlocale/en/LC_MESSAGES/seealso.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mlocale/en/LC_MESSAGES/external_links.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] + #x1B[32mlocale/en/LC_MESSAGES/refs_python_domain.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 70%] #x1B[32mlocale/en/LC_MESSAGES/refs.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mlocale/en/LC_MESSAGES/table.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 79%] #x1B[32mlocale/en/LC_MESSAGES/glossary_terms.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 83%] #x1B[32mlocale/en/LC_MESSAGES/figure.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32mlocale/en/LC_MESSAGES/footnote.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 91%] + #x1B[32mlocale/en/LC_MESSAGES/refs_inconsistency.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 95%] #x1B[32mlocale/en/LC_MESSAGES/warnings.mo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlocale/en/LC_MESSAGES/rubric.mo#x1B[39;49;00m + ;49;00m[100%] #x1B[32mlocale/en/LC_MESSAGES/rubric.mo#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: unknown config value 'nonexisting_value' in override, ignoring#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [foo]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: The config value `master_doc' has type `int', defaults to `str'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/config + # outdir: /tmp/config/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + #x1B[31mWARNING: The config value `value1' has type `int', defaults to `str'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value2' has type `int', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value4' has type `bool', defaults to `int'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value6' has type `tuple', defaults to `list'.#x1B[39;49;00m + #x1B[31mWARNING: The config value `value17` has to be a one of ('default', 'one', 'two'), + but `invalid` is given.#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/correct-year + # outdir: /tmp/correct-year/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/correct-year + # outdir: /tmp/correct-year/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/correct-year + # outdir: /tmp/correct-year/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + + + + + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: line number spec is out of range(1-14): '100-'#x1B[39;49;00m + + + + + + + + + + + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mcaption#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mclasses#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mlinenos#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mnamedblocks#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mpy-decorators#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mpython#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mcaption#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mclasses#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mlinenos#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mnamedblocks#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mpy-decorators#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mpython#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mcaption#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: search index couldn't be loaded, but not all documents will be built: the index will + be incomplete.#x1B[39;49;00m + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mcaption#x1B[39;49;00m + #x1B[32mclasses#x1B[39;49;00m #x1B[32mlinenos#x1B[39;49;00m #x1B[32mnamedblocks#x1B[39;49;00m + #x1B[32mpy-decorators#x1B[39;49;00m #x1B[32mpython#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mcaption#x1B[39;49;00m + #x1B[32mclasses#x1B[39;49;00m #x1B[32mlinenos#x1B[39;49;00m #x1B[32mnamedblocks#x1B[39;49;00m + #x1B[32mpy-decorators#x1B[39;49;00m #x1B[32mpython#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mpython#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mlinenos#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mcaption#x1B[39;49;00m + #x1B[32mclasses#x1B[39;49;00m #x1B[32mlinenos#x1B[39;49;00m #x1B[32mnamedblocks#x1B[39;49;00m + #x1B[32mpy-decorators#x1B[39;49;00m #x1B[32mpython#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mcaption#x1B[39;49;00m + #x1B[32mclasses#x1B[39;49;00m #x1B[32mlinenos#x1B[39;49;00m #x1B[32mnamedblocks#x1B[39;49;00m + #x1B[32mpy-decorators#x1B[39;49;00m #x1B[32mpython#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mcaption#x1B[39;49;00m + #x1B[32mclasses#x1B[39;49;00m #x1B[32mlinenos#x1B[39;49;00m #x1B[32mnamedblocks#x1B[39;49;00m + #x1B[32mpy-decorators#x1B[39;49;00m #x1B[32mpython#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mclasses#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/directive-code + # outdir: /tmp/directive-code/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mpy-decorators#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: text + # srcdir: /tmp/directive-only + # outdir: /tmp/directive-only/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35monly#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32monly#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/docutilsconf + # outdir: /tmp/docutilsconf/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/docutilsconf + # outdir: /tmp/docutilsconf/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/docutilsconf + # outdir: /tmp/docutilsconf/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/docutilsconf + # outdir: /tmp/docutilsconf/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing SphinxdocutilsconfTests.tex...#x1B[32mcontents#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: man + # srcdir: /tmp/docutilsconf + # outdir: /tmp/docutilsconf/_build/man + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mwriting... #x1B[39;49;00m#x1B[32msphinxdocutilsconftests.1#x1B[39;49;00m { } + + # warning: + + + + + # testroot: root + # builder: texinfo + # srcdir: /tmp/docutilsconf + # outdir: /tmp/docutilsconf/_build/texinfo + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing sphinxdocutilsconftests.texi... #x1B[32mcontents#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying Texinfo support files... #x1B[39;49;00m/tmp/docutilsconf/_build/texinfo/Makefile done + + # warning: + + + + + + tests/test_docutilsconf.py:72: <py._xmlgen.raw object at 0x7ff4c6f0b240> + + + + + + + + + + + + + Warning: Too many template argument lists compared to parameter lists. Argument lists: 1, Parameter + lists: 0, Extra empty parameters lists prepended: 1. Declaration: + A<T> + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/domain-cpp + # outdir: /tmp/domain-cpp/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35many-role#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mroles#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32many-role#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/domain-cpp/any-role.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/domain-cpp/roles.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/domain-cpp + # outdir: /tmp/domain-cpp/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35many-role#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mroles#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32many-role#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/domain-cpp/any-role.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/domain-cpp/roles.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/domain-js + # outdir: /tmp/domain-js/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mmodule#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mroles#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmodule#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/domain-js + # outdir: /tmp/domain-js/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmodule#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/domain-js + # outdir: /tmp/domain-js/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmodule#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + + # warning: + + + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/domain-py + # outdir: /tmp/domain-py/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mmodule#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mroles#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmodule#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/domain-py + # outdir: /tmp/domain-py/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmodule#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/domain-py + # outdir: /tmp/domain-py/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmodule#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mroles#x1B[39;49;00m + + # warning: + + + + + + + + + + + + + + + + + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/toctree-glob + # outdir: /tmp/toctree-glob/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [dummy]#x1B[39;49;00m: targets for 12 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m12 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbar/bar_1#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mbar/bar_2#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar/bar_3#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar/bar_4/index#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 41%] #x1B[35mbar/index#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 58%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mqux/index#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 91%] #x1B[35mqux/qux_1#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mqux/qux_2#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbar/bar_1#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mbar/bar_2#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar/bar_3#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mbar/bar_4/index#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 41%] #x1B[32mbar/index#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 58%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 83%] #x1B[32mqux/index#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 91%] #x1B[32mqux/qux_1#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mqux/qux_2#x1B[39;49;00m + #x1B[01mbuild succeeded, 3 warnings.#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/toctree-glob/index.rst:17: (WARNING/2) Title underline too short. + + reversed order + -------------#x1B[39;49;00m + #x1B[31mWARNING: /tmp/toctree-glob/index.rst:17: (WARNING/2) Title underline too short. + + reversed order + -------------#x1B[39;49;00m + #x1B[31m/tmp/toctree-glob/quux.rst: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/test_environment_toctree_basic + # outdir: /tmp/test_environment_toctree_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + et created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 7 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m7 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 14%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 42%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 57%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 71%] #x1B[35mquux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 85%] #x1B[35mqux#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocdepth#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 14%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 42%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 57%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 71%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 85%] #x1B[32mqux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocdepth#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_environment_toctree_basic/qux.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_environment_toctree_basic/tocdepth.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/ext-autodoc + # outdir: /tmp/ext-autodoc/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mcontents#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-autosectionlabel + # outdir: /tmp/ext-autosectionlabel/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-autosectionlabel-prefix-document + # outdir: /tmp/ext-autosectionlabel-prefix-document/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/autosummary + # outdir: /tmp/autosummary/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + [autosummary] generating autosummary for: contents.rst, sphinx.rst + [autosummary] generating autosummary for: /tmp/autosummary/dummy_module.rst, + /tmp/autosummary/generated/sphinx.application.Sphinx.rst, /tmp/autosummary/underscore_module_.rst + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m5 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mdummy_module#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mgenerated/sphinx.application.Sphinx#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35msphinx#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35munderscore_module_#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mdummy_module#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mgenerated/sphinx.application.Sphinx#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32munderscore_module_#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: xml + # srcdir: /tmp/autosummary + # outdir: /tmp/autosummary/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + [autosummary] generating autosummary for: contents.rst, dummy_module.rst, + generated/sphinx.application.Sphinx.rst, sphinx.rst, underscore_module_.rst + #x1B[01mbuilding [xml]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mdummy_module#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mgenerated/sphinx.application.Sphinx#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32munderscore_module_#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: coverage + # srcdir: /tmp/root + # outdir: /tmp/root/_build/coverage + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [coverage]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31mWARNING: module mod could not be imported: No module named 'mod'#x1B[39;49;00m + + + + + # testroot: root + # builder: doctest + # srcdir: /tmp/doctest + # outdir: /tmp/doctest/_build/doctest + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [doctest]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mdoctest#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mrunning tests...#x1B[39;49;00m + + Document: doctest + ----------------- + 3 items passed all tests: + 16 tests in default + 2 tests in group1 + 2 tests in group2 + 20 tests in 3 items. + 20 passed and 0 failed. + Test passed. + 3 items passed all tests: + 1 tests in default (cleanup code) + 1 tests in group1 (cleanup code) + 1 tests in group2 (cleanup code) + 3 tests in 3 items. + 3 passed and 0 failed. + Test passed. + + Doctest summary + =============== + 20 tests + 0 failures in tests + 0 failures in setup code + 0 failures in cleanup code + + # warning: + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-githubpages + # outdir: /tmp/ext-githubpages/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-graphviz + # outdir: /tmp/ext-graphviz/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/ext-graphviz + # outdir: /tmp/ext-graphviz/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing SphinxTests.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-graphviz + # outdir: /tmp/ext-graphviz/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/ext-graphviz/index.rst:: WARNING: language "xx" not supported: Docutils-generated + text will be in English.#x1B[39;49;00m + + + + + # testroot: root + # builder: text + # srcdir: /tmp/ext-ifconfig + # outdir: /tmp/ext-ifconfig/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [text]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/ext-imgconverter + # outdir: /tmp/ext-imgconverter/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing Python.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33msvgimg.svg#x1B[39;49;00m + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-inheritance_diagram + # outdir: /tmp/ext-inheritance_diagram/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/ext-inheritance_diagram + # outdir: /tmp/ext-inheritance_diagram/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing Python.tex...#x1B[32mindex#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + intersphinx inventory has moved: http://hostname/new/objects.inv -> http://hostname/other/objects.inv + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_missing_reference0/inventory... + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_missing_reference0/inventory... + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_missing_reference0/inventory... + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_missing_reference0/inventory... + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + loading intersphinx inventory from + /tmp/pytest-of-daniel/pytest-1/test_missing_reference_pydomai0/inventory... + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + loading intersphinx inventory from + /tmp/pytest-of-daniel/pytest-1/test_missing_reference_stddoma0/inventory... + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-intersphinx-cppdomain + # outdir: /tmp/ext-intersphinx-cppdomain/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + loading intersphinx inventory from + /tmp/pytest-of-daniel/pytest-1/test_missing_reference_cppdoma0/inventory... + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + loading intersphinx inventory from + /tmp/pytest-of-daniel/pytest-1/test_missing_reference_jsdomai0/inventory... + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_load_mappings_warnings0/inventory... + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_load_mappings_warnings0/inventory... + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_load_mappings_warnings0/inventory... + loading intersphinx inventory from /tmp/pytest-of-daniel/pytest-1/test_load_mappings_warnings0/inventory... + + # warning: + #x1B[31mWARNING: intersphinx identifier 12345 is not string. Ignored#x1B[39;49;00m + + + + + + + + + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-math + # outdir: /tmp/ext-math/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + app = <SphinxTestApp + buildername='html'>, status = <_io.StringIO object at 0x7ff4c4f42c18>, warning = <_io.StringIO + object at 0x7ff4c4f42ca8> + + @pytest.mark.sphinx('html', testroot='ext-math-simple', + confoverrides = {'extensions': ['sphinx.ext.imgmath']}) + def test_imgmath_png(app, status, warning): + > app.builder.build_all() + + tests/test_ext_math.py:40: + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + sphinx/builders/__init__.py:282: in build_all + self.build(None, summary='all source files', method='all') + sphinx/builders/__init__.py:391: in build + self.write(docnames, list(updated_docnames), method) + sphinx/builders/__init__.py:428: in write + self._write_serial(sorted(docnames)) + sphinx/builders/__init__.py:437: in _write_serial + self.write_doc(docname, doctree) + sphinx/builders/html.py:555: in write_doc + self.docwriter.write(doctree, destination) + ../../envs/sphinx/lib/python3.6/site-packages/docutils/writers/__init__.py:80: in write + self.translate() + sphinx/writers/html.py:56: in translate + self.document.walkabout(visitor) + ../../envs/sphinx/lib/python3.6/site-packages/docutils/nodes.py:174: in walkabout + if child.walkabout(visitor): + ../../envs/sphinx/lib/python3.6/site-packages/docutils/nodes.py:174: in walkabout + if child.walkabout(visitor): + ../../envs/sphinx/lib/python3.6/site-packages/docutils/nodes.py:166: in walkabout + visitor.dispatch_visit(self) + ../../envs/sphinx/lib/python3.6/site-packages/docutils/nodes.py:1882: in dispatch_visit + return method(node) + sphinx/ext/imgmath.py:325: in html_visit_displaymath + fname, depth = render_math(self, latex) + sphinx/ext/imgmath.py:261: in render_math + imgpath, depth = convert_dvi_to_png(dvipath, self.builder) + sphinx/ext/imgmath.py:189: in convert_dvi_to_png + stdout, stderr = convert_dvi_to_image(command, name) + sphinx/ext/imgmath.py:160: in convert_dvi_to_image + p = Popen(command, stdout=PIPE, stderr=PIPE) + /usr/lib/python3.6/subprocess.py:729: in __init__ + restore_signals, start_new_session) + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + + self = <subprocess.Popen object at 0x7ff4c66132e8>, args = ['dvipng', '-o', '/tmp/tmpt6kuwod8/math.png', + '-T', 'tight', '-z9', ...] + executable = b'dvipng', preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = + None, startupinfo = None, creationflags = 0 + shell = False, p2cread = -1, p2cwrite = -1, c2pread = 8, c2pwrite = 12, errread = 13, errwrite = 14, + restore_signals = True, start_new_session = False + + def _execute_child(self, args, executable, preexec_fn, close_fds, + pass_fds, cwd, env, + startupinfo, creationflags, shell, + p2cread, p2cwrite, + c2pread, c2pwrite, + errread, errwrite, + restore_signals, start_new_session): + """Execute program (POSIX version)""" + + if isinstance(args, (str, bytes)): + args = [args] + else: + args = list(args) + + if shell: + args = ["/bin/sh", "-c"] + args + if executable: + args[0] = executable + + if executable is None: + executable = args[0] + orig_executable = executable + + # For transferring possible exec failure from child to parent. + # Data format: "exception name:hex errno:description" + # Pickle is not used; it is complex and involves memory allocation. + errpipe_read, errpipe_write = os.pipe() + # errpipe_write must not be in the standard io 0, 1, or 2 fd range. + low_fds_to_close = [] + while errpipe_write < 3: + low_fds_to_close.append(errpipe_write) + errpipe_write = os.dup(errpipe_write) + for low_fd in low_fds_to_close: + os.close(low_fd) + try: + try: + # We must avoid complex work that could involve + # malloc or free in the child process to avoid + # potential deadlocks, thus we do all this here. + # and pass it to fork_exec() + + if env is not None: + env_list = [] + for k, v in env.items(): + k = os.fsencode(k) + if b'=' in k: + raise ValueError("illegal environment variable name") + env_list.append(k + b'=' + os.fsencode(v)) + else: + env_list = None # Use execv instead of execve. + executable = os.fsencode(executable) + if os.path.dirname(executable): + executable_list = (executable,) + else: + # This matches the behavior of os._execvpe(). + executable_list = tuple( + os.path.join(os.fsencode(dir), executable) + for dir in os.get_exec_path(env)) + fds_to_keep = set(pass_fds) + fds_to_keep.add(errpipe_write) + self.pid = _posixsubprocess.fork_exec( + args, executable_list, + close_fds, tuple(sorted(map(int, fds_to_keep))), + cwd, env_list, + p2cread, p2cwrite, c2pread, c2pwrite, + errread, errwrite, + errpipe_read, errpipe_write, + restore_signals, start_new_session, preexec_fn) + self._child_created = True + finally: + # be sure the FD is closed no matter what + os.close(errpipe_write) + + # self._devnull is not always defined. + devnull_fd = getattr(self, '_devnull', None) + if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: + os.close(p2cread) + if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: + os.close(c2pwrite) + if errwrite != -1 and errread != -1 and errwrite != devnull_fd: + os.close(errwrite) + if devnull_fd is not None: + os.close(devnull_fd) + # Prevent a double close of these fds from __init__ on error. + self._closed_child_pipe_fds = True + + # Wait for exec to fail or succeed; possibly raising an + # exception (limited in size) + errpipe_data = bytearray() + while True: + part = os.read(errpipe_read, 50000) + errpipe_data += part + if not part or len(errpipe_data) > 50000: + break + finally: + # be sure the FD is closed no matter what + os.close(errpipe_read) + + if errpipe_data: + try: + pid, sts = os.waitpid(self.pid, 0) + if pid == self.pid: + self._handle_exitstatus(sts) + else: + self.returncode = sys.maxsize + except ChildProcessError: + pass + + try: + exception_name, hex_errno, err_msg = ( + errpipe_data.split(b':', 2)) + # The encoding here should match the encoding + # written in by the subprocess implementations + # like _posixsubprocess + err_msg = err_msg.decode() + except ValueError: + exception_name = b'SubprocessError' + hex_errno = b'0' + err_msg = 'Bad exception data from child: {!r}'.format( + bytes(errpipe_data)) + child_exception_type = getattr( + builtins, exception_name.decode('ascii'), + SubprocessError) + if issubclass(child_exception_type, OSError) and hex_errno: + errno_num = int(hex_errno, 16) + child_exec_never_called = (err_msg == "noexec") + if child_exec_never_called: + err_msg = "" + # The error must be from chdir(cwd). + err_filename = cwd + else: + err_filename = orig_executable + if errno_num != 0: + err_msg = os.strerror(errno_num) + if errno_num == errno.ENOENT: + err_msg += ': ' + repr(err_filename) + > raise child_exception_type(errno_num, err_msg, err_filename) + E NotADirectoryError: [Errno 20] Not a directory: 'dvipng' + + /usr/lib/python3.6/subprocess.py:1364: NotADirectoryError + + # testroot: root + # builder: html + # srcdir: /tmp/ext-math-simple + # outdir: /tmp/ext-math-simple/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-math-simple + # outdir: /tmp/ext-math-simple/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-math + # outdir: /tmp/ext-math/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[extensions changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-math + # outdir: /tmp/ext-math/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/ext-math + # outdir: /tmp/ext-math/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-math + # outdir: /tmp/ext-math/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mmath#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mmath#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: latex + # srcdir: /tmp/ext-math + # outdir: /tmp/ext-math/_build/latex + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [latex]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + processing test.tex...#x1B[32mindex#x1B[39;49;00m #x1B[32mmath#x1B[39;49;00m + resolving references... + writing... done + #x1B[01mcopying TeX support files...#x1B[39;49;00m + done + + # warning: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-todo + # outdir: /tmp/ext-todo/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/ext-todo/bar.rst:4: WARNING: TODO entry found: todo in bar#x1B[39;49;00m + #x1B[31m/tmp/ext-todo/foo.rst:4: WARNING: TODO entry found: todo in foo#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-todo + # outdir: /tmp/ext-todo/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/ext-todo/bar.rst:4: WARNING: TODO entry found: todo in bar#x1B[39;49;00m + #x1B[31m/tmp/ext-todo/foo.rst:4: WARNING: TODO entry found: todo in foo#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-viewcode + # outdir: /tmp/ext-viewcode/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mhighlighting module code... #x1B[39;49;00m[ 50%] #x1B[34;01mspam.mod1#x1B[39;49;00m + #x1B[01mhighlighting module code... #x1B[39;49;00m[100%] #x1B[34;01mspam.mod2#x1B[39;49;00m + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/ext-viewcode/index.rst:14: WARNING: error while formatting arguments for spam.Class1: <class + 'spam.mod1.Class1'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:16: WARNING: error while formatting arguments for spam.Class2: <class + 'spam.mod2.Class2'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:18: WARNING: error while formatting arguments for spam.mod1.Class1: <class + 'spam.mod1.Class1'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:20: WARNING: error while formatting arguments for spam.mod2.Class2: <class + 'spam.mod2.Class2'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:23: WARNING: Object named 'func1' not found in include file + '/tmp/ext-viewcode/spam/__init__.py'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/ext-viewcode/objects.rst:166: (WARNING/2) Too many template argument lists compared to + parameter lists. Argument lists: 1, Parameter lists: 0, Extra empty parameters lists prepended: 1. + Declaration: + n::Array<T, d>#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-viewcode + # outdir: /tmp/ext-viewcode/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m[extensions changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/ext-viewcode/index.rst:14: WARNING: error while formatting arguments for spam.Class1: <class + 'spam.mod1.Class1'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:16: WARNING: error while formatting arguments for spam.Class2: <class + 'spam.mod2.Class2'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:18: WARNING: error while formatting arguments for spam.mod1.Class1: <class + 'spam.mod1.Class1'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:20: WARNING: error while formatting arguments for spam.mod2.Class2: <class + 'spam.mod2.Class2'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:23: WARNING: Object named 'func1' not found in include file + '/tmp/ext-viewcode/spam/__init__.py'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/ext-viewcode/objects.rst:166: (WARNING/2) Too many template argument lists compared to + parameter lists. Argument lists: 1, Parameter lists: 0, Extra empty parameters lists prepended: 1. + Declaration: + n::Array<T, d>#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: gettext + # srcdir: /tmp/test_intl_gettext + # outdir: /tmp/test_intl_gettext/_build/gettext + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [gettext]: #x1B[39;49;00mtargets for 1 template files + #x1B[01mreading templates... #x1B[39;49;00m[100%] + #x1B[35m/tmp/test_intl_gettext/_templates/index.html#x1B[39;49;00m + #x1B[01mbuilding [gettext]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 3%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 7%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 11%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 15%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 19%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 23%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 26%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 30%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 34%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 38%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 42%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 46%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 53%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 57%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 61%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 65%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 69%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 73%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting message catalogs... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_gettext/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a + unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/literalblock.txt:13: WARNING: Literal block expected; none + found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/rubric.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_gettext/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_gettext_dont_rebuild_mo + # outdir: /tmp/test_gettext_dont_rebuild_mo/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + + # warning: + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 24 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 29%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 41%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 45%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 54%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 58%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 70%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 79%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 91%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 95%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m index search + #x1B[01mcopying images... #x1B[39;49;00m[ 50%] #x1B[33mi18n.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 24 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 29%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 41%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 45%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 54%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 58%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 70%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 79%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 91%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 95%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 29%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 37%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 41%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 45%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 54%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 58%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 62%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 70%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 79%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 83%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 87%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 91%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 95%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m index search + #x1B[01mcopying images... #x1B[39;49;00m[ 50%] #x1B[33mi18n.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 1 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mbom#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [xml]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 24 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 29%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 41%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 45%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 54%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 58%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 70%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 79%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 91%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 95%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: xml + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/xml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [text]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: html + # srcdir: /tmp/test_additional_targets_should_be_translated + # outdir: /tmp/test_additional_targets_should_be_translated/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 25 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m25 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 24%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 28%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 32%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 36%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 40%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 44%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 48%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 52%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 56%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 60%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 64%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 68%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 72%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 76%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 80%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 84%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 88%] #x1B[35msubdir/contents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 92%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 96%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m index search + #x1B[01mcopying images... #x1B[39;49;00m[ 50%] #x1B[33mi18n.png#x1B[39;49;00m + #x1B[01mcopying images... #x1B[39;49;00m[100%] #x1B[33mimg.png#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_additional_targets_should_be_translated/glossary_terms_inconsistency.txt:6: WARNING: + inconsistent term references in translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/label_target.txt:41: WARNING: Duplicate target + name, cannot be used as a unique reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/literalblock.txt:13: WARNING: Literal block + expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs.txt:16: WARNING: inconsistent references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs.txt:32: WARNING: inconsistent references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs.txt:34: WARNING: inconsistent references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs_inconsistency.txt:6: WARNING: inconsistent + footnote references in translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs_inconsistency.txt:6: WARNING: inconsistent + references in translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs_inconsistency.txt:7: WARNING: inconsistent + references in translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs_inconsistency.txt:8: WARNING: inconsistent + references in translated message#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/warnings.txt:4: WARNING: Inline literal + start-string without end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/warnings.txt:4: WARNING: Inline literal + start-string without end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/admonitions.txt: WARNING: document isn't + included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/label_target.txt: WARNING: document isn't + included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/only.txt: WARNING: document isn't included in + any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/refs_python_domain.txt: WARNING: document isn't + included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/rubric.txt: WARNING: document isn't included + in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_additional_targets_should_be_translated/table.txt: WARNING: document isn't included + in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['.'] + # testroot: root + # builder: text + # srcdir: /tmp/test_intl_basic + # outdir: /tmp/test_intl_basic/_build/text + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mdone + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [text]#x1B[39;49;00m: 1 source files given on command line + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 24 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 4%] #x1B[35madmonitions#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 8%] #x1B[35mbom#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 12%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 16%] #x1B[35mdefinition_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 20%] #x1B[35mdocfields#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mexternal_links#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 29%] #x1B[35mfigure#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mfootnote#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 37%] #x1B[35mglossary_terms#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 41%] #x1B[35mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 45%] #x1B[35mindex_entries#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mlabel_target#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 54%] #x1B[35mliteralblock#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 58%] #x1B[35monly#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 62%] #x1B[35mraw#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mrefs#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 70%] #x1B[35mrefs_inconsistency#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mrefs_python_domain#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 79%] #x1B[35mrole_xref#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 83%] #x1B[35mrubric#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 87%] #x1B[35mseealso#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 91%] #x1B[35mtable#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 95%] #x1B[35mversionchange#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mwarnings#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mrefs#x1B[39;49;00m + #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 4%] #x1B[32madmonitions#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbom#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 12%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mdefinition_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mdocfields#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 24%] #x1B[32mexternal_links#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 28%] #x1B[32mfigure#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 32%] #x1B[32mfootnote#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 36%] #x1B[32mglossary_terms#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mglossary_terms_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 44%] #x1B[32mindex_entries#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 48%] #x1B[32mlabel_target#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 52%] #x1B[32mliteralblock#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 56%] #x1B[32monly#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mraw#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 64%] #x1B[32mrefs#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 68%] #x1B[32mrefs_inconsistency#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 72%] #x1B[32mrefs_python_domain#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 76%] #x1B[32mrole_xref#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mrubric#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 84%] #x1B[32mseealso#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 88%] #x1B[32msubdir/contents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 92%] #x1B[32mtable#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 96%] #x1B[32mversionchange#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mwarnings#x1B[39;49;00m + #x1B[01mbuild succeeded, 18 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_basic/glossary_terms_inconsistency.txt:6: WARNING: inconsistent term references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt:41: WARNING: Duplicate target name, cannot be used as a unique + reference: "duplicated sub section".#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/literalblock.txt:13: WARNING: Literal block expected; none found.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:16: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:32: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs.txt:34: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent footnote references in + translated message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:6: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:7: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_inconsistency.txt:8: WARNING: inconsistent references in translated + message#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/warnings.txt:4: WARNING: Inline literal start-string without + end-string.#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/admonitions.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/label_target.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/only.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/refs_python_domain.txt: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/rubric.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + #x1B[31m/tmp/test_intl_basic/table.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['locales'] + # testroot: root + # builder: dummy + # srcdir: /tmp/test_intl_images + # outdir: /tmp/test_intl_images/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [dummy]#x1B[39;49;00m: targets for 2 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/index#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/index#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_images/subdir/index.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31mWARNING: Could not fetch remote image: http://example.com/NOT_EXIST.PNG [404]#x1B[39;49;00m + + + + + # language: xx + # locale_dirs: ['locales'] + # testroot: root + # builder: dummy + # srcdir: /tmp/test_intl_images + # outdir: /tmp/test_intl_images/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading translations [xx]... #x1B[39;49;00mnot available for built-in messages + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [dummy]#x1B[39;49;00m: targets for 2 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35msubdir/index#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32msubdir/index#x1B[39;49;00m + #x1B[01mbuild succeeded, 2 warnings.#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/test_intl_images/subdir/index.rst: WARNING: document isn't included in any + toctree#x1B[39;49;00m + #x1B[31mWARNING: Could not fetch remote image: http://example.com/NOT_EXIST.PNG [404]#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/prolog + # outdir: /tmp/prolog/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mmarkdown#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mrestructuredtext#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mmarkdown#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mrestructuredtext#x1B[39;49;00m + + # warning: + #x1B[31m/tmp/prolog/index.rst:7: WARNING: toctree contains reference to document 'markdown' that + doesn't have a title: no link will be generated#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/keep_warnings + # outdir: /tmp/keep_warnings/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/keep_warnings/index.rst:2: (WARNING/2) Title underline too short. + + keep_warnings + =====#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/keep_warnings + # outdir: /tmp/keep_warnings/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[config changed] 1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/keep_warnings/index.rst:2: (WARNING/2) Title underline too short. + + keep_warnings + =====#x1B[39;49;00m + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/refonly_bullet_list + # outdir: /tmp/refonly_bullet_list/_build/dummy + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [dummy]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: pseudoxml + # srcdir: /tmp/root + # outdir: /tmp/root/_build/pseudoxml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 3 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautodoc#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mimages#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mincludes#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 20%] #x1B[32mautodoc#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 40%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 60%] #x1B[32mimages#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 80%] #x1B[32mincludes#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mmetadata#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: /tmp/root/autodoc.txt:6: (WARNING/2) autodoc: failed to import module 'util'; the + following exception was raised: + Traceback (most recent call last): + File "/home/daniel/workspace/sphinx/sphinx/sphinx/ext/autodoc/__init__.py", line 397, in + import_object + __import__(self.modname) + ModuleNotFoundError: No module named 'util'#x1B[39;49;00m + #x1B[31m/tmp/root/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:2: WARNING: Explicit markup ends + without a blank line; unexpected unindent.#x1B[39;49;00m + #x1B[31m/tmp/root/images.txt:9: WARNING: image file not readable: foo.png#x1B[39;49;00m + #x1B[31m/tmp/root/includes.txt:4: WARNING: download file not readable: + /tmp/root/nonexisting.png#x1B[39;49;00m + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + + + + * Please enter some text. + * Please enter either 'y' or 'n'. + + + + + Welcome to the Sphinx 1.7+/aecb0082 quickstart utility. + + Please enter values for the following settings (just press Enter to + accept a default value, if one is given in brackets). + + Enter the root path for documentation. + + You have two options for placing the build directory for Sphinx output. + Either, you use a directory "_build" within the root path, or you separate + "source" and "build" directories within the root path. + + Inside the root directory, two more directories will be created; "_templates" + for custom HTML templates and "_static" for custom stylesheets and other static + files. You can enter another prefix (such as ".") to replace the underscore. + + The project name will occur in several places in the built documentation. + + Sphinx has the notion of a "version" and a "release" for the + software. Each version can have multiple releases. For example, for + Python the version is something like 2.5 or 3.0, while the release is + something like 2.5.1 or 3.0a1. If you don't need this dual structure, + just set both to the same value. + + If the documents are to be written in a language other than English, + you can select a language here by its language code. Sphinx will then + translate text that it generates into that language. + + For a list of supported codes, see + http://sphinx-doc.org/config.html#confval-language. + + The file name suffix for source files. Commonly, this is either ".txt" + or ".rst". Only files with this suffix are considered documents. + + One document is special in that it is considered the top node of the + "contents tree", that is, it is the root of the hierarchical structure + of the documents. Normally, this is "index", but if your "index" + document is a custom template, you can also set this to another filename. + + Sphinx can also add configuration for epub output: + + Please indicate if you want to use one of the following Sphinx extensions: + + A Makefile and a Windows command file can be generated for you so that you + only have to run e.g. `make html' instead of invoking sphinx-build + directly. + + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_defaults0/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_defaults0/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_defaults0/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_defaults0/make.bat. + + Finished: An initial directory structure has been created. + + You should now populate your master file /tmp/pytest-of-daniel/pytest-1/test_quickstart_defaults0/index.rst + and create other documentation + source files. Use the Makefile to build the docs, like so: + make builder + where "builder" is one of the supported builders, e.g. html, latex or linkcheck. + + + + + Welcome to the Sphinx 1.7+/aecb0082 quickstart utility. + + Please enter values for the following settings (just press Enter to + accept a default value, if one is given in brackets). + + Enter the root path for documentation. + + You have two options for placing the build directory for Sphinx output. + Either, you use a directory "_build" within the root path, or you separate + "source" and "build" directories within the root path. + + Inside the root directory, two more directories will be created; "_templates" + for custom HTML templates and "_static" for custom stylesheets and other static + files. You can enter another prefix (such as ".") to replace the underscore. + + The project name will occur in several places in the built documentation. + + Sphinx has the notion of a "version" and a "release" for the + software. Each version can have multiple releases. For example, for + Python the version is something like 2.5 or 3.0, while the release is + something like 2.5.1 or 3.0a1. If you don't need this dual structure, + just set both to the same value. + + If the documents are to be written in a language other than English, + you can select a language here by its language code. Sphinx will then + translate text that it generates into that language. + + For a list of supported codes, see + http://sphinx-doc.org/config.html#confval-language. + + The file name suffix for source files. Commonly, this is either ".txt" + or ".rst". Only files with this suffix are considered documents. + + One document is special in that it is considered the top node of the + "contents tree", that is, it is the root of the hierarchical structure + of the documents. Normally, this is "index", but if your "index" + document is a custom template, you can also set this to another filename. + + Sphinx can also add configuration for epub output: + + Please indicate if you want to use one of the following Sphinx extensions: + + A Makefile and a Windows command file can be generated for you so that you + only have to run e.g. `make html' instead of invoking sphinx-build + directly. + + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_all_answers0/source/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_all_answers0/source/contents.txt. + + Finished: An initial directory structure has been created. + + You should now populate your master file + /tmp/pytest-of-daniel/pytest-1/test_quickstart_all_answers0/source/contents.txt and create other + documentation + source files. Use the sphinx-build command to build the docs, like so: + sphinx-build -b builder /tmp/pytest-of-daniel/pytest-1/test_quickstart_all_answers0/source + /tmp/pytest-of-daniel/pytest-1/test_quickstart_all_answers0/build + where "builder" is one of the supported builders, e.g. html, latex or linkcheck. + + + + + Welcome to the Sphinx 1.7+/aecb0082 quickstart utility. + + Please enter values for the following settings (just press Enter to + accept a default value, if one is given in brackets). + + Enter the root path for documentation. + + You have two options for placing the build directory for Sphinx output. + Either, you use a directory "_build" within the root path, or you separate + "source" and "build" directories within the root path. + + Inside the root directory, two more directories will be created; "_templates" + for custom HTML templates and "_static" for custom stylesheets and other static + files. You can enter another prefix (such as ".") to replace the underscore. + + The project name will occur in several places in the built documentation. + + Sphinx has the notion of a "version" and a "release" for the + software. Each version can have multiple releases. For example, for + Python the version is something like 2.5 or 3.0, while the release is + something like 2.5.1 or 3.0a1. If you don't need this dual structure, + just set both to the same value. + + If the documents are to be written in a language other than English, + you can select a language here by its language code. Sphinx will then + translate text that it generates into that language. + + For a list of supported codes, see + http://sphinx-doc.org/config.html#confval-language. + + The file name suffix for source files. Commonly, this is either ".txt" + or ".rst". Only files with this suffix are considered documents. + + One document is special in that it is considered the top node of the + "contents tree", that is, it is the root of the hierarchical structure + of the documents. Normally, this is "index", but if your "index" + document is a custom template, you can also set this to another filename. + + Sphinx can also add configuration for epub output: + + Please indicate if you want to use one of the following Sphinx extensions: + + A Makefile and a Windows command file can be generated for you so that you + only have to run e.g. `make html' instead of invoking sphinx-build + directly. + + Creating file /tmp/pytest-of-daniel/pytest-1/test_generated_files_eol0/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_generated_files_eol0/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_generated_files_eol0/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_generated_files_eol0/make.bat. + + Finished: An initial directory structure has been created. + + You should now populate your master file /tmp/pytest-of-daniel/pytest-1/test_generated_files_eol0/index.rst + and create other documentation + source files. Use the Makefile to build the docs, like so: + make builder + where "builder" is one of the supported builders, e.g. html, latex or linkcheck. + + + + + Welcome to the Sphinx 1.7+/aecb0082 quickstart utility. + + Please enter values for the following settings (just press Enter to + accept a default value, if one is given in brackets). + + Enter the root path for documentation. + + You have two options for placing the build directory for Sphinx output. + Either, you use a directory "_build" within the root path, or you separate + "source" and "build" directories within the root path. + + Inside the root directory, two more directories will be created; "_templates" + for custom HTML templates and "_static" for custom stylesheets and other static + files. You can enter another prefix (such as ".") to replace the underscore. + + The project name will occur in several places in the built documentation. + + Sphinx has the notion of a "version" and a "release" for the + software. Each version can have multiple releases. For example, for + Python the version is something like 2.5 or 3.0, while the release is + something like 2.5.1 or 3.0a1. If you don't need this dual structure, + just set both to the same value. + + If the documents are to be written in a language other than English, + you can select a language here by its language code. Sphinx will then + translate text that it generates into that language. + + For a list of supported codes, see + http://sphinx-doc.org/config.html#confval-language. + + The file name suffix for source files. Commonly, this is either ".txt" + or ".rst". Only files with this suffix are considered documents. + + One document is special in that it is considered the top node of the + "contents tree", that is, it is the root of the hierarchical structure + of the documents. Normally, this is "index", but if your "index" + document is a custom template, you can also set this to another filename. + + Sphinx can also add configuration for epub output: + + Please indicate if you want to use one of the following Sphinx extensions: + + A Makefile and a Windows command file can be generated for you so that you + only have to run e.g. `make html' instead of invoking sphinx-build + directly. + + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_and_build0/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_and_build0/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_and_build0/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_quickstart_and_build0/make.bat. + + Finished: An initial directory structure has been created. + + You should now populate your master file /tmp/pytest-of-daniel/pytest-1/test_quickstart_and_build0/index.rst + and create other documentation + source files. Use the Makefile to build the docs, like so: + make builder + where "builder" is one of the supported builders, e.g. html, latex or linkcheck. + + + + + Welcome to the Sphinx 1.7+/aecb0082 quickstart utility. + + Please enter values for the following settings (just press Enter to + accept a default value, if one is given in brackets). + + Enter the root path for documentation. + + You have two options for placing the build directory for Sphinx output. + Either, you use a directory "_build" within the root path, or you separate + "source" and "build" directories within the root path. + + Inside the root directory, two more directories will be created; "_templates" + for custom HTML templates and "_static" for custom stylesheets and other static + files. You can enter another prefix (such as ".") to replace the underscore. + + The project name will occur in several places in the built documentation. + + Sphinx has the notion of a "version" and a "release" for the + software. Each version can have multiple releases. For example, for + Python the version is something like 2.5 or 3.0, while the release is + something like 2.5.1 or 3.0a1. If you don't need this dual structure, + just set both to the same value. + + If the documents are to be written in a language other than English, + you can select a language here by its language code. Sphinx will then + translate text that it generates into that language. + + For a list of supported codes, see + http://sphinx-doc.org/config.html#confval-language. + + The file name suffix for source files. Commonly, this is either ".txt" + or ".rst". Only files with this suffix are considered documents. + + One document is special in that it is considered the top node of the + "contents tree", that is, it is the root of the hierarchical structure + of the documents. Normally, this is "index", but if your "index" + document is a custom template, you can also set this to another filename. + + Sphinx can also add configuration for epub output: + + Please indicate if you want to use one of the following Sphinx extensions: + + A Makefile and a Windows command file can be generated for you so that you + only have to run e.g. `make html' instead of invoking sphinx-build + directly. + + Creating file /tmp/pytest-of-daniel/pytest-1/test_default_filename0/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_default_filename0/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_default_filename0/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_default_filename0/make.bat. + + Finished: An initial directory structure has been created. + + You should now populate your master file /tmp/pytest-of-daniel/pytest-1/test_default_filename0/index.rst and + create other documentation + source files. Use the Makefile to build the docs, like so: + make builder + where "builder" is one of the supported builders, e.g. html, latex or linkcheck. + + + + + Creating file /tmp/pytest-of-daniel/pytest-1/test_extensions0/conf.py. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extensions0/index.rst. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extensions0/Makefile. + Creating file /tmp/pytest-of-daniel/pytest-1/test_extensions0/make.bat. + + Finished: An initial directory structure has been created. + + You should now populate your master file /tmp/pytest-of-daniel/pytest-1/test_extensions0/index.rst and + create other documentation + source files. Use the Makefile to build the docs, like so: + make builder + where "builder" is one of the supported builders, e.g. html, latex or linkcheck. + + + + + # testroot: root + # builder: html + # srcdir: /tmp/ext-viewcode + # outdir: /tmp/ext-viewcode/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m[extensions changed] 2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mobjects#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mobjects#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex py-modindex + #x1B[01mhighlighting module code... #x1B[39;49;00m[ 50%] #x1B[34;01mspam.mod1#x1B[39;49;00m + #x1B[01mhighlighting module code... #x1B[39;49;00m[100%] #x1B[34;01mspam.mod2#x1B[39;49;00m + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/ext-viewcode/index.rst:14: WARNING: error while formatting arguments for spam.Class1: <class + 'spam.mod1.Class1'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:16: WARNING: error while formatting arguments for spam.Class2: <class + 'spam.mod2.Class2'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:18: WARNING: error while formatting arguments for spam.mod1.Class1: <class + 'spam.mod1.Class1'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:20: WARNING: error while formatting arguments for spam.mod2.Class2: <class + 'spam.mod2.Class2'> is a builtin class#x1B[39;49;00m + #x1B[31m/tmp/ext-viewcode/index.rst:23: WARNING: Object named 'func1' not found in include file + '/tmp/ext-viewcode/spam/__init__.py'#x1B[39;49;00m + #x1B[31mWARNING: /tmp/ext-viewcode/objects.rst:166: (WARNING/2) Too many template argument lists compared to + parameter lists. Argument lists: 1, Parameter lists: 0, Extra empty parameters lists prepended: 1. + Declaration: + n::Array<T, d>#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/search + # outdir: /tmp/search/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m2 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mtocitem#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocitem#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/search + # outdir: /tmp/search/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocitem#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in German (code: de) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/search + # outdir: /tmp/search/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mtocitem#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + {'docnames': ['index', 'tocitem'], 'envversion': 53, 'filenames': + ['index.rst', 'tocitem.rst'], 'objects': {}, 'objnames': {}, 'objtypes': + {}, 'terms': {'findthiskei': 0, 'findthisstemmedkei': 0, 'findthisstemmedkey': + [], 'head': 0, 'heading': [], 'intern': 0, 'international': [], + 'ipsum': 1, 'lor': [], 'lorem': 1, 'notgerman': 0, 'onlygerman': + [], 'onlytoogerman': [], 'rawword': 0, 'textinhead': 0, 'textinheading': + [], 'thisonetoo': 0, 'thistoo': 0, 'zfs': 0}, 'titles': ['meta + keywords', 'heading 1'], 'titleterms': {'head': 1, 'heading': + [], 'keyword': 0, 'meta': 0, 'stemm': [], 'stemmer': 0, 'textinhead': + 1, 'textinheading': []}} + # testroot: root + # builder: html + # srcdir: /tmp/search + # outdir: /tmp/search/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/search + # outdir: /tmp/search/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/search + # outdir: /tmp/search/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + + b'running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx0/test-setup/build/sphinx/html\nRunning Sphinx + v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are out of + date\nbuilding [html]: targets for 1 source files that are out of date\nupdating environment: 1 added, 0 + changed, 0 removed\nreading sources... [100%] contents\n\nlooking for now-outdated files... none + found\npickling environment... done\nchecking consistency... done\npreparing documents... done\nwriting + output... [100%] contents\n\ngenerating indices... genindex\nwriting additional pages... search\ncopying + static files... done\ncopying extra files... done\ndumping search index in English (code: en) ... + done\ndumping object inventory... done\nbuild succeeded.\n' + b'' + + + + b'running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_bui0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_bui0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_bui0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_bui0/test-setup/build/sphinx/html\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_bui0/test-setup/build/sphinx/man\nRunning Sphinx + v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are out of + date\nbuilding [html]: targets for 1 source files that are out of date\nupdating environment: 1 added, 0 + changed, 0 removed\nreading sources... [100%] contents\n\nlooking for now-outdated files... none + found\npickling environment... done\nchecking consistency... done\npreparing documents... done\nwriting + output... [100%] contents\n\ngenerating indices... genindex\nwriting additional pages... search\ncopying + static files... done\ncopying extra files... done\ndumping search index in English (code: en) ... + done\ndumping object inventory... done\nbuild succeeded.\nRunning Sphinx v1.7+\nloading pickled + environment... done\nbuilding [mo]: targets for 0 po files that are out of date\nbuilding [man]: all + manpages\nupdating environment: 0 added, 0 changed, 0 removed\nlooking for now-outdated files... none + found\nwriting... myproject.1 { } \nbuild succeeded.\n' + b'' + + + + b'running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_inv0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_inv0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_inv0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_inv0/test-setup/build/sphinx/html\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_multiple_inv0/test-setup/build/sphinx/bar\nRunning Sphinx + v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are out of + date\nbuilding [html]: targets for 1 source files that are out of date\nupdating environment: 1 added, 0 + changed, 0 removed\nreading sources... [100%] contents\n\nlooking for now-outdated files... none + found\npickling environment... done\nchecking consistency... done\npreparing documents... done\nwriting + output... [100%] contents\n\ngenerating indices... genindex\nwriting additional pages... search\ncopying + static files... done\ncopying extra files... done\ndumping search index in English (code: en) ... + done\ndumping object inventory... done\nbuild succeeded.\nRunning Sphinx v1.7+\n' + b'\nSphinx error:\nBuilder name bar not registered or available through entry point\n' + + + + b'running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_with_nonasci0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_with_nonasci0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_with_nonasci0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_with_nonasci0/test-setup/build/sphinx/html\nRunning Sphinx + v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are out of + date\nbuilding [html]: targets for 2 source files that are out of date\nupdating environment: 2 added, 0 + changed, 0 removed\nreading sources... [ 50%] contents\nreading sources... [100%] + \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e/\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\n\nlooking for now-outdated + files... none found\npickling environment... done\nchecking consistency... done\npreparing documents... + done\nwriting output... [ 50%] contents\nwriting output... [100%] + \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e/\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\n\ngenerating indices... + genindex\nwriting additional pages... search\ncopying static files... done\ncopying extra files... + done\ndumping search index in English (code: en) ... done\ndumping object inventory... done\nbuild + succeeded.\n' + b'' + + + + b"running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_return_nonze0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_return_nonze0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_return_nonze0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_return_nonze0/test-setup/build/sphinx/linkcheck\nRunning + Sphinx v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are + out of date\nbuilding [linkcheck]: targets for 1 source files that are out of date\nupdating environment: 1 + added, 0 changed, 0 removed\nreading sources... [100%] contents\n\nlooking for now-outdated files... none + found\npickling environment... done\nchecking consistency... done\npreparing documents... done\nwriting + output... [100%] contents\n\n(line 1) broken http://localhost.unexistentdomain/index.html - + HTTPConnectionPool(host='localhost.unexistentdomain', port=80): Max retries exceeded with url: + /index.html (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at + 0x7f4104139a58>: Failed to establish a new connection: [Errno -2] Name or service not known',))\n\nbuild + finished with problems.\n" + b'\nException occurred:\n File "/home/daniel/workspace/sphinx/sphinx/sphinx/setup_command.py", + line 195, in run\n \'caused by %s builder.\' % + app.builder.name)\ndistutils.errors.DistutilsExecError: caused by linkcheck builder.\nThe full traceback has + been saved in /tmp/sphinx-err-4lgpsv5h.log, if you want to report the issue to the developers.\nPlease also + report this if it was a user error, so that a better error message can be provided next time.\nA bug report + can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!\n' + + + + b'running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_retu0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_retu0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_retu0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_retu0/test-setup/build/sphinx/html\nRunning Sphinx + v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are out of + date\nbuilding [html]: targets for 1 source files that are out of date\nupdating environment: 1 added, 0 + changed, 0 removed\nreading sources... [100%] contents\n\nlooking for now-outdated files... none + found\npickling environment... done\nchecking consistency... done\npreparing documents... done\nwriting + output... [100%] contents\n\ngenerating indices... genindex\nwriting additional pages... search\ncopying + static files... done\ncopying extra files... done\ndumping search index in English (code: en) ... + done\ndumping object inventory... done\nbuild succeeded, 1 warning.\n' + b'/tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_retu0/test-setup/doc/contents.txt:1: + WARNING: undefined label: unexisting-reference-label (if the link has no caption the label must precede a + section header)\n' + + + + b'running build_sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_is_e0/test-setup/build\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_is_e0/test-setup/build/sphinx\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_is_e0/test-setup/build/sphinx/doctrees\ncreating + /tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_is_e0/test-setup/build/sphinx/html\nRunning Sphinx + v1.7+\nloading pickled environment... not yet created\nbuilding [mo]: targets for 0 po files that are out of + date\nbuilding [html]: targets for 1 source files that are out of date\nupdating environment: 1 added, 0 + changed, 0 removed\nreading sources... [100%] contents\n\nlooking for now-outdated files... none + found\npickling environment... done\nchecking consistency... done\npreparing documents... done\nwriting + output... [100%] contents\n\n' + b'\nWarning, treated as + error:\n/tmp/pytest-of-daniel/pytest-1/test_build_sphinx_warning_is_e0/test-setup/doc/contents.txt:1:undefined + label: unexisting-reference-label (if the link has no caption the label must precede a section header)\n' + + + + # testroot: root + # builder: html + # srcdir: /tmp/templating + # outdir: /tmp/templating/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + [autosummary] generating autosummary for: autosummary_templating.txt + [autosummary] generating autosummary for: /tmp/templating/generated/sphinx.application.TemplateBridge.txt + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 2 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m3 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 33%] #x1B[35mautosummary_templating#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 66%] #x1B[35mcontents#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] + #x1B[35mgenerated/sphinx.application.TemplateBridge#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mautosummary_templating#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mcontents#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] + #x1B[32mgenerated/sphinx.application.TemplateBridge#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/templating + # outdir: /tmp/templating/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + [autosummary] generating autosummary for: autosummary_templating.txt + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 0 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mno targets are out of date.#x1B[39;49;00m + + # warning: + + + + + app = <SphinxTestApp buildername='html'>, status = <_io.StringIO + object at 0x7ff4b6c574c8>, warning = <_io.StringIO object at 0x7ff4b6c57798> + + @pytest.mark.sphinx( + confoverrides={'html_theme': 'ziptheme', + 'html_theme_options.testopt': 'foo'}) + def test_theme_api(app, status, warning): + cfg = app.config + + # test Theme class API + > assert set(app.html_themes.keys()) == \ + set(['basic', 'default', 'scrolls', 'agogo', 'sphinxdoc', + 'haiku', + 'traditional', 'testtheme', 'ziptheme', 'epub', 'nature', + 'pyramid', 'bizstyle', 'classic', 'nonav']) + E AssertionError: assert {'agogo', 'al...default', ...} == {'agogo', 'bas..., + 'epub', ...} + E Extra items in the left set: + E 'alabaster' + E Use -v to get the full diff + + tests/test_theming.py:26: AssertionError + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/tocdepth + # outdir: /tmp/tocdepth/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mupdating environment: #x1B[39;49;00m4 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[ 25%] #x1B[35mbar#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 50%] #x1B[35mbaz#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[ 75%] #x1B[35mfoo#x1B[39;49;00m + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/double-inheriting-theme + # outdir: /tmp/double-inheriting-theme/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/theming + # outdir: /tmp/theming/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [html]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/toctree-glob + # outdir: /tmp/toctree-glob/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[01mbuilding [html]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m0 added, 0 changed, 0 removed + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[ 8%] #x1B[32mbar/bar_1#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 16%] #x1B[32mbar/bar_2#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 25%] #x1B[32mbar/bar_3#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 33%] #x1B[32mbar/bar_4/index#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 41%] #x1B[32mbar/index#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 50%] #x1B[32mbaz#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 58%] #x1B[32mfoo#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 66%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 75%] #x1B[32mquux#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 83%] #x1B[32mqux/index#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[ 91%] #x1B[32mqux/qux_1#x1B[39;49;00m + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mqux/qux_2#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping search index in English (code: en) ... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + # testroot: root + # builder: singlehtml + # srcdir: /tmp/toctree-empty + # outdir: /tmp/toctree-empty/_build/singlehtml + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [singlehtml]#x1B[39;49;00m: all source files + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01massembling single document... #x1B[39;49;00m + #x1B[01mwriting... #x1B[39;49;00mdone + #x1B[01mwriting additional files...#x1B[39;49;00m + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + + # warning: + + + + + + + + # testroot: root + # builder: dummy + # srcdir: /tmp/root + # outdir: /tmp/root/_build/dummy + # status: + #x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x1B[01mtesting + ... #x1B[39;49;00m[ 33%] #x1B[32mhello#x1B[39;49;00m + #x1B[01mtesting ... #x1B[39;49;00m[ 66%] #x1B[32msphinx#x1B[39;49;00m + #x1B[01mtesting ... #x1B[39;49;00m[100%] #x1B[32mworld#x1B[39;49;00m + + + # warning: + + + + + + + + + + + + + + + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + + + + + + + + + + + + + + + + + + + + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[30;01mmessage1#x1B[39;49;00m + message2 + + # warning: + #x1B[31mWARNING: message3#x1B[39;49;00m + WARNING: message4 + #x1B[31mWARNING: message5#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + message1 + message1 + message2 + message1 + message2 + #x1B[30;01mmessage3#x1B[39;49;00m + + # warning: + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + message1message2 + message3 + + # warning: + + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x00#x1B[31mWARNING: + message2#x1B[39;49;00m + #x1B[31mWARNING: message3#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: message#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x1B[31m/tmp/root/index.txt: WARNING: message1#x1B[39;49;00m + #x1B[31m/tmp/root/index.txt:10: WARNING: message2#x1B[39;49;00m + #x1B[31mWARNING: message3#x1B[39;49;00m + #x1B[31mindex.txt:10: WARNING: message4#x1B[39;49;00m + #x1B[31mindex.txt:: WARNING: message5#x1B[39;49;00m + #x1B[31m<unknown>:10: WARNING: message6#x1B[39;49;00m + #x1B[31mWARNING: message7#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + # warning: + #x1B[31mWARNING: message1#x1B[39;49;00m + #x1B[31mWARNING: message2#x1B[39;49;00m + #x1B[31mWARNING: message3#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + #x1B[30;01mmessage1#x1B[39;49;00m + message2 + message3 + #x1B[37;01mmessage7#x1B[39;49;00m + #x1B[31;01mmessage8#x1B[39;49;00m + + # warning: + #x1B[31mWARNING: message4#x1B[39;49;00m + WARNING: message5 + #x1B[31mWARNING: message6#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + message1 + + # warning: + #x1B[31m/tmp/root/index.txt: WARNING: message2#x1B[39;49;00m + + + + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + unicode ?... + + # warning: + + + + + + + + + + + + + + + + + + + + + + + + + + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [websupport]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + #x1B[01mreading sources... #x1B[39;49;00m[100%] #x1B[35mindex#x1B[39;49;00m + #x1B[01mlooking for now-outdated files... #x1B[39;49;00mnone found + #x1B[01mpickling environment... #x1B[39;49;00mdone + #x1B[01mchecking consistency... #x1B[39;49;00mdone + #x1B[01mpreparing documents... #x1B[39;49;00mdone + #x1B[01mwriting output... #x1B[39;49;00m[100%] #x1B[32mindex#x1B[39;49;00m + #x1B[01mgenerating indices...#x1B[39;49;00m genindex + #x1B[01mwriting additional pages...#x1B[39;49;00m search + #x1B[01mcopying static files... #x1B[39;49;00mdone + #x1B[01mcopying extra files... #x1B[39;49;00mdone + #x1B[01mdumping object inventory... #x1B[39;49;00mdone + #x1B[01mbuild succeeded.#x1B[39;49;00m + + + + + From d96c0a5cf6b562a2579e3e7891d78e40296c80ae Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 15 Nov 2019 13:22:51 +0100 Subject: [PATCH 026/159] Fixes tests --- packages/sphinx-test-reports/tests/test_env.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index 29e7cdf57..7bbf631a4 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -22,7 +22,7 @@ def test_doc_env_report_build_html(app, status, warning): html = (app.outdir / 'index.html').read_text() assert '

Test-Env report' in html - assert '

' in html + assert '' in html tables = re.findall("(

Variable

Variable
)", html, re.DOTALL) @@ -108,7 +108,7 @@ def test_doc_env_report_warning_build_html(app, status, warning): html = (app.outdir / 'index.html').read_text() assert '

Test-Env report' in html - assert '

' in html + assert '' in html tables = re.findall("(

Variable

Variable
)", html, re.DOTALL) From 52a3711f318990b1b471388bd8bb40abd093265a Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 15 Nov 2019 13:27:36 +0100 Subject: [PATCH 027/159] Raises version to 0.3.1 --- packages/sphinx-test-reports/docs/changelog.rst | 6 +++++- packages/sphinx-test-reports/docs/conf.py | 4 ++-- packages/sphinx-test-reports/setup.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 020103040..3cba1c78d 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,9 +1,13 @@ Changelog ========= +0.3.1 +----- +* Improvement: Support of case and table colors based on ``result``. +* Bugfix: Hash-Id for autogenerated test-cases size was increased. + 0.3.0 ----- - * Improvement: Using `sphinx-needs `_ for data representation and filtering. * Improvement: New directives :ref:`test-file`, :ref:`test-suite` and :ref:`test-case`. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 795d45201..08f83ef04 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -26,9 +26,9 @@ author = 'team useblocks' # The short X.Y version -version = '0.2' +version = '0.3' # The full version, including alpha/beta/rc tags -release = '0.2' +release = '0.3.1' # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index e8c514680..0494672ae 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,7 +8,7 @@ setup( name='sphinx-test-reports', - version='0.3.0', + version='0.3.1', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index ee1996dba..e35977827 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -83,4 +83,4 @@ def setup(app): add_need_type(app, 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'folder') add_need_type(app, 'testcase', 'Test-Case', 'TC_', '#999999', 'rectangle') - return {'version': '0.2.0'} # identifies the version of our extension + return {'version': '0.3.1'} # identifies the version of our extension From fbd40b7eb628607b0db19d06e47872e58c3d82aa Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 15 Nov 2019 13:28:51 +0100 Subject: [PATCH 028/159] Fixes flake8 findings# --- .../sphinxcontrib/test_reports/directives/test_case.py | 2 +- .../sphinxcontrib/test_reports/junitparser.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index d3f1a6e78..f88058c21 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -74,7 +74,7 @@ def run(self): content = self.test_content if len(case['text']) > 0: content += """ - + **Text**:: {} diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 153e62f26..f12cae382 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -1,5 +1,4 @@ import os -import re from lxml import etree, objectify From 9c70407629d8af8b1d9ccfd58c634bdbd871b2c8 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 15 Nov 2019 13:34:25 +0100 Subject: [PATCH 029/159] Fixes flake8 findings# --- packages/sphinx-test-reports/tests/test_env.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index 7bbf631a4..29e7cdf57 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -22,7 +22,7 @@ def test_doc_env_report_build_html(app, status, warning): html = (app.outdir / 'index.html').read_text() assert '

Test-Env report' in html - assert '

' in html + assert '' in html tables = re.findall("(
Variable

Variable

)", html, re.DOTALL) @@ -108,7 +108,7 @@ def test_doc_env_report_warning_build_html(app, status, warning): html = (app.outdir / 'index.html').read_text() assert '

Test-Env report' in html - assert '

' in html + assert '' in html tables = re.findall("(
Variable

Variable

)", html, re.DOTALL) From b8cfcfc1e81c75619e6cc61ecd1495627e1a12f1 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 15 Nov 2019 13:43:19 +0100 Subject: [PATCH 030/159] Set doc-req for test-report on 0.3.1 --- packages/sphinx-test-reports/doc-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 366190410..b199cb878 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,4 +1,4 @@ sphinx>=2.0 sphinxcontrib-needs>=0.4 -sphinx-test-reports>=0.3 +sphinx-test-reports>=0.3.1 sphinxcontrib-plantuml From 5ff1f891b7ecf3ff7545ee40574d00089920b375 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 21 Nov 2019 10:55:31 +0100 Subject: [PATCH 031/159] Adds new tr_file and go options --- .../sphinx-test-reports/docs/changelog.rst | 8 + .../docs/configuration.rst | 71 ++++++++ packages/sphinx-test-reports/docs/index.rst | 1 + packages/sphinx-test-reports/setup.py | 2 +- .../test_reports/directives/test_case.py | 35 ++-- .../test_reports/directives/test_common.py | 30 ++-- .../test_reports/directives/test_env.py | 2 +- .../test_reports/directives/test_file.py | 23 ++- .../test_reports/directives/test_results.py | 2 +- .../test_reports/directives/test_suite.py | 9 +- .../test_reports/functions/__init__.py | 8 +- .../test_reports/test_reports.py | 47 ++++-- .../tests/doc_test/custom_types/Makefile | 20 +++ .../tests/doc_test/custom_types/conf.py | 153 ++++++++++++++++++ .../tests/doc_test/custom_types/index.rst | 18 +++ .../tests/doc_test/custom_types/make.bat | 36 +++++ .../tests/test_custom_types.py | 10 ++ 17 files changed, 427 insertions(+), 48 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/configuration.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_types/make.bat create mode 100644 packages/sphinx-test-reports/tests/test_custom_types.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 3cba1c78d..5a56558fe 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,5 +1,13 @@ Changelog ========= +0.3.2 +----- +* Improvement: Introduces :ref:`tr_file`, :ref:`tr_suite` and :ref:`tr_case` options to customize names. +* Improvement: Not found files will throw warning instead of exception so that build goes on. +* Improvement: Provides css_classes ``tr_passed``, ``tr_failure``, ``tr_skipped`` to colorize needs and their rows in tables. +* Bugfix: Stabilised extension initialisation phase. + + 0.3.1 ----- * Improvement: Support of case and table colors based on ``result``. diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst new file mode 100644 index 000000000..cdb28d56c --- /dev/null +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -0,0 +1,71 @@ +Configuration +============= +The following options can be set inside the ``conf.py`` file of your Sphinx project. + +.. contents:: + :local: + +tr_rootdir +---------- +``tr_rootdir`` takes a path, which is used as *root dir* for all provided file paths in other directives. + +By default ``tr_rootdir`` contains the configuration folder of your Sphinx project (The one with ``conf.py`` in it). + +.. _tr_file: + +tr_file +------- +``tr_file`` allows to specify a custom directive name and need-configuration for ``test-file``. + +Instead of using ``.. test-file::`` you may want to use ``.. test-path::``. + +It may get also important to solve directive name conflicts with other Sphinx extensions. + +By default ``tr_file`` is set to:: + + ['test-file', 'testfile', 'Test-File', 'TF_', '#ffffff', 'node'] + +All of the following arguments must be set: + +1. **directive name** +2. **need directive name** +3. **need print name** +4. **need id prefix** +5. **need collor** +6. **need plantuml style** + +The parameters **2-6** are used to configure the underlying Sphinx-needs. +See it's +`documentation about needs_types `_ +for more details. + +.. _tr_suite: + +tr_suite +-------- + +``tr_suite`` allows to specify a custom directive name and need-configuration for ``test-suite``. + +Instead of using ``.. test-suite::`` you may want to use ``.. test-container::``. + +By default ``tr_suite`` is set to:: + + ['test-suite', 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'node'] + +Please read :ref:`tr_file` for more details. + +.. _tr_case: + +tr_case +------- + +``tr_case`` allows to specify a custom directive name and need-configuration for ``test-case``. + +Instead of using ``.. test-case::`` you may want to use ``.. test-run::``. + +By default ``tr_case`` is set to:: + + ['test-case', 'testcase', 'Test-Case', 'TC_', '#999999', 'node'] + +Please read :ref:`tr_file` for more details. + diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 1cd84f10c..1a69c7106 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -47,6 +47,7 @@ Content install directives/index + configuration filter functions examples/index diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 0494672ae..fdf91518e 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,7 +8,7 @@ setup( name='sphinx-test-reports', - version='0.3.1', + version='0.3.2', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index f88058c21..3dab8a65a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -41,9 +41,9 @@ def run(self): if suite_name is None: raise TestReportInvalidOption('Suite not given!') - case_name = self.options.get('case', None) + case_full_name = self.options.get('case', None) class_name = self.options.get('classname', None) - if case_name is None and class_name is None: + if case_full_name is None and class_name is None: raise TestReportInvalidOption('Case or classname not given!') suite = None @@ -57,18 +57,20 @@ def run(self): case = None for case_obj in suite['testcases']: - if case_obj['name'] == case_name and class_name is None: + if case_obj['name'] == case_full_name and class_name is None: case = case_obj - elif case_obj['classname'] == class_name and case_name is None: + break + elif case_obj['classname'] == class_name and case_full_name is None: case = case_obj break - elif case_obj['name'] == case_name and case_obj['classname'] == class_name: + elif case_obj['name'] == case_full_name and case_obj['classname'] == class_name: case = case_obj break if case is None: raise TestReportInvalidOption('Case {} with classname {} not found in test file {} ' - 'and testsuite {}'.format(case_name, class_name, self.test_file, suite_name)) + 'and testsuite {}'.format(case_full_name, + class_name, self.test_file, suite_name)) result = case['result'] content = self.test_content @@ -102,12 +104,27 @@ def run(self): time = case['time'] style = 'tr_' + case['result'] + import re + groups = re.match(r'^(?P[^\[]+)($|\[(?P.*)?\])', case['name']) + try: + case_name = groups['name'] + case_parameter = groups['param'] + except TypeError: + case_name = case_full_name + case_parameter = '' + + if case_parameter is None: + case_parameter = '' + main_section = [] docname = self.state.document.settings.env.docname - main_section += add_need(self.env.app, self.state, docname, self.lineno, - need_type="testcase", title=self.test_name, id=self.test_id, + main_section += add_need(self.app, self.state, docname, self.lineno, + need_type=self.need_type, + title=self.test_name, id=self.test_id, content=content, links=self.test_links, tags=self.test_tags, status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suite=suite['name'], case=case_name, classname=class_name, + file=self.test_file_given, suite=suite['name'], + case=case_full_name, case_name=case_name, case_parameter=case_parameter, + classname=class_name, result=result, time=time, style=style) return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index d738b55ca..f298e1bea 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -3,11 +3,12 @@ """ import os from docutils.parsers.rst import Directive +from sphinx.util import logging from sphinxcontrib.needs.api import make_hashed_id from sphinxcontrib.test_reports.junitparser import JUnitParser -from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException, TestReportFileInvalidException +from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException class TestCommonDirective(Directive): @@ -17,8 +18,9 @@ class TestCommonDirective(Directive): def __init__(self, *args, **kwargs): super(TestCommonDirective, self).__init__(*args, **kwargs) self.env = self.state.document.settings.env - if not hasattr(self.env, 'testreport_data'): - self.env.testreport_data = {} + self.app = self.env.app + if not hasattr(self.app, 'testreport_data'): + self.app.testreport_data = {} self.test_file = None self.results = None @@ -31,6 +33,9 @@ def __init__(self, *args, **kwargs): self.test_tags = None self.test_status = None self.collapse = None + self.need_type = None + + self.log = logging.getLogger(__name__) def load_test_file(self): """ @@ -43,17 +48,20 @@ def load_test_file(self): if self.test_file is None: raise TestReportFileNotSetException('Option test_file must be set.') - root_path = self.env.app.config.test_reports_rootdir + root_path = self.app.config.tr_rootdir if not os.path.isabs(self.test_file): self.test_file = os.path.join(root_path, self.test_file) if not os.path.exists(self.test_file): - raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) + # raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) + self.log.warning('Given test_file path invalid: {} in {} (Line: {})'.format( + self.test_file, self.docname, self.lineno)) + return None - if self.test_file not in self.env.testreport_data.keys(): + if self.test_file not in self.app.testreport_data.keys(): parser = JUnitParser(self.test_file) - self.env.testreport_data[self.test_file] = parser.parse() + self.app.testreport_data[self.test_file] = parser.parse() - self.results = self.env.testreport_data[self.test_file] + self.results = self.app.testreport_data[self.test_file] return self.results def prepare_basic_options(self): @@ -65,9 +73,9 @@ def prepare_basic_options(self): self.test_name = self.arguments[0] self.test_content = "\n".join(self.content) - need_type = self.name.replace('-', '').replace('_', '') + self.need_type = self.app.tr_types[self.name][0] self.test_id = self.options.get('id', - make_hashed_id(self.env.app, need_type, self.test_name, self.test_content)) + make_hashed_id(self.app, self.need_type, self.test_name, self.test_content)) self.test_file = self.options.get('file', None) self.test_file_given = self.test_file[:] @@ -86,4 +94,4 @@ def prepare_basic_options(self): else: raise Exception("collapse attribute must be true or false") else: - self.collapse = getattr(self.env.app.config, "needs_collapse_details", True) + self.collapse = getattr(self.app.config, "needs_collapse_details", True) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index 8ea470666..906bab44a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -64,7 +64,7 @@ def run(self): env = self.state.document.settings.env json_path = self.arguments[0] - root_path = env.app.config.test_reports_rootdir + root_path = env.app.config.tr_rootdir if not os.path.isabs(json_path): json_path = os.path.join(root_path, json_path) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 6cf5329e0..5b80f1ec2 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -37,7 +37,19 @@ def __init__(self, *args, **kwargs): def run(self): self.prepare_basic_options() - self.load_test_file() + results = self.load_test_file() + + # Error handling, if file not found + if results is None: + main_section = [] + content = nodes.error() + para = nodes.paragraph() + text_string = "Test file not found: {}".format(self.test_file) + text = nodes.Text(text_string, text_string) + para += text + content.append(para) + main_section.append(content) + return main_section suites = len(self.results) cases = sum([int(x['tests']) for x in self.results]) @@ -49,8 +61,9 @@ def run(self): main_section = [] docname = self.state.document.settings.env.docname - main_section += add_need(self.env.app, self.state, docname, self.lineno, - need_type="testfile", title=self.test_name, id=self.test_id, + main_section += add_need(self.app, self.state, docname, self.lineno, + need_type=self.need_type, + title=self.test_name, id=self.test_id, content=self.test_content, links=self.test_links, tags=self.test_tags, status=self.test_status, collapse=self.collapse, file=self.test_file_given, suites=suites, cases=cases, @@ -76,8 +89,8 @@ def run(self): arguments = [suite['name']] suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - 'test-suite', arguments, options, - self.content, self.lineno, + self.app.config.tr_suite[0], arguments, options, + '', self.lineno, # no content self.content_offset, self.block_text, self.state, self.state_machine) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index be5ff94aa..c50846354 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -28,7 +28,7 @@ def run(self): env = self.state.document.settings.env xml_path = self.arguments[0] - root_path = env.app.config.test_reports_rootdir + root_path = env.app.config.tr_rootdir if not os.path.isabs(xml_path): xml_path = os.path.join(root_path, xml_path) parser = JUnitParser(xml_path) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 5abccdd43..7eba3ea27 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -59,8 +59,9 @@ def run(self): main_section = [] docname = self.state.document.settings.env.docname - main_section += add_need(self.env.app, self.state, docname, self.lineno, - need_type="testsuite", title=self.test_name, id=self.test_id, + main_section += add_need(self.app, self.state, docname, self.lineno, + need_type=self.need_type, + title=self.test_name, id=self.test_id, content=self.test_content, links=self.test_links, tags=self.test_tags, status=self.test_status, collapse=self.collapse, file=self.test_file_given, suite=suite['name'], cases=cases, @@ -84,8 +85,8 @@ def run(self): arguments = [case['name']] case_directive = sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( - 'test-case', arguments, options, - self.content, self.lineno, + self.app.config.tr_case[0], arguments, options, + '', self.lineno, # no content self.content_offset, self.block_text, self.state, self.state_machine) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py index 3d7876c50..f89184931 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py @@ -4,10 +4,10 @@ def tr_link(app, need, needs, test_option, target_option, *args, **kwargs): test_opt = need[test_option] links = [] - for need in needs.values(): - if target_option not in need: + for need_target in needs.values(): + if target_option not in need_target: continue - if test_opt == need[target_option]: - links.append(need['id']) + if test_opt == need_target[target_option] and test_opt is not None and len(test_opt) > 0: + links.append(need_target['id']) return links diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index e35977827..274201c02 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -30,7 +30,10 @@ def setup(app): log.info("Setting up sphinx-test-reports extension") # configurations - app.add_config_value('test_reports_rootdir', app.confdir, 'html') + app.add_config_value('tr_rootdir', app.confdir, 'html') + app.add_config_value('tr_file', ['test-file', 'testfile', 'Test-File', 'TF_', '#ffffff', 'node'], 'html') + app.add_config_value('tr_suite', ['test-suite', 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'folder'], 'html') + app.add_config_value('tr_case', ['test-case', 'testcase', 'Test-Case', 'TC_', '#999999', 'rectangle'], 'html') # nodes app.add_node(TestResults) @@ -41,17 +44,37 @@ def setup(app): # directives app.add_directive('test-results', TestResultsDirective) - app.add_directive('test-file', TestFileDirective) - app.add_directive('test-suite', TestSuiteDirective) - app.add_directive('test-case', TestCaseDirective) app.add_directive('test-env', EnvReportDirective) # events app.connect('env-updated', install_styles_static_files) + app.connect('config-inited', tr_preparation) + app.connect('config-inited', sphinx_needs_update) - ############################ - # sphinx-needs configuration - ############################ + return {'version': '0.3.2'} # identifies the version of our extension + + +def tr_preparation(app, *args): + """ + Prepares needed vars in the app context. + """ + if not hasattr(app, 'tr_types'): + app.tr_types = {} + + # Collects the configured test-report node types + app.tr_types[app.config.tr_file[0]] = app.config.tr_file[1:] + app.tr_types[app.config.tr_suite[0]] = app.config.tr_suite[1:] + app.tr_types[app.config.tr_case[0]] = app.config.tr_case[1:] + + app.add_directive(app.config.tr_file[0], TestFileDirective) + app.add_directive(app.config.tr_suite[0], TestSuiteDirective) + app.add_directive(app.config.tr_case[0], TestCaseDirective) + + +def sphinx_needs_update(app, *args): + """ + sphinx-needs configuration + """ # Extra options # For details read @@ -59,6 +82,8 @@ def setup(app): add_extra_option(app, 'file') add_extra_option(app, 'suite') add_extra_option(app, 'case') + add_extra_option(app, 'case_name') + add_extra_option(app, 'case_parameter') add_extra_option(app, 'classname') add_extra_option(app, 'time') @@ -79,8 +104,6 @@ def setup(app): # Extra need types # For details about usage read # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_need_type - add_need_type(app, 'testfile', 'Test-File', 'TF_', '#ffffff', 'node') - add_need_type(app, 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'folder') - add_need_type(app, 'testcase', 'Test-Case', 'TC_', '#999999', 'rectangle') - - return {'version': '0.3.1'} # identifies the version of our extension + add_need_type(app, *app.config.tr_file[1:]) + add_need_type(app, *app.config.tr_suite[1:]) + add_need_type(app, *app.config.tr_case[1:]) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py new file mode 100644 index 000000000..0d7518efc --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] + +tr_file = ['test-path', 'testpath', 'Test-Path', 'TC_', '#999999', 'rectangle'] +tr_suite = ['test-container', 'testcontainer', 'Test-Container', 'TC_', '#999999', 'rectangle'] +tr_case = ['test-run', 'testrun', 'Test-Run', 'TC_', '#999999', 'rectangle'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst new file mode 100644 index 000000000..bac27143a --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst @@ -0,0 +1,18 @@ +Custom Types +============ + + +.. test-path:: path test + :id: TEST_1 + :file: ../../data/xml_data.xml + +.. test-container:: container test + :id: TEST_2 + :file: ../../data/pytest_data.xml + :suite: pytest + +.. test-run:: run test + :id: TEST_3 + :file: ../../data/pytest_data.xml + :suite: pytest + :case: FLAKE8 diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/make.bat b/packages/sphinx-test-reports/tests/doc_test/custom_types/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_custom_types.py b/packages/sphinx-test-reports/tests/test_custom_types.py new file mode 100644 index 000000000..7fb67ba30 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_custom_types.py @@ -0,0 +1,10 @@ +from sphinx_testing import with_app + + +@with_app(buildername='html', srcdir='doc_test/custom_types') +def test_custom_types_html(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text() + assert 'Test-Path' in html + assert 'Test-Container' in html + assert 'Test-Run' in html From b1eeebb2ab886d7d9853355cae055d91322835c8 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 21 Nov 2019 12:43:38 +0100 Subject: [PATCH 032/159] deps update --- packages/sphinx-test-reports/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index fdf91518e..bd8264e3b 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -4,7 +4,7 @@ import os from setuptools import setup, find_packages -requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.4.1'] +requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.4.2'] setup( name='sphinx-test-reports', From c01fdaf683478b91522f7aec4e55459fa3ece340 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 21 Nov 2019 15:01:01 +0100 Subject: [PATCH 033/159] Adds test_report directive --- .../docs/directives/index.rst | 1 + .../docs/directives/test_report.rst | 61 ++++++++++ .../docs/examples/pytest.rst | 4 +- packages/sphinx-test-reports/docs/index.rst | 107 +++++++----------- .../test_reports/directives/__init__.py | 1 + .../test_reports/directives/test_common.py | 14 ++- .../test_reports/directives/test_report.py | 63 +++++++++++ .../directives/test_report_template.txt | 41 +++++++ .../test_reports/test_reports.py | 4 +- .../tests/data/pytest_sphinx_data_short.xml | 87 ++++++++++++++ 10 files changed, 308 insertions(+), 75 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/directives/test_report.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt create mode 100644 packages/sphinx-test-reports/tests/data/pytest_sphinx_data_short.xml diff --git a/packages/sphinx-test-reports/docs/directives/index.rst b/packages/sphinx-test-reports/docs/directives/index.rst index f01925d0d..ac5fb8bc9 100644 --- a/packages/sphinx-test-reports/docs/directives/index.rst +++ b/packages/sphinx-test-reports/docs/directives/index.rst @@ -7,5 +7,6 @@ Directives test_file test_suite test_case + test_report test_results test_env diff --git a/packages/sphinx-test-reports/docs/directives/test_report.rst b/packages/sphinx-test-reports/docs/directives/test_report.rst new file mode 100644 index 000000000..322a93bf3 --- /dev/null +++ b/packages/sphinx-test-reports/docs/directives/test_report.rst @@ -0,0 +1,61 @@ +.. _test-report: + +test-report +=========== +``test-report`` generate a complete report including test-cases, tables and statistics for a given test-file. + +.. code-block:: rst + + .. test-report:: My Report + :id: REPORT + :file: ../tests/data/pytest_sphinx_data_short.xml + +The following options must be set: + +* **id**: An unique id. Will be used as prefix for all created objects. +* **file**: File path to the test file. + +Optional options are: + +* **tags**: comma separated list of tags. Will be set to all created test objects. +* **links**: comma separated list of links. Will be set to all created test objects. + +Example +------- +Used code: + +.. code-block:: rst + + .. test-report:: My Report + :id: REPORT + :file: ../tests/data/pytest_sphinx_data_short.xml + :tags: my_report, awesome + :links: SPEC_001 + + .. spec:: Example specification + :id: SPEC_001 + + Used as simple link target. See Sphinx-Needs for details. + + +Result: + +.. test-report:: My Report + :id: REPORT + :file: ../tests/data/pytest_sphinx_data_short.xml + :tags: my_report, awesome + :links: SPEC_001 + + This file contains a subset of executed tests for Sphinx. + +.. spec:: Example specification + :id: SPEC_001 + + Used as simple link target. See Sphinx-Needs for details. + +Template +-------- +The following rst-code is used to generate the report. + +.. literalinclude:: ../../sphinxcontrib/test_reports/directives/test_report_template.txt + :language: rst diff --git a/packages/sphinx-test-reports/docs/examples/pytest.rst b/packages/sphinx-test-reports/docs/examples/pytest.rst index 30ae472b9..310263ebf 100644 --- a/packages/sphinx-test-reports/docs/examples/pytest.rst +++ b/packages/sphinx-test-reports/docs/examples/pytest.rst @@ -1,9 +1,11 @@ +.. _example_pytest: + pytest ====== The data is coming from a pytest-run on the tests of the sphinx project. -| Test suite: :need_count:`'pytest_sphinx' in tags and type=='testsuite'` +| Test suites: :need_count:`'pytest_sphinx' in tags and type=='testsuite'` | Test cases: :need_count:`'pytest_sphinx' in tags and type=='testcase'` | Failed test cases: :need_count:`'pytest_sphinx' in tags and 'failure' == result and type=='testcase'` | Skipped test cases: :need_count:`'pytest_sphinx' in tags and 'skipped' == result and type=='testcase'` diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 1a69c7106..84d7f1559 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -23,20 +23,48 @@ Sphinx-Test-Reports ``Sphinx-Test-Reports`` shows test results inside `Sphinx `_ documentations. +It provides the following features: -Functions ---------- +* :ref:`test-file`: Documents all test cases from a junit-based xml file. +* :ref:`test-suite`: Documents a specific test-suite and its test-cases. +* :ref:`test-case`: Documents a single test-case from a given file and suite. +* :ref:`test-report`: Creates a report from a test file, including tables and more for analysis. +* :ref:`test-results`: Creates a simple table of test cases inside a given file. +* :ref:`test-env`: Documents the used test-environment. + Based on `tox-envreport `_. + + +Introduction +------------ + +A single documented test-case looks like this: + +.. test-case:: test_add_source_parser + :file: ../tests/data/pytest_sphinx_data.xml + :suite: pytest + :case: test_add_source_parser + :collapse: FALSE + + Custom Message: The result is **[[copy('result')]]** with an execution time of **[[copy('time')]]**. + + Now follows automatically generated output like system-out, messages and text of the test-case. + +Take a look into our :ref:`pytest example ` to see the complete result of all Sphinx tests +(:need_count:`'pytest_sphinx' in tags` test cases!). + +The objects created by ``Sphinx-Test-Reports`` are based on +`Sphinx-Needs `_. +So all features for filtering, sorting and showing data is supported. + +As example, here is a shorten list of tests results from the Sphinx-pytest example: + +.. needtable:: + :filter: 'REPORT' in tags and type == 'testcase' + :columns: id, title, result + :style_row: tr_[[copy('result')]] -* By using :ref:`test-results` it shows **test results** of *JUnit based xml reports* as table. - JUnit exports are supported by: - * `pytest `_ - * `nosetest `_ - * Other test frameworks (including frameworks from java and co.) support also the JUnit format. -* By using :ref:`test-env` it shows **test environment information** - from `tox-envreport `_ - based exports as table. (E.g. used operating system, python version, installed packages, ...) Content @@ -54,65 +82,6 @@ Content support changelog - -Examples --------- - -test result report -~~~~~~~~~~~~~~~~~~ - -Input -+++++ - -**my_data.xml** - -.. literalinclude:: ../tests/data/xml_data_2.xml - -**my_document.rst** - -.. code-block:: rst - - My Test Results - =============== - - .. test-results:: my_data.xml - -Output -++++++ - -.. test-results:: ../tests/data/xml_data_2.xml - - -test env report -~~~~~~~~~~~~~~~ - -Input -+++++ -The following lines are just an excerpt of a json-file generated by -`tox-env-report `_. - -**tox-reports.json** - -.. literalinclude:: ../tests/data/tox-report-short.json - :language: json - - -**my_documents.rst** - -.. code-block:: rst - - .. test-env:: ../tests/data/tox-report-short.json - :data: name, host, installed_packages, path - :env: py27 - -Output -++++++ - -.. test-env:: ../tests/data/tox-report-short.json - :data: name, host, installed_packages, path - :env: py27 - - Motivation ---------- ``Sphinx-Test-Reports`` was created for an automotive project, which needs to document test results and their used diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py index 8d4189291..170433965 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py @@ -2,3 +2,4 @@ from .test_file import TestFileDirective, TestFile from .test_suite import TestSuiteDirective, TestSuite from .test_case import TestCaseDirective, TestCase +from .test_report import TestReportDirective, TestReport diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index f298e1bea..773255ff9 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -8,7 +8,7 @@ from sphinxcontrib.needs.api import make_hashed_id from sphinxcontrib.test_reports.junitparser import JUnitParser -from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException +from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException, SphinxError class TestCommonDirective(Directive): @@ -73,9 +73,15 @@ def prepare_basic_options(self): self.test_name = self.arguments[0] self.test_content = "\n".join(self.content) - self.need_type = self.app.tr_types[self.name][0] - self.test_id = self.options.get('id', - make_hashed_id(self.app, self.need_type, self.test_name, self.test_content)) + if self.name != 'test-report': + self.need_type = self.app.tr_types[self.name][0] + self.test_id = self.options.get('id', + make_hashed_id(self.app, self.need_type, self.test_name, self.test_content)) + else: + self.test_id = self.options.get('id', None) + + if self.test_id is None: + raise SphinxError('ID must be set for test-report.') self.test_file = self.options.get('file', None) self.test_file_given = self.test_file[:] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py new file mode 100644 index 000000000..8eff5dfa1 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -0,0 +1,63 @@ +import os + +from docutils import nodes +from docutils.parsers.rst import directives + +from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption +from sphinxcontrib.needs.api import add_need + + +class TestReport(nodes.General, nodes.Element): + pass + + +class TestReportDirective(TestCommonDirective): + """ + Directive for showing test suites. + """ + has_content = True + required_arguments = 1 + optional_arguments = 0 + option_spec = {'id': directives.unchanged_required, + 'status': directives.unchanged_required, + 'tags': directives.unchanged_required, + 'links': directives.unchanged_required, + 'collapse': directives.unchanged_required, + 'file': directives.unchanged_required, + } + + final_argument_whitespace = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + self.prepare_basic_options() + self.load_test_file() + + with open(os.path.join(os.path.dirname(__file__), 'test_report_template.txt')) as template_file: + template = "".join(template_file.readlines()) + + if self.test_links is not None and len(self.test_links) > 0: + links_string = "\n :links: {}".format(self.test_links) + else: + links_string = "" + + template_data = { + 'file': self.test_file, + 'id': self.test_id, + 'file_type': self.app.config.tr_file[0], + 'suite_need': self.app.config.tr_suite[1], + 'case_need': self.app.config.tr_case[1], + 'tags': ";".join([self.test_tags, self.test_id]) if len(self.test_tags) > 0 else self.test_id, + 'links_string': links_string, + 'title': self.test_name, + 'content': self.content + } + + template_ready = template.format(**template_data) + self.state_machine.insert_input(template_ready.split('\n'), + self.state_machine.document.attributes['source']) + + return [] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt new file mode 100644 index 000000000..22e6bc0b3 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt @@ -0,0 +1,41 @@ +**Test file**: {file} + +**Statistics** + +| Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` +| Test cases: :need_count:`'{id}' in tags and type=='{case_need}'` +| Failed test cases: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Skipped test cases: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` + +**Test cases**: + +.. needtable:: + :filter: '{id}' in tags and type == '{case_need}' + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Failed test cases**: + +.. needtable:: + :filter: '{id}' in tags and 'failure' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Skipped test cases**: + +.. needtable:: + :filter: '{id}' in tags and 'skipped' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Imported data** + + +.. {file_type}:: {title} + :id: {id}{links_string} + :tags: {tags} + :file: {file} + :auto_suites: + :auto_cases: + + {content} diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 274201c02..3a4103b43 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -7,7 +7,7 @@ from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective from sphinxcontrib.test_reports.directives import TestFile, TestFileDirective, TestSuite, TestSuiteDirective, \ - TestCase, TestCaseDirective + TestCase, TestCaseDirective, TestReport, TestReportDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link @@ -40,11 +40,13 @@ def setup(app): app.add_node(TestFile) app.add_node(TestSuite) app.add_node(TestCase) + app.add_node(TestReport) app.add_node(EnvReport) # directives app.add_directive('test-results', TestResultsDirective) app.add_directive('test-env', EnvReportDirective) + app.add_directive('test-report', TestReportDirective) # events app.connect('env-updated', install_styles_static_files) diff --git a/packages/sphinx-test-reports/tests/data/pytest_sphinx_data_short.xml b/packages/sphinx-test-reports/tests/data/pytest_sphinx_data_short.xml new file mode 100644 index 000000000..8de2be7ac --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/pytest_sphinx_data_short.xml @@ -0,0 +1,87 @@ + + + + + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mnot yet created + #x1B[01mbuilding [mo]: #x1B[39;49;00mtargets for 0 po files that are out of date + #x1B[01mbuilding [websupport]#x1B[39;49;00m: targets for 1 source files that are out of date + #x1B[01mupdating environment: #x1B[39;49;00m1 added, 0 changed, 0 removed + + + + + + + app = <SphinxTestApp buildername='html'>, status = <_io.StringIO + object at 0x7ff4b6c574c8>, warning = <_io.StringIO object at 0x7ff4b6c57798> + + @pytest.mark.sphinx( + confoverrides={'html_theme': 'ziptheme', + 'html_theme_options.testopt': 'foo'}) + def test_theme_api(app, status, warning): + E Extra items in the left set: + E 'alabaster' + E Use -v to get the full diff + + tests/test_theming.py:26: AssertionError + + # testroot: root + # builder: html + # srcdir: /tmp/root + # outdir: /tmp/root/_build/html + # status: + # warning: + + + + app = <SphinxTestApp buildername='latex'>, status = <_io.StringIO object at + 0x7ff4c662a438>, warning = <_io.StringIO object at 0x7ff4c662a678> + engine = 'lualatex', docclass = 'howto' + + @skip_if_requested + @skip_if_stylefiles_notfound + print(stdout) + print(stderr) + > assert False, '%s exited with return code %s' % ( + app.config.latex_engine, p.returncode) + E AssertionError: lualatex exited with return code 1 + E assert False + + tests/test_build_latex.py:86: AssertionError + + b"This is LuaTeX, Version 1.0.4 (TeX Live 2017/Debian) \n restricted system commands + enabled.\n(./lualatex/SphinxTests.tex\nLaTeX2e <2017-04-15>\n[\\directlua]:1: module 'luaotfload-main' + not found:\n\tno field package.preload['luaotfload-main']\n\t[kpse lua searcher] file not found: + #x1B[31m/tmp/root/contents.txt:10: WARNING: extensions is already assigned section numbers (nested numbered + toctree?)#x1B[39;49;00m + #x1B[31m/tmp/root/robots.txt: WARNING: document isn't included in any toctree#x1B[39;49;00m + + + + + /home/daniel/workspace/sphinx/sphinx/tests/test_build_texinfo.py:61: <py._xmlgen.raw object at + 0x7ff4c6fc0978> + + # testroot: root + # builder: texinfo + # srcdir: /tmp/root + # outdir: /tmp/root/_build/texinfo + # status: + #x1B[01mRunning Sphinx v1.7+/aecb0082#x1B[39;49;00m + #x1B[01mloading pickled environment... #x1B[39;49;00mdone + + + From efe28576500e39de597b0f07ec81d3acf9b83412 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 21 Nov 2019 15:02:07 +0100 Subject: [PATCH 034/159] changelog: report --- packages/sphinx-test-reports/docs/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 5a56558fe..f14e1bf99 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -2,6 +2,7 @@ Changelog ========= 0.3.2 ----- +* Improvement: Addes :ref:`test_report` directive. * Improvement: Introduces :ref:`tr_file`, :ref:`tr_suite` and :ref:`tr_case` options to customize names. * Improvement: Not found files will throw warning instead of exception so that build goes on. * Improvement: Provides css_classes ``tr_passed``, ``tr_failure``, ``tr_skipped`` to colorize needs and their rows in tables. From 6e6c8caebdacceaab8e8617b3e14d6cfcfe888f1 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 21 Nov 2019 15:09:51 +0100 Subject: [PATCH 035/159] Flake8 fixes --- .../sphinxcontrib/test_reports/directives/test_report.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 8eff5dfa1..6d7fe7b7d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -4,8 +4,6 @@ from docutils.parsers.rst import directives from sphinxcontrib.test_reports.directives import TestCommonDirective -from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption -from sphinxcontrib.needs.api import add_need class TestReport(nodes.General, nodes.Element): From 15a196c6028c80201524ae77310435fdf260b5f4 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 22 Nov 2019 07:13:29 +0100 Subject: [PATCH 036/159] doc-deps update --- packages/sphinx-test-reports/doc-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index b199cb878..c3bea8a26 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,4 +1,4 @@ sphinx>=2.0 sphinxcontrib-needs>=0.4 -sphinx-test-reports>=0.3.1 +sphinx-test-reports>=0.3.2 sphinxcontrib-plantuml From e8a5a06b8fd1fc137a49165cf91f78206bf9d505 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 22 Nov 2019 07:14:03 +0100 Subject: [PATCH 037/159] doc-deps update --- packages/sphinx-test-reports/doc-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index c3bea8a26..8a781170b 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,4 +1,4 @@ sphinx>=2.0 -sphinxcontrib-needs>=0.4 +sphinxcontrib-needs>=0.4.2 sphinx-test-reports>=0.3.2 sphinxcontrib-plantuml From a8c4d4f22b1b74405a7717761c20d6e4048961b0 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 22 Nov 2019 07:30:01 +0100 Subject: [PATCH 038/159] Raised version to 0.3.3 --- packages/sphinx-test-reports/MANIFEST.in | 3 ++- packages/sphinx-test-reports/docs/changelog.rst | 2 +- packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/setup.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/sphinx-test-reports/MANIFEST.in b/packages/sphinx-test-reports/MANIFEST.in index 3ee393d82..e26bc75df 100644 --- a/packages/sphinx-test-reports/MANIFEST.in +++ b/packages/sphinx-test-reports/MANIFEST.in @@ -1 +1,2 @@ -include sphinxcontrib/test_reports/css/common.css \ No newline at end of file +include sphinxcontrib/test_reports/css/common.css +include sphinxcontrib/test_reports/directives/test_report_template.txt diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index f14e1bf99..80acf98bd 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,6 +1,6 @@ Changelog ========= -0.3.2 +0.3.3 ----- * Improvement: Addes :ref:`test_report` directive. * Improvement: Introduces :ref:`tr_file`, :ref:`tr_suite` and :ref:`tr_case` options to customize names. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 08f83ef04..a30cf1065 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -28,7 +28,7 @@ # The short X.Y version version = '0.3' # The full version, including alpha/beta/rc tags -release = '0.3.1' +release = '0.3.3' # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index bd8264e3b..6290fcdf1 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,7 +8,7 @@ setup( name='sphinx-test-reports', - version='0.3.2', + version='0.3.3', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 3a4103b43..e2eff199a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -53,7 +53,7 @@ def setup(app): app.connect('config-inited', tr_preparation) app.connect('config-inited', sphinx_needs_update) - return {'version': '0.3.2'} # identifies the version of our extension + return {'version': '0.3.3'} # identifies the version of our extension def tr_preparation(app, *args): From bebaf96d6b3b9612057476d88b0d611400d3c4c7 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 22 Nov 2019 07:32:50 +0100 Subject: [PATCH 039/159] doc-deps update --- packages/sphinx-test-reports/doc-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 8a781170b..4bb48ddec 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,4 +1,4 @@ sphinx>=2.0 sphinxcontrib-needs>=0.4.2 -sphinx-test-reports>=0.3.2 +sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml From bf1f4e3ce5e1937ca2e5102ffeaad6cee5108cc3 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Tue, 26 May 2020 09:43:07 +0200 Subject: [PATCH 040/159] Adds more tool links --- packages/sphinx-test-reports/docs/index.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 84d7f1559..f5486c24a 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -92,6 +92,8 @@ The goal is to provide enough information to be able to setup an identical test the parameters of the `ISO 26262 `_ standard for safety critical software in automotive companies. -Other tools are: `sphinx-needs `_ -and `tox-envreport `_ +Other tools are: +`sphinx-needs `_, +`sphinx-collections `_ and +`tox-envreport `_ From 1ffc67e94aca93a4c15cb7257adf50cec66fd34c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lasse=20Benn=20N=C3=B8rregaard?= Date: Mon, 10 Aug 2020 16:09:59 +0200 Subject: [PATCH 041/159] Fix RemovedInSphinx40Warning --- .../sphinxcontrib/test_reports/environment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 002ade2e6..c13f3cb9f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -28,10 +28,10 @@ def safe_add_file(filename, app): if data_file.split(".")[-1] == "js": if hasattr(app.builder, "script_files") and static_data_file not in app.builder.script_files: - app.add_javascript(data_file) + app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": if hasattr(app.builder, "css_files") and static_data_file not in app.builder.css_files: - app.add_stylesheet(data_file) + app.add_css_file(data_file) else: raise NotImplementedError("File type {} not support by save_add_file".format(data_file.split(".")[-1])) From 1f96cd832a0554035c48c44b7f777f3e5375700a Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 30 Apr 2021 14:53:33 +0200 Subject: [PATCH 042/159] Raised version to 0.3.4 --- packages/sphinx-test-reports/.gitignore | 5 ++++- packages/sphinx-test-reports/docs/changelog.rst | 11 +++++++++++ packages/sphinx-test-reports/docs/conf.py | 2 +- .../docs/directives/test_report.rst | 2 +- packages/sphinx-test-reports/docs/index.rst | 6 +++--- packages/sphinx-test-reports/setup.py | 4 ++-- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 7 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index 8e25538ec..04441c91f 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -13,4 +13,7 @@ _build .coverage .directory -{envlogdir} \ No newline at end of file +{envlogdir} + +.envrc +.venv diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 80acf98bd..f970dd339 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,5 +1,16 @@ Changelog ========= +0.3.5 +----- +:Released: under development + + +0.3.4 +----- +:Released: 30.04.2021 + +* Bugfix: Removed Sphinx 4 deprecation warnings + 0.3.3 ----- * Improvement: Addes :ref:`test_report` directive. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index a30cf1065..755989624 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -28,7 +28,7 @@ # The short X.Y version version = '0.3' # The full version, including alpha/beta/rc tags -release = '0.3.3' +release = '0.3.4' # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/docs/directives/test_report.rst b/packages/sphinx-test-reports/docs/directives/test_report.rst index 322a93bf3..dc0eea755 100644 --- a/packages/sphinx-test-reports/docs/directives/test_report.rst +++ b/packages/sphinx-test-reports/docs/directives/test_report.rst @@ -1,4 +1,4 @@ -.. _test-report: +.. _test_report: test-report =========== diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index f5486c24a..c22ce16eb 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -93,7 +93,7 @@ the parameters of the `ISO 26262 `_ sta for safety critical software in automotive companies. Other tools are: -`sphinx-needs `_, -`sphinx-collections `_ and -`tox-envreport `_ +`sphinx-needs `__, +`sphinx-collections `__ and +`tox-envreport `__. diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 6290fcdf1..52b298a65 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -4,11 +4,11 @@ import os from setuptools import setup, find_packages -requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.4.2'] +requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.5.6'] setup( name='sphinx-test-reports', - version='0.3.3', + version='0.3.4', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index e2eff199a..f88a35538 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -53,7 +53,7 @@ def setup(app): app.connect('config-inited', tr_preparation) app.connect('config-inited', sphinx_needs_update) - return {'version': '0.3.3'} # identifies the version of our extension + return {'version': '0.3.4'} # identifies the version of our extension def tr_preparation(app, *args): From 08dabeeaf8403861235328214d99617ea72a6457 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 18 Jun 2021 06:56:31 +0200 Subject: [PATCH 043/159] Install description fix Fixes useblocks/sphinx-test-reports#15 --- packages/sphinx-test-reports/docs/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst index eef882eda..a918d99c1 100644 --- a/packages/sphinx-test-reports/docs/install.rst +++ b/packages/sphinx-test-reports/docs/install.rst @@ -1,7 +1,7 @@ Installation ============ -Install ``Sphinx-Test-Report`` via ``pip install sphinxcontrib-test-reports``. +Install ``Sphinx-Test-Report`` via ``pip install sphinx-test-reports``. After that the extension must to be added to the ``conf.py`` file:: From a7b95a4f41cdf5228003cfcd8a41b49c3205a383 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Mon, 25 Oct 2021 12:26:53 +0200 Subject: [PATCH 044/159] Added ecosystem desc to docs --- .../sphinx-test-reports/doc-requirements.txt | 3 +- .../docs/_static/sphinx-needs-card.png | Bin 0 -> 35831 bytes .../_static/sphinx-needs-enterprise-card.png | Bin 0 -> 36092 bytes .../_static/sphinx-needs-enterprise-logo.png | Bin 0 -> 78619 bytes .../docs/_static/sphinx-needs-logo.png | Bin 0 -> 53967 bytes .../docs/_static/sphinx-test-reports-card.png | Bin 0 -> 59854 bytes .../docs/_static/sphinx_bazel_logo.png | Bin 0 -> 63895 bytes .../docs/_static/sphinx_collections_logo.png | Bin 0 -> 8710 bytes packages/sphinx-test-reports/docs/conf.py | 5 +- packages/sphinx-test-reports/docs/filter.rst | 4 +- packages/sphinx-test-reports/docs/index.rst | 115 ++++++++++++++++++ 11 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx-needs-card.png create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx-needs-enterprise-card.png create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx-needs-enterprise-logo.png create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx-needs-logo.png create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx-test-reports-card.png create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx_bazel_logo.png create mode 100644 packages/sphinx-test-reports/docs/_static/sphinx_collections_logo.png diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 4bb48ddec..e3bdb28e7 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,4 +1,5 @@ sphinx>=2.0 -sphinxcontrib-needs>=0.4.2 +sphinxcontrib-needs>=0.7.2 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml +sphinx-panels >= 0.6 diff --git a/packages/sphinx-test-reports/docs/_static/sphinx-needs-card.png b/packages/sphinx-test-reports/docs/_static/sphinx-needs-card.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf05f073949a857258dad3ececfa405fbf6c899 GIT binary patch literal 35831 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%0Dfeo0tbK^_if8p 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%0DpyG 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 YL|uOLvxLs;q4Bz`w4zk8#OLq-53CsUHvj+t literal 0 HcmV?d00001 diff --git a/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-card.png b/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-card.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cd19a909c8e6a3e7830ad5ca22038196e8f57e GIT binary patch literal 59854 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 literal 0 HcmV?d00001 diff --git a/packages/sphinx-test-reports/docs/_static/sphinx_bazel_logo.png b/packages/sphinx-test-reports/docs/_static/sphinx_bazel_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1a80d55ed8d738b682fe5d8f09f0ccc75e66b1 GIT binary patch literal 63895 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 V3sR$h-k`usQ}w9I{e$KK{|8f8GB*GK literal 0 HcmV?d00001 diff --git a/packages/sphinx-test-reports/docs/_static/sphinx_collections_logo.png b/packages/sphinx-test-reports/docs/_static/sphinx_collections_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..096a9295bcd0e8d6b63668aeffc5811020f8a736 GIT binary patch literal 8710 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 literal 0 HcmV?d00001 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 755989624..063fdbaec 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -42,10 +42,11 @@ # ones. extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports", - 'sphinxcontrib.plantuml'] + 'sphinxcontrib.plantuml', + 'sphinx_panels'] cwd = os.getcwd() -plantuml = 'java -jar %s' % os.path.join(cwd, "utils/plantuml_beta.jar") +plantuml = 'java -jar %s' % os.path.join(cwd, "utils/plantuml.jar") # If we are running on windows, we need to manipulate the path, # otherwise plantuml will have problems. diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index 961e82f10..34f5e2f30 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -123,6 +123,6 @@ The used ``:filter:`` allows needs only, if they have an outgoing or incoming li **Example** -.. needflow:: +.. .. needflow:: :types: Test-File, Test-Suite, Test-Case - :filter: (len(links) > 0 or len(links_back) > 0) and "example" not in tags and "auto" not in tags + :filter: (len(links) > 0 or len(links_back) > 0) and "example" not in tags and "auto" not in tags and "pytest_sphinx" not in tags diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index c22ce16eb..7335d7e92 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -82,6 +82,121 @@ Content support changelog + +Sphinx-Needs Ecosystem +---------------------- +In the last years additional information and extensions have been created, which are based or related to Sphinx-Needs: + + +.. panels:: + :container: container-lg pb-3 + :column: col-lg-6 col-md-6 col-sm-4 col-xs-4 p-2 + :img-top-cls: pl-5 pr-5 pt-2 pb-2 + + --- + :img-top: /_static/sphinx-needs-card.png + :img-top-cls: + bg-light + + Sphinx-Needs.com + ^^^^^^^^^^^^^^^^ + Webpage to present most important Sphinx-Needs functions and related extensions. + + Good entrypoint to understand the benefits and to get an idea about the complete ecosystem of Sphinx-Needs. + + +++ + + .. link-button:: https://sphinx-needs.com + :type: url + :text: Sphinx-Needs.com + :classes: btn-secondary btn-block + + --- + :img-top: /_static/sphinx-needs-card.png + + Sphinx-Needs + ^^^^^^^^^^^^ + Base extension, which provides all of its functionality under the MIT license for free. + + Create, update, link, filter and present need objects like Requirements, Specifications, Bugs and much more. + + +++ + + .. link-button:: https://sphinxcontrib-needs.readthedocs.io/en/latest/ + :type: url + :text: Technical docs + :classes: btn-secondary btn-block + + --- + :img-top: /_static/sphinx-needs-enterprise-card.png + + Sphinx-Needs Enterprise + ^^^^^^^^^^^^^^^^^^^^^^^ + Synchronizes Sphinx-Needs data with external, company internal systems like CodeBeamer, Jira or Azure Boards. + + Provides scripts to baseline data and make CI usage easier. + +++ + + .. link-button:: http://useblocks.com/sphinx-needs-enterprise/ + :type: url + :text: Technical docs + :classes: btn-secondary btn-block + + --- + :img-top: /_static/sphinx-test-reports-card.png + + Sphinx-Test-Reports + ^^^^^^^^^^^^^^^^^^^ + Extension to import test results from xml files as need objects. + + Created need objects can be filtered and e.g. linked to specification objects. + +++ + + .. link-button:: https://sphinx-test-reports.readthedocs.io/en/latest/ + :type: url + :text: Technical docs + :classes: btn-secondary btn-block + + +Further Sphinx extensions +^^^^^^^^^^^^^^^^^^^^^^^^^ +During the work with Sphinx-Needs in bigger, company internal projects, other Sphinx extensions have been created +to support the work in teams of the automotive industry: + +.. panels:: + :container: container-lg pb-3 + :column: col-lg-6 col-md-6 col-sm-4 col-xs-4 p-2 + :img-top-cls: pl-5 pr-5 pt-2 pb-2 + + --- + :img-top: /_static/sphinx_collections_logo.png + + + Extension to collect or generate files from different sources and include them into the Sphinx source folder. + + Sources like git repositories, jinja based files or symlinks are supported. + + +++ + + .. link-button:: https://sphinx-collections.readthedocs.io/en/latest/ + :type: url + :text: Technical docs + :classes: btn-secondary btn-block + + --- + :img-top: /_static/sphinx_bazel_logo.png + + + Provides a Bazel domain in Sphinx documentations and allows the automated import of Bazel files and their + documentation. + + +++ + + .. link-button:: https://sphinx-bazel.readthedocs.io/en/latest/ + :type: url + :text: Technical docs + :classes: btn-secondary btn-block + + Motivation ---------- ``Sphinx-Test-Reports`` was created for an automotive project, which needs to document test results and their used From cdc39d41267e8addfc622639917220fcf319c8b3 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 10 Nov 2021 10:22:45 +0100 Subject: [PATCH 045/159] Linting and move to github CI --- packages/sphinx-test-reports/.flake8 | 6 + .../.github/baumpfleger.yml | 13 ++ .../.github/workflows/ci.yaml | 55 +++++++ packages/sphinx-test-reports/.travis.yml | 13 -- packages/sphinx-test-reports/Makefile | 30 ++++ .../sphinx-test-reports/docs/changelog.rst | 3 +- packages/sphinx-test-reports/noxfile.py | 53 +++++++ packages/sphinx-test-reports/setup.py | 2 +- .../sphinxcontrib/__init__.py | 2 +- .../test_reports/directives/__init__.py | 8 +- .../test_reports/directives/test_case.py | 129 +++++++++------- .../test_reports/directives/test_common.py | 39 +++-- .../test_reports/directives/test_env.py | 73 +++++---- .../test_reports/directives/test_file.py | 127 ++++++++++------ .../test_reports/directives/test_report.py | 45 +++--- .../test_reports/directives/test_results.py | 47 ++++-- .../test_reports/directives/test_suite.py | 125 ++++++++++------ .../sphinxcontrib/test_reports/environment.py | 55 +++++-- .../test_reports/functions/__init__.py | 8 +- .../sphinxcontrib/test_reports/junitparser.py | 15 +- .../test_reports/test_reports.py | 89 ++++++----- .../sphinx-test-reports/test-requirements.txt | 4 + .../tests/doc_test/basic_doc/conf.py | 63 ++++---- .../tests/doc_test/custom_types/conf.py | 76 ++++++---- .../tests/doc_test/empty_doc/conf.py | 63 ++++---- .../tests/doc_test/env_report_doc/conf.py | 63 ++++---- .../doc_test/env_report_doc_default/conf.py | 63 ++++---- .../tests/doc_test/env_report_doc_raw/conf.py | 63 ++++---- .../doc_test/env_report_warnings/conf.py | 63 ++++---- .../tests/test_basic_doc.py | 8 +- .../tests/test_custom_types.py | 10 +- .../tests/test_empty_doc.py | 6 +- .../sphinx-test-reports/tests/test_env.py | 138 +++++++++--------- .../tests/test_junit_parser.py | 14 +- packages/sphinx-test-reports/tox.ini | 26 ---- 35 files changed, 1011 insertions(+), 586 deletions(-) create mode 100644 packages/sphinx-test-reports/.flake8 create mode 100644 packages/sphinx-test-reports/.github/baumpfleger.yml create mode 100644 packages/sphinx-test-reports/.github/workflows/ci.yaml delete mode 100644 packages/sphinx-test-reports/.travis.yml create mode 100644 packages/sphinx-test-reports/Makefile create mode 100644 packages/sphinx-test-reports/noxfile.py delete mode 100644 packages/sphinx-test-reports/tox.ini diff --git a/packages/sphinx-test-reports/.flake8 b/packages/sphinx-test-reports/.flake8 new file mode 100644 index 000000000..58c595c10 --- /dev/null +++ b/packages/sphinx-test-reports/.flake8 @@ -0,0 +1,6 @@ +[flake8] +max-line-length = 120 +per-file-ignores = + sphinxcontrib/test_reports/__init__.py: F401 + sphinxcontrib/test_reports/directives/__init__.py: F401 + diff --git a/packages/sphinx-test-reports/.github/baumpfleger.yml b/packages/sphinx-test-reports/.github/baumpfleger.yml new file mode 100644 index 000000000..befe01425 --- /dev/null +++ b/packages/sphinx-test-reports/.github/baumpfleger.yml @@ -0,0 +1,13 @@ +# Configuration for probot-baumfleger + +# Enabled? (optional, default false) +enabled: true + +# glob or regex patterns that specify branches to ignore (optional) +#ignore_branches: +# - sandfox/patch-* +# - /^sandfox-[0-9]/i + +# list of labels that if found on a pull Request cause it to be ignored (optional) +ignore_labels: + - keep-branch diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml new file mode 100644 index 000000000..7c83af66f --- /dev/null +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -0,0 +1,55 @@ +name: CI +on: [pull_request] +jobs: + tests: + name: "Test (python: ${{ matrix.python-version }}, sphinx: ${{ matrix.sphinx-version }})" + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-20.04] + python-version: ["3.6", "3.8", "3.9"] + sphinx-version: ["3.2", '3.5', '4.1', '4.2'] + exclude: + - python-version: "3.6" + sphinx-version: "3.2" + steps: + - uses: actions/checkout@v2 + - name: Set Up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Nox Dependencies + run: | + python -m pip install poetry nox nox-poetry + - name: Run Tests + run: nox --non-interactive --session "tests-${{ matrix.python-version }}(sphinx='${{ matrix.sphinx-version }}')" -- --full-trace + + lint: + name: Lint + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - name: Set Up Python + uses: actions/setup-python@v2 + with: + python-version: "3.9" + - name: Install Nox Dependencies + run: | + python -m pip install poetry nox nox-poetry + - name: Run Lint + run: nox --non-interactive --session lint -- --full-trace + + linkcheck: + name: Docs-Linkcheck + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - name: Set Up Python + uses: actions/setup-python@v2 + with: + python-version: "3.9" + - name: Install Nox Dependencies + run: | + python -m pip install poetry nox nox-poetry + - name: Run LinkCheck + run: nox --non-interactive --session linkcheck -- --full-trace diff --git a/packages/sphinx-test-reports/.travis.yml b/packages/sphinx-test-reports/.travis.yml deleted file mode 100644 index a39956ca7..000000000 --- a/packages/sphinx-test-reports/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -os: -- linux -language: python -python: -- '3.5' -- '3.6' -- '3.7' -- '3.8' -install: -- pip install tox-travis -- python setup.py install -script: tox - diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile new file mode 100644 index 000000000..44c09590f --- /dev/null +++ b/packages/sphinx-test-reports/Makefile @@ -0,0 +1,30 @@ +SRC_FILES = sphinxcontrib/ tests/ noxfile.py + +.PHONY: list +list: + @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' + +.PHONY: lint +lint: + flake8 --config .flake8 ${SRC_FILES} + +.PHONY: test +test: + nosetests -v -w tests + +.PHONY: test-matrix +test-matrix: + nox + +.PHONY: docs-html +docs-html: + make --directory docs/ clean && make --directory docs/ html + +.PHONY: docs-linkcheck +docs-linkcheck: + make --directory docs/ linkcheck + +.PHONY: format +format: + black ${SRC_FILES} + isort ${SRC_FILES} diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index f970dd339..a7fc33948 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -4,10 +4,11 @@ Changelog ----- :Released: under development +* Bugfix: Minor bugfixes 0.3.4 ----- -:Released: 30.04.2021 +:Released: 30.04.2021 (Recalled, contains major bugs) * Bugfix: Removed Sphinx 4 deprecation warnings diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py new file mode 100644 index 000000000..f35b48c52 --- /dev/null +++ b/packages/sphinx-test-reports/noxfile.py @@ -0,0 +1,53 @@ +import nox +from nox import session + +PYTHON_VERSIONS = ["3.6", "3.8", "3.9"] +SPHINX_VERSIONS = ["3.2", "3.5", "4.1", "4.2"] +TEST_DEPENDENCIES = [ + "nose", + "sphinx_testing", +] +LINT_DEPENDENCIES = [ + "flake8", + "pep8-naming", + "flake8-isort", + "flake8-black", +] + + +def is_supported(python: str, sphinx: str) -> bool: + return not (python == "3.6" and float(sphinx) > 3.0) + + +def run_tests(session, sphinx): + session.install(".") + session.install(*TEST_DEPENDENCIES) + session.run("pip", "install", f"sphinx=={sphinx}", silent=True) + session.run("pip", "install", "-r", "doc-requirements.txt", silent=True) + session.run("make", "test", external=True) + + +@session(python=PYTHON_VERSIONS) +@nox.parametrize("sphinx", SPHINX_VERSIONS) +def tests(session, sphinx): + if is_supported(session.python, sphinx): + run_tests(session, sphinx) + else: + session.skip("unsupported combination") + + +@session(python="3.9") +def lint(session): + session.install(*LINT_DEPENDENCIES) + session.run("make", "lint", external=True) + + +@session(python="3.9") +def linkcheck(session): + session.install(".") + # LinkCheck cn handle rate limits since Sphinx 3.4, which is needed as + # our doc has to many links to github. + session.run("pip", "install", "sphinx==3.5.4", silent=True) + + session.run("pip", "install", "-r", "doc-requirements.txt", silent=True) + session.run("make", "docs-linkcheck", external=True) diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 52b298a65..f9247ba9f 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,7 +8,7 @@ setup( name='sphinx-test-reports', - version='0.3.4', + version='0.3.5', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py index de40ea7ca..128826700 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/__init__.py @@ -1 +1 @@ -__import__('pkg_resources').declare_namespace(__name__) +__import__("pkg_resources").declare_namespace(__name__) # noqa: F401 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py index 170433965..4585f0fb2 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py @@ -1,5 +1,5 @@ +from .test_case import TestCase, TestCaseDirective from .test_common import TestCommonDirective -from .test_file import TestFileDirective, TestFile -from .test_suite import TestSuiteDirective, TestSuite -from .test_case import TestCaseDirective, TestCase -from .test_report import TestReportDirective, TestReport +from .test_file import TestFile, TestFileDirective +from .test_report import TestReport, TestReportDirective +from .test_suite import TestSuite, TestSuiteDirective diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 3dab8a65a..2633251df 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -1,9 +1,9 @@ from docutils import nodes from docutils.parsers.rst import directives +from sphinxcontrib.needs.api import add_need from sphinxcontrib.test_reports.directives import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption -from sphinxcontrib.needs.api import add_need class TestCase(nodes.General, nodes.Element): @@ -14,19 +14,21 @@ class TestCaseDirective(TestCommonDirective): """ Directive for showing test suites. """ + has_content = True required_arguments = 1 optional_arguments = 0 - option_spec = {'id': directives.unchanged_required, - 'status': directives.unchanged_required, - 'tags': directives.unchanged_required, - 'links': directives.unchanged_required, - 'collapse': directives.unchanged_required, - 'file': directives.unchanged_required, - 'suite': directives.unchanged_required, - 'case': directives.unchanged_required, - 'classname': directives.unchanged_required, - } + option_spec = { + "id": directives.unchanged_required, + "status": directives.unchanged_required, + "tags": directives.unchanged_required, + "links": directives.unchanged_required, + "collapse": directives.unchanged_required, + "file": directives.unchanged_required, + "suite": directives.unchanged_required, + "case": directives.unchanged_required, + "classname": directives.unchanged_required, + } final_argument_whitespace = True @@ -37,94 +39,123 @@ def run(self): self.prepare_basic_options() self.load_test_file() - suite_name = self.options.get('suite', None) + suite_name = self.options.get("suite", None) if suite_name is None: - raise TestReportInvalidOption('Suite not given!') + raise TestReportInvalidOption("Suite not given!") - case_full_name = self.options.get('case', None) - class_name = self.options.get('classname', None) + case_full_name = self.options.get("case", None) + class_name = self.options.get("classname", None) if case_full_name is None and class_name is None: - raise TestReportInvalidOption('Case or classname not given!') + raise TestReportInvalidOption("Case or classname not given!") suite = None for suite_obj in self.results: - if suite_obj['name'] == suite_name: + if suite_obj["name"] == suite_name: suite = suite_obj break if suite is None: - raise TestReportInvalidOption('Suite {} not found in test file {}'.format(suite_name, self.test_file)) + raise TestReportInvalidOption( + "Suite {} not found in test file {}".format(suite_name, self.test_file) + ) case = None - for case_obj in suite['testcases']: - if case_obj['name'] == case_full_name and class_name is None: + for case_obj in suite["testcases"]: + if case_obj["name"] == case_full_name and class_name is None: case = case_obj break - elif case_obj['classname'] == class_name and case_full_name is None: + elif case_obj["classname"] == class_name and case_full_name is None: case = case_obj break - elif case_obj['name'] == case_full_name and case_obj['classname'] == class_name: + elif ( + case_obj["name"] == case_full_name + and case_obj["classname"] == class_name + ): case = case_obj break if case is None: - raise TestReportInvalidOption('Case {} with classname {} not found in test file {} ' - 'and testsuite {}'.format(case_full_name, - class_name, self.test_file, suite_name)) - - result = case['result'] + raise TestReportInvalidOption( + "Case {} with classname {} not found in test file {} " + "and testsuite {}".format( + case_full_name, class_name, self.test_file, suite_name + ) + ) + + result = case["result"] content = self.test_content - if len(case['text']) > 0: + if len(case["text"]) > 0: content += """ **Text**:: {} -""".format('\n '.join([x.lstrip() for x in case['text'].split('\n')])) +""".format( + "\n ".join([x.lstrip() for x in case["text"].split("\n")]) + ) - if len(case['message']) > 0: + if len(case["message"]) > 0: content += """ **Message**:: {} -""".format('\n '.join([x.lstrip() for x in case['message'].split('\n')])) +""".format( + "\n ".join([x.lstrip() for x in case["message"].split("\n")]) + ) - if len(case['system-out']) > 0: + if len(case["system-out"]) > 0: content += """ **System-out**:: {} -""".format('\n '.join([x.lstrip() for x in case['system-out'].split('\n')])) +""".format( + "\n ".join([x.lstrip() for x in case["system-out"].split("\n")]) + ) - time = case['time'] - style = 'tr_' + case['result'] + time = case["time"] + style = "tr_" + case["result"] import re - groups = re.match(r'^(?P[^\[]+)($|\[(?P.*)?\])', case['name']) + + groups = re.match(r"^(?P[^\[]+)($|\[(?P.*)?\])", case["name"]) try: - case_name = groups['name'] - case_parameter = groups['param'] + case_name = groups["name"] + case_parameter = groups["param"] except TypeError: case_name = case_full_name - case_parameter = '' + case_parameter = "" if case_parameter is None: - case_parameter = '' + case_parameter = "" main_section = [] docname = self.state.document.settings.env.docname - main_section += add_need(self.app, self.state, docname, self.lineno, - need_type=self.need_type, - title=self.test_name, id=self.test_id, - content=content, links=self.test_links, tags=self.test_tags, - status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suite=suite['name'], - case=case_full_name, case_name=case_name, case_parameter=case_parameter, - classname=class_name, - result=result, time=time, style=style) + main_section += add_need( + self.app, + self.state, + docname, + self.lineno, + need_type=self.need_type, + title=self.test_name, + id=self.test_id, + content=content, + links=self.test_links, + tags=self.test_tags, + status=self.test_status, + collapse=self.collapse, + file=self.test_file_given, + suite=suite["name"], + case=case_full_name, + case_name=case_name, + case_parameter=case_parameter, + classname=class_name, + result=result, + time=time, + style=style, + ) return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 773255ff9..031b15fd2 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -2,24 +2,26 @@ A Common directive, from which all other test directives inherit the shared functions. """ import os + from docutils.parsers.rst import Directive from sphinx.util import logging - from sphinxcontrib.needs.api import make_hashed_id +from sphinxcontrib.test_reports.exceptions import ( + SphinxError, TestReportFileNotSetException) from sphinxcontrib.test_reports.junitparser import JUnitParser -from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetException, SphinxError class TestCommonDirective(Directive): """ Common directive, which provides some shared functions to "real" directives. """ + def __init__(self, *args, **kwargs): super(TestCommonDirective, self).__init__(*args, **kwargs) self.env = self.state.document.settings.env self.app = self.env.app - if not hasattr(self.app, 'testreport_data'): + if not hasattr(self.app, "testreport_data"): self.app.testreport_data = {} self.test_file = None @@ -46,15 +48,18 @@ def load_test_file(self): :return: None """ if self.test_file is None: - raise TestReportFileNotSetException('Option test_file must be set.') + raise TestReportFileNotSetException("Option test_file must be set.") root_path = self.app.config.tr_rootdir if not os.path.isabs(self.test_file): self.test_file = os.path.join(root_path, self.test_file) if not os.path.exists(self.test_file): # raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) - self.log.warning('Given test_file path invalid: {} in {} (Line: {})'.format( - self.test_file, self.docname, self.lineno)) + self.log.warning( + "Given test_file path invalid: {} in {} (Line: {})".format( + self.test_file, self.docname, self.lineno + ) + ) return None if self.test_file not in self.app.testreport_data.keys(): @@ -73,22 +78,26 @@ def prepare_basic_options(self): self.test_name = self.arguments[0] self.test_content = "\n".join(self.content) - if self.name != 'test-report': + if self.name != "test-report": self.need_type = self.app.tr_types[self.name][0] - self.test_id = self.options.get('id', - make_hashed_id(self.app, self.need_type, self.test_name, self.test_content)) + self.test_id = self.options.get( + "id", + make_hashed_id( + self.app, self.need_type, self.test_name, self.test_content + ), + ) else: - self.test_id = self.options.get('id', None) + self.test_id = self.options.get("id", None) if self.test_id is None: - raise SphinxError('ID must be set for test-report.') + raise SphinxError("ID must be set for test-report.") - self.test_file = self.options.get('file', None) + self.test_file = self.options.get("file", None) self.test_file_given = self.test_file[:] - self.test_links = self.options.get('links', '') - self.test_tags = self.options.get('tags', '') - self.test_status = self.options.get('status', None) + self.test_links = self.options.get("links", "") + self.test_tags = self.options.get("tags", "") + self.test_status = self.options.get("status", None) self.collapse = str(self.options.get("collapse", "")) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index 906bab44a..fbe57f147 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -1,10 +1,10 @@ import copy -import os import json -from docutils import nodes -from docutils.parsers.rst import Directive -from docutils.parsers.rst import directives +import os + import sphinx +from docutils import nodes +from docutils.parsers.rst import Directive, directives from pkg_resources import parse_version sphinx_version = sphinx.__version__ @@ -12,6 +12,7 @@ from sphinx.util import logging else: import logging + logging.basicConfig() logger = logging.getLogger(__name__) @@ -24,23 +25,25 @@ class EnvReportDirective(Directive): """ Directive for showing test results. """ + has_content = True required_arguments = 1 optional_arguments = 0 option_spec = { - 'env': directives.unchanged_required, - 'data': directives.unchanged_required, - 'raw': directives.flag} + "env": directives.unchanged_required, + "data": directives.unchanged_required, + "raw": directives.flag, + } final_argument_whitespace = True def __init__(self, *args, **kwargs): super(EnvReportDirective, self).__init__(*args, **kwargs) - self.data_option = self.options.get('data', None) - self.environments = self.options.get('env', None) + self.data_option = self.options.get("data", None) + self.environments = self.options.get("env", None) if self.environments is not None: - self.req_env_list_cpy = self.environments.split(',') + self.req_env_list_cpy = self.environments.split(",") self.req_env_list = [] for element in self.req_env_list_cpy: if len(element) != 0: @@ -49,7 +52,7 @@ def __init__(self, *args, **kwargs): self.req_env_list = None if self.data_option is not None: - self.data_option_list_cpy = self.data_option.split(',') + self.data_option_list_cpy = self.data_option.split(",") self.data_option_list = [] for element in self.data_option_list_cpy: if len(element) != 0: @@ -57,7 +60,7 @@ def __init__(self, *args, **kwargs): else: self.data_option_list = None - self.header = ('Variable', 'Data') + self.header = ("Variable", "Data") self.colwidths = (1, 1) def run(self): @@ -69,14 +72,20 @@ def run(self): json_path = os.path.join(root_path, json_path) if not os.path.exists(json_path): - raise JsonFileNotFound("The given file does not exist: {0}".format(json_path)) + raise JsonFileNotFound( + "The given file does not exist: {0}".format(json_path) + ) - fp_json = open(json_path, 'r') + fp_json = open(json_path, "r") try: results = json.load(fp_json) except ValueError: - raise InvalidJsonFile("The given file {0} is not a valid JSON".format(json_path.split('/')[-1])) + raise InvalidJsonFile( + "The given file {0} is not a valid JSON".format( + json_path.split("/")[-1] + ) + ) # check to see if environment is present in JSON or not if self.req_env_list is not None: @@ -86,21 +95,23 @@ def run(self): not_present_env.append(req_env) for not_env in not_present_env: self.req_env_list.remove(not_env) - logger.warning("environment \'{0}\' is not present in JSON file".format(not_env)) + logger.warning( + "environment '{0}' is not present in JSON file".format(not_env) + ) del not_present_env # Construction idea taken from http://agateau.com/2015/docutils-snippets/ main_section = [] - if self.req_env_list is None and 'raw' not in self.options: + if self.req_env_list is None and "raw" not in self.options: for enviro in results: main_section += self._crete_table_b(enviro=enviro, results=results) - elif 'raw' not in self.options and self.req_env_list is not None: + elif "raw" not in self.options and self.req_env_list is not None: for req_env in self.req_env_list: main_section += self._crete_table_b(enviro=req_env, results=results) - elif 'raw' in self.options and self.req_env_list is None: + elif "raw" in self.options and self.req_env_list is None: for enviro in results: # data option handling temp_dict = copy.deepcopy(results) @@ -109,10 +120,12 @@ def run(self): for opt in temp_dict[enviro]: if opt not in self.data_option_list: del temp_dict2[enviro][opt] - # option check + # option check for opt in self.data_option_list: if opt not in temp_dict2[enviro]: - logger.warning("option \'{0}\' is not present in JSON file".format(opt)) + logger.warning( + "option '{0}' is not present in JSON file".format(opt) + ) del temp_dict @@ -120,12 +133,12 @@ def run(self): section += nodes.title(text=enviro) results_string = json.dumps(temp_dict2[enviro], indent=4) code_block = nodes.literal_block(results_string, results_string) - code_block['language'] = 'json' + code_block["language"] = "json" section += code_block # nodes.literal_block(results, results) main_section += section # nodes.literal_block(enviro, results[enviro]) del temp_dict2 - elif 'raw' in self.options and self.req_env_list is not None: + elif "raw" in self.options and self.req_env_list is not None: for enviro in self.req_env_list: # data option handling temp_dict = copy.deepcopy(results) @@ -138,7 +151,11 @@ def run(self): # option check for opt in self.data_option_list: if opt not in temp_dict2[enviro]: - logger.warning("option \'{0}\' is not present in \'{1}\' environment file".format(opt, enviro)) + logger.warning( + "option '{0}' is not present in '{1}' environment file".format( + opt, enviro + ) + ) del temp_dict @@ -146,7 +163,7 @@ def run(self): section += nodes.title(text=enviro) results_string = json.dumps(temp_dict2[enviro], indent=4) code_block = nodes.literal_block(results_string, results_string) - code_block['language'] = 'json' + code_block["language"] = "json" section += code_block main_section += section del temp_dict2 @@ -189,7 +206,9 @@ def _crete_table_b(self, enviro, results): if data_option is not None: if len(data_option) != 0: for opt in data_option: - logger.warning("option \'{0}\' is not present in JSON file".format(opt)) + logger.warning( + "option '{0}' is not present in JSON file".format(opt) + ) del data_option return main_section @@ -202,7 +221,7 @@ def _create_rows(self, row_cells): if isinstance(cell, (list, dict)): results_string = json.dumps(cell, indent=4) code_block = nodes.literal_block(results_string, results_string) - code_block['language'] = 'json' + code_block["language"] = "json" entry += code_block else: entry += nodes.paragraph(text=cell) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 5b80f1ec2..9d9070843 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -1,12 +1,13 @@ import hashlib + from docutils import nodes from docutils.parsers.rst import directives +from sphinxcontrib.needs.api import add_need -from sphinxcontrib.test_reports.directives import TestCommonDirective import sphinxcontrib.test_reports.directives.test_suite -from sphinxcontrib.test_reports.exceptions import TestReportIncompleteConfiguration - -from sphinxcontrib.needs.api import add_need +from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import \ + TestReportIncompleteConfiguration class TestFile(nodes.General, nodes.Element): @@ -17,18 +18,20 @@ class TestFileDirective(TestCommonDirective): """ Directive for showing test results. """ + has_content = True required_arguments = 1 optional_arguments = 0 - option_spec = {'id': directives.unchanged_required, - 'status': directives.unchanged_required, - 'tags': directives.unchanged_required, - 'links': directives.unchanged_required, - 'collapse': directives.unchanged_required, - 'file': directives.unchanged_required, - 'auto_suites': directives.flag, - 'auto_cases': directives.flag, - } + option_spec = { + "id": directives.unchanged_required, + "status": directives.unchanged_required, + "tags": directives.unchanged_required, + "links": directives.unchanged_required, + "collapse": directives.unchanged_required, + "file": directives.unchanged_required, + "auto_suites": directives.flag, + "auto_cases": directives.flag, + } final_argument_whitespace = True @@ -52,47 +55,79 @@ def run(self): return main_section suites = len(self.results) - cases = sum([int(x['tests']) for x in self.results]) + cases = sum([int(x["tests"]) for x in self.results]) - passed = sum([x['passed'] for x in self.results]) - skipped = sum([x['skips'] for x in self.results]) - errors = sum([x['errors'] for x in self.results]) - failed = sum([x['failures'] for x in self.results]) + passed = sum([x["passed"] for x in self.results]) + skipped = sum([x["skips"] for x in self.results]) + errors = sum([x["errors"] for x in self.results]) + failed = sum([x["failures"] for x in self.results]) main_section = [] docname = self.state.document.settings.env.docname - main_section += add_need(self.app, self.state, docname, self.lineno, - need_type=self.need_type, - title=self.test_name, id=self.test_id, - content=self.test_content, links=self.test_links, tags=self.test_tags, - status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suites=suites, cases=cases, - passed=passed, skipped=skipped, failed=failed, errors=errors) - - if 'auto_cases' in self.options.keys() and 'auto_suites' not in self.options.keys(): - raise TestReportIncompleteConfiguration('option auto_cases must be used together with ' - 'auto_suites for test-file directives.') - - if 'auto_suites' in self.options.keys(): + main_section += add_need( + self.app, + self.state, + docname, + self.lineno, + need_type=self.need_type, + title=self.test_name, + id=self.test_id, + content=self.test_content, + links=self.test_links, + tags=self.test_tags, + status=self.test_status, + collapse=self.collapse, + file=self.test_file_given, + suites=suites, + cases=cases, + passed=passed, + skipped=skipped, + failed=failed, + errors=errors, + ) + + if ( + "auto_cases" in self.options.keys() + and "auto_suites" not in self.options.keys() + ): + raise TestReportIncompleteConfiguration( + "option auto_cases must be used together with " + "auto_suites for test-file directives." + ) + + if "auto_suites" in self.options.keys(): for suite in self.results: suite_id = self.test_id - suite_id += '_' + hashlib.sha1(suite['name'].encode("UTF-8")).hexdigest().upper()[:3] + suite_id += ( + "_" + + hashlib.sha1(suite["name"].encode("UTF-8")) + .hexdigest() + .upper()[:3] + ) options = self.options - options['suite'] = suite['name'] - options['id'] = suite_id - - if 'links' not in self.options: - options['links'] = self.test_id - elif self.test_id not in options['links']: - options['links'] = options['links'] + ';' + self.test_id - - arguments = [suite['name']] - suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - self.app.config.tr_suite[0], arguments, options, - '', self.lineno, # no content - self.content_offset, self.block_text, self.state, - self.state_machine) + options["suite"] = suite["name"] + options["id"] = suite_id + + if "links" not in self.options: + options["links"] = self.test_id + elif self.test_id not in options["links"]: + options["links"] = options["links"] + ";" + self.test_id + + arguments = [suite["name"]] + suite_directive = ( + sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, + ) + ) main_section += suite_directive.run() diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 6d7fe7b7d..b7ae7ae35 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -14,16 +14,18 @@ class TestReportDirective(TestCommonDirective): """ Directive for showing test suites. """ + has_content = True required_arguments = 1 optional_arguments = 0 - option_spec = {'id': directives.unchanged_required, - 'status': directives.unchanged_required, - 'tags': directives.unchanged_required, - 'links': directives.unchanged_required, - 'collapse': directives.unchanged_required, - 'file': directives.unchanged_required, - } + option_spec = { + "id": directives.unchanged_required, + "status": directives.unchanged_required, + "tags": directives.unchanged_required, + "links": directives.unchanged_required, + "collapse": directives.unchanged_required, + "file": directives.unchanged_required, + } final_argument_whitespace = True @@ -34,7 +36,9 @@ def run(self): self.prepare_basic_options() self.load_test_file() - with open(os.path.join(os.path.dirname(__file__), 'test_report_template.txt')) as template_file: + with open( + os.path.join(os.path.dirname(__file__), "test_report_template.txt") + ) as template_file: template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: @@ -43,19 +47,22 @@ def run(self): links_string = "" template_data = { - 'file': self.test_file, - 'id': self.test_id, - 'file_type': self.app.config.tr_file[0], - 'suite_need': self.app.config.tr_suite[1], - 'case_need': self.app.config.tr_case[1], - 'tags': ";".join([self.test_tags, self.test_id]) if len(self.test_tags) > 0 else self.test_id, - 'links_string': links_string, - 'title': self.test_name, - 'content': self.content + "file": self.test_file, + "id": self.test_id, + "file_type": self.app.config.tr_file[0], + "suite_need": self.app.config.tr_suite[1], + "case_need": self.app.config.tr_case[1], + "tags": ";".join([self.test_tags, self.test_id]) + if len(self.test_tags) > 0 + else self.test_id, + "links_string": links_string, + "title": self.test_name, + "content": self.content, } template_ready = template.format(**template_data) - self.state_machine.insert_input(template_ready.split('\n'), - self.state_machine.document.attributes['source']) + self.state_machine.insert_input( + template_ready.split("\n"), self.state_machine.document.attributes["source"] + ) return [] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index c50846354..1be932cd9 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -1,4 +1,5 @@ import os + from docutils import nodes from docutils.parsers.rst import Directive @@ -13,6 +14,7 @@ class TestResultsDirective(Directive): """ Directive for showing test results. """ + has_content = True required_arguments = 1 optional_arguments = 0 @@ -21,7 +23,7 @@ class TestResultsDirective(Directive): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.header = ('class', 'name', 'status', 'reason') + self.header = ("class", "name", "status", "reason") self.colwidths = (1, 1, 1, 2) def run(self): @@ -41,13 +43,18 @@ def run(self): for testsuite in results: section = nodes.section() section += nodes.title(text=testsuite["name"]) - section += nodes.paragraph(text="Tests: {tests}, Failures: {failure}, Errors: {error}, " - "Skips: {skips}".format(tests=testsuite["tests"], - failure=testsuite["failures"], - error=testsuite["errors"], - skips=testsuite["skips"] - )) - section += nodes.paragraph(text="Time: {time}".format(time=testsuite["time"])) + section += nodes.paragraph( + text="Tests: {tests}, Failures: {failure}, Errors: {error}, " + "Skips: {skips}".format( + tests=testsuite["tests"], + failure=testsuite["failures"], + error=testsuite["errors"], + skips=testsuite["skips"], + ) + ) + section += nodes.paragraph( + text="Time: {time}".format(time=testsuite["time"]) + ) table = nodes.table() section += table @@ -71,15 +78,25 @@ def run(self): return main_section def _create_testcase_row(self, testcase): - row_cells = (testcase["classname"], testcase["name"], - testcase["result"], "\n\n".join([testcase["message"] if testcase["message"] != "unknown" else "", - testcase["text"]])) - - row = nodes.row(classes=['tr_' + testcase["result"]]) + row_cells = ( + testcase["classname"], + testcase["name"], + testcase["result"], + "\n\n".join( + [ + testcase["message"] if testcase["message"] != "unknown" else "", + testcase["text"], + ] + ), + ) + + row = nodes.row(classes=["tr_" + testcase["result"]]) for index, cell in enumerate(row_cells): - entry = nodes.entry(classes=['tr_' + testcase["result"], self.header[index]]) + entry = nodes.entry( + classes=["tr_" + testcase["result"], self.header[index]] + ) row += entry - entry += nodes.paragraph(text=cell, classes=['tr_' + testcase["result"]]) + entry += nodes.paragraph(text=cell, classes=["tr_" + testcase["result"]]) return row def _create_table_row(self, row_cells): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 7eba3ea27..2c92143e9 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -1,11 +1,12 @@ import hashlib + from docutils import nodes from docutils.parsers.rst import directives +from sphinxcontrib.needs.api import add_need -from sphinxcontrib.test_reports.directives import TestCommonDirective import sphinxcontrib.test_reports.directives.test_case +from sphinxcontrib.test_reports.directives import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption -from sphinxcontrib.needs.api import add_need class TestSuite(nodes.General, nodes.Element): @@ -16,17 +17,19 @@ class TestSuiteDirective(TestCommonDirective): """ Directive for showing test suites. """ + has_content = True required_arguments = 1 optional_arguments = 0 - option_spec = {'id': directives.unchanged_required, - 'status': directives.unchanged_required, - 'tags': directives.unchanged_required, - 'links': directives.unchanged_required, - 'collapse': directives.unchanged_required, - 'file': directives.unchanged_required, - 'suite': directives.unchanged_required, - } + option_spec = { + "id": directives.unchanged_required, + "status": directives.unchanged_required, + "tags": directives.unchanged_required, + "links": directives.unchanged_required, + "collapse": directives.unchanged_required, + "file": directives.unchanged_required, + "suite": directives.unchanged_required, + } final_argument_whitespace = True @@ -37,58 +40,88 @@ def run(self): self.prepare_basic_options() self.load_test_file() - suite_name = self.options.get('suite', None) + suite_name = self.options.get("suite", None) if suite_name is None: - raise TestReportInvalidOption('Suite not given!') + raise TestReportInvalidOption("Suite not given!") suite = None for suite_obj in self.results: - if suite_obj['name'] == suite_name: + if suite_obj["name"] == suite_name: suite = suite_obj break if suite is None: - raise TestReportInvalidOption('Suite {} not found in test file {}'.format(suite_name, self.test_file)) + raise TestReportInvalidOption( + "Suite {} not found in test file {}".format(suite_name, self.test_file) + ) - cases = suite['tests'] + cases = suite["tests"] - passed = suite['passed'] - skipped = suite['skips'] - errors = suite['errors'] - failed = suite['failures'] + passed = suite["passed"] + skipped = suite["skips"] + errors = suite["errors"] + failed = suite["failures"] main_section = [] docname = self.state.document.settings.env.docname - main_section += add_need(self.app, self.state, docname, self.lineno, - need_type=self.need_type, - title=self.test_name, id=self.test_id, - content=self.test_content, links=self.test_links, tags=self.test_tags, - status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suite=suite['name'], cases=cases, - passed=passed, skipped=skipped, failed=failed, errors=errors) - - if 'auto_cases' in self.options.keys(): - for case in suite['testcases']: + main_section += add_need( + self.app, + self.state, + docname, + self.lineno, + need_type=self.need_type, + title=self.test_name, + id=self.test_id, + content=self.test_content, + links=self.test_links, + tags=self.test_tags, + status=self.test_status, + collapse=self.collapse, + file=self.test_file_given, + suite=suite["name"], + cases=cases, + passed=passed, + skipped=skipped, + failed=failed, + errors=errors, + ) + + if "auto_cases" in self.options.keys(): + for case in suite["testcases"]: case_id = self.test_id - case_id += '_' + hashlib.sha1(case['classname'].encode("UTF-8") + case['name'].encode("UTF-8") - ).hexdigest().upper()[:5] + case_id += ( + "_" + + hashlib.sha1( + case["classname"].encode("UTF-8") + case["name"].encode("UTF-8") + ) + .hexdigest() + .upper()[:5] + ) options = self.options - options['case'] = case['name'] - options['classname'] = case['classname'] - options['id'] = case_id - - if 'links' not in self.options: - options['links'] = self.test_id - elif self.test_id not in options['links']: - options['links'] = options['links'] + ';' + self.test_id - - arguments = [case['name']] - case_directive = sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( - self.app.config.tr_case[0], arguments, options, - '', self.lineno, # no content - self.content_offset, self.block_text, self.state, - self.state_machine) + options["case"] = case["name"] + options["classname"] = case["classname"] + options["id"] = case_id + + if "links" not in self.options: + options["links"] = self.test_id + elif self.test_id not in options["links"]: + options["links"] = options["links"] + ";" + self.test_id + + arguments = [case["name"]] + case_directive = ( + sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( + self.app.config.tr_case[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, + ) + ) main_section += case_directive.run() diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index c13f3cb9f..62387b0a1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -1,16 +1,15 @@ import os -from sphinx.util.osutil import copyfile -from sphinx.util.osutil import ensuredir -from sphinx.util.console import brown import sphinx from pkg_resources import parse_version +from sphinx.util.console import brown +from sphinx.util.osutil import copyfile, ensuredir sphinx_version = sphinx.__version__ if parse_version(sphinx_version) >= parse_version("1.6"): from sphinx.util import status_iterator # NOQA Sphinx 1.5 -STATICS_DIR_NAME = '_static' +STATICS_DIR_NAME = "_static" def safe_add_file(filename, app): @@ -27,13 +26,21 @@ def safe_add_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if hasattr(app.builder, "script_files") and static_data_file not in app.builder.script_files: + if ( + hasattr(app.builder, "script_files") + and static_data_file not in app.builder.script_files + ): app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": - if hasattr(app.builder, "css_files") and static_data_file not in app.builder.css_files: + if ( + hasattr(app.builder, "css_files") + and static_data_file not in app.builder.css_files + ): app.add_css_file(data_file) else: - raise NotImplementedError("File type {} not support by save_add_file".format(data_file.split(".")[-1])) + raise NotImplementedError( + "File type {} not support by save_add_file".format(data_file.split(".")[-1]) + ) def safe_remove_file(filename, app): @@ -50,10 +57,16 @@ def safe_remove_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if hasattr(app.builder, "script_files") and static_data_file in app.builder.script_files: + if ( + hasattr(app.builder, "script_files") + and static_data_file in app.builder.script_files + ): app.builder.script_files.remove(static_data_file) elif data_file.split(".")[-1] == "css": - if hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files: + if ( + hasattr(app.builder, "css_files") + and static_data_file in app.builder.css_files + ): app.builder.css_files.remove(static_data_file) @@ -61,7 +74,7 @@ def safe_remove_file(filename, app): # https://github.com/spinus/sphinxcontrib-images/blob/master/sphinxcontrib/images.py#L203 def install_styles_static_files(app, env): STATICS_DIR_PATH = os.path.join(app.builder.outdir, STATICS_DIR_NAME) - dest_path = os.path.join(STATICS_DIR_PATH, 'sphinx-test-results') + dest_path = os.path.join(STATICS_DIR_PATH, "sphinx-test-results") files_to_copy = ["common.css"] @@ -73,16 +86,26 @@ def install_styles_static_files(app, env): status_iterator = app.status_iterator for source_file_path in status_iterator( - files_to_copy, - 'Copying static files for sphinx-test-results custom style support...', - brown, len(files_to_copy)): + files_to_copy, + "Copying static files for sphinx-test-results custom style support...", + brown, + len(files_to_copy), + ): if not os.path.isabs(source_file_path): - source_file_path = os.path.join(os.path.dirname(__file__), "css", source_file_path) + source_file_path = os.path.join( + os.path.dirname(__file__), "css", source_file_path + ) if not os.path.exists(source_file_path): - source_file_path = os.path.join(os.path.dirname(__file__), "css", "blank.css") - print("{0} not found. Copying sphinx-internal blank.css".format(source_file_path)) + source_file_path = os.path.join( + os.path.dirname(__file__), "css", "blank.css" + ) + print( + "{0} not found. Copying sphinx-internal blank.css".format( + source_file_path + ) + ) dest_file_path = os.path.join(dest_path, os.path.basename(source_file_path)) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py index f89184931..29133632a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py @@ -7,7 +7,11 @@ def tr_link(app, need, needs, test_option, target_option, *args, **kwargs): for need_target in needs.values(): if target_option not in need_target: continue - if test_opt == need_target[target_option] and test_opt is not None and len(test_opt) > 0: - links.append(need_target['id']) + if ( + test_opt == need_target[target_option] + and test_opt is not None + and len(test_opt) > 0 + ): + links.append(need_target["id"]) return links diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index f12cae382..1181b1cf1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -1,4 +1,5 @@ import os + from lxml import etree, objectify @@ -15,12 +16,14 @@ def __init__(self, junit_xml, junit_xsd=None): self.valid_xml = None if not os.path.exists(self.junit_xml_path): - raise JUnitFileMissing("The given file does not exist: {0}".format(self.junit_xml_path)) + raise JUnitFileMissing( + "The given file does not exist: {0}".format(self.junit_xml_path) + ) self.junit_xml_doc = etree.parse(self.junit_xml_path) self.junit_xml_string = etree.tostring(self.junit_xml_doc) self.junit_xml_object = objectify.fromstring(self.junit_xml_string) - if self.junit_xml_object.tag == 'testsuites': + if self.junit_xml_object.tag == "testsuites": self.junit_xml_object = self.junit_xml_object.testsuite self.junit_xml_string = str(self.junit_xml_string) @@ -56,7 +59,7 @@ def parse(self): "skips": skips, "passed": passed, "time": float(testsuite.attrib.get("time", -1)), - "testcases": [] + "testcases": [], } for testcase in testsuite.testcase: @@ -90,10 +93,10 @@ def parse(self): tc_dict["text"] = "" tc_dict["message"] = "" - if hasattr(testcase, 'system-out'): - tc_dict['system-out'] = testcase['system-out'].text + if hasattr(testcase, "system-out"): + tc_dict["system-out"] = testcase["system-out"].text else: - tc_dict['system-out'] = "" + tc_dict["system-out"] = "" ts_dict["testcases"].append(tc_dict) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index f88a35538..2e0422608 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,14 +1,19 @@ - import sphinx # from docutils import nodes from pkg_resources import parse_version - -from sphinxcontrib.needs.api import add_need_type, add_extra_option, add_dynamic_function - -from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective -from sphinxcontrib.test_reports.directives import TestFile, TestFileDirective, TestSuite, TestSuiteDirective, \ - TestCase, TestCaseDirective, TestReport, TestReportDirective -from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective +from sphinxcontrib.needs.api import (add_dynamic_function, add_extra_option, + add_need_type) + +from sphinxcontrib.test_reports.directives import (TestCase, TestCaseDirective, + TestFile, TestFileDirective, + TestReport, + TestReportDirective, + TestSuite, + TestSuiteDirective) +from sphinxcontrib.test_reports.directives.test_env import (EnvReport, + EnvReportDirective) +from sphinxcontrib.test_reports.directives.test_results import ( + TestResults, TestResultsDirective) from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link @@ -30,10 +35,22 @@ def setup(app): log.info("Setting up sphinx-test-reports extension") # configurations - app.add_config_value('tr_rootdir', app.confdir, 'html') - app.add_config_value('tr_file', ['test-file', 'testfile', 'Test-File', 'TF_', '#ffffff', 'node'], 'html') - app.add_config_value('tr_suite', ['test-suite', 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'folder'], 'html') - app.add_config_value('tr_case', ['test-case', 'testcase', 'Test-Case', 'TC_', '#999999', 'rectangle'], 'html') + app.add_config_value("tr_rootdir", app.confdir, "html") + app.add_config_value( + "tr_file", + ["test-file", "testfile", "Test-File", "TF_", "#ffffff", "node"], + "html", + ) + app.add_config_value( + "tr_suite", + ["test-suite", "testsuite", "Test-Suite", "TS_", "#cccccc", "folder"], + "html", + ) + app.add_config_value( + "tr_case", + ["test-case", "testcase", "Test-Case", "TC_", "#999999", "rectangle"], + "html", + ) # nodes app.add_node(TestResults) @@ -44,23 +61,23 @@ def setup(app): app.add_node(EnvReport) # directives - app.add_directive('test-results', TestResultsDirective) - app.add_directive('test-env', EnvReportDirective) - app.add_directive('test-report', TestReportDirective) + app.add_directive("test-results", TestResultsDirective) + app.add_directive("test-env", EnvReportDirective) + app.add_directive("test-report", TestReportDirective) # events - app.connect('env-updated', install_styles_static_files) - app.connect('config-inited', tr_preparation) - app.connect('config-inited', sphinx_needs_update) + app.connect("env-updated", install_styles_static_files) + app.connect("config-inited", tr_preparation) + app.connect("config-inited", sphinx_needs_update) - return {'version': '0.3.4'} # identifies the version of our extension + return {"version": "0.3.4"} # identifies the version of our extension def tr_preparation(app, *args): """ Prepares needed vars in the app context. """ - if not hasattr(app, 'tr_types'): + if not hasattr(app, "tr_types"): app.tr_types = {} # Collects the configured test-report node types @@ -81,22 +98,22 @@ def sphinx_needs_update(app, *args): # Extra options # For details read # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_extra_option - add_extra_option(app, 'file') - add_extra_option(app, 'suite') - add_extra_option(app, 'case') - add_extra_option(app, 'case_name') - add_extra_option(app, 'case_parameter') - add_extra_option(app, 'classname') - add_extra_option(app, 'time') - - add_extra_option(app, 'suites') - add_extra_option(app, 'cases') - - add_extra_option(app, 'passed') - add_extra_option(app, 'skipped') - add_extra_option(app, 'failed') - add_extra_option(app, 'errors') - add_extra_option(app, 'result') # used by test cases only + add_extra_option(app, "file") + add_extra_option(app, "suite") + add_extra_option(app, "case") + add_extra_option(app, "case_name") + add_extra_option(app, "case_parameter") + add_extra_option(app, "classname") + add_extra_option(app, "time") + + add_extra_option(app, "suites") + add_extra_option(app, "cases") + + add_extra_option(app, "passed") + add_extra_option(app, "skipped") + add_extra_option(app, "failed") + add_extra_option(app, "errors") + add_extra_option(app, "result") # used by test cases only # Extra dynamic functions # For details about usage read diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt index ba4fa4853..ab48136a5 100644 --- a/packages/sphinx-test-reports/test-requirements.txt +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -5,3 +5,7 @@ python-coveralls tox nose sphinx_testing +flake8 +isort +black +nox diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index fe2c7cb87..47b65de44 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,33 +31,33 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -69,10 +69,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -82,7 +82,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -93,12 +93,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -106,15 +106,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -124,8 +121,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -133,8 +135,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -143,7 +150,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py index 0d7518efc..1ece0bc44 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,37 +31,44 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] -tr_file = ['test-path', 'testpath', 'Test-Path', 'TC_', '#999999', 'rectangle'] -tr_suite = ['test-container', 'testcontainer', 'Test-Container', 'TC_', '#999999', 'rectangle'] -tr_case = ['test-run', 'testrun', 'Test-Run', 'TC_', '#999999', 'rectangle'] +tr_file = ["test-path", "testpath", "Test-Path", "TC_", "#999999", "rectangle"] +tr_suite = [ + "test-container", + "testcontainer", + "Test-Container", + "TC_", + "#999999", + "rectangle", +] +tr_case = ["test-run", "testrun", "Test-Run", "TC_", "#999999", "rectangle"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -73,10 +80,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -86,7 +93,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -97,12 +104,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -110,15 +117,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -128,8 +132,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -137,8 +146,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -147,7 +161,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py index f7798e55c..421e09c59 100644 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,34 +31,34 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -70,10 +70,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -83,7 +83,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -94,12 +94,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -107,15 +107,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -125,8 +122,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -134,8 +136,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -144,7 +151,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index f7798e55c..421e09c59 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,34 +31,34 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -70,10 +70,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -83,7 +83,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -94,12 +94,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -107,15 +107,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -125,8 +122,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -134,8 +136,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -144,7 +151,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index f7798e55c..421e09c59 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,34 +31,34 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -70,10 +70,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -83,7 +83,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -94,12 +94,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -107,15 +107,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -125,8 +122,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -134,8 +136,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -144,7 +151,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index f7798e55c..421e09c59 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,34 +31,34 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -70,10 +70,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -83,7 +83,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -94,12 +94,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -107,15 +107,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -125,8 +122,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -134,8 +136,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -144,7 +151,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index fe2c7cb87..47b65de44 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,33 +31,33 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -69,10 +69,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -82,7 +82,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -93,12 +93,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -106,15 +106,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -124,8 +121,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -133,8 +135,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -143,7 +150,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index 898ef936a..0b4477518 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -1,9 +1,9 @@ from sphinx_testing import with_app -@with_app(buildername='html', srcdir='doc_test/basic_doc') +@with_app(buildername="html", srcdir="doc_test/basic_doc") def test_doc_build_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() - assert '

Basic Document' in html - assert 'ASuccessfulTest' in html + html = (app.outdir / "index.html").read_text() + assert "

Basic Document" in html + assert "ASuccessfulTest" in html diff --git a/packages/sphinx-test-reports/tests/test_custom_types.py b/packages/sphinx-test-reports/tests/test_custom_types.py index 7fb67ba30..6e96913bf 100644 --- a/packages/sphinx-test-reports/tests/test_custom_types.py +++ b/packages/sphinx-test-reports/tests/test_custom_types.py @@ -1,10 +1,10 @@ from sphinx_testing import with_app -@with_app(buildername='html', srcdir='doc_test/custom_types') +@with_app(buildername="html", srcdir="doc_test/custom_types") def test_custom_types_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() - assert 'Test-Path' in html - assert 'Test-Container' in html - assert 'Test-Run' in html + html = (app.outdir / "index.html").read_text() + assert "Test-Path" in html + assert "Test-Container" in html + assert "Test-Run" in html diff --git a/packages/sphinx-test-reports/tests/test_empty_doc.py b/packages/sphinx-test-reports/tests/test_empty_doc.py index 391f99462..0e70b27de 100644 --- a/packages/sphinx-test-reports/tests/test_empty_doc.py +++ b/packages/sphinx-test-reports/tests/test_empty_doc.py @@ -1,8 +1,8 @@ from sphinx_testing import with_app -@with_app(buildername='html', srcdir='doc_test/empty_doc') +@with_app(buildername="html", srcdir="doc_test/empty_doc") def test_doc_build_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() - assert '

Empty Document' in html + html = (app.outdir / "index.html").read_text() + assert "

Empty Document" in html diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index 29e7cdf57..bc61d9f21 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -1,27 +1,20 @@ -from sphinx_testing import with_app import re -import sphinx - -sphinx_version = int(sphinx.__version__.split('.')[0] + sphinx.__version__.split('.')[1]) +from subprocess import STDOUT, check_output -try: - from pathlib import Path -except ImportError: - from pathlib2 import Path +import sphinx +from sphinx_testing import with_app -try: - from StringIO import StringIO # Python 2 -except ImportError: - from io import StringIO # Python 3 -from subprocess import check_output, STDOUT +sphinx_version = int( + sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1] +) -@with_app(buildername='html', srcdir='doc_test/env_report_doc') +@with_app(buildername="html", srcdir="doc_test/env_report_doc") def test_doc_env_report_build_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() + html = (app.outdir / "index.html").read_text() - assert '

Test-Env report' in html + assert "

Test-Env report" in html assert '

' in html tables = re.findall("(

Variable

)", html, re.DOTALL) @@ -29,47 +22,47 @@ def test_doc_env_report_build_html(app, status, warning): assert len(tables) == 2 # All requested data should be in both tables - assert 'name' in tables[0] - assert 'path' in tables[0] - assert 'host' in tables[0] + assert "name" in tables[0] + assert "path" in tables[0] + assert "host" in tables[0] - assert 'name' in tables[1] - assert 'path' in tables[1] - assert 'host' in tables[1] + assert "name" in tables[1] + assert "path" in tables[1] + assert "host" in tables[1] # table 0 should contain py35 - assert 'py35' in tables[0] - assert 'flake8' not in tables[0] + assert "py35" in tables[0] + assert "flake8" not in tables[0] # table 1 should contain flake8 - assert 'flake8' in tables[1] - assert 'py35' not in tables[1] + assert "flake8" in tables[1] + assert "py35" not in tables[1] -@with_app(buildername='html', srcdir='doc_test/env_report_doc_raw') +@with_app(buildername="html", srcdir="doc_test/env_report_doc_raw") def test_doc_env_report_raw_build_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() + html = (app.outdir / "index.html").read_text() tables = re.findall("(
)", html, re.DOTALL) assert len(tables) == 0 # only requested data should be in the output document - assert 'name' in html - assert 'path' in html - assert 'host' in html - assert 'installed_packages' not in html + assert "name" in html + assert "path" in html + assert "host" in html + assert "installed_packages" not in html # only requested environment should be present in output document - assert 'py35' in html - assert 'flake8' in html - assert 'pylint' not in html + assert "py35" in html + assert "flake8" in html + assert "pylint" not in html -@with_app(buildername='html', srcdir='doc_test/env_report_doc_default') +@with_app(buildername="html", srcdir="doc_test/env_report_doc_default") def test_doc_env_report_default_build_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() + html = (app.outdir / "index.html").read_text() tables = re.findall("(
)", html, re.DOTALL) assert len(tables) == 3 @@ -77,37 +70,44 @@ def test_doc_env_report_default_build_html(app, status, warning): # checking if all env from JSON file is present in output or not in table format # AS it is not clearm in which order the tablesget printed, we need to check all of them # for the needed test case - assert 'pylint' in tables[0] or 'pylint' in tables[1] or 'pylint' in tables[2] - assert 'py35' in tables[0] or 'py35' in tables[1] or 'py35' in tables[2] - assert 'flake8' in tables[0] or 'flake8' in tables[1] or 'flake8' in tables[2] - assert 'py36' not in tables[0] or 'py36' not in tables[1] or 'py36' not in tables[2] + assert "pylint" in tables[0] or "pylint" in tables[1] or "pylint" in tables[2] + assert "py35" in tables[0] or "py35" in tables[1] or "py35" in tables[2] + assert "flake8" in tables[0] or "flake8" in tables[1] or "flake8" in tables[2] + assert "py36" not in tables[0] or "py36" not in tables[1] or "py36" not in tables[2] # checking if all dataoptions are present in each output table or not for table in tables: - assert 'path' in table - assert 'name' in table - assert 'reportversion' in table - assert 'host' in table - assert 'setup' in table - assert 'platform' in table - assert 'test' in table - assert 'toxversion' in table - assert 'python' in table - assert 'installed_packages' in table - assert 'installpkg' in table - - -@with_app(buildername='html', srcdir='doc_test/env_report_warnings') # , warningiserror=False, verbosity=2) + assert "path" in table + assert "name" in table + assert "reportversion" in table + assert "host" in table + assert "setup" in table + assert "platform" in table + assert "test" in table + assert "toxversion" in table + assert "python" in table + assert "installed_packages" in table + assert "installpkg" in table + + +@with_app( + buildername="html", srcdir="doc_test/env_report_warnings" +) # , warningiserror=False, verbosity=2) def test_doc_env_report_warning_build_html(app, status, warning): # it should pass all test cases from: test_doc_env_report_build_html # generated output data will be stored here - output = str(check_output(["sphinx-build", "-a", "-E", "-b", "html", app.srcdir, app.outdir], - stderr=STDOUT, universal_newlines=True)) + output = str( + check_output( + ["sphinx-build", "-a", "-E", "-b", "html", app.srcdir, app.outdir], + stderr=STDOUT, + universal_newlines=True, + ) + ) # app.build() - html = (app.outdir / 'index.html').read_text() + html = (app.outdir / "index.html").read_text() - assert '

Test-Env report' in html + assert "

Test-Env report" in html assert '

' in html tables = re.findall("(

Variable

)", html, re.DOTALL) @@ -115,21 +115,21 @@ def test_doc_env_report_warning_build_html(app, status, warning): assert len(tables) == 2 # All requested data should be in both tables - assert 'name' in tables[0] - assert 'path' in tables[0] - assert 'host' in tables[0] + assert "name" in tables[0] + assert "path" in tables[0] + assert "host" in tables[0] - assert 'name' in tables[1] - assert 'path' in tables[1] - assert 'host' in tables[1] + assert "name" in tables[1] + assert "path" in tables[1] + assert "host" in tables[1] # table 0 should contain py35 - assert 'py35' in tables[0] - assert 'flake8' not in tables[0] + assert "py35" in tables[0] + assert "flake8" not in tables[0] # table 1 should contain flake8 - assert 'flake8' in tables[1] - assert 'py35' not in tables[1] + assert "flake8" in tables[1] + assert "py35" not in tables[1] """ Taken from solution of this issue: diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index f94c37b63..d27a3855c 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -1,15 +1,16 @@ - import os + xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") xml_pytest_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data.xml") -xml_pytest51_path = os.path.join(os.path.dirname(__file__), - "data", - "pytest_data_5_1.xml") +xml_pytest51_path = os.path.join( + os.path.dirname(__file__), "data", "pytest_data_5_1.xml" +) xml_nose_path = os.path.join(os.path.dirname(__file__), "data", "nose_data.xml") def test_init_parser(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_path) assert parser is not None @@ -17,6 +18,7 @@ def test_init_parser(): def test_xml_object(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_path) obj = parser.junit_xml_object assert obj.tag == "testsuite" @@ -26,6 +28,7 @@ def test_xml_object(): def test_parse_easy_xml(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_path) assert hasattr(parser, "parse") results = parser.parse() @@ -39,6 +42,7 @@ def test_parse_easy_xml(): def test_parse_nosetest_xml(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_nose_path) assert hasattr(parser, "parse") results = parser.parse() @@ -57,6 +61,7 @@ def test_parse_nosetest_xml(): def test_parse_pytest_xml(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_pytest_path) assert hasattr(parser, "parse") results = parser.parse() @@ -77,6 +82,7 @@ def test_parse_pytest_xml(): def test_parse_pytest_51_xml(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_pytest51_path) assert hasattr(parser, "parse") results = parser.parse() diff --git a/packages/sphinx-test-reports/tox.ini b/packages/sphinx-test-reports/tox.ini deleted file mode 100644 index 1fd296289..000000000 --- a/packages/sphinx-test-reports/tox.ini +++ /dev/null @@ -1,26 +0,0 @@ -[tox] -envlist = py{35,36,37}-sphinx{20,21,22} - -[testenv] -passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH -deps= - -rtest-requirements.txt - sphinx20: Sphinx>=2.0,<2.1 - sphinx21: Sphinx>=2.1,<2.2 - sphinx22: Sphinx>=2.2,<2.3 - - -commands= - pytest --ignore=tests --flake8 --junitxml {envlogdir}/pytest-{envname}.xml - nosetests -v --with-xunit --xunit-file={envlogdir}/nose-{envname}.xml -w tests - -usedevelop=True - - -[pytest] -flake8-max-line-length=120 -flake8-ignore = - docs/_themes/* ALL - __init__.py F401 - groundwork/recipes/* E999 E227 - bootstrap.py E402 F811 From c32bffcba3b6ad0700e509a378319f290f650644 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 10 Nov 2021 10:24:29 +0100 Subject: [PATCH 046/159] README fix --- packages/sphinx-test-reports/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/README.rst b/packages/sphinx-test-reports/README.rst index 6c4695380..163f3a9f1 100644 --- a/packages/sphinx-test-reports/README.rst +++ b/packages/sphinx-test-reports/README.rst @@ -1,7 +1,7 @@ Sphinx-Test-Reports =================== -.. image:: docs/source/static/sphinx-test-reports-logo.png +.. image:: docs/_static/sphinx-test-reports-logo.png Sphinx-Test-Reports shows test results of your unit tests inside your sphinx documentation. From f12798069a54eca64ecd03c84dd950cdc4bd93cf Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 10 Nov 2021 10:44:32 +0100 Subject: [PATCH 047/159] Test cases fixes and better import strategy --- packages/sphinx-test-reports/.flake8 | 1 + packages/sphinx-test-reports/Makefile | 1 - .../test_reports/directives/__init__.py | 10 +++--- .../test_reports/directives/test_case.py | 2 +- .../test_reports/directives/test_common.py | 4 ++- .../test_reports/directives/test_file.py | 5 ++- .../test_reports/directives/test_report.py | 2 +- .../test_reports/directives/test_suite.py | 2 +- .../sphinxcontrib/test_reports/environment.py | 6 ++-- .../test_reports/test_reports.py | 34 ++++++++++++------- .../sphinx-test-reports/test-requirements.txt | 6 ++-- 11 files changed, 43 insertions(+), 30 deletions(-) diff --git a/packages/sphinx-test-reports/.flake8 b/packages/sphinx-test-reports/.flake8 index 58c595c10..0b241ba30 100644 --- a/packages/sphinx-test-reports/.flake8 +++ b/packages/sphinx-test-reports/.flake8 @@ -1,5 +1,6 @@ [flake8] max-line-length = 120 +extend-ignore = I # ignore all isort errors per-file-ignores = sphinxcontrib/test_reports/__init__.py: F401 sphinxcontrib/test_reports/directives/__init__.py: F401 diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile index 44c09590f..04c6b02f4 100644 --- a/packages/sphinx-test-reports/Makefile +++ b/packages/sphinx-test-reports/Makefile @@ -27,4 +27,3 @@ docs-linkcheck: .PHONY: format format: black ${SRC_FILES} - isort ${SRC_FILES} diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py index 4585f0fb2..4a6a5e8d5 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py @@ -1,5 +1,5 @@ -from .test_case import TestCase, TestCaseDirective -from .test_common import TestCommonDirective -from .test_file import TestFile, TestFileDirective -from .test_report import TestReport, TestReportDirective -from .test_suite import TestSuite, TestSuiteDirective +# from .test_case import TestCase, TestCaseDirective +# from .test_common import TestCommonDirective +# from .test_file import TestFile, TestFileDirective +# from .test_report import TestReport, TestReportDirective +# from .test_suite import TestSuite, TestSuiteDirective diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 2633251df..a1076f9fe 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -2,7 +2,7 @@ from docutils.parsers.rst import directives from sphinxcontrib.needs.api import add_need -from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 031b15fd2..982083ae7 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -8,7 +8,9 @@ from sphinxcontrib.needs.api import make_hashed_id from sphinxcontrib.test_reports.exceptions import ( - SphinxError, TestReportFileNotSetException) + SphinxError, + TestReportFileNotSetException, +) from sphinxcontrib.test_reports.junitparser import JUnitParser diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 9d9070843..ff7eb29d4 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -5,9 +5,8 @@ from sphinxcontrib.needs.api import add_need import sphinxcontrib.test_reports.directives.test_suite -from sphinxcontrib.test_reports.directives import TestCommonDirective -from sphinxcontrib.test_reports.exceptions import \ - TestReportIncompleteConfiguration +from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import TestReportIncompleteConfiguration class TestFile(nodes.General, nodes.Element): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index b7ae7ae35..28be47406 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -3,7 +3,7 @@ from docutils import nodes from docutils.parsers.rst import directives -from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective class TestReport(nodes.General, nodes.Element): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 2c92143e9..3f6c46851 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -5,7 +5,7 @@ from sphinxcontrib.needs.api import add_need import sphinxcontrib.test_reports.directives.test_case -from sphinxcontrib.test_reports.directives import TestCommonDirective +from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 62387b0a1..9f2f0af0c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -73,8 +73,8 @@ def safe_remove_file(filename, app): # Base implementation from sphinxcontrib-images # https://github.com/spinus/sphinxcontrib-images/blob/master/sphinxcontrib/images.py#L203 def install_styles_static_files(app, env): - STATICS_DIR_PATH = os.path.join(app.builder.outdir, STATICS_DIR_NAME) - dest_path = os.path.join(STATICS_DIR_PATH, "sphinx-test-results") + statics_dir_path = os.path.join(app.builder.outdir, STATICS_DIR_NAME) + dest_path = os.path.join(statics_dir_path, "sphinx-test-results") files_to_copy = ["common.css"] @@ -114,4 +114,4 @@ def install_styles_static_files(app, env): copyfile(source_file_path, dest_file_path) - safe_add_file(os.path.relpath(dest_file_path, STATICS_DIR_PATH), app) + safe_add_file(os.path.relpath(dest_file_path, statics_dir_path), app) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 2e0422608..7794ef9d6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,19 +1,29 @@ import sphinx + # from docutils import nodes from pkg_resources import parse_version -from sphinxcontrib.needs.api import (add_dynamic_function, add_extra_option, - add_need_type) - -from sphinxcontrib.test_reports.directives import (TestCase, TestCaseDirective, - TestFile, TestFileDirective, - TestReport, - TestReportDirective, - TestSuite, - TestSuiteDirective) -from sphinxcontrib.test_reports.directives.test_env import (EnvReport, - EnvReportDirective) +from sphinxcontrib.needs.api import ( + add_dynamic_function, + add_extra_option, + add_need_type, +) + +from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective +from sphinxcontrib.test_reports.directives.test_file import TestFile, TestFileDirective +from sphinxcontrib.test_reports.directives.test_report import ( + TestReport, + TestReportDirective, +) +from sphinxcontrib.test_reports.directives.test_suite import ( + TestSuite, + TestSuiteDirective, +) + +from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective from sphinxcontrib.test_reports.directives.test_results import ( - TestResults, TestResultsDirective) + TestResults, + TestResultsDirective, +) from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt index ab48136a5..0a6cb0846 100644 --- a/packages/sphinx-test-reports/test-requirements.txt +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -5,7 +5,9 @@ python-coveralls tox nose sphinx_testing -flake8 -isort black nox +flake8 +pep8-naming +flake8-isort +flake8-black From ab0e3698b694a75ec44ea87a1ff264b68de0cb4f Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 10 Nov 2021 10:51:12 +0100 Subject: [PATCH 048/159] Parallel build support (by twodrops) --- packages/sphinx-test-reports/docs/changelog.rst | 1 + packages/sphinx-test-reports/docs/conf.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 9 ++++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index a7fc33948..4ba20f050 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -4,6 +4,7 @@ Changelog ----- :Released: under development +* Improvement: Added support for parallel modes * Bugfix: Minor bugfixes 0.3.4 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 063fdbaec..c9142ccb3 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -28,7 +28,7 @@ # The short X.Y version version = '0.3' # The full version, including alpha/beta/rc tags -release = '0.3.4' +release = '0.3.5' # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 7794ef9d6..cf3f79b5b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -34,6 +34,9 @@ import logging +VERSION = "0.3.5" + + def setup(app): """ Setup following directives: @@ -80,7 +83,11 @@ def setup(app): app.connect("config-inited", tr_preparation) app.connect("config-inited", sphinx_needs_update) - return {"version": "0.3.4"} # identifies the version of our extension + return { + "version": VERSION, # identifies the version of our extension + "parallel_read_safe": True, # support parallel modes + "parallel_write_safe": True, + } def tr_preparation(app, *args): From 299d216ec0404263977977369cfc74523a4b46b3 Mon Sep 17 00:00:00 2001 From: James Barr Date: Fri, 30 Jul 2021 19:08:18 +0100 Subject: [PATCH 049/159] Fixed skip test lookup in junit parser --- .../sphinxcontrib/test_reports/junitparser.py | 13 ++++++--- .../tests/data/pytest_data_6_2.xml | 29 +++++++++++++++++++ .../tests/test_junit_parser.py | 23 +++++++++++++-- 3 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/data/pytest_data_6_2.xml diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 1181b1cf1..77b647746 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -36,10 +36,10 @@ def validate(self): def parse(self): """ - Creates a common python dictionary object, no matter what information are supported by the parsed xml file for - test results junit(). + Creates a common python list of object, no matter what information are + supported by the parsed xml file for test results junit(). - :return: dictionary + :return: list of test suites as dictionaries """ junit_dict = [] @@ -48,7 +48,12 @@ def parse(self): tests = int(testsuite.attrib.get("tests", -1)) errors = int(testsuite.attrib.get("errors", -1)) failures = int(testsuite.attrib.get("failures", -1)) - skips = int(testsuite.attrib.get("skips", testsuite.attrib.get("skip", -1))) + skips = int( + testsuite.attrib.get("skips") or + testsuite.attrib.get("skip") or + testsuite.attrib.get("skipped") or + -1 + ) passed = int(tests - sum(x for x in [errors, failures, skips] if x > 0)) ts_dict = { diff --git a/packages/sphinx-test-reports/tests/data/pytest_data_6_2.xml b/packages/sphinx-test-reports/tests/data/pytest_data_6_2.xml new file mode 100644 index 000000000..d01924dc6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/pytest_data_6_2.xml @@ -0,0 +1,29 @@ + + + + + + def test_fail (): +> assert False +E assert False + +test_example.py:11: AssertionError + + + ~/test_example.py:13: An example reason + + + ~/test_example.py:17: An example reason + + + + + + def test_error(): +> raise Exception("Bang!") +E Exception: Bang! + +test_example.py:31: Exception + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index d27a3855c..ee788e1ce 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -2,9 +2,9 @@ xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") xml_pytest_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data.xml") -xml_pytest51_path = os.path.join( - os.path.dirname(__file__), "data", "pytest_data_5_1.xml" -) +xml_pytest51_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data_5_1.xml") +xml_pytest62_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data_6_2.xml") + xml_nose_path = os.path.join(os.path.dirname(__file__), "data", "nose_data.xml") @@ -89,3 +89,20 @@ def test_parse_pytest_51_xml(): assert len(results) == 1 assert results[0]["name"] == "pytest" + + +def test_parse_pytest_61_gets_test_suite_attributes(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_pytest62_path) + test_suites = parser.parse() + + assert len(test_suites) == 1 + test_suite = test_suites[0] + + assert test_suite["name"] == "pytest62" + assert test_suite["tests"] == 6 + assert test_suite["errors"] == 0 + assert test_suite["failures"] == 2 + assert test_suite["skips"] == 3 + assert test_suite["passed"] == 1 + assert test_suite["time"] == 4.088 From 9c041678687cbac72faec7a0e1e62c135f1f84c4 Mon Sep 17 00:00:00 2001 From: James Barr Date: Sun, 1 Aug 2021 21:23:56 +0100 Subject: [PATCH 050/159] Support added for pytest xfail test cases --- .../sphinxcontrib/test_reports/junitparser.py | 3 +- .../tests/doc_test/pytest_6_2/Makefile | 20 +++ .../tests/doc_test/pytest_6_2/conf.py | 149 ++++++++++++++++++ .../tests/doc_test/pytest_6_2/index.rst | 6 + .../tests/doc_test/pytest_6_2/make.bat | 36 +++++ .../tests/test_basic_doc.py | 17 +- 6 files changed, 227 insertions(+), 4 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/pytest_6_2/make.bat diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 77b647746..5471d5857 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -83,7 +83,8 @@ def parse(self): tc_dict["result"] = "skipped" tc_dict["type"] = result.attrib.get("type", "unknown") # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs - tc_dict["text"] = result.text + # result.text can be None for pytest xfail test cases + tc_dict["text"] = result.text or "" tc_dict["message"] = result.attrib.get("message", "unknown") elif hasattr(testcase, "failure"): result = testcase.failure diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py new file mode 100644 index 000000000..fe2c7cb87 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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 = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'test-report test docs' +copyright = '2017, team useblocks' +author = 'team useblocks' + +# 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. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = 'alabaster' + +# 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 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'] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testreporttestdocsdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', + 'team useblocks', 'manual'), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + [author], 1) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', + author, 'testreporttestdocs', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst new file mode 100644 index 000000000..18682f232 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst @@ -0,0 +1,6 @@ +Basic Document +============== + + +.. test-results:: ../../data/pytest_data_6_2.xml + diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/make.bat b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index 0b4477518..cc08a0861 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -4,6 +4,17 @@ @with_app(buildername="html", srcdir="doc_test/basic_doc") def test_doc_build_html(app, status, warning): app.build() - html = (app.outdir / "index.html").read_text() - assert "

Basic Document" in html - assert "ASuccessfulTest" in html + html = (app.outdir / 'index.html').read_text() + assert '

Basic Document' in html + assert 'ASuccessfulTest' in html + + +@with_app(buildername='html', srcdir='doc_test/pytest_6_2') +def test_doc_build_html_for_pytest_6_2(app, status, warning): + app.build() + html = (app.outdir / 'index.html').read_text(encoding="utf-8") + + assert 'Tests: 6' in html + assert 'Failures: 2' in html + assert 'Errors: 0' in html + assert 'Skips: 3' in html From 1707554529a0bd6b415511c239cf86c6c6567e26 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 10 Nov 2021 11:01:40 +0100 Subject: [PATCH 051/159] linter fixes --- .../sphinxcontrib/test_reports/junitparser.py | 8 +-- .../tests/doc_test/pytest_6_2/conf.py | 63 +++++++++++-------- .../tests/test_basic_doc.py | 18 +++--- .../tests/test_junit_parser.py | 9 ++- 4 files changed, 58 insertions(+), 40 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 5471d5857..e32372776 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -49,10 +49,10 @@ def parse(self): errors = int(testsuite.attrib.get("errors", -1)) failures = int(testsuite.attrib.get("failures", -1)) skips = int( - testsuite.attrib.get("skips") or - testsuite.attrib.get("skip") or - testsuite.attrib.get("skipped") or - -1 + testsuite.attrib.get("skips") + or testsuite.attrib.get("skip") + or testsuite.attrib.get("skipped") + or -1 ) passed = int(tests - sum(x for x in [errors, failures, skips] if x > 0)) diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py index fe2c7cb87..47b65de44 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -19,7 +19,7 @@ import os import sys -sys.path.insert(0, os.path.abspath('../../sphinxcontrib')) +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -31,33 +31,33 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinxcontrib.needs', 'sphinxcontrib.test_reports'] +extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = 'test-report test docs' -copyright = '2017, team useblocks' -author = 'team useblocks' +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" # 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. -version = '1.0' +version = "1.0" # The full version, including alpha/beta/rc tags. -release = '1.0' +release = "1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -69,10 +69,10 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -82,7 +82,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 @@ -93,12 +93,12 @@ # 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'] +html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. -htmlhelp_basename = 'testreporttestdocsdoc' +htmlhelp_basename = "testreporttestdocsdoc" # -- Options for LaTeX output --------------------------------------------- @@ -106,15 +106,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -124,8 +121,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'testreporttestdocs.tex', 'testreport test docs Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -133,8 +135,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - [author], 1) + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -143,7 +150,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'testreporttestdocs', 'testreport test docs Documentation', - author, 'testreporttestdocs', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index cc08a0861..66e91177a 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -4,17 +4,17 @@ @with_app(buildername="html", srcdir="doc_test/basic_doc") def test_doc_build_html(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text() - assert '

Basic Document' in html - assert 'ASuccessfulTest' in html + html = (app.outdir / "index.html").read_text() + assert "

Basic Document" in html + assert "ASuccessfulTest" in html -@with_app(buildername='html', srcdir='doc_test/pytest_6_2') +@with_app(buildername="html", srcdir="doc_test/pytest_6_2") def test_doc_build_html_for_pytest_6_2(app, status, warning): app.build() - html = (app.outdir / 'index.html').read_text(encoding="utf-8") + html = (app.outdir / "index.html").read_text(encoding="utf-8") - assert 'Tests: 6' in html - assert 'Failures: 2' in html - assert 'Errors: 0' in html - assert 'Skips: 3' in html + assert "Tests: 6" in html + assert "Failures: 2" in html + assert "Errors: 0" in html + assert "Skips: 3" in html diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index ee788e1ce..c7d3efb3e 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -2,8 +2,12 @@ xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") xml_pytest_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data.xml") -xml_pytest51_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data_5_1.xml") -xml_pytest62_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data_6_2.xml") +xml_pytest51_path = os.path.join( + os.path.dirname(__file__), "data", "pytest_data_5_1.xml" +) +xml_pytest62_path = os.path.join( + os.path.dirname(__file__), "data", "pytest_data_6_2.xml" +) xml_nose_path = os.path.join(os.path.dirname(__file__), "data", "nose_data.xml") @@ -93,6 +97,7 @@ def test_parse_pytest_51_xml(): def test_parse_pytest_61_gets_test_suite_attributes(): from sphinxcontrib.test_reports.junitparser import JUnitParser + parser = JUnitParser(xml_pytest62_path) test_suites = parser.parse() From 52649f6af47b0eb9c5a7fed7e42c5464352a42b9 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 12 Nov 2021 09:03:58 +0100 Subject: [PATCH 052/159] minor doc updates and version 0.3.6 raise --- .../.github/workflows/ci.yaml | 7 ++----- packages/sphinx-test-reports/docs/changelog.rst | 17 +++++++++++++++-- packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/docs/index.rst | 6 +++--- packages/sphinx-test-reports/noxfile.py | 9 ++++++--- packages/sphinx-test-reports/setup.py | 5 ++++- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 7 files changed, 32 insertions(+), 16 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 7c83af66f..4f9ebfa90 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -7,11 +7,8 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - python-version: ["3.6", "3.8", "3.9"] - sphinx-version: ["3.2", '3.5', '4.1', '4.2'] - exclude: - - python-version: "3.6" - sphinx-version: "3.2" + python-version: ["3.6", "3.8", "3.9" ] # No "3.10", as nose seem to have problems with it + sphinx-version: ['3.5', '4.1', '4.3'] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 4ba20f050..72007d20c 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,10 +1,23 @@ Changelog ========= -0.3.5 + +0.3.7 ----- :Released: under development -* Improvement: Added support for parallel modes +0.3.6 +----- +:Released: 12.11.2021 + +* Improvement: Added support for parallel modes. + `#20 `_ +* Improvement: Support getting skipped tests. + `#18 `_ + +0.3.5 +----- +:Released: 18.06.2021 + * Bugfix: Minor bugfixes 0.3.4 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index c9142ccb3..04143bb09 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -28,7 +28,7 @@ # The short X.Y version version = '0.3' # The full version, including alpha/beta/rc tags -release = '0.3.5' +release = '0.3.6' # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 7335d7e92..1b64c8b29 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -11,9 +11,9 @@ :alt: Supported versions .. image:: https://readthedocs.org/projects/sphinx-test-reports/badge/?version=latest :target: https://readthedocs.org/projects/sphinx-test-reports/ -.. image:: https://travis-ci.org/useblocks/sphinx-test-reports.svg?branch=master - :target: https://travis-ci.org/useblocks/sphinx-test-reports - :alt: Travis-CI Build Status +.. image:: https://github.com/useblocks/sphinx-test-reports/actions/workflows/ci.yaml/badge.svg + :target: https://github.com/useblocks/sphinx-test-reports/actions/ + :alt: CI Build Status .. image:: https://img.shields.io/pypi/v/sphinx-test-reports.svg :target: https://pypi.python.org/pypi/sphinx-test-reports :alt: PyPI Package latest release diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index f35b48c52..db640c298 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -1,8 +1,8 @@ import nox from nox import session -PYTHON_VERSIONS = ["3.6", "3.8", "3.9"] -SPHINX_VERSIONS = ["3.2", "3.5", "4.1", "4.2"] +PYTHON_VERSIONS = ["3.6", "3.8", "3.9", "3.10"] +SPHINX_VERSIONS = ["3.5", "4.1", "4.3"] TEST_DEPENDENCIES = [ "nose", "sphinx_testing", @@ -16,7 +16,10 @@ def is_supported(python: str, sphinx: str) -> bool: - return not (python == "3.6" and float(sphinx) > 3.0) + return not ( + (python == "3.6" and float(sphinx) > 3.0) + or (python == "3.10" and float(sphinx) < 4.3) + ) def run_tests(session, sphinx): diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index f9247ba9f..bddc56620 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -8,7 +8,7 @@ setup( name='sphinx-test-reports', - version='0.3.5', + version='0.3.6', url='http://github.com/useblocks/sphinx-test-reports', download_url='http://pypi.python.org/pypi/sphinx-test-reports', license='MIT', @@ -28,6 +28,9 @@ 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Topic :: Documentation', 'Topic :: Utilities', ], diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index cf3f79b5b..7518180b4 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -34,7 +34,7 @@ import logging -VERSION = "0.3.5" +VERSION = "0.3.6" def setup(app): From 369ef4bd25e003dac5de03871e1a12b1bdca685c Mon Sep 17 00:00:00 2001 From: Bence Bognar Date: Thu, 16 Dec 2021 15:48:24 +0100 Subject: [PATCH 053/159] small mistake on `test-results` usage `.. test-results: my/path/to/test.xml`, ->`.. test-results:: my/path/to/test.xml` --- packages/sphinx-test-reports/docs/directives/test_results.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/docs/directives/test_results.rst b/packages/sphinx-test-reports/docs/directives/test_results.rst index ca84c73fc..5872b383a 100644 --- a/packages/sphinx-test-reports/docs/directives/test_results.rst +++ b/packages/sphinx-test-reports/docs/directives/test_results.rst @@ -7,7 +7,7 @@ This directive adds a results table of a given junit xml file to the current pag .. code-block:: rst - .. test-results: my/path/to/test.xml + .. test-results:: my/path/to/test.xml .. test-results:: ../tests/data/xml_data.xml @@ -21,4 +21,4 @@ This directive adds a results table of a given junit xml file to the current pag Each test framework, like pytest or nosetest, generates a little different junit-xml file with more or less data. If a specific data is not available in the given xml-file, sphinx-test-reports fills the information with - ``unknown`` for strings or ``-1`` for numbers. \ No newline at end of file + ``unknown`` for strings or ``-1`` for numbers. From 3685ff8bf758916d2155adb6e6381ea8e24bbdba Mon Sep 17 00:00:00 2001 From: Martin <54633070+mawieland@users.noreply.github.com> Date: Fri, 20 May 2022 12:51:36 +0200 Subject: [PATCH 054/159] Supports nested testsuites (useblocks/sphinx-test-reports#31) * proposed fix for issue useblocks/sphinx-test-reports#30 * removed redundant TODOs * added local code inspection * fixed code inspection * isort and black are fighting for import statement formatting * fixing Jinja2 import error --- .../.pre-commit-config.yaml | 31 +++++ .../sphinx-test-reports/doc-requirements.txt | 1 + packages/sphinx-test-reports/docs/conf.py | 103 +++++++++------ packages/sphinx-test-reports/noxfile.py | 4 +- packages/sphinx-test-reports/setup.py | 76 +++++------ .../test_reports/directives/test_case.py | 41 +++++- .../test_reports/directives/test_common.py | 10 +- .../test_reports/directives/test_env.py | 37 +++--- .../test_reports/directives/test_file.py | 17 +-- .../test_reports/directives/test_report.py | 5 +- .../test_reports/directives/test_suite.py | 76 ++++++++++- .../sphinxcontrib/test_reports/environment.py | 20 +-- .../test_reports/functions/__init__.py | 5 +- .../sphinxcontrib/test_reports/junitparser.py | 120 +++++++++++------- .../test_reports/test_reports.py | 27 +--- .../tests/data/pytest_nested_example.xml | 40 ++++++ .../tests/doc_test/basic_doc/conf.py | 1 - .../tests/doc_test/custom_types/conf.py | 1 - .../tests/doc_test/empty_doc/conf.py | 1 - .../tests/doc_test/env_report_doc/conf.py | 1 - .../doc_test/env_report_doc_default/conf.py | 1 - .../tests/doc_test/env_report_doc_raw/conf.py | 1 - .../doc_test/env_report_warnings/conf.py | 1 - .../tests/doc_test/pytest_6_2/conf.py | 1 - 24 files changed, 406 insertions(+), 215 deletions(-) create mode 100644 packages/sphinx-test-reports/.pre-commit-config.yaml create mode 100644 packages/sphinx-test-reports/tests/data/pytest_nested_example.xml diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml new file mode 100644 index 000000000..bddb945d7 --- /dev/null +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -0,0 +1,31 @@ +repos: + - repo: https://github.com/psf/black + rev: 22.3.0 + hooks: + - id: black + + - repo: https://gitlab.com/pycqa/flake8 + rev: 4.0.1 + hooks: + - id: flake8 + additional_dependencies: + - flake8-bugbear + - flake8-comprehensions + - flake8-simplify + - pep8-naming + + # ignore sim118 ("do not use dict.keys()") for clarity + args: [--max-line-length=120, --ignore=SIM118] + + - repo: https://github.com/pycqa/isort + rev: 5.10.1 + hooks: + - id: isort + args: [-l 120,] + - repo: https://github.com/asottile/pyupgrade + rev: v2.29.1 + hooks: + - id: pyupgrade + args: + - --py36-plus + diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index e3bdb28e7..5f975923d 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -3,3 +3,4 @@ sphinxcontrib-needs>=0.7.2 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx-panels >= 0.6 +Jinja2<3.1 \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 04143bb09..fe95e23b1 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # @@ -16,19 +15,22 @@ # import sys import datetime import os + # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- -project = 'sphinx-test-reports' +project = "sphinx-test-reports" now = datetime.datetime.now() -copyright = '2017-{year}, team useblocks'.format(year=now.year) -author = 'team useblocks' +copyright = '2017-{year}, team useblocks'.format( + year=now.year +) +author = "team useblocks" # The short X.Y version -version = '0.3' +version = "0.3" # The full version, including alpha/beta/rc tags -release = '0.3.6' +release = "0.3.6" # -- General configuration --------------------------------------------------- @@ -40,13 +42,15 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", - "sphinxcontrib.test_reports", - 'sphinxcontrib.plantuml', - 'sphinx_panels'] +extensions = [ + "sphinxcontrib.needs", + "sphinxcontrib.test_reports", + "sphinxcontrib.plantuml", + "sphinx_panels", +] cwd = os.getcwd() -plantuml = 'java -jar %s' % os.path.join(cwd, "utils/plantuml.jar") +plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") # If we are running on windows, we need to manipulate the path, # otherwise plantuml will have problems. @@ -54,20 +58,20 @@ plantuml = plantuml.replace("/", "\\") plantuml = plantuml.replace("\\", "\\\\") -plantuml_output_format = 'png' +plantuml_output_format = "png" # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -82,7 +86,7 @@ exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # -- Options for HTML output ------------------------------------------------- @@ -90,31 +94,33 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # 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 = { - 'logo': 'sphinx-test-reports-logo.png', - 'logo_name': False, + "logo": "sphinx-test-reports-logo.png", + "logo_name": False, # 'description': "an extension for sphinx", - 'logo_text_align': "center", - 'github_user': 'useblocks', - 'github_repo': 'sphinx-test-reports', - 'github_banner': True, - 'github_button': False, - 'fixed_sidebar': True, - 'extra_nav_links': {'needs@PyPi': "https://pypi.python.org/pypi/sphinx-test-reports", - 'needs@github': "https://github.com/useblocks/sphinx-test-reports", - 'needs@travis': "https://travis-ci.org/useblocks/sphinx-test-reports"} + "logo_text_align": "center", + "github_user": "useblocks", + "github_repo": "sphinx-test-reports", + "github_banner": True, + "github_button": False, + "fixed_sidebar": True, + "extra_nav_links": { + "needs@PyPi": "https://pypi.python.org/pypi/sphinx-test-reports", + "needs@github": "https://github.com/useblocks/sphinx-test-reports", + "needs@travis": "https://travis-ci.org/useblocks/sphinx-test-reports", + }, } # 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'] +html_static_path = ["_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -124,13 +130,15 @@ # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # -html_sidebars = {'**': ['about.html', 'navigation.html'], } +html_sidebars = { + "**": ["about.html", "navigation.html"], +} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = 'sphinx-test-reportsdoc' +htmlhelp_basename = "sphinx-test-reportsdoc" # -- Options for LaTeX output ------------------------------------------------ @@ -139,15 +147,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -157,8 +162,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'sphinx-test-reports.tex', 'sphinx-test-reports Documentation', - 'team useblocks', 'manual'), + ( + master_doc, + "sphinx-test-reports.tex", + "sphinx-test-reports Documentation", + "team useblocks", + "manual", + ), ] @@ -167,8 +177,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'sphinx-test-reports', 'sphinx-test-reports Documentation', - [author], 1) + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + [author], + 1, + ) ] @@ -178,7 +193,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'sphinx-test-reports', 'sphinx-test-reports Documentation', - author, 'sphinx-test-reports', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + author, + "sphinx-test-reports", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index db640c298..99f82abc9 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -16,9 +16,9 @@ def is_supported(python: str, sphinx: str) -> bool: + return not ( - (python == "3.6" and float(sphinx) > 3.0) - or (python == "3.10" and float(sphinx) < 4.3) + (python == "3.6" and float(sphinx) > 3.0) or (python == "3.10" and float(sphinx) < 4.3) # fmt: skip ) diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index bddc56620..6c77ccbe0 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -1,42 +1,44 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- import os -from setuptools import setup, find_packages -requires = ['sphinx>2.0', 'lxml', 'sphinxcontrib-needs>=0.5.6'] +from setuptools import find_packages, setup -setup( - name='sphinx-test-reports', - version='0.3.6', - url='http://github.com/useblocks/sphinx-test-reports', - download_url='http://pypi.python.org/pypi/sphinx-test-reports', - license='MIT', - author='team useblocks', - author_email='info@useblocks.com', - description='Sphinx extension for showing test results and test environment ' - 'information inside sphinx documentations', - long_description=open(os.path.join(os.path.dirname(__file__), "README.rst")).read(), - zip_safe=False, - classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Topic :: Documentation', - 'Topic :: Utilities', - ], - platforms='any', - packages=find_packages(), - include_package_data=True, - install_requires=requires, - namespace_packages=['sphinxcontrib'], -) +requires = ["sphinx>2.0", "lxml", "sphinxcontrib-needs>=0.5.6"] + +with open(os.path.join(os.path.dirname(__file__), "README.rst")) as file: + + setup( + name="sphinx-test-reports", + version="0.3.6", + url="http://github.com/useblocks/sphinx-test-reports", + download_url="http://pypi.python.org/pypi/sphinx-test-reports", + license="MIT", + author="team useblocks", + author_email="info@useblocks.com", + description="Sphinx extension for showing test results and test environment " + "information inside sphinx documentations", + long_description=file.read(), + zip_safe=False, + classifiers=[ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Topic :: Documentation", + "Topic :: Utilities", + ], + platforms="any", + packages=find_packages(), + include_package_data=True, + install_requires=requires, + namespace_packages=["sphinxcontrib"], + ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index a1076f9fe..f7d0925a8 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -35,11 +35,16 @@ class TestCaseDirective(TestCommonDirective): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - def run(self): + def run(self, nested=False, suite_count=-1, case_count=-1): self.prepare_basic_options() self.load_test_file() + if nested and suite_count >= 0: + # access n-th nested suite here + self.results = self.results[0]["testsuites"][suite_count] + suite_name = self.options.get("suite", None) + if suite_name is None: raise TestReportInvalidOption("Suite not given!") @@ -50,30 +55,54 @@ def run(self): suite = None for suite_obj in self.results: - if suite_obj["name"] == suite_name: + + if nested: # nested testsuites + suite = self.results + break + + elif suite_obj["name"] == suite_name: suite = suite_obj break if suite is None: raise TestReportInvalidOption( - "Suite {} not found in test file {}".format(suite_name, self.test_file) + f"Suite {suite_name} not found in test file {self.test_file}" ) case = None + for case_obj in suite["testcases"]: - if case_obj["name"] == case_full_name and class_name is None: + + if ( + case_obj["name"] == case_full_name # noqa: SIM114 + and class_name is None # noqa: W503 + ): case = case_obj break - elif case_obj["classname"] == class_name and case_full_name is None: + + elif ( + case_obj["classname"] == class_name # noqa: SIM114 + and case_full_name is None # noqa: W503 + ): case = case_obj break + elif ( case_obj["name"] == case_full_name - and case_obj["classname"] == class_name + and case_obj["classname"] == class_name # noqa: W503 ): case = case_obj break + elif nested and case_count >= 0: + # access correct case in list + case = suite["testcases"][case_count] + break + + elif nested: + case = case_obj + break + if case is None: raise TestReportInvalidOption( "Case {} with classname {} not found in test file {} " diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 982083ae7..7d34fb50f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -1,18 +1,18 @@ """ A Common directive, from which all other test directives inherit the shared functions. """ +# fmt: off import os from docutils.parsers.rst import Directive from sphinx.util import logging from sphinxcontrib.needs.api import make_hashed_id -from sphinxcontrib.test_reports.exceptions import ( - SphinxError, - TestReportFileNotSetException, -) +from sphinxcontrib.test_reports.exceptions import SphinxError, TestReportFileNotSetException from sphinxcontrib.test_reports.junitparser import JUnitParser +# fmt: on + class TestCommonDirective(Directive): """ @@ -20,7 +20,7 @@ class TestCommonDirective(Directive): """ def __init__(self, *args, **kwargs): - super(TestCommonDirective, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.env = self.state.document.settings.env self.app = self.env.app if not hasattr(self.app, "testreport_data"): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index fbe57f147..6ab002463 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -38,7 +38,7 @@ class EnvReportDirective(Directive): final_argument_whitespace = True def __init__(self, *args, **kwargs): - super(EnvReportDirective, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.data_option = self.options.get("data", None) self.environments = self.options.get("env", None) @@ -72,20 +72,17 @@ def run(self): json_path = os.path.join(root_path, json_path) if not os.path.exists(json_path): - raise JsonFileNotFound( - "The given file does not exist: {0}".format(json_path) - ) - - fp_json = open(json_path, "r") - - try: - results = json.load(fp_json) - except ValueError: - raise InvalidJsonFile( - "The given file {0} is not a valid JSON".format( - json_path.split("/")[-1] + raise JsonFileNotFound(f"The given file does not exist: {json_path}") + + with open(json_path) as fp_json: + try: + results = json.load(fp_json) + except ValueError: + raise InvalidJsonFile( + "The given file {} is not a valid JSON".format( + json_path.split("/")[-1] + ) ) - ) # check to see if environment is present in JSON or not if self.req_env_list is not None: @@ -95,9 +92,7 @@ def run(self): not_present_env.append(req_env) for not_env in not_present_env: self.req_env_list.remove(not_env) - logger.warning( - "environment '{0}' is not present in JSON file".format(not_env) - ) + logger.warning(f"environment '{not_env}' is not present in JSON file") del not_present_env # Construction idea taken from http://agateau.com/2015/docutils-snippets/ @@ -124,7 +119,7 @@ def run(self): for opt in self.data_option_list: if opt not in temp_dict2[enviro]: logger.warning( - "option '{0}' is not present in JSON file".format(opt) + f"option '{opt}' is not present in JSON file" ) del temp_dict @@ -152,7 +147,7 @@ def run(self): for opt in self.data_option_list: if opt not in temp_dict2[enviro]: logger.warning( - "option '{0}' is not present in '{1}' environment file".format( + "option '{}' is not present in '{}' environment file".format( opt, enviro ) ) @@ -206,9 +201,7 @@ def _crete_table_b(self, enviro, results): if data_option is not None: if len(data_option) != 0: for opt in data_option: - logger.warning( - "option '{0}' is not present in JSON file".format(opt) - ) + logger.warning(f"option '{opt}' is not present in JSON file") del data_option return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index ff7eb29d4..c5be51983 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -46,7 +46,7 @@ def run(self): main_section = [] content = nodes.error() para = nodes.paragraph() - text_string = "Test file not found: {}".format(self.test_file) + text_string = f"Test file not found: {self.test_file}" text = nodes.Text(text_string, text_string) para += text content.append(para) @@ -54,12 +54,12 @@ def run(self): return main_section suites = len(self.results) - cases = sum([int(x["tests"]) for x in self.results]) + cases = sum(int(x["tests"]) for x in self.results) - passed = sum([x["passed"] for x in self.results]) - skipped = sum([x["skips"] for x in self.results]) - errors = sum([x["errors"] for x in self.results]) - failed = sum([x["failures"] for x in self.results]) + passed = sum(x["passed"] for x in self.results) + skipped = sum(x["skips"] for x in self.results) + errors = sum(x["errors"] for x in self.results) + failed = sum(x["failures"] for x in self.results) main_section = [] docname = self.state.document.settings.env.docname @@ -87,8 +87,9 @@ def run(self): if ( "auto_cases" in self.options.keys() - and "auto_suites" not in self.options.keys() + and "auto_suites" not in self.options.keys() # noqa W 503 ): + raise TestReportIncompleteConfiguration( "option auto_cases must be used together with " "auto_suites for test-file directives." @@ -99,7 +100,7 @@ def run(self): suite_id = self.test_id suite_id += ( "_" - + hashlib.sha1(suite["name"].encode("UTF-8")) + + hashlib.sha1(suite["name"].encode("UTF-8")) # noqa: W503 .hexdigest() .upper()[:3] ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 28be47406..4beb3be53 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -1,3 +1,4 @@ +# fmt: off import os from docutils import nodes @@ -5,6 +6,8 @@ from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective +# fmt: on + class TestReport(nodes.General, nodes.Element): pass @@ -42,7 +45,7 @@ def run(self): template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: - links_string = "\n :links: {}".format(self.test_links) + links_string = f"\n :links: {self.test_links}" else: links_string = "" diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 3f6c46851..0eaaf2905 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -36,11 +36,16 @@ class TestSuiteDirective(TestCommonDirective): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - def run(self): + def run(self, nested=False, count=-1): self.prepare_basic_options() self.load_test_file() + if nested: + # access n-th nested suite here + self.results = self.results[0]["testsuites"] + suite_name = self.options.get("suite", None) + if suite_name is None: raise TestReportInvalidOption("Suite not given!") @@ -50,9 +55,13 @@ def run(self): suite = suite_obj break + elif nested: # access correct nested testsuite here + suite = self.results[count] + break + if suite is None: raise TestReportInvalidOption( - "Suite {} not found in test file {}".format(suite_name, self.test_file) + f"Suite {suite_name} not found in test file {self.test_file}" ) cases = suite["tests"] @@ -86,12 +95,62 @@ def run(self): errors=errors, ) - if "auto_cases" in self.options.keys(): + # TODO double nested logic + # nested testsuite present, if testcases are present -> reached most inner testsuite + access_count = 0 + if len(suite_obj["testcases"]) == 0: + + for suite in suite_obj["testsuites"]: + + suite_id = self.test_id + suite_id += ( + "_" + + hashlib.sha1(suite["name"].encode("UTF-8")) # noqa: W503 + .hexdigest() + .upper()[:3] + ) + + options = self.options + options["suite"] = suite["name"] + options["id"] = suite_id + + if "links" not in self.options: + options["links"] = self.test_id + elif self.test_id not in options["links"]: + options["links"] = options["links"] + ";" + self.test_id + + arguments = [suite["name"]] + suite_directive = ( + sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, + ) + ) + + is_nested = len(suite_obj["testsuites"]) > 0 + + # create suite_directive for each nested suite, directive appends content in html files + # access_count keeps track of which nested testsuite to access in the directive + main_section += suite_directive.run(nested=True, count=access_count) + access_count += 1 + + # suite has testcases + if "auto_cases" in self.options.keys() and len(suite_obj["testcases"]) > 0: + + case_count = 0 + for case in suite["testcases"]: case_id = self.test_id case_id += ( "_" - + hashlib.sha1( + + hashlib.sha1( # noqa: W503 case["classname"].encode("UTF-8") + case["name"].encode("UTF-8") ) .hexdigest() @@ -123,6 +182,13 @@ def run(self): ) ) - main_section += case_directive.run() + is_nested = len(suite_obj["testsuites"]) > 0 or nested + + # depending if nested or not, runs case directive to add content to testcases + # count is for correct suite access, if multiple present, case_count is for correct case access + main_section += case_directive.run(is_nested, count, case_count) + + if is_nested: + case_count += 1 return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 9f2f0af0c..88f6d02f1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -28,13 +28,13 @@ def safe_add_file(filename, app): if data_file.split(".")[-1] == "js": if ( hasattr(app.builder, "script_files") - and static_data_file not in app.builder.script_files + and static_data_file not in app.builder.script_files # noqa: W503 ): app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": if ( hasattr(app.builder, "css_files") - and static_data_file not in app.builder.css_files + and static_data_file not in app.builder.css_files # noqa: W503 ): app.add_css_file(data_file) else: @@ -59,15 +59,15 @@ def safe_remove_file(filename, app): if data_file.split(".")[-1] == "js": if ( hasattr(app.builder, "script_files") - and static_data_file in app.builder.script_files + and static_data_file in app.builder.script_files # noqa: W503 ): app.builder.script_files.remove(static_data_file) - elif data_file.split(".")[-1] == "css": - if ( - hasattr(app.builder, "css_files") - and static_data_file in app.builder.css_files - ): - app.builder.css_files.remove(static_data_file) + elif data_file.split(".")[-1] == "css" and ( + hasattr(app.builder, "css_files") + and static_data_file in app.builder.css_files # noqa: W503 + ): + + app.builder.css_files.remove(static_data_file) # Base implementation from sphinxcontrib-images @@ -102,7 +102,7 @@ def install_styles_static_files(app, env): os.path.dirname(__file__), "css", "blank.css" ) print( - "{0} not found. Copying sphinx-internal blank.css".format( + "{} not found. Copying sphinx-internal blank.css".format( source_file_path ) ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py index 29133632a..6373ab3b1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py @@ -7,10 +7,9 @@ def tr_link(app, need, needs, test_option, target_option, *args, **kwargs): for need_target in needs.values(): if target_option not in need_target: continue + if ( - test_opt == need_target[target_option] - and test_opt is not None - and len(test_opt) > 0 + test_opt == need_target[target_option] and test_opt is not None and len(test_opt) > 0 # fmt: skip ): links.append(need_target["id"]) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index e32372776..217140a8a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -17,7 +17,7 @@ def __init__(self, junit_xml, junit_xsd=None): if not os.path.exists(self.junit_xml_path): raise JUnitFileMissing( - "The given file does not exist: {0}".format(self.junit_xml_path) + f"The given file does not exist: {self.junit_xml_path}" ) self.junit_xml_doc = etree.parse(self.junit_xml_path) @@ -42,18 +42,62 @@ def parse(self): :return: list of test suites as dictionaries """ - junit_dict = [] + def parse_testcase(xml_object): + + testcase = xml_object + + tc_dict = { + "classname": testcase.attrib.get("classname", "unknown"), + "file": testcase.attrib.get("file", "unknown"), + "line": int(testcase.attrib.get("line", -1)), + "name": testcase.attrib.get("name", "unknown"), + "time": float(testcase.attrib.get("time", -1)), + } + + # The following data is normally a subnode (e.g. skipped/failure). + # We integrate it right into the testcase for better handling + if hasattr(testcase, "skipped"): + result = testcase.skipped + tc_dict["result"] = "skipped" + tc_dict["type"] = result.attrib.get("type", "unknown") + # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs + # result.text can be None for pytest xfail test cases + tc_dict["text"] = result.text or "" + tc_dict["message"] = result.attrib.get("message", "unknown") + elif hasattr(testcase, "failure"): + result = testcase.failure + tc_dict["result"] = "failure" + tc_dict["type"] = result.attrib.get("type", "unknown") + # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs + tc_dict["text"] = result.text + tc_dict["message"] = "" + else: + tc_dict["result"] = "passed" + tc_dict["type"] = "" + tc_dict["text"] = "" + tc_dict["message"] = "" + + if hasattr(testcase, "system-out"): + tc_dict["system-out"] = testcase["system-out"].text + else: + tc_dict["system-out"] = "" + + return tc_dict + + def parse_testsuite(xml_object): + + testsuite = xml_object - for testsuite in self.junit_xml_object: tests = int(testsuite.attrib.get("tests", -1)) errors = int(testsuite.attrib.get("errors", -1)) failures = int(testsuite.attrib.get("failures", -1)) + + # fmt: off skips = int( - testsuite.attrib.get("skips") - or testsuite.attrib.get("skip") - or testsuite.attrib.get("skipped") - or -1 + testsuite.attrib.get("skips") or testsuite.attrib.get("skip") or testsuite.attrib.get("skipped") or -1 ) + # fmt: on + passed = int(tests - sum(x for x in [errors, failures, skips] if x > 0)) ts_dict = { @@ -65,48 +109,30 @@ def parse(self): "passed": passed, "time": float(testsuite.attrib.get("time", -1)), "testcases": [], + "testsuites": [], } - for testcase in testsuite.testcase: - tc_dict = { - "classname": testcase.attrib.get("classname", "unknown"), - "file": testcase.attrib.get("file", "unknown"), - "line": int(testcase.attrib.get("line", -1)), - "name": testcase.attrib.get("name", "unknown"), - "time": float(testcase.attrib.get("time", -1)), - } - - # The following data is normally a subnode (e.g. skipped/failure). - # We integrate it right into the testcase for better handling - if hasattr(testcase, "skipped"): - result = testcase.skipped - tc_dict["result"] = "skipped" - tc_dict["type"] = result.attrib.get("type", "unknown") - # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs - # result.text can be None for pytest xfail test cases - tc_dict["text"] = result.text or "" - tc_dict["message"] = result.attrib.get("message", "unknown") - elif hasattr(testcase, "failure"): - result = testcase.failure - tc_dict["result"] = "failure" - tc_dict["type"] = result.attrib.get("type", "unknown") - # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs - tc_dict["text"] = result.text - tc_dict["message"] = "" - else: - tc_dict["result"] = "passed" - tc_dict["type"] = "" - tc_dict["text"] = "" - tc_dict["message"] = "" - - if hasattr(testcase, "system-out"): - tc_dict["system-out"] = testcase["system-out"].text - else: - tc_dict["system-out"] = "" - - ts_dict["testcases"].append(tc_dict) - - junit_dict.append(ts_dict) + # add nested testsuite objects to + if hasattr(testsuite, "testsuite"): + + for ts in testsuite.testsuite: + # dict from inner parse + inner_testsuite = parse_testsuite(ts) + ts_dict["testsuites"].append(inner_testsuite) + + elif hasattr(testsuite, "testcase"): + + for tc in testsuite.testcase: + new_testcase = parse_testcase(tc) + ts_dict["testcases"].append(new_testcase) + + return ts_dict + + # main flow starts here + + junit_dict = [] + complete_testsuite = parse_testsuite(self.junit_xml_object) + junit_dict.append(complete_testsuite) return junit_dict diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 7518180b4..33372432e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,29 +1,15 @@ +# fmt: off import sphinx - # from docutils import nodes from pkg_resources import parse_version -from sphinxcontrib.needs.api import ( - add_dynamic_function, - add_extra_option, - add_need_type, -) +from sphinxcontrib.needs.api import add_dynamic_function, add_extra_option, add_need_type from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective -from sphinxcontrib.test_reports.directives.test_file import TestFile, TestFileDirective -from sphinxcontrib.test_reports.directives.test_report import ( - TestReport, - TestReportDirective, -) -from sphinxcontrib.test_reports.directives.test_suite import ( - TestSuite, - TestSuiteDirective, -) - from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective -from sphinxcontrib.test_reports.directives.test_results import ( - TestResults, - TestResultsDirective, -) +from sphinxcontrib.test_reports.directives.test_file import TestFile, TestFileDirective +from sphinxcontrib.test_reports.directives.test_report import TestReport, TestReportDirective +from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective +from sphinxcontrib.test_reports.directives.test_suite import TestSuite, TestSuiteDirective from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link @@ -33,6 +19,7 @@ else: import logging +# fmt: on VERSION = "0.3.6" diff --git a/packages/sphinx-test-reports/tests/data/pytest_nested_example.xml b/packages/sphinx-test-reports/tests/data/pytest_nested_example.xml new file mode 100644 index 000000000..86607e36b --- /dev/null +++ b/packages/sphinx-test-reports/tests/data/pytest_nested_example.xml @@ -0,0 +1,40 @@ + + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a8a0e950> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a8a0ea10> + + + + + + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84a2cd0> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84ae250> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84ae950> + + + + + /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84bf090> + + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index 47b65de44..94d563dde 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py index 1ece0bc44..56eec3eb5 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py index 421e09c59..6e3bc5da1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index 421e09c59..6e3bc5da1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index 421e09c59..6e3bc5da1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index 421e09c59..6e3bc5da1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index 47b65de44..94d563dde 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py index 47b65de44..94d563dde 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # testreport test docs documentation build configuration file, created by # sphinx-quickstart on Tue Mar 28 11:37:14 2017. From 952f45c83e89a2896a90d2f85919c417434e086a Mon Sep 17 00:00:00 2001 From: Martin <54633070+mawieland@users.noreply.github.com> Date: Tue, 24 May 2022 13:13:03 +0200 Subject: [PATCH 055/159] adding support for custom templates for testreports (useblocks/sphinx-test-reports#33) * proposed fix for issue useblocks/sphinx-test-reports#30 * removed redundant TODOs * added local code inspection * fixed code inspection * isort and black are fighting for import statement formatting * fixing Jinja2 import error * added custom template for testreport * removed TODOs * changed to simple filename in conf.py again * added PR changes * added simple test for order in custom template --- packages/sphinx-test-reports/docs/conf.py | 3 + .../docs/configuration.rst | 10 + .../docs/custom_test_report_template.txt | 54 +++++ .../docs/directives/test_report.rst | 6 - .../test_reports/directives/test_report.py | 24 +- .../directives/test_report_template.txt | 10 + .../sphinxcontrib/test_reports/exceptions.py | 6 + .../test_reports/test_reports.py | 8 + .../doc_test/custom_tr_template/Makefile | 20 ++ .../tests/doc_test/custom_tr_template/conf.py | 208 ++++++++++++++++++ .../custom_test_report_template.txt | 54 +++++ .../doc_test/custom_tr_template/index.rst | 8 + .../doc_test/custom_tr_template/make.bat | 36 +++ .../tests/test_custom_template.py | 13 ++ 14 files changed, 451 insertions(+), 9 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/custom_test_report_template.txt create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_template/make.bat create mode 100644 packages/sphinx-test-reports/tests/test_custom_template.py diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index fe95e23b1..87c00adfe 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -64,6 +64,9 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] +# Add a custom test report template. Please add a relative path from this conf.py +# tr_report_template = "./custom_test_report_template.txt" + # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index cdb28d56c..744956451 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -69,3 +69,13 @@ By default ``tr_case`` is set to:: Please read :ref:`tr_file` for more details. +tr_report_template +------------------ + +``tr_report_template`` allows to specify a custom template for testcase visualisation. Provide a relative path +(from conf.py) or provide an absolute path to your template. + +**A simple example with a scrambled order:** + +.. literalinclude:: ./custom_test_report_template.txt + :language: rst \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/custom_test_report_template.txt b/packages/sphinx-test-reports/docs/custom_test_report_template.txt new file mode 100644 index 000000000..75009b475 --- /dev/null +++ b/packages/sphinx-test-reports/docs/custom_test_report_template.txt @@ -0,0 +1,54 @@ +**Test file**: {file} + +**Template used**: {template_path} + +**Imported data** + +.. {file_type}:: {title} + :id: {id}{links_string} + :tags: {tags} + :file: {file} + :auto_suites: + :auto_cases: + + {content} + + +**Test cases**: + +.. needtable:: + :filter: '{id}' in tags and type == '{case_need}' + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Failed test cases**: + +.. needtable:: + :filter: '{id}' in tags and 'failure' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Skipped test cases**: + +.. needtable:: + :filter: '{id}' in tags and 'skipped' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + + +**Statistics** + +| Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` +| Test cases: :need_count:`'{id}' in tags and type=='{case_need}'` +| Failed test cases: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Skipped test cases: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` + + +Template +-------- +The following rst-code is used to generate the report. + +.. literalinclude:: ../custom_test_report_template.txt + :language: rst + + diff --git a/packages/sphinx-test-reports/docs/directives/test_report.rst b/packages/sphinx-test-reports/docs/directives/test_report.rst index dc0eea755..a42ddfbc1 100644 --- a/packages/sphinx-test-reports/docs/directives/test_report.rst +++ b/packages/sphinx-test-reports/docs/directives/test_report.rst @@ -53,9 +53,3 @@ Result: Used as simple link target. See Sphinx-Needs for details. -Template --------- -The following rst-code is used to generate the report. - -.. literalinclude:: ../../sphinxcontrib/test_reports/directives/test_report_template.txt - :language: rst diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 4beb3be53..e2622ec9b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -5,6 +5,7 @@ from docutils.parsers.rst import directives from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective +from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError # fmt: on @@ -39,9 +40,25 @@ def run(self): self.prepare_basic_options() self.load_test_file() - with open( - os.path.join(os.path.dirname(__file__), "test_report_template.txt") - ) as template_file: + # if user provides a custom template, use it + tr_template = self.app.config.tr_report_template + + template_path = "" + + if os.path.isabs(tr_template): + template_path = tr_template + + else: + template_path = os.path.join(self.app.confdir, os.path.relpath(tr_template)) + + if not os.path.isfile(template_path): + raise InvalidConfigurationError( + "could not find a template file with name {} in conf.py directory".format( + template_path + ) + ) + + with open(template_path) as template_file: template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: @@ -61,6 +78,7 @@ def run(self): "links_string": links_string, "title": self.test_name, "content": self.content, + "template_path": template_path, } template_ready = template.format(**template_data) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt index 22e6bc0b3..ec19c3cd6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt @@ -1,5 +1,7 @@ **Test file**: {file} +**Template used**: {template_path} + **Statistics** | Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` @@ -39,3 +41,11 @@ :auto_cases: {content} + + +Template +-------- +The following rst-code is used to generate the report. + +.. literalinclude:: ../../sphinxcontrib/test_reports/directives/test_report_template.txt + :language: rst diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py index 4b90f1461..0995cdec6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py @@ -23,3 +23,9 @@ class TestReportIncompleteConfiguration(SphinxWarning): """ Raised if given arguments / options are not correct configured """ + + +class InvalidConfigurationError(SphinxError): + """ + Raised if wrong values given in conf.py + """ diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 33372432e..8274115cb 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,4 +1,6 @@ # fmt: off +import os + import sphinx # from docutils import nodes from pkg_resources import parse_version @@ -52,6 +54,12 @@ def setup(app): "html", ) + # adds option for custom template + template_dir = os.path.join( + os.path.dirname(__file__), "directives/test_report_template.txt" + ) + app.add_config_value("tr_report_template", template_dir, "html") + # nodes app.add_node(TestResults) app.add_node(TestFile) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py new file mode 100644 index 000000000..641cb0869 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py @@ -0,0 +1,208 @@ +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/stable/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import os +# import sys +import datetime +import os + +# sys.path.insert(0, os.path.abspath('.')) + +# -- Project information ----------------------------------------------------- + +project = "sphinx-test-reports" +now = datetime.datetime.now() +copyright = '2017-{year}, team useblocks'.format( + year=now.year +) +author = "team useblocks" + +# The short X.Y version +version = "0.3" +# The full version, including alpha/beta/rc tags +release = "0.3.6" + + +# -- 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 = [ + "sphinxcontrib.needs", + "sphinxcontrib.test_reports", + "sphinxcontrib.plantuml", + "sphinx_panels", +] + +cwd = os.getcwd() +plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") + +# If we are running on windows, we need to manipulate the path, +# otherwise plantuml will have problems. +if os.name == "nt": + plantuml = plantuml.replace("/", "\\") + plantuml = plantuml.replace("\\", "\\\\") + +plantuml_output_format = "png" + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# Add a custom test report template. Please add a relative path from this conf.py +tr_report_template = "./custom_test_report_template.txt" + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + + +# -- 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 = "alabaster" + +# 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 = { + "logo": "sphinx-test-reports-logo.png", + "logo_name": False, + # 'description': "an extension for sphinx", + "logo_text_align": "center", + "github_user": "useblocks", + "github_repo": "sphinx-test-reports", + "github_banner": True, + "github_button": False, + "fixed_sidebar": True, + "extra_nav_links": { + "needs@PyPi": "https://pypi.python.org/pypi/sphinx-test-reports", + "needs@github": "https://github.com/useblocks/sphinx-test-reports", + "needs@travis": "https://travis-ci.org/useblocks/sphinx-test-reports", + }, +} + +# 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"] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +html_sidebars = { + "**": ["about.html", "navigation.html"], +} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "sphinx-test-reportsdoc" + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "sphinx-test-reports.tex", + "sphinx-test-reports Documentation", + "team useblocks", + "manual", + ), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + [author], + 1, + ) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + author, + "sphinx-test-reports", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt new file mode 100644 index 000000000..75009b475 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt @@ -0,0 +1,54 @@ +**Test file**: {file} + +**Template used**: {template_path} + +**Imported data** + +.. {file_type}:: {title} + :id: {id}{links_string} + :tags: {tags} + :file: {file} + :auto_suites: + :auto_cases: + + {content} + + +**Test cases**: + +.. needtable:: + :filter: '{id}' in tags and type == '{case_need}' + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Failed test cases**: + +.. needtable:: + :filter: '{id}' in tags and 'failure' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Skipped test cases**: + +.. needtable:: + :filter: '{id}' in tags and 'skipped' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + + +**Statistics** + +| Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` +| Test cases: :need_count:`'{id}' in tags and type=='{case_need}'` +| Failed test cases: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Skipped test cases: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` + + +Template +-------- +The following rst-code is used to generate the report. + +.. literalinclude:: ../custom_test_report_template.txt + :language: rst + + diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst new file mode 100644 index 000000000..f780025e4 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst @@ -0,0 +1,8 @@ +Basic Document +============== + +.. test-report:: My Report + :id: REPORT + :file: ../data/pytest_data.xml + :tags: my_report, awesome + :links: SPEC_001 \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/make.bat b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_custom_template.py b/packages/sphinx-test-reports/tests/test_custom_template.py new file mode 100644 index 000000000..4624f4bf6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_custom_template.py @@ -0,0 +1,13 @@ +from sphinx_testing import with_app + + +@with_app(buildername="html", srcdir="doc_test/custom_tr_template") +def test_custom_template(app, status, warning): + app.build() + html = (app.outdir / "index.html").read_text() + + # assert changed order when creating a testreport html page + pos1 = html.index("Imported data") + pos2 = html.index('
Test suites:') + + assert pos1 < pos2 From ca8941fd7096da1f5facf70921e629fd71372593 Mon Sep 17 00:00:00 2001 From: Martin <54633070+mawieland@users.noreply.github.com> Date: Tue, 24 May 2022 13:13:59 +0200 Subject: [PATCH 056/159] fixed broken link in index.rst + small typos (useblocks/sphinx-test-reports#34) * fixed broken link in index.rst + small typos * removed debugging files Co-authored-by: Martin --- packages/sphinx-test-reports/docs/changelog.rst | 2 +- packages/sphinx-test-reports/docs/directives/test_file.rst | 3 ++- packages/sphinx-test-reports/docs/directives/test_report.rst | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 72007d20c..f3035c1c9 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -28,7 +28,7 @@ Changelog 0.3.3 ----- -* Improvement: Addes :ref:`test_report` directive. +* Improvement: Added :ref:`test-report` directive. * Improvement: Introduces :ref:`tr_file`, :ref:`tr_suite` and :ref:`tr_case` options to customize names. * Improvement: Not found files will throw warning instead of exception so that build goes on. * Improvement: Provides css_classes ``tr_passed``, ``tr_failure``, ``tr_skipped`` to colorize needs and their rows in tables. diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index 416f18079..3493383e1 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -99,7 +99,7 @@ Basics :id: TESTFILE_1 This test_file has very common data. - Some options are net set, therefore their value is ``-1`` + Some options are not set, therefore their value is ``-1`` .. test-file:: pytest test data :file: ../tests/data/pytest_data.xml @@ -160,3 +160,4 @@ Autogenerated suite and cases :auto_suites: :auto_cases: :tags: auto + diff --git a/packages/sphinx-test-reports/docs/directives/test_report.rst b/packages/sphinx-test-reports/docs/directives/test_report.rst index a42ddfbc1..82c9d20f7 100644 --- a/packages/sphinx-test-reports/docs/directives/test_report.rst +++ b/packages/sphinx-test-reports/docs/directives/test_report.rst @@ -1,4 +1,4 @@ -.. _test_report: +.. _test-report: test-report =========== From 8aeaee2909f72bbacfa789bf91e2845377660d77 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 9 Jun 2022 07:47:28 +0200 Subject: [PATCH 057/159] Preparation for release 3.7 --- packages/sphinx-test-reports/docs/changelog.rst | 9 ++++++++- packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/setup.py | 5 ++++- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index f3035c1c9..614cea84a 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,10 +1,17 @@ Changelog ========= -0.3.7 +0.3.8 ----- :Released: under development +0.3.7 +----- +:Released: 09.06.2022 + +* Improvement: Nested test suites are supported (like in Robot Framework 5.0) + `#30 `_ + 0.3.6 ----- :Released: 12.11.2021 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 87c00adfe..03d21c666 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -30,7 +30,7 @@ # The short X.Y version version = "0.3" # The full version, including alpha/beta/rc tags -release = "0.3.6" +release = "0.3.7" # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 6c77ccbe0..1257e7a64 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -10,7 +10,10 @@ setup( name="sphinx-test-reports", - version="0.3.6", + + # Update also test_reports.py, conf.py and changelog! + version="0.3.7", + url="http://github.com/useblocks/sphinx-test-reports", download_url="http://pypi.python.org/pypi/sphinx-test-reports", license="MIT", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 8274115cb..25440c5fd 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -23,7 +23,7 @@ # fmt: on -VERSION = "0.3.6" +VERSION = "0.3.7" def setup(app): From 5046b9f8a9739a7158e20eab8b3c91245873810e Mon Sep 17 00:00:00 2001 From: Duodu Randy Date: Fri, 15 Jul 2022 22:30:28 +0000 Subject: [PATCH 058/159] Sphinx-Test-Report supports SN 1.0.1 --- .../.github/workflows/ci.yaml | 4 +- .../sphinx-test-reports/doc-requirements.txt | 5 +- .../docs/_static/sphinx-test-reports-logo.png | Bin 17449 -> 59854 bytes .../docs/_static/sphinx_collections_logo.png | Bin 8710 -> 111730 bytes .../sphinx-test-reports/docs/changelog.rst | 2 +- packages/sphinx-test-reports/docs/conf.py | 21 +- .../docs/configuration.rst | 2 +- packages/sphinx-test-reports/docs/filter.rst | 12 +- .../sphinx-test-reports/docs/functions.rst | 2 +- packages/sphinx-test-reports/docs/index.rst | 191 ++++++++++-------- packages/sphinx-test-reports/docs/install.rst | 6 +- packages/sphinx-test-reports/noxfile.py | 11 +- packages/sphinx-test-reports/setup.py | 2 +- .../test_reports/directives/test_case.py | 2 +- .../test_reports/directives/test_common.py | 2 +- .../test_reports/directives/test_file.py | 2 +- .../test_reports/directives/test_suite.py | 2 +- .../test_reports/test_reports.py | 8 +- .../tests/doc_test/basic_doc/conf.py | 2 +- .../tests/doc_test/custom_tr_template/conf.py | 4 +- .../tests/doc_test/custom_types/conf.py | 2 +- .../tests/doc_test/empty_doc/conf.py | 2 +- .../tests/doc_test/env_report_doc/conf.py | 2 +- .../doc_test/env_report_doc_default/conf.py | 2 +- .../tests/doc_test/env_report_doc_raw/conf.py | 2 +- .../doc_test/env_report_warnings/conf.py | 2 +- .../tests/doc_test/pytest_6_2/conf.py | 2 +- 27 files changed, 167 insertions(+), 127 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 4f9ebfa90..81faafeeb 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -7,8 +7,8 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - python-version: ["3.6", "3.8", "3.9" ] # No "3.10", as nose seem to have problems with it - sphinx-version: ['3.5', '4.1', '4.3'] + python-version: ["3.6", "3.8", "3.9"] # No "3.10", as nose seem to have problems with it + sphinx-version: ['3.5', '4.2', '4.3', '5.0'] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 5f975923d..98b9e586b 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -2,5 +2,6 @@ sphinx>=2.0 sphinxcontrib-needs>=0.7.2 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml -sphinx-panels >= 0.6 -Jinja2<3.1 \ No newline at end of file +sphinx_design +Jinja2==3.1.2 +docutils~=0.18.1 \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png b/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png index 87418fbb7375e0652f6acb8003a02a8e7a98eebd..b6cd19a909c8e6a3e7830ad5ca22038196e8f57e 100644 GIT binary patch literal 59854 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 literal 17449 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

yF(r4w=c+b@9)aIT%nz&x4c|GQA|d}p?suu zRZ#dHz-}}dTC>{&rg$=lZZdd#>|KvbKh*$|NB*V)HYUTA%)sJA+4S6T%>Azz zl`~b7Q8UVo-d9~mo|VsT#FW(!q27JxAYv-OfqL^VJ8_6iHg`?d`?fNtue3T=t}rY%$Ksa zJ_NRYL}cWBA_>xQ7v1ze(9>k)ujI= zY-#xxI3oZ!=HUxFo$CtGxVW?`IL0Xn3Hr;LK@9$jfc2sE!HD)BkAwFp!x(85D90EH zLZ@NDuH6@c=>0x1ZrUI0){hc06EsSN4JMdUbWEnuNY1P>YbU#cqs#^(V=*kN!nckWaMQ-8qf_qD<4+RT7A*;>6IHuAZyk^)0x0MY@% z)Bt!Y#7BKErivspaw=ass%Hw6R_pMFWz{0B$DZ&av};EYE8&% zN2{?!ftVk8f19EosS=fHZf3^eI4Akjc1#^v1)yZ$n?A3h_l^{RbNrk+ue!Z%K~F~> z{9^lQ5wOz(2{Cdtw0q;Qm=AVknz1Ej-~zoO0(g%W@Oecg^{M3Kge-? zlv9lRt-#B_d_dvFpp*gV`v->CIS4I}^?$yHWdVF8yN%}Fy>3t~n+xkNtxH1*CBR{z z?+UAVefG1hM=iNXvUiY15l;w3%Zj{?UPfXlQ`~?2SaC2{R|73QuD;&=csot*#4s5l zH`-=q0>v>X3*{&y`let#J_P@tAgdZaYkPOM|Et|}T`dxvsl_W0v|5bnpi%Gq!e?KW zj6!Lpay_(xgrEcyLm(g-(CphB^~`tM2M4!7QXoUApnPtdiERsJW@aIxm&Z@fw}0Q7 z%P*`W2Coo7Y1XAD`M=+h2+!UnagkbF4`;}R-JczPFEf(&1l*64-DwmdUB&}jF*`L(!v(z0_&HXvgy(MMnV`flUP( zU@Rad05ieRTA@on5Ef1Xjp7AKmj0eMNSa_Kld&1J`k`Z@Wbnpqafqs+<_YBygL}L> zCanL{wr#4`D;IS5w5^f~ou?TW7$GlwPBK+-QF7cdII&>|HYil{$qxsEll>|d{a0JJ za%YO@i@QSZy)!#4RQ5R6;}jJ;d-gDJ1VbeQAM2#LeT0dBmSGNn!KRdLZ?S72%=Ki# zzCP5x{z3~>yXEJP++o4aZftxzxq=>SvcKFXwK&i{{r$NhC#+mfSX_PZbJA!EXcH#T z{v~jpxwoP?7i`l6&2qS7^0hP0pwUqs*rP9fCpGKjR z7qP@a9PX|eS6_dl_`df* z`tTy=g-@=>?0>dxL~JY*aIF2hR2XK;i(P2NQm8~7h`^GvvLWD-lHrrH4dQgYr+9*} zdTwAK37oDuM=hf%jJ=Mj>eU7dfZMMcQz1n6_g7s3W$v^;DnwrEZfq0>s22wGXmuzX zq8lddUzkzfbPhyhdNwv?#dw6A%W|(cs3HGCxzk|HkbvRAnEj&CDYL5k(UAY)eOez7 zK_s34Casq>MgRs2hOJ2IBqPHqp@5vioZVbz0%yM_J!<_xWc6|OQ3VI8-PwV{!rVe;}+Wy!X)1EDiM&X^|QORl&(grq1j zwDY?RNKFKIv5-)R<#SB0a9xX*TX^u`K?tBUn_WQx0kUy}N2GWWpFYvv6LMEI8w0(X z?8Ao->0nTxU@oe7G<#~sZ)Nf1%`QsFzE&P4tS zVHdXB!m5v4-RimBK=b1|wz=h#rGQ%?ih0*K(6O_SRv;IAaco^2Qq2>1_Lqn9btJHV zxU8sy%7t2jxVX4Q$UrTi0gNii2J7cRYQup9o%&(enGcZLg<5+D2MZZ0BF2r?Tk3*> zRQxmeE*dN+Mu)ZnvJWWT%Fsd^7-eLnKT<1Xwnwp!^Y#MixCF`EWa)}sgAGBsycy^T zL6Ol)JF2tpL}TRTYeC#byP2PaOsXfIa#9Rt;sMw97UH=VkD=>z@@=US9qTtBaDd>tBOudhEo8m~Y4P|1_nS)Fg(Uq2qX1x6vOO zUE97vXlE%i0Ls`-2RkKxeUVZVpeftYA8DhmC2ELh9KBFBZ$xQm1+XEeDEXh5tB;<& znHBpi(P%S}y@uqNV4Um!{kc&r6i-h){MADHZU5^x(laC_1RM+=*}YC>=kQtAfh+`K z$?heQ{4Hm0yA{XADzpv>c9UtTjQ?JpKB zm)77-0>#3#p`@pu@qWOihli}6fY=Qqs*}dt-IWa0ndnaqsg@}K04B2fubXUaL}-6&SNrxh0wbWLr1CaVn**+5S7c^UmlADg9a=Cz+4OuAHKaSDEPt5azN(MYy6o!!kUX={Y0VHRf^r$ zMY_I(Rd$1E8N4bYV*5Va{ELLR&<|afOqF^cm$hM~`H&unRS60Tf>L%oQ+tHW)J&gh zjmGC|H#4a7j5l4{n+Dxi4=F;W66}=LHwc`gv;B=d6g_3AuP(uP1ga4a=lTr{@>>h$NJGs+DewX3~X#4 zNFFLXKx>9{wV0+R3IPszOyQC+Zg=rce=%WIh#?+AMimdZi6uxkAVm zx>pPMMx)?Qf=7cy2>p~GF$Qi z7cOUj$!OW@7`eSe9U^5cly=(9XCgf)Tpe z15Qq8BZLsbwJ+@i+4<+o$#y{Hd|rnI-M4zDrjo&0(g4d3+_PqIGDF_I>u=jyS!o0J z27skZnrk`Zu){7rW}qeutIN_3OhYrk9=ly-b33224cJ5eOE!Vrg1}LQ_err%je8MttT?mnrZJu%sCkm`Y|)gJBgz&< z!4pO0EBGmY?X*fSgBcB?4PS0EmZ`8*JvWw=l;rSeH{+7F$oXZIUwN~biYu!y@jL&) za^HQ>;PP?zF!Pii!DyNFf0YAix-Umxk?vYJC3iZ2NTB#1!7(DM)RpOizz3>fcUMA| z1c0p!pjQWH=Xv*gP~;@YmG8>2XU)NTBR8xdT?V;a(&fg(7I(ZYNOenv!FsLyBARHB|)nW zxBkTMyciN2dk2LpfU7kDk!l9SAq8I)VMWPf%LI4Jo|u#r9zBqwb{`eb1>@*O$<*6; zV4=bvWnpo%Xz4C)!%}<)#!7sm4=BE?r%FSw2IDdLmj3;_vtbnTRhmSC!=w}Eo|mXJ z;_B!+ogm$BHt=YOmU5q0|1_+F=++)2+xj6vTr$asu<8$l)~U;H`x>r^msl9-K#H(K!_cBbBx-3LxC=_SKm)<6$zO%+6DJ$yt_>4@jM|BbIa%Oi zBQV{X^8#`e6L`YmOOp^0fscCw*_--?l@XmGr>|hlh3!RMqLLR+#EA*x-#6u=?g=2b zIY781`28J;7H0}ox~saSOidw>5qy�MWE}mWMqL$9IZO3#8yo4P;Md!K?whq$STh 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 z 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 literal 8710 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 diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 614cea84a..579c0d320 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -50,7 +50,7 @@ Changelog 0.3.0 ----- -* Improvement: Using `sphinx-needs `_ for data representation +* Improvement: Using `sphinx-needs `_ for data representation and filtering. * Improvement: New directives :ref:`test-file`, :ref:`test-suite` and :ref:`test-case`. * Improvement: New possibilities to :ref:`filter test data `. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 03d21c666..486a468b8 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -43,10 +43,10 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - "sphinxcontrib.needs", + "sphinx_needs", "sphinxcontrib.test_reports", "sphinxcontrib.plantuml", - "sphinx_panels", + "sphinx_design", ] cwd = os.getcwd() @@ -81,7 +81,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -206,3 +206,18 @@ "Miscellaneous", ), ] + +# LINKCHECK config +# https://www.sphinx-doc.org/en/master/usage/configuration.html?highlight=linkcheck#options-for-the-linkcheck-builder +linkcheck_ignore = [ + r"http://localhost:\d+", + r"http://127.0.0.1:\d+", +] + +linkcheck_request_headers = { + "*": { + "User-Agent": "Mozilla/5.0", + } +} + +linkcheck_workers = 5 diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 744956451..b6adade7e 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -36,7 +36,7 @@ All of the following arguments must be set: The parameters **2-6** are used to configure the underlying Sphinx-needs. See it's -`documentation about needs_types `_ +`documentation about needs_types `_ for more details. .. _tr_suite: diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index 34f5e2f30..b18e2ede2 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -4,12 +4,12 @@ Filtering Test Data =================== You can filter the documented test-data by using the directives -`needlist `_, -`needtable `_ and -`needflow `_. +`needlist `_, +`needtable `_ and +`needflow `_. These filter functions and others are provided by the Sphinx extension -`Sphinx-Needs `_. +`Sphinx-Needs `_. Take a look to figure out what else is possible to customize your way of working with test cases. .. contents:: Contents @@ -41,7 +41,7 @@ Not all options are set for all created needs. E.g. ``test_file`` doesn't include ``case``, as it is not related to a single test case. The filtering possibilities are really powerful, so take a look into -`Filtering needs `_ to figure out how to get +`Filtering needs `_ to figure out how to get most out of your test data. .. _needtable_filter: @@ -89,7 +89,7 @@ Usage:: In this case, we check that the ``cases`` value contains a number and this number must ne bigger as 4. Take a look into the -`Filter string section `_ +`Filter string section `_ of the Sphinx-Needs documentations for more details and ideas how to use it. diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst index a1d46d4b4..cd1cce2d3 100644 --- a/packages/sphinx-test-reports/docs/functions.rst +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -3,7 +3,7 @@ Dynamic functions Sphinx-Test-Reports provides dynamic functions for Sphinx-Needs. -Read chapter `Dynamic function `_ +Read chapter `Dynamic function `_ from Sphinx-Needs documentation to know how to use them. diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 1b64c8b29..563ed56e9 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -53,7 +53,7 @@ Take a look into our :ref:`pytest example ` to see the complete (:need_count:`'pytest_sphinx' in tags` test cases!). The objects created by ``Sphinx-Test-Reports`` are based on -`Sphinx-Needs `_. +`Sphinx-Needs `_. So all features for filtering, sorting and showing data is supported. As example, here is a shorten list of tests results from the Sphinx-pytest example: @@ -85,116 +85,143 @@ Content Sphinx-Needs Ecosystem ---------------------- -In the last years additional information and extensions have been created, which are based or related to Sphinx-Needs: +In the last years, we have created additional information and extensions, which are based on or related to Sphinx-Needs: +.. grid:: 2 + :gutter: 2 -.. panels:: - :container: container-lg pb-3 - :column: col-lg-6 col-md-6 col-sm-4 col-xs-4 p-2 - :img-top-cls: pl-5 pr-5 pt-2 pb-2 + .. grid-item-card:: + :columns: 12 6 6 6 + :link: https://sphinx-needs.com + :img-top: /_static/sphinx-needs-card.png + :class-card: border - --- - :img-top: /_static/sphinx-needs-card.png - :img-top-cls: + bg-light + Sphinx-Needs.com + ^^^^^^^^^^^^^^^^ + The website presents the essential Sphinx-Needs functions and related extensions. - Sphinx-Needs.com - ^^^^^^^^^^^^^^^^ - Webpage to present most important Sphinx-Needs functions and related extensions. + Also, it is a good entry point to understand the benefits and get an idea about the complete ecosystem of Sphinx-Needs. + +++ - Good entrypoint to understand the benefits and to get an idea about the complete ecosystem of Sphinx-Needs. + .. button-link:: https://sphinx-needs.com + :color: primary + :outline: + :align: center + :expand: + + :octicon:`globe;1em;sd-text-primary` Sphinx-Needs.com - +++ + .. grid-item-card:: + :columns: 12 6 6 6 + :link: https://sphinx-needs.readthedocs.io/en/latest/ + :img-top: /_static/sphinx-needs-card.png + :class-card: border + + Sphinx-Needs + ^^^^^^^^^^^^ + Create, update, link, filter and present need objects like Requirements, Specifications, Bugs and many more. + + The base extension provides all of its functionality under the MIT license for free. + +++ - .. link-button:: https://sphinx-needs.com - :type: url - :text: Sphinx-Needs.com - :classes: btn-secondary btn-block + .. button-link:: https://sphinx-needs.readthedocs.io/en/latest/ + :color: primary + :outline: + :align: center + :expand: - --- - :img-top: /_static/sphinx-needs-card.png + :octicon:`book;1em;sd-text-primary` Technical Docs - Sphinx-Needs - ^^^^^^^^^^^^ - Base extension, which provides all of its functionality under the MIT license for free. + .. grid-item-card:: + :columns: 12 6 6 6 + :link: https://useblocks.com/sphinx-needs-enterprise/ + :img-top: /_static/sphinx-needs-enterprise-card.png + :class-card: border - Create, update, link, filter and present need objects like Requirements, Specifications, Bugs and much more. + Sphinx-Needs Enterprise + ^^^^^^^^^^^^^^^^^^^^^^^ + Synchronize Sphinx-Needs data with external, company internal systems like CodeBeamer, Jira or Azure Boards. - +++ + Provides scripts to baseline data and makes CI usage easier. + +++ - .. link-button:: https://sphinxcontrib-needs.readthedocs.io/en/latest/ - :type: url - :text: Technical docs - :classes: btn-secondary btn-block + .. button-link:: http://useblocks.com/sphinx-needs-enterprise/ + :color: primary + :outline: + :align: center + :expand: - --- - :img-top: /_static/sphinx-needs-enterprise-card.png + :octicon:`book;1em;sd-text-primary` Technical Docs - Sphinx-Needs Enterprise - ^^^^^^^^^^^^^^^^^^^^^^^ - Synchronizes Sphinx-Needs data with external, company internal systems like CodeBeamer, Jira or Azure Boards. + .. grid-item-card:: + :columns: 12 6 6 6 + :link: https://sphinx-test-reports.readthedocs.io/en/latest/ + :img-top: /_static/sphinx-test-reports-logo.png + :class-card: border - Provides scripts to baseline data and make CI usage easier. - +++ + Sphinx-Test-Reports + ^^^^^^^^^^^^^^^^^^^ + Extension to import test results from XML files as **need** objects. - .. link-button:: http://useblocks.com/sphinx-needs-enterprise/ - :type: url - :text: Technical docs - :classes: btn-secondary btn-block + Created **need** objects can be filtered and linked to specification objects. + +++ - --- - :img-top: /_static/sphinx-test-reports-card.png + .. button-link:: https://sphinx-test-reports.readthedocs.io/en/latest/ + :color: primary + :outline: + :align: center + :expand: - Sphinx-Test-Reports - ^^^^^^^^^^^^^^^^^^^ - Extension to import test results from xml files as need objects. + :octicon:`book;1em;sd-text-primary` Technical Docs - Created need objects can be filtered and e.g. linked to specification objects. - +++ - .. link-button:: https://sphinx-test-reports.readthedocs.io/en/latest/ - :type: url - :text: Technical docs - :classes: btn-secondary btn-block +Other Sphinx extensions +~~~~~~~~~~~~~~~~~~~~~~~ +During the use of Sphinx-Needs in popular companies’ internal projects, +we have created other Sphinx extensions to support the work of teams in the automotive industry: +.. grid:: 2 + :gutter: 2 -Further Sphinx extensions -^^^^^^^^^^^^^^^^^^^^^^^^^ -During the work with Sphinx-Needs in bigger, company internal projects, other Sphinx extensions have been created -to support the work in teams of the automotive industry: + .. grid-item-card:: + :columns: 12 6 6 6 + :link: https://sphinx-collections.readthedocs.io/en/latest/ + :img-top: /_static/sphinx_collections_logo.png + :class-card: border -.. panels:: - :container: container-lg pb-3 - :column: col-lg-6 col-md-6 col-sm-4 col-xs-4 p-2 - :img-top-cls: pl-5 pr-5 pt-2 pb-2 + Sphinx Collections + ^^^^^^^^^^^^^^^^^^ + Extension to collect or generate files from different sources and include them in the Sphinx source folder. - --- - :img-top: /_static/sphinx_collections_logo.png + It supports sources like Git repositories, Jinja based files or symlinks. + +++ + .. button-link:: https://sphinx-collections.readthedocs.io/en/latest/ + :color: primary + :outline: + :align: center + :expand: - Extension to collect or generate files from different sources and include them into the Sphinx source folder. + :octicon:`book;1em;sd-text-primary` Technical Docs - Sources like git repositories, jinja based files or symlinks are supported. + .. grid-item-card:: + :columns: 12 6 6 6 + :link: https://sphinx-bazel.readthedocs.io/en/latest/ + :img-top: /_static/sphinx_bazel_logo.png + :class-card: border - +++ + Sphinx Bazel + ^^^^^^^^^^^^ + Provides a Bazel domain in Sphinx documentation and allows the automated import of Bazel files and their documentation. + +++ - .. link-button:: https://sphinx-collections.readthedocs.io/en/latest/ - :type: url - :text: Technical docs - :classes: btn-secondary btn-block + .. button-link:: https://sphinx-bazel.readthedocs.io/en/latest/ + :color: primary + :outline: + :align: center + :expand: - --- - :img-top: /_static/sphinx_bazel_logo.png - - - Provides a Bazel domain in Sphinx documentations and allows the automated import of Bazel files and their - documentation. - - +++ - - .. link-button:: https://sphinx-bazel.readthedocs.io/en/latest/ - :type: url - :text: Technical docs - :classes: btn-secondary btn-block + :octicon:`book;1em;sd-text-primary` Technical Docs Motivation @@ -208,7 +235,7 @@ the parameters of the `ISO 26262 `_ sta for safety critical software in automotive companies. Other tools are: -`sphinx-needs `__, +`sphinx-needs `__, `sphinx-collections `__ and `tox-envreport `__. diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst index a918d99c1..bcbef055d 100644 --- a/packages/sphinx-test-reports/docs/install.rst +++ b/packages/sphinx-test-reports/docs/install.rst @@ -5,18 +5,18 @@ Install ``Sphinx-Test-Report`` via ``pip install sphinx-test-reports``. After that the extension must to be added to the ``conf.py`` file:: - extensions = ['sphinxcontrib.needs', + extensions = ['sphinx_needs', 'sphinxcontrib.test_reports', 'sphinxcontrib.plantuml'] Please note, ``Sphinx-Test-Report`` is based on the -`Sphinx-needs extension `_. +`Sphinx-needs extension `_. Therefore it must also be added to the ``extensions`` list! And same for `PlantUML `_, which is important to render flowcharts for filtered test-cases. More details can be find in the -`installation-guide `_ +`installation-guide `_ of ``Sphinx-Needs``. diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 99f82abc9..330f1bb2f 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -1,8 +1,8 @@ import nox from nox import session -PYTHON_VERSIONS = ["3.6", "3.8", "3.9", "3.10"] -SPHINX_VERSIONS = ["3.5", "4.1", "4.3"] +PYTHON_VERSIONS = ["3.6", "3.8", "3.9"] +SPHINX_VERSIONS = ["3.5", "4.2", "4.3", "5.0"] TEST_DEPENDENCIES = [ "nose", "sphinx_testing", @@ -16,10 +16,7 @@ def is_supported(python: str, sphinx: str) -> bool: - - return not ( - (python == "3.6" and float(sphinx) > 3.0) or (python == "3.10" and float(sphinx) < 4.3) # fmt: skip - ) + return not (python == "3.6" and float(sphinx) > 3.0) # fmt: skip def run_tests(session, sphinx): @@ -49,7 +46,7 @@ def lint(session): def linkcheck(session): session.install(".") # LinkCheck cn handle rate limits since Sphinx 3.4, which is needed as - # our doc has to many links to github. + # our doc has to many links to GitHub. session.run("pip", "install", "sphinx==3.5.4", silent=True) session.run("pip", "install", "-r", "doc-requirements.txt", silent=True) diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 1257e7a64..630f28cea 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -4,7 +4,7 @@ from setuptools import find_packages, setup -requires = ["sphinx>2.0", "lxml", "sphinxcontrib-needs>=0.5.6"] +requires = ["sphinx>=4.0", "lxml", "sphinx-needs>=1.0.1"] with open(os.path.join(os.path.dirname(__file__), "README.rst")) as file: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index f7d0925a8..85f62009d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -1,6 +1,6 @@ from docutils import nodes from docutils.parsers.rst import directives -from sphinxcontrib.needs.api import add_need +from sphinx_needs.api import add_need from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 7d34fb50f..9f5e9c960 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -6,7 +6,7 @@ from docutils.parsers.rst import Directive from sphinx.util import logging -from sphinxcontrib.needs.api import make_hashed_id +from sphinx_needs.api import make_hashed_id from sphinxcontrib.test_reports.exceptions import SphinxError, TestReportFileNotSetException from sphinxcontrib.test_reports.junitparser import JUnitParser diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index c5be51983..b29f37a73 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -2,7 +2,7 @@ from docutils import nodes from docutils.parsers.rst import directives -from sphinxcontrib.needs.api import add_need +from sphinx_needs.api import add_need import sphinxcontrib.test_reports.directives.test_suite from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 0eaaf2905..2ae5fcbe7 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -2,7 +2,7 @@ from docutils import nodes from docutils.parsers.rst import directives -from sphinxcontrib.needs.api import add_need +from sphinx_needs.api import add_need import sphinxcontrib.test_reports.directives.test_case from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 25440c5fd..09fdb4284 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -4,7 +4,7 @@ import sphinx # from docutils import nodes from pkg_resources import parse_version -from sphinxcontrib.needs.api import add_dynamic_function, add_extra_option, add_need_type +from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective @@ -109,7 +109,7 @@ def sphinx_needs_update(app, *args): # Extra options # For details read - # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_extra_option + # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option add_extra_option(app, "file") add_extra_option(app, "suite") add_extra_option(app, "case") @@ -129,12 +129,12 @@ def sphinx_needs_update(app, *args): # Extra dynamic functions # For details about usage read - # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_dynamic_function + # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function add_dynamic_function(app, tr_link) # Extra need types # For details about usage read - # https://sphinxcontrib-needs.readthedocs.io/en/latest/api.html#sphinxcontrib.needs.api.configuration.add_need_type + # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_need_type add_need_type(app, *app.config.tr_file[1:]) add_need_type(app, *app.config.tr_suite[1:]) add_need_type(app, *app.config.tr_case[1:]) diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index 94d563dde..88f29c03c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py index 641cb0869..38e684dcf 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py @@ -43,10 +43,10 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - "sphinxcontrib.needs", + "sphinx_needs", "sphinxcontrib.test_reports", "sphinxcontrib.plantuml", - "sphinx_panels", + "sphinx_design", ] cwd = os.getcwd() diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py index 56eec3eb5..c4d54eaed 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] tr_file = ["test-path", "testpath", "Test-Path", "TC_", "#999999", "rectangle"] tr_suite = [ diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py index 6e3bc5da1..5ca52338a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index 6e3bc5da1..5ca52338a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index 6e3bc5da1..5ca52338a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index 6e3bc5da1..5ca52338a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index 94d563dde..88f29c03c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py index 94d563dde..88f29c03c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -30,7 +30,7 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinxcontrib.needs", "sphinxcontrib.test_reports"] +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] From 596fee8be265c9732abc5a9e8908c03809cc9121 Mon Sep 17 00:00:00 2001 From: haiyangToAI Date: Mon, 12 Sep 2022 09:04:01 +0200 Subject: [PATCH 059/159] migrated nosetests to pytest --- .../.github/workflows/ci.yaml | 4 +- packages/sphinx-test-reports/.gitignore | 1 + packages/sphinx-test-reports/Makefile | 5 +- .../sphinx-test-reports/doc-requirements.txt | 4 +- .../sphinx-test-reports/docs/changelog.rst | 2 + .../docs/directives/test_case.rst | 8 +- .../docs/directives/test_env.rst | 4 +- .../docs/directives/test_file.rst | 20 +-- .../docs/directives/test_report.rst | 6 +- .../docs/directives/test_results.rst | 6 +- .../docs/directives/test_suite.rst | 4 +- .../docs/examples/casperjs.rst | 2 +- .../docs/examples/index.rst | 12 +- .../docs/examples/pytest.rst | 2 +- .../sphinx-test-reports/docs/functions.rst | 4 +- packages/sphinx-test-reports/docs/index.rst | 2 +- packages/sphinx-test-reports/noxfile.py | 8 +- packages/sphinx-test-reports/setup.py | 2 - .../sphinx-test-reports/test-requirements.txt | 14 +- .../sphinx-test-reports/tests/__init__.py | 0 .../sphinx-test-reports/tests/conftest.py | 50 ++++++ .../tests/doc_test/basic_doc/conf.py | 4 +- .../tests/doc_test/basic_doc/index.rst | 2 +- .../tests/doc_test/custom_tr_template/conf.py | 4 +- .../doc_test/custom_tr_template/index.rst | 2 +- .../tests/doc_test/custom_types/conf.py | 4 +- .../tests/doc_test/custom_types/index.rst | 6 +- .../tests/doc_test/empty_doc/Makefile | 20 --- .../tests/doc_test/empty_doc/conf.py | 162 ------------------ .../tests/doc_test/empty_doc/index.rst | 5 - .../tests/doc_test/empty_doc/make.bat | 36 ---- .../tests/doc_test/env_report_doc/conf.py | 4 +- .../tests/doc_test/env_report_doc/index.rst | 2 +- .../doc_test/env_report_doc_default/conf.py | 4 +- .../doc_test/env_report_doc_default/index.rst | 2 +- .../tests/doc_test/env_report_doc_raw/conf.py | 4 +- .../doc_test/env_report_doc_raw/index.rst | 2 +- .../doc_test/env_report_warnings/conf.py | 4 +- .../doc_test/env_report_warnings/index.rst | 2 +- .../tests/doc_test/pytest_6_2/conf.py | 4 +- .../tests/doc_test/pytest_6_2/index.rst | 2 +- .../{data => doc_test/utils}/casperjs.xml | 0 .../{data => doc_test/utils}/nose_data.xml | 0 .../{data => doc_test/utils}/pytest_data.xml | 0 .../utils}/pytest_data_5_1.xml | 0 .../utils}/pytest_data_6_2.xml | 0 .../utils}/pytest_nested_example.xml | 0 .../utils}/pytest_sphinx_data.xml | 0 .../utils}/pytest_sphinx_data_short.xml | 0 .../utils}/tox-report-short.json | 0 .../{data => doc_test/utils}/tox-report.json | 0 .../{data => doc_test/utils}/xml_data.xml | 0 .../{data => doc_test/utils}/xml_data_2.xml | 0 .../tests/test_basic_doc.py | 24 ++- .../tests/test_custom_template.py | 15 +- .../tests/test_custom_types.py | 15 +- .../sphinx-test-reports/tests/test_dummy.py | 2 - .../tests/test_empty_doc.py | 8 - .../sphinx-test-reports/tests/test_env.py | 49 ++++-- .../tests/test_junit_parser.py | 14 +- 60 files changed, 209 insertions(+), 353 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/__init__.py create mode 100644 packages/sphinx-test-reports/tests/conftest.py delete mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile delete mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py delete mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst delete mode 100644 packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/casperjs.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/nose_data.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/pytest_data.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/pytest_data_5_1.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/pytest_data_6_2.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/pytest_nested_example.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/pytest_sphinx_data.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/pytest_sphinx_data_short.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/tox-report-short.json (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/tox-report.json (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/xml_data.xml (100%) rename packages/sphinx-test-reports/tests/{data => doc_test/utils}/xml_data_2.xml (100%) delete mode 100644 packages/sphinx-test-reports/tests/test_dummy.py delete mode 100644 packages/sphinx-test-reports/tests/test_empty_doc.py diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 81faafeeb..8514456f8 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -7,8 +7,8 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - python-version: ["3.6", "3.8", "3.9"] # No "3.10", as nose seem to have problems with it - sphinx-version: ['3.5', '4.2', '4.3', '5.0'] + python-version: [ "3.8", "3.9"] # No "3.10", as nose seem to have problems with it + sphinx-version: ['5.0'] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index 04441c91f..acc468413 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -17,3 +17,4 @@ _build .envrc .venv +.vscode \ No newline at end of file diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile index 04c6b02f4..8b99ac9f4 100644 --- a/packages/sphinx-test-reports/Makefile +++ b/packages/sphinx-test-reports/Makefile @@ -6,11 +6,11 @@ list: .PHONY: lint lint: - flake8 --config .flake8 ${SRC_FILES} + pre-commit run --all-files .PHONY: test test: - nosetests -v -w tests + pytest -n auto --tb=long tests/ .PHONY: test-matrix test-matrix: @@ -27,3 +27,4 @@ docs-linkcheck: .PHONY: format format: black ${SRC_FILES} + isort ${SRC_FILES} diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 98b9e586b..3a26fc868 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,5 +1,5 @@ -sphinx>=2.0 -sphinxcontrib-needs>=0.7.2 +sphinx>=4.0 +sphinx-needs sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx_design diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 579c0d320..efdeae806 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -5,6 +5,8 @@ Changelog ----- :Released: under development +* Improvement: Migrated nosetests to pytest. + 0.3.7 ----- :Released: 09.06.2022 diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 77ad145c5..6ce4e44a9 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -49,7 +49,7 @@ Example .. test-case:: Flake8 test case :id: TESTCASE_1 - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :classname: sphinxcontrib.test_reports.test_reports :case: FLAKE8 @@ -58,7 +58,7 @@ Example A pytest test case. .. test-case:: nose test case - :file: ../tests/data/nose_data.xml + :file: ../tests/doc_test/utils/nose_data.xml :suite: nosetests :classname: test_empty_doc :id: TESTCASE_2 @@ -68,7 +68,7 @@ Example .. test-case:: Flake8 test case :id: TESTCASE_1 - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :classname: sphinxcontrib.test_reports.test_reports :case: FLAKE8 @@ -77,7 +77,7 @@ Example A pytest test case. .. test-case:: nose test case - :file: ../tests/data/nose_data.xml + :file: ../tests/doc_test/utils/nose_data.xml :suite: nosetests :classname: test_empty_doc :id: TESTCASE_2 diff --git a/packages/sphinx-test-reports/docs/directives/test_env.rst b/packages/sphinx-test-reports/docs/directives/test_env.rst index 8ed4b0390..cb9c81fa5 100644 --- a/packages/sphinx-test-reports/docs/directives/test_env.rst +++ b/packages/sphinx-test-reports/docs/directives/test_env.rst @@ -93,7 +93,7 @@ Default output :env: py27 :data: name, host, installed_packages -.. test-env:: ../tests/data/tox-report-short.json +.. test-env:: ../tests/doc_test/utils/tox-report-short.json :data: name, host, installed_packages :env: py27 @@ -107,7 +107,7 @@ Raw output :env: py27 :data: name, host, installed_packages -.. test-env:: ../tests/data/tox-report-short.json +.. test-env:: ../tests/doc_test/utils/tox-report-short.json :raw: :data: name, host, installed_packages :env: py27 diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index 3493383e1..034f22a24 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -67,21 +67,21 @@ Basics .. code-block:: rst .. test-file:: common xml test data - :file: ../tests/data/xml_data.xml + :file: ../tests/doc_test/utils/xml_data.xml :id: TESTFILE_1 This test_file has very common data. Some options are net set, therefore their value is ``-1`` .. test-file:: pytest test data - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_2 :links: TESTFILE_1 This test_file was created by `pytest `_. .. test-file:: nose test data - :file: ../tests/data/nose_data.xml + :file: ../tests/doc_test/utils/nose_data.xml :id: TESTFILE_3 :links: TESTFILE_1 :status: open @@ -95,21 +95,21 @@ Basics .. test-file:: common xml test data - :file: ../tests/data/xml_data.xml + :file: ../tests/doc_test/utils/xml_data.xml :id: TESTFILE_1 This test_file has very common data. Some options are not set, therefore their value is ``-1`` .. test-file:: pytest test data - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_2 :links: TESTFILE_1 This test_file was created by `pytest `_. .. test-file:: nose test data - :file: ../tests/data/nose_data.xml + :file: ../tests/doc_test/utils/nose_data.xml :id: TESTFILE_3 :links: TESTFILE_1 :status: open @@ -127,7 +127,7 @@ Autogenerated suite .. code-block:: rst .. test-file:: pytest test data - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_AUTO1 :auto_suites: :collapse: FALSE @@ -135,7 +135,7 @@ Autogenerated suite .. test-file:: pytest test data - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_AUTO1 :auto_suites: :collapse: FALSE @@ -147,7 +147,7 @@ Autogenerated suite and cases .. code-block:: rst .. test-file:: pytest test data - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_AUTO2 :auto_suites: :auto_cases: @@ -155,7 +155,7 @@ Autogenerated suite and cases .. test-file:: pytest test data - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_AUTO2 :auto_suites: :auto_cases: diff --git a/packages/sphinx-test-reports/docs/directives/test_report.rst b/packages/sphinx-test-reports/docs/directives/test_report.rst index 82c9d20f7..ffc013c2e 100644 --- a/packages/sphinx-test-reports/docs/directives/test_report.rst +++ b/packages/sphinx-test-reports/docs/directives/test_report.rst @@ -8,7 +8,7 @@ test-report .. test-report:: My Report :id: REPORT - :file: ../tests/data/pytest_sphinx_data_short.xml + :file: ../tests/doc_test/utils/pytest_sphinx_data_short.xml The following options must be set: @@ -28,7 +28,7 @@ Used code: .. test-report:: My Report :id: REPORT - :file: ../tests/data/pytest_sphinx_data_short.xml + :file: ../tests/doc_test/utils/pytest_sphinx_data_short.xml :tags: my_report, awesome :links: SPEC_001 @@ -42,7 +42,7 @@ Result: .. test-report:: My Report :id: REPORT - :file: ../tests/data/pytest_sphinx_data_short.xml + :file: ../tests/doc_test/utils/pytest_sphinx_data_short.xml :tags: my_report, awesome :links: SPEC_001 diff --git a/packages/sphinx-test-reports/docs/directives/test_results.rst b/packages/sphinx-test-reports/docs/directives/test_results.rst index 5872b383a..a8289d431 100644 --- a/packages/sphinx-test-reports/docs/directives/test_results.rst +++ b/packages/sphinx-test-reports/docs/directives/test_results.rst @@ -10,11 +10,11 @@ This directive adds a results table of a given junit xml file to the current pag .. test-results:: my/path/to/test.xml -.. test-results:: ../tests/data/xml_data.xml +.. test-results:: ../tests/doc_test/utils/xml_data.xml -.. test-results:: ../tests/data/pytest_data.xml +.. test-results:: ../tests/doc_test/utils/pytest_data.xml -.. test-results:: ../tests/data/nose_data.xml +.. test-results:: ../tests/doc_test/utils/nose_data.xml .. note:: diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst index 6e66ff42d..f0198bdc1 100644 --- a/packages/sphinx-test-reports/docs/directives/test_suite.rst +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -43,7 +43,7 @@ Example .. code-block:: rst .. test-suite:: Flake8 results during pytest-run - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :id: TESTSUITE_1 @@ -51,7 +51,7 @@ Example .. test-suite:: Flake8 results during pytest-run - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :id: TESTSUITE_1 :links: TESTFILE_2 diff --git a/packages/sphinx-test-reports/docs/examples/casperjs.rst b/packages/sphinx-test-reports/docs/examples/casperjs.rst index 0a8272e57..2e4dbd71e 100644 --- a/packages/sphinx-test-reports/docs/examples/casperjs.rst +++ b/packages/sphinx-test-reports/docs/examples/casperjs.rst @@ -7,6 +7,6 @@ Shorten the data and removed double-entries (same classname and test-name for mu .. test-file:: CasperJs tests - Multi test suites :id: CASPERJS_001 - :file: ../tests/data/casperjs.xml + :file: ../tests/doc_test/utils/casperjs.xml :auto_suites: :auto_cases: diff --git a/packages/sphinx-test-reports/docs/examples/index.rst b/packages/sphinx-test-reports/docs/examples/index.rst index 869631418..c7494b1b7 100644 --- a/packages/sphinx-test-reports/docs/examples/index.rst +++ b/packages/sphinx-test-reports/docs/examples/index.rst @@ -12,7 +12,7 @@ pytests pytest junit file ~~~~~~~~~~~~~~~~~ -.. literalinclude:: ../../tests/data/pytest_data.xml +.. literalinclude:: ../../tests/doc_test/utils/pytest_data.xml Autogenerated documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -21,14 +21,14 @@ Autogenerated documentation .. test-file:: Pytest Test File :id: PYTEST01 :tags: pytest, example - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :auto_suites: :auto_cases: .. test-file:: Pytest Test File :id: PYTEST01 :tags: pytest, example - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :auto_suites: :auto_cases: @@ -38,7 +38,7 @@ nosetests nosetests junit file ~~~~~~~~~~~~~~~~~~~~ -.. literalinclude:: ../../tests/data/nose_data.xml +.. literalinclude:: ../../tests/doc_test/utils/nose_data.xml Autogenerated documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -47,14 +47,14 @@ Autogenerated documentation .. test-file:: Nosetests Test File :id: NOSE01 :tags: nose, example - :file: ../tests/data/nose_data.xml + :file: ../tests/doc_test/utils/nose_data.xml :auto_suites: :auto_cases: .. test-file:: Nosetests Test File :id: NOSE01 :tags: nose, example - :file: ../tests/data/nose_data.xml + :file: ../tests/doc_test/utils/nose_data.xml :auto_suites: :auto_cases: diff --git a/packages/sphinx-test-reports/docs/examples/pytest.rst b/packages/sphinx-test-reports/docs/examples/pytest.rst index 310263ebf..8c95a4f17 100644 --- a/packages/sphinx-test-reports/docs/examples/pytest.rst +++ b/packages/sphinx-test-reports/docs/examples/pytest.rst @@ -32,6 +32,6 @@ Imported data .. test-file:: pytest Sphinx data :id: SPHINX :tags: pytest_sphinx - :file: ../tests/data/pytest_sphinx_data.xml + :file: ../tests/doc_test/utils/pytest_sphinx_data.xml :auto_suites: :auto_cases: diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst index cd1cce2d3..63fa85213 100644 --- a/packages/sphinx-test-reports/docs/functions.rst +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -42,7 +42,7 @@ If this is the case, their IDs get stored and finally returned. .. test-case:: Flake8 test case :id: TESTLINK_1 - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :classname: sphinxcontrib.test_reports.test_reports :case: FLAKE8 @@ -64,7 +64,7 @@ If this is the case, their IDs get stored and finally returned. .. test-case:: Flake8 test case :id: TESTLINK_1 - :file: ../tests/data/pytest_data.xml + :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :classname: sphinxcontrib.test_reports.test_reports :case: FLAKE8 diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 563ed56e9..fdd8e6215 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -40,7 +40,7 @@ Introduction A single documented test-case looks like this: .. test-case:: test_add_source_parser - :file: ../tests/data/pytest_sphinx_data.xml + :file: ../tests/doc_test/utils/pytest_sphinx_data.xml :suite: pytest :case: test_add_source_parser :collapse: FALSE diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 330f1bb2f..9ca442fc1 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -1,11 +1,11 @@ import nox from nox import session -PYTHON_VERSIONS = ["3.6", "3.8", "3.9"] -SPHINX_VERSIONS = ["3.5", "4.2", "4.3", "5.0"] +PYTHON_VERSIONS = ["3.8", "3.9"] +SPHINX_VERSIONS = ["5.0"] TEST_DEPENDENCIES = [ - "nose", - "sphinx_testing", + "pytest", + "pytest-xdist", ] LINT_DEPENDENCIES = [ "flake8", diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 630f28cea..d9e9b6dcf 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -10,10 +10,8 @@ setup( name="sphinx-test-reports", - # Update also test_reports.py, conf.py and changelog! version="0.3.7", - url="http://github.com/useblocks/sphinx-test-reports", download_url="http://pypi.python.org/pypi/sphinx-test-reports", license="MIT", diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt index 0a6cb0846..332e3e0a4 100644 --- a/packages/sphinx-test-reports/test-requirements.txt +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -1,13 +1,3 @@ -pytest >=3.5 -pytest-flake8 -coverage -python-coveralls -tox -nose -sphinx_testing -black +pytest>=7.0 +pytest-xdist nox -flake8 -pep8-naming -flake8-isort -flake8-black diff --git a/packages/sphinx-test-reports/tests/__init__.py b/packages/sphinx-test-reports/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py new file mode 100644 index 000000000..981eaab42 --- /dev/null +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -0,0 +1,50 @@ +"""Pytest conftest module containing common test configuration and fixtures.""" +import shutil +from tempfile import mkdtemp + +import pytest +from sphinx.testing.path import path + +pytest_plugins = "sphinx.testing.fixtures" + + +def copy_srcdir_to_tmpdir(srcdir, tmp): + srcdir = path(__file__).parent.abspath() / srcdir + tmproot = tmp / path(srcdir).basename() + shutil.copytree(srcdir, tmproot) + return tmproot + + +@pytest.fixture(scope="function") +def test_app(make_app, request): + # We create a temp-folder on our own, as the util-functions from sphinx and pytest make troubles. + # It seems like they reuse certain-temp names + sphinx_test_tempdir = path(mkdtemp()) + + builder_params = request.param + + # copy plantuml.jar, xml files and json files to current test temdir + util_files = path(__file__).parent.abspath() / "doc_test/utils" + shutil.copytree(util_files, sphinx_test_tempdir / "utils") + + # copy test srcdir to test temporary directory sphinx_test_tempdir + srcdir = builder_params.get("srcdir", None) + src_dir = copy_srcdir_to_tmpdir(srcdir, sphinx_test_tempdir) + + # return sphinx.testing fixture make_app and new srcdir which in sphinx_test_tempdir + app = make_app( + buildername=builder_params.get("buildername", "html"), + srcdir=src_dir, + freshenv=builder_params.get("freshenv", None), + confoverrides=builder_params.get("confoverrides", None), + status=builder_params.get("status", None), + warning=builder_params.get("warning", None), + tags=builder_params.get("tags", None), + docutilsconf=builder_params.get("docutilsconf", None), + parallel=builder_params.get("parallel", 0), + ) + + yield app + + # cleanup test temporary directory + shutil.rmtree(sphinx_test_tempdir, False) diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index 88f29c03c..a69b1cbb9 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -63,7 +63,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -92,7 +92,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst index 02d489a80..9fec7ad5e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst @@ -2,5 +2,5 @@ Basic Document ============== -.. test-results:: ../../data/xml_data.xml +.. test-results:: ../utils/xml_data.xml diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py index 38e684dcf..168348c56 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py @@ -81,7 +81,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -123,7 +123,7 @@ # 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"] +# html_static_path = ["_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst index f780025e4..60d851b4a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst @@ -3,6 +3,6 @@ Basic Document .. test-report:: My Report :id: REPORT - :file: ../data/pytest_data.xml + :file: ../utils/pytest_data.xml :tags: my_report, awesome :links: SPEC_001 \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py index c4d54eaed..3dec85dda 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -74,7 +74,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -103,7 +103,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst index bac27143a..b063d1f8e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/index.rst @@ -4,15 +4,15 @@ Custom Types .. test-path:: path test :id: TEST_1 - :file: ../../data/xml_data.xml + :file: ../utils/xml_data.xml .. test-container:: container test :id: TEST_2 - :file: ../../data/pytest_data.xml + :file: ../utils/pytest_data.xml :suite: pytest .. test-run:: run test :id: TEST_3 - :file: ../../data/pytest_data.xml + :file: ../utils/pytest_data.xml :suite: pytest :case: FLAKE8 diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile deleted file mode 100644 index 47330b89c..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = needstestdocs -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py deleted file mode 100644 index 5ca52338a..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/conf.py +++ /dev/null @@ -1,162 +0,0 @@ -# -# testreport test docs documentation build configuration file, created by -# sphinx-quickstart on Tue Mar 28 11:37:14 2017. -# -# 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. - -# 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. -# -import os -import sys - -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - -# -- General configuration ------------------------------------------------ - -# If your documentation testreport a minimal Sphinx version, state it here. -# -# testreport_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_needs", "sphinxcontrib.test_reports"] - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" - -# The master toctree document. -master_doc = "index" - -# General information about the project. -project = "test-report test docs" -copyright = "2017, team useblocks" -author = "team useblocks" - -# 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. -version = "1.0" -# The full version, including alpha/beta/rc tags. -release = "1.0" - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - -# -- 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 = "alabaster" - -# 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 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"] - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = "testreporttestdocsdoc" - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - master_doc, - "testreporttestdocs.tex", - "testreport test docs Documentation", - "team useblocks", - "manual", - ), -] - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - master_doc, - "testreporttestdocs", - "testreport test docs Documentation", - [author], - 1, - ) -] - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - master_doc, - "testreporttestdocs", - "testreport test docs Documentation", - author, - "testreporttestdocs", - "One line description of project.", - "Miscellaneous", - ), -] diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst deleted file mode 100644 index eeb3f7ac0..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/index.rst +++ /dev/null @@ -1,5 +0,0 @@ -Empty Document -============== - -No plugin usage right now. - diff --git a/packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat deleted file mode 100644 index 1e0602442..000000000 --- a/packages/sphinx-test-reports/tests/doc_test/empty_doc/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build -set SPHINXPROJ=needstestdocs - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index 5ca52338a..5f1fa9f62 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -64,7 +64,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -93,7 +93,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst index e105d09c1..f65bfb11b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/index.rst @@ -1,6 +1,6 @@ Test-Env report ================== -.. test-env:: ../../data/tox-report.json +.. test-env:: ../utils/tox-report.json :data: host, name, path :env: py35, flake8 diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index 5ca52338a..5f1fa9f62 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -64,7 +64,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -93,7 +93,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst index 82f0a72c2..045897826 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/index.rst @@ -1,4 +1,4 @@ Test-Env report ================== -.. test-env:: ../../data/tox-report.json +.. test-env:: ../utils/tox-report.json diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index 5ca52338a..5f1fa9f62 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -64,7 +64,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -93,7 +93,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst index 95ff5bdda..b588068d4 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst @@ -1,7 +1,7 @@ Test-Env report ================== -.. test-env:: ../../data/tox-report.json +.. test-env:: ../utils/tox-report.json :data: host, name, path :env: py35, flake8 :raw: diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index 88f29c03c..a69b1cbb9 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -63,7 +63,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -92,7 +92,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst index fbba7fb1c..93d809d34 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst @@ -1,6 +1,6 @@ Test-Env report ================== -.. test-env:: ../../data/tox-report.json +.. test-env:: ../utils/tox-report.json :data: host, name, path, abc,, :env: py35, flake8,,defs \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py index 88f29c03c..a69b1cbb9 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -63,7 +63,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -92,7 +92,7 @@ # 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"] +# html_static_path = ["_static"] # -- Options for HTMLHelp output ------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst index 18682f232..2e44f527e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst @@ -2,5 +2,5 @@ Basic Document ============== -.. test-results:: ../../data/pytest_data_6_2.xml +.. test-results:: ../utils/pytest_data_6_2.xml diff --git a/packages/sphinx-test-reports/tests/data/casperjs.xml b/packages/sphinx-test-reports/tests/doc_test/utils/casperjs.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/casperjs.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/casperjs.xml diff --git a/packages/sphinx-test-reports/tests/data/nose_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/nose_data.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/nose_data.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/nose_data.xml diff --git a/packages/sphinx-test-reports/tests/data/pytest_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/pytest_data.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/pytest_data.xml diff --git a/packages/sphinx-test-reports/tests/data/pytest_data_5_1.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_5_1.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/pytest_data_5_1.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_5_1.xml diff --git a/packages/sphinx-test-reports/tests/data/pytest_data_6_2.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_6_2.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/pytest_data_6_2.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_6_2.xml diff --git a/packages/sphinx-test-reports/tests/data/pytest_nested_example.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_nested_example.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/pytest_nested_example.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/pytest_nested_example.xml diff --git a/packages/sphinx-test-reports/tests/data/pytest_sphinx_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_sphinx_data.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/pytest_sphinx_data.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/pytest_sphinx_data.xml diff --git a/packages/sphinx-test-reports/tests/data/pytest_sphinx_data_short.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_sphinx_data_short.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/pytest_sphinx_data_short.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/pytest_sphinx_data_short.xml diff --git a/packages/sphinx-test-reports/tests/data/tox-report-short.json b/packages/sphinx-test-reports/tests/doc_test/utils/tox-report-short.json similarity index 100% rename from packages/sphinx-test-reports/tests/data/tox-report-short.json rename to packages/sphinx-test-reports/tests/doc_test/utils/tox-report-short.json diff --git a/packages/sphinx-test-reports/tests/data/tox-report.json b/packages/sphinx-test-reports/tests/doc_test/utils/tox-report.json similarity index 100% rename from packages/sphinx-test-reports/tests/data/tox-report.json rename to packages/sphinx-test-reports/tests/doc_test/utils/tox-report.json diff --git a/packages/sphinx-test-reports/tests/data/xml_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/xml_data.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/xml_data.xml diff --git a/packages/sphinx-test-reports/tests/data/xml_data_2.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_2.xml similarity index 100% rename from packages/sphinx-test-reports/tests/data/xml_data_2.xml rename to packages/sphinx-test-reports/tests/doc_test/utils/xml_data_2.xml diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index 66e91177a..95ba35939 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -1,18 +1,28 @@ -from sphinx_testing import with_app +from pathlib import Path +import pytest -@with_app(buildername="html", srcdir="doc_test/basic_doc") -def test_doc_build_html(app, status, warning): + +@pytest.mark.parametrize( + "test_app", [{"buildername": "html", "srcdir": "doc_test/basic_doc"}], indirect=True +) +def test_doc_build_html(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir, "index.html").read_text() assert "

Basic Document" in html assert "ASuccessfulTest" in html -@with_app(buildername="html", srcdir="doc_test/pytest_6_2") -def test_doc_build_html_for_pytest_6_2(app, status, warning): +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/pytest_6_2"}], + indirect=True, +) +def test_doc_build_html_for_pytest_6_2(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text(encoding="utf-8") + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") assert "Tests: 6" in html assert "Failures: 2" in html diff --git a/packages/sphinx-test-reports/tests/test_custom_template.py b/packages/sphinx-test-reports/tests/test_custom_template.py index 4624f4bf6..3c3e23108 100644 --- a/packages/sphinx-test-reports/tests/test_custom_template.py +++ b/packages/sphinx-test-reports/tests/test_custom_template.py @@ -1,10 +1,17 @@ -from sphinx_testing import with_app +from pathlib import Path +import pytest -@with_app(buildername="html", srcdir="doc_test/custom_tr_template") -def test_custom_template(app, status, warning): + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/custom_tr_template"}], + indirect=True, +) +def test_custom_template(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text() # assert changed order when creating a testreport html page pos1 = html.index("Imported data") diff --git a/packages/sphinx-test-reports/tests/test_custom_types.py b/packages/sphinx-test-reports/tests/test_custom_types.py index 6e96913bf..3f79a9400 100644 --- a/packages/sphinx-test-reports/tests/test_custom_types.py +++ b/packages/sphinx-test-reports/tests/test_custom_types.py @@ -1,10 +1,17 @@ -from sphinx_testing import with_app +from pathlib import Path +import pytest -@with_app(buildername="html", srcdir="doc_test/custom_types") -def test_custom_types_html(app, status, warning): + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/custom_types"}], + indirect=True, +) +def test_custom_types_html(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text() assert "Test-Path" in html assert "Test-Container" in html assert "Test-Run" in html diff --git a/packages/sphinx-test-reports/tests/test_dummy.py b/packages/sphinx-test-reports/tests/test_dummy.py deleted file mode 100644 index 63ae41d1d..000000000 --- a/packages/sphinx-test-reports/tests/test_dummy.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_dummy(): - assert True is True diff --git a/packages/sphinx-test-reports/tests/test_empty_doc.py b/packages/sphinx-test-reports/tests/test_empty_doc.py deleted file mode 100644 index 0e70b27de..000000000 --- a/packages/sphinx-test-reports/tests/test_empty_doc.py +++ /dev/null @@ -1,8 +0,0 @@ -from sphinx_testing import with_app - - -@with_app(buildername="html", srcdir="doc_test/empty_doc") -def test_doc_build_html(app, status, warning): - app.build() - html = (app.outdir / "index.html").read_text() - assert "

Empty Document" in html diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index bc61d9f21..caa77ac1f 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -1,18 +1,24 @@ import re +from pathlib import Path from subprocess import STDOUT, check_output +import pytest import sphinx -from sphinx_testing import with_app sphinx_version = int( sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1] ) -@with_app(buildername="html", srcdir="doc_test/env_report_doc") -def test_doc_env_report_build_html(app, status, warning): +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/env_report_doc"}], + indirect=True, +) +def test_doc_env_report_build_html(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text() assert "

Test-Env report" in html assert '

' in html @@ -39,10 +45,15 @@ def test_doc_env_report_build_html(app, status, warning): assert "py35" not in tables[1] -@with_app(buildername="html", srcdir="doc_test/env_report_doc_raw") -def test_doc_env_report_raw_build_html(app, status, warning): +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/env_report_doc_raw"}], + indirect=True, +) +def test_doc_env_report_raw_build_html(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text() tables = re.findall("(

Variable

)", html, re.DOTALL) assert len(tables) == 0 @@ -59,10 +70,15 @@ def test_doc_env_report_raw_build_html(app, status, warning): assert "pylint" not in html -@with_app(buildername="html", srcdir="doc_test/env_report_doc_default") -def test_doc_env_report_default_build_html(app, status, warning): +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/env_report_doc_default"}], + indirect=True, +) +def test_doc_env_report_default_build_html(test_app): + app = test_app app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text() tables = re.findall("(
)", html, re.DOTALL) assert len(tables) == 3 @@ -90,13 +106,16 @@ def test_doc_env_report_default_build_html(app, status, warning): assert "installpkg" in table -@with_app( - buildername="html", srcdir="doc_test/env_report_warnings" -) # , warningiserror=False, verbosity=2) -def test_doc_env_report_warning_build_html(app, status, warning): +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/env_report_warnings"}], + indirect=True, +) +def test_doc_env_report_warning_build_html(test_app): # it should pass all test cases from: test_doc_env_report_build_html # generated output data will be stored here + app = test_app output = str( check_output( ["sphinx-build", "-a", "-E", "-b", "html", app.srcdir, app.outdir], @@ -105,7 +124,7 @@ def test_doc_env_report_warning_build_html(app, status, warning): ) ) # app.build() - html = (app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text() assert "

Test-Env report" in html assert '

' in html diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index c7d3efb3e..1e4707df2 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -1,15 +1,19 @@ import os -xml_path = os.path.join(os.path.dirname(__file__), "data", "xml_data.xml") -xml_pytest_path = os.path.join(os.path.dirname(__file__), "data", "pytest_data.xml") +xml_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "xml_data.xml") +xml_pytest_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "pytest_data.xml" +) xml_pytest51_path = os.path.join( - os.path.dirname(__file__), "data", "pytest_data_5_1.xml" + os.path.dirname(__file__), "doc_test/utils", "pytest_data_5_1.xml" ) xml_pytest62_path = os.path.join( - os.path.dirname(__file__), "data", "pytest_data_6_2.xml" + os.path.dirname(__file__), "doc_test/utils", "pytest_data_6_2.xml" ) -xml_nose_path = os.path.join(os.path.dirname(__file__), "data", "nose_data.xml") +xml_nose_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "nose_data.xml" +) def test_init_parser(): From f1d854bb5942b0e9eff636876643d9fb1fc6d0a5 Mon Sep 17 00:00:00 2001 From: haiyangToAI Date: Mon, 12 Sep 2022 09:11:20 +0200 Subject: [PATCH 060/159] enable pre-commit in CI lint --- packages/sphinx-test-reports/.github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 8514456f8..0dd1263a0 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -35,6 +35,7 @@ jobs: python -m pip install poetry nox nox-poetry - name: Run Lint run: nox --non-interactive --session lint -- --full-trace + - uses: pre-commit/action@v3.0.0 linkcheck: name: Docs-Linkcheck From 687a9123a4544592d9b67ef0972a33a0c6ea4629 Mon Sep 17 00:00:00 2001 From: haiyangToAI Date: Mon, 12 Sep 2022 09:30:28 +0200 Subject: [PATCH 061/159] removed nox run lint --- packages/sphinx-test-reports/.github/workflows/ci.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 0dd1263a0..cae0bcff9 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -33,8 +33,6 @@ jobs: - name: Install Nox Dependencies run: | python -m pip install poetry nox nox-poetry - - name: Run Lint - run: nox --non-interactive --session lint -- --full-trace - uses: pre-commit/action@v3.0.0 linkcheck: From 10089b418cfd655850cf5c4701f748a205fc09c5 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Mon, 26 Sep 2022 09:16:42 +0200 Subject: [PATCH 062/159] merge fix --- packages/sphinx-test-reports/doc-requirements.txt | 6 ++---- packages/sphinx-test-reports/docs/changelog.rst | 8 +++++++- packages/sphinx-test-reports/docs/index.rst | 4 +--- packages/sphinx-test-reports/setup.py | 3 +-- .../sphinxcontrib/test_reports/test_reports.py | 3 ++- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 3a26fc868..fec384555 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,7 +1,5 @@ sphinx>=4.0 -sphinx-needs +sphinx-needs>=1.0.1 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml -sphinx_design -Jinja2==3.1.2 -docutils~=0.18.1 \ No newline at end of file +sphinx-design diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index efdeae806..22c8e6f0f 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,10 +1,16 @@ Changelog ========= -0.3.8 +1.0.1 ----- :Released: under development + +1.0.0 +----- +:Released: 26.09.2022 + +* Improvement: Supporting `Sphinx-Needs `__ ``>= 1.01`` only. * Improvement: Migrated nosetests to pytest. 0.3.7 diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index fdd8e6215..d9aba0110 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -64,9 +64,6 @@ As example, here is a shorten list of tests results from the Sphinx-pytest examp :style_row: tr_[[copy('result')]] - - - Content ------- @@ -224,6 +221,7 @@ we have created other Sphinx extensions to support the work of teams in the auto :octicon:`book;1em;sd-text-primary` Technical Docs + Motivation ---------- ``Sphinx-Test-Reports`` was created for an automotive project, which needs to document test results and their used diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index d9e9b6dcf..4c016eb07 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -11,7 +11,7 @@ setup( name="sphinx-test-reports", # Update also test_reports.py, conf.py and changelog! - version="0.3.7", + version="1.0.0", url="http://github.com/useblocks/sphinx-test-reports", download_url="http://pypi.python.org/pypi/sphinx-test-reports", license="MIT", @@ -28,7 +28,6 @@ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 09fdb4284..96a785202 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -23,7 +23,7 @@ # fmt: on -VERSION = "0.3.7" +VERSION = "1.0.0" def setup(app): @@ -110,6 +110,7 @@ def sphinx_needs_update(app, *args): # Extra options # For details read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option + add_extra_option(app, "file") add_extra_option(app, "suite") add_extra_option(app, "case") From 92596482fb64e8884d132ebf685c02a75a681337 Mon Sep 17 00:00:00 2001 From: haiyangToAI Date: Mon, 26 Sep 2022 15:36:42 +0200 Subject: [PATCH 063/159] fixed test_file with needs_extra_options --- .../tests/doc_test/doc_test_file/Makefile | 20 ++ .../tests/doc_test/doc_test_file/conf.py | 194 ++++++++++++++++++ .../tests/doc_test/doc_test_file/index.rst | 31 +++ .../tests/doc_test/doc_test_file/make.bat | 36 ++++ .../tests/test_test_file.py | 38 ++++ 5 files changed, 319 insertions(+) create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_file/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_file/make.bat create mode 100644 packages/sphinx-test-reports/tests/test_test_file.py diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py new file mode 100644 index 000000000..0bd2db7cf --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py @@ -0,0 +1,194 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +needs_types = [ + { + "directive": "story", + "title": "User Story", + "prefix": "US_", + "color": "#BFD8D2", + "style": "node", + }, + { + "directive": "spec", + "title": "Specification", + "prefix": "SP_", + "color": "#FEDCD2", + "style": "node", + }, + { + "directive": "impl", + "title": "Implementation", + "prefix": "IM_", + "color": "#DF744A", + "style": "node", + }, + { + "directive": "test", + "title": "Test Case", + "prefix": "TC_", + "color": "#DCB239", + "style": "node", + }, +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +needs_extra_options = ["asil", "uses_secure"] + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/index.rst b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/index.rst new file mode 100644 index 000000000..8a0286976 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/index.rst @@ -0,0 +1,31 @@ +Basic Document FOR TEST FILE +============================ + +.. spec:: TEST_1 + :id: TEST_1 + :tags: A + :asil: D + +.. spec:: TEST_2 + :id: TEST_2 + :tags: A + +.. spec:: TEST_3 + :id: TEST_3 + :tags: A, B + :uses_secure: True + +.. spec:: TEST_4 + :id: TEST_4 + :tags: B + :uses_secure: True + + +.. test-file:: My Test Data + :file: ../utils/xml_data.xml + :id: TESTFILE_1 + + +Need number with extra options: :need_count:`asil=='D'` + +Need number with extra options: :need_count:`uses_secure=='True'` diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/make.bat b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_test_file.py b/packages/sphinx-test-reports/tests/test_test_file.py new file mode 100644 index 000000000..1f6c3797d --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_test_file.py @@ -0,0 +1,38 @@ +from pathlib import Path + +import pytest + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/doc_test_file"}], + indirect=True, +) +def test_doc_build_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + assert html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/doc_test_file"}], + indirect=True, +) +def test_test_file_needs_extra_options_no_warning(test_app): + import subprocess + + app = test_app + + srcdir = Path(app.srcdir) + out_dir = srcdir / "_build" + + out = subprocess.run( + ["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True + ) + + assert out.returncode == 0 + + # Check no warnings + assert "WARNING" not in out.stdout.decode("utf-8") From 1612f5fd0ea16ebbf01cb28861b2848bcc3391db Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 26 Oct 2022 13:46:53 +0200 Subject: [PATCH 064/159] Support for multiple testsuites in one "testsuites" object (useblocks/sphinx-test-reports#46) Fixes useblocks/sphinx-test-reports#40 --- .../sphinx-test-reports/docs/changelog.rst | 3 + .../test_reports/directives/test_suite.py | 11 +- .../sphinxcontrib/test_reports/junitparser.py | 16 +- .../tests/doc_test/testsuites_doc/Makefile | 20 +++ .../tests/doc_test/testsuites_doc/conf.py | 161 ++++++++++++++++++ .../tests/doc_test/testsuites_doc/index.rst | 11 ++ .../tests/doc_test/testsuites_doc/make.bat | 36 ++++ .../tests/doc_test/utils/testsuites.xml | 32 ++++ .../sphinx-test-reports/tests/test_suites.py | 24 +++ 9 files changed, 304 insertions(+), 10 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/testsuites_doc/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml create mode 100644 packages/sphinx-test-reports/tests/test_suites.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 22c8e6f0f..ce4d42142 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -6,6 +6,9 @@ Changelog :Released: under development +* Bugfix: Multiple testsuites get documented correctly. + `#40 `_ + 1.0.0 ----- :Released: 26.09.2022 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 2ae5fcbe7..a361770d3 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -42,7 +42,7 @@ def run(self, nested=False, count=-1): if nested: # access n-th nested suite here - self.results = self.results[0]["testsuites"] + self.results = self.results[0]["testsuite_nested"] suite_name = self.options.get("suite", None) @@ -100,7 +100,7 @@ def run(self, nested=False, count=-1): access_count = 0 if len(suite_obj["testcases"]) == 0: - for suite in suite_obj["testsuites"]: + for suite in suite_obj["testsuite_nested"]: suite_id = self.test_id suite_id += ( @@ -157,7 +157,10 @@ def run(self, nested=False, count=-1): .upper()[:5] ) - options = self.options + # We need to copy self.options, otherwise it gets updated and sets same values + # for all testsuites. + options = self.options.copy() + options["case"] = case["name"] options["classname"] = case["classname"] options["id"] = case_id @@ -182,7 +185,7 @@ def run(self, nested=False, count=-1): ) ) - is_nested = len(suite_obj["testsuites"]) > 0 or nested + is_nested = len(suite_obj["testsuite_nested"]) > 0 or nested # depending if nested or not, runs case directive to add content to testcases # count is for correct suite access, if multiple present, case_count is for correct case access diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 217140a8a..6acf29ca8 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -23,8 +23,6 @@ def __init__(self, junit_xml, junit_xsd=None): self.junit_xml_string = etree.tostring(self.junit_xml_doc) self.junit_xml_object = objectify.fromstring(self.junit_xml_string) - if self.junit_xml_object.tag == "testsuites": - self.junit_xml_object = self.junit_xml_object.testsuite self.junit_xml_string = str(self.junit_xml_string) def validate(self): @@ -109,7 +107,7 @@ def parse_testsuite(xml_object): "passed": passed, "time": float(testsuite.attrib.get("time", -1)), "testcases": [], - "testsuites": [], + "testsuite_nested": [], } # add nested testsuite objects to @@ -118,7 +116,7 @@ def parse_testsuite(xml_object): for ts in testsuite.testsuite: # dict from inner parse inner_testsuite = parse_testsuite(ts) - ts_dict["testsuites"].append(inner_testsuite) + ts_dict["testsuite_nested"].append(inner_testsuite) elif hasattr(testsuite, "testcase"): @@ -131,8 +129,14 @@ def parse_testsuite(xml_object): # main flow starts here junit_dict = [] - complete_testsuite = parse_testsuite(self.junit_xml_object) - junit_dict.append(complete_testsuite) + + if self.junit_xml_object.tag == "testsuites": + for testsuite_xml_object in self.junit_xml_object.testsuite: + complete_testsuite = parse_testsuite(testsuite_xml_object) + junit_dict.append(complete_testsuite) + else: + complete_testsuite = parse_testsuite(self.junit_xml_object) + junit_dict.append(complete_testsuite) return junit_dict diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py new file mode 100644 index 000000000..a69b1cbb9 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py @@ -0,0 +1,161 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst new file mode 100644 index 000000000..de8cf9ec8 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst @@ -0,0 +1,11 @@ +Basic Document +============== + + +.. test-file:: My test data + :file: ../utils/testsuites.xml + :id: TEST_001 + :auto_suites: + :auto_cases: + :tags: unit-test + diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml b/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml new file mode 100644 index 000000000..7eb77b958 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/test_suites.py b/packages/sphinx-test-reports/tests/test_suites.py new file mode 100644 index 000000000..c4cdeac96 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_suites.py @@ -0,0 +1,24 @@ +from pathlib import Path + +import pytest + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/testsuites_doc"}], + indirect=True, +) +def test_doc_env_report_build_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + assert html + + assert "AnotherTest" in html + assert "test_Another_getCurrentTime" in html + + assert "TimerCounterImplTest" in html + assert "CheckTimerFunction_Init" in html + + assert "TimerTest" in html + assert "test_Timer_getdT" in html From 4d4b964e48ea5ffcccc8aca3c50c4f9ec4a13972 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 27 Oct 2022 08:03:02 +0200 Subject: [PATCH 065/159] Adds tr_suite_id_length and tr_case_id_length (useblocks/sphinx-test-reports#47) Fixes useblocks/sphinx-test-reports#45 --- .../sphinx-test-reports/docs/changelog.rst | 3 +- .../docs/configuration.rst | 26 ++- packages/sphinx-test-reports/setup.py | 4 +- .../test_reports/directives/test_file.py | 10 +- .../test_reports/directives/test_suite.py | 10 +- .../test_reports/test_reports.py | 3 + .../doc_test/many_testsuites_doc/Makefile | 20 ++ .../doc_test/many_testsuites_doc/conf.py | 164 +++++++++++++++++ .../doc_test/many_testsuites_doc/index.rst | 11 ++ .../doc_test/many_testsuites_doc/make.bat | 36 ++++ .../tests/doc_test/testsuites_doc/Makefile | 2 +- .../tests/doc_test/utils/many_testsuites.xml | 172 ++++++++++++++++++ .../sphinx-test-reports/tests/test_suites.py | 16 +- 13 files changed, 468 insertions(+), 9 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index ce4d42142..2de4eaabb 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -5,7 +5,8 @@ Changelog ----- :Released: under development - +* Enhancement: ID length can be configured to avoid conflicts. See :ref:`tr_suite_id_length` and :ref:`tr_case_id_length`. + `#45 `_ * Bugfix: Multiple testsuites get documented correctly. `#40 `_ diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index b6adade7e..267b2b596 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -78,4 +78,28 @@ tr_report_template **A simple example with a scrambled order:** .. literalinclude:: ./custom_test_report_template.txt - :language: rst \ No newline at end of file + :language: rst + +.. _tr_suite_id_length: + +tr_suite_id_length +------------------ +.. versionadded:: 1.0.1 + +Defines the length of the calculated ID for test suites. + +This may be needed, if a junit-xml files contains many test suites. + +Default: **3** + +.. _tr_case_id_length: + +tr_case_id_length +------------------ +.. versionadded:: 1.0.1 + +Defines the length of the calculated ID for test cases. + +This may be needed, if a junit-xml files contains many test cases. + +Default: **5** \ No newline at end of file diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 4c016eb07..72e287be3 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -22,8 +22,9 @@ long_description=file.read(), zip_safe=False, classifiers=[ + "Framework :: Sphinx", + "Framework :: Sphinx :: Extension", "Development Status :: 4 - Beta", - "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", @@ -34,7 +35,6 @@ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Topic :: Documentation", - "Topic :: Utilities", ], platforms="any", packages=find_packages(), diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index b29f37a73..1b527a54e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -36,6 +36,7 @@ class TestFileDirective(TestCommonDirective): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.suite_ids = {} def run(self): self.prepare_basic_options() @@ -102,9 +103,16 @@ def run(self): "_" + hashlib.sha1(suite["name"].encode("UTF-8")) # noqa: W503 .hexdigest() - .upper()[:3] + .upper()[: self.app.config.tr_suite_id_length] ) + if suite_id not in self.suite_ids: + self.suite_ids[suite_id] = suite["name"] + else: + raise Exception( + f'Suite ID {suite_id} already exists by {self.suite_ids[suite_id]} ({suite["name"]})' + ) + options = self.options options["suite"] = suite["name"] options["id"] = suite_id diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index a361770d3..71df3f143 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -35,6 +35,7 @@ class TestSuiteDirective(TestCommonDirective): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.case_ids = [] def run(self, nested=False, count=-1): self.prepare_basic_options() @@ -107,7 +108,7 @@ def run(self, nested=False, count=-1): "_" + hashlib.sha1(suite["name"].encode("UTF-8")) # noqa: W503 .hexdigest() - .upper()[:3] + .upper()[: self.app.config.tr_suite_id_length] ) options = self.options @@ -154,9 +155,14 @@ def run(self, nested=False, count=-1): case["classname"].encode("UTF-8") + case["name"].encode("UTF-8") ) .hexdigest() - .upper()[:5] + .upper()[: self.app.config.tr_case_id_length] ) + if case_id not in self.case_ids: + self.case_ids.append(case_id) + else: + raise Exception(f"Case ID exists: {case_id}") + # We need to copy self.options, otherwise it gets updated and sets same values # for all testsuites. options = self.options.copy() diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 96a785202..4eb8df631 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -60,6 +60,9 @@ def setup(app): ) app.add_config_value("tr_report_template", template_dir, "html") + app.add_config_value("tr_suite_id_length", 3, "html") + app.add_config_value("tr_case_id_length", 5, "html") + # nodes app.add_node(TestResults) app.add_node(TestFile) diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/Makefile new file mode 100644 index 000000000..97f60f3ad --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py new file mode 100644 index 000000000..b14ab1cd6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py @@ -0,0 +1,164 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +tr_suite_id_length = 7 +tr_case_id_length = 10 + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst new file mode 100644 index 000000000..fef49695c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst @@ -0,0 +1,11 @@ +Basic Document +============== + + +.. test-file:: My test data + :file: ../utils/many_testsuites.xml + :id: TEST_001 + :auto_suites: + :auto_cases: + :tags: unit-test + diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/make.bat b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml b/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml new file mode 100644 index 000000000..3b9bdaad6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/test_suites.py b/packages/sphinx-test-reports/tests/test_suites.py index c4cdeac96..4b6ceac1e 100644 --- a/packages/sphinx-test-reports/tests/test_suites.py +++ b/packages/sphinx-test-reports/tests/test_suites.py @@ -8,7 +8,7 @@ [{"buildername": "html", "srcdir": "doc_test/testsuites_doc"}], indirect=True, ) -def test_doc_env_report_build_html(test_app): +def test_doc_testsuites_html(test_app): app = test_app app.build() html = Path(app.outdir, "index.html").read_text() @@ -22,3 +22,17 @@ def test_doc_env_report_build_html(test_app): assert "TimerTest" in html assert "test_Timer_getdT" in html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/many_testsuites_doc"}], + indirect=True, +) +def test_doc_many_testsuites_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + assert html + assert "TEST_001_FFDBD67" in html # suite id + assert "TEST_001_FFDBD67_81152CFAF6" in html # case id From 038603e45f60b30a10a0fcb032142a4f1bdc8f62 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 4 Nov 2022 11:01:32 +0100 Subject: [PATCH 066/159] Release 1.0.1 preparation (useblocks/sphinx-test-reports#48) --- packages/sphinx-test-reports/docs/changelog.rst | 6 +++++- packages/sphinx-test-reports/docs/conf.py | 4 ++-- packages/sphinx-test-reports/setup.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 2de4eaabb..637df583c 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,10 +1,14 @@ Changelog ========= -1.0.1 +1.0.2 ----- :Released: under development +1.0.1 +----- +:Released: 04.11.2022 + * Enhancement: ID length can be configured to avoid conflicts. See :ref:`tr_suite_id_length` and :ref:`tr_case_id_length`. `#45 `_ * Bugfix: Multiple testsuites get documented correctly. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 486a468b8..27e70d80b 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -28,9 +28,9 @@ author = "team useblocks" # The short X.Y version -version = "0.3" +version = "1.0" # The full version, including alpha/beta/rc tags -release = "0.3.7" +release = "1.0.1" # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 72e287be3..71f8de4cd 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -11,7 +11,7 @@ setup( name="sphinx-test-reports", # Update also test_reports.py, conf.py and changelog! - version="1.0.0", + version="1.0.1", url="http://github.com/useblocks/sphinx-test-reports", download_url="http://pypi.python.org/pypi/sphinx-test-reports", license="MIT", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 4eb8df631..2a6bb2a7e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -23,7 +23,7 @@ # fmt: on -VERSION = "1.0.0" +VERSION = "1.0.1" def setup(app): From b88dc6359618c18a7d6665dbcf24cc1665d0bfad Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 16 Dec 2022 15:12:23 +0100 Subject: [PATCH 067/159] Links in test-suite and co do not throw error (useblocks/sphinx-test-reports#52) ":links:" where not handled correctly, if not other Sphinx-Need object was part of the same document. Fixes useblocks/sphinx-test-reports#51 --- .../.pre-commit-config.yaml | 2 +- .../sphinx-test-reports/docs/changelog.rst | 4 + .../test_reports/directives/test_case.py | 3 + .../test_reports/directives/test_file.py | 3 + .../test_reports/directives/test_suite.py | 3 + .../tests/doc_test/needs_linking/Makefile | 20 ++ .../tests/doc_test/needs_linking/conf.py | 194 ++++++++++++++++++ .../tests/doc_test/needs_linking/index.rst | 30 +++ .../tests/doc_test/needs_linking/make.bat | 36 ++++ .../needs_linking/subfolder/file_1.rst | 7 + .../tests/test_needs_linking.py | 15 ++ 11 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_linking/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/needs_linking/subfolder/file_1.rst create mode 100644 packages/sphinx-test-reports/tests/test_needs_linking.py diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index bddb945d7..91424ecea 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -4,7 +4,7 @@ repos: hooks: - id: black - - repo: https://gitlab.com/pycqa/flake8 + - repo: https://github.com/pycqa/flake8 rev: 4.0.1 hooks: - id: flake8 diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 637df583c..944996747 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -5,6 +5,10 @@ Changelog ----- :Released: under development +* Bugfix: Links in `test-suite` and co. do not raise error. + `#51 `_ + + 1.0.1 ----- :Released: 04.11.2022 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 85f62009d..d647dbb21 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -1,6 +1,7 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx_needs.api import add_need +from sphinx_needs.utils import add_doc from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption @@ -187,4 +188,6 @@ def run(self, nested=False, suite_count=-1, case_count=-1): time=time, style=style, ) + + add_doc(self.env, docname) return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 1b527a54e..5bac9ba3b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -3,6 +3,7 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx_needs.api import add_need +from sphinx_needs.utils import add_doc import sphinxcontrib.test_reports.directives.test_suite from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective @@ -139,4 +140,6 @@ def run(self): main_section += suite_directive.run() + add_doc(self.env, docname) + return main_section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 71df3f143..c0f7ba01c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -3,6 +3,7 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx_needs.api import add_need +from sphinx_needs.utils import add_doc import sphinxcontrib.test_reports.directives.test_case from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective @@ -200,4 +201,6 @@ def run(self, nested=False, count=-1): if is_nested: case_count += 1 + add_doc(self.env, docname) + return main_section diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile b/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py new file mode 100644 index 000000000..0bd2db7cf --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py @@ -0,0 +1,194 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +needs_types = [ + { + "directive": "story", + "title": "User Story", + "prefix": "US_", + "color": "#BFD8D2", + "style": "node", + }, + { + "directive": "spec", + "title": "Specification", + "prefix": "SP_", + "color": "#FEDCD2", + "style": "node", + }, + { + "directive": "impl", + "title": "Implementation", + "prefix": "IM_", + "color": "#DF744A", + "style": "node", + }, + { + "directive": "test", + "title": "Test Case", + "prefix": "TC_", + "color": "#DCB239", + "style": "node", + }, +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +needs_extra_options = ["asil", "uses_secure"] + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst b/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst new file mode 100644 index 000000000..2ca21380f --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst @@ -0,0 +1,30 @@ +Basic Document FOR TEST FILE +============================ + +.. spec:: TEST_1 + :id: TEST_1 + :tags: A + :asil: D + +.. spec:: TEST_2 + :id: TEST_2 + :tags: A + +.. spec:: TEST_3 + :id: TEST_3 + :tags: A, B + :uses_secure: True + +.. spec:: TEST_4 + :id: TEST_4 + :tags: B + :uses_secure: True + +Need number with extra options: :need_count:`asil=='D'` + +Need number with extra options: :need_count:`uses_secure=='True'` + + +.. toctree:: + + subfolder/file_1 \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/make.bat b/packages/sphinx-test-reports/tests/doc_test/needs_linking/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/subfolder/file_1.rst b/packages/sphinx-test-reports/tests/doc_test/needs_linking/subfolder/file_1.rst new file mode 100644 index 000000000..707ef1ef5 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/subfolder/file_1.rst @@ -0,0 +1,7 @@ +File +==== + +.. test-file:: My Test Data + :file: ../utils/xml_data.xml + :id: TESTFILE_1 + :links: TEST_1 diff --git a/packages/sphinx-test-reports/tests/test_needs_linking.py b/packages/sphinx-test-reports/tests/test_needs_linking.py new file mode 100644 index 000000000..79eea3e33 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_needs_linking.py @@ -0,0 +1,15 @@ +from pathlib import Path + +import pytest + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/needs_linking"}], + indirect=True, +) +def test_doc_testsuites_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + assert html From f37cfd5b6c8005a382a0ec1edc6deac5ab7464f6 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 21 Dec 2022 12:07:13 +0100 Subject: [PATCH 068/159] support ctest junit file parsing UPDATE (useblocks/sphinx-test-reports#53) [useblocks/sphinx-test-reports#49] support ctest junit file parsing Fixes useblocks/sphinx-test-reports#49 Co-authored-by: Joerg Kreuzberger --- .../sphinx-test-reports/docs/changelog.rst | 5 +- packages/sphinx-test-reports/noxfile.py | 2 +- .../test_reports/directives/test_case.py | 6 +- .../test_reports/directives/test_results.py | 2 +- .../doc_test/doc_test_ctest_file/Makefile | 20 ++ .../doc_test/doc_test_ctest_file/conf.py | 194 ++++++++++++++++++ .../doc_test/doc_test_ctest_file/index.rst | 17 ++ .../doc_test/doc_test_ctest_file/make.bat | 36 ++++ .../tests/doc_test/utils/ctest.xml | 29 +++ .../tests/test_test_ctest_file.py | 43 ++++ 10 files changed, 347 insertions(+), 7 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml create mode 100644 packages/sphinx-test-reports/tests/test_test_ctest_file.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 944996747..7f2722dd1 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,13 +7,14 @@ Changelog * Bugfix: Links in `test-suite` and co. do not raise error. `#51 `_ - +* Improvement: Allows empty text and message fields, which allows integration of ctest junit files + `#49 `_ 1.0.1 ----- :Released: 04.11.2022 -* Enhancement: ID length can be configured to avoid conflicts. See :ref:`tr_suite_id_length` and :ref:`tr_case_id_length`. +* Improvement: ID length can be configured to avoid conflicts. See :ref:`tr_suite_id_length` and :ref:`tr_case_id_length`. `#45 `_ * Bugfix: Multiple testsuites get documented correctly. `#40 `_ diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 9ca442fc1..3ad6fb32c 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -1,7 +1,7 @@ import nox from nox import session -PYTHON_VERSIONS = ["3.8", "3.9"] +PYTHON_VERSIONS = ["3.8", "3.9", "3.10"] SPHINX_VERSIONS = ["5.0"] TEST_DEPENDENCIES = [ "pytest", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index d647dbb21..a472b13e8 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -114,7 +114,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): result = case["result"] content = self.test_content - if len(case["text"]) > 0: + if case["text"] is not None and len(case["text"]) > 0: content += """ **Text**:: @@ -125,7 +125,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): "\n ".join([x.lstrip() for x in case["text"].split("\n")]) ) - if len(case["message"]) > 0: + if case["message"] is not None and len(case["message"]) > 0: content += """ **Message**:: @@ -136,7 +136,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): "\n ".join([x.lstrip() for x in case["message"].split("\n")]) ) - if len(case["system-out"]) > 0: + if case["system-out"] is not None and len(case["system-out"]) > 0: content += """ **System-out**:: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index 1be932cd9..46fc8fe81 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -85,7 +85,7 @@ def _create_testcase_row(self, testcase): "\n\n".join( [ testcase["message"] if testcase["message"] != "unknown" else "", - testcase["text"], + testcase["text"] if testcase["text"] is not None else "", ] ), ) diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py new file mode 100644 index 000000000..d4c95b512 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py @@ -0,0 +1,194 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +# needs_types = [ +# { +# "directive": "story", +# "title": "User Story", +# "prefix": "US_", +# "color": "#BFD8D2", +# "style": "node", +# }, +# { +# "directive": "spec", +# "title": "Specification", +# "prefix": "SP_", +# "color": "#FEDCD2", +# "style": "node", +# }, +# { +# "directive": "impl", +# "title": "Implementation", +# "prefix": "IM_", +# "color": "#DF744A", +# "style": "node", +# }, +# { +# "directive": "test", +# "title": "Test Case", +# "prefix": "TC_", +# "color": "#DCB239", +# "style": "node", +# }, +# ] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +needs_extra_options = ["asil", "uses_secure"] + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst new file mode 100644 index 000000000..609fdc69b --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst @@ -0,0 +1,17 @@ +Basic Document FOR CTEST FILE +============================= + +.. test-case:: My CTest Case + :file: ../utils/ctest.xml + :suite: Linux-c++ + :classname: usage_test + :id: TEST_CTEST_1 + + +.. test-results:: ../utils/ctest.xml + +.. test-file:: My CTest Data + :file: ../utils/ctest.xml + :id: CTESTFILE_1 + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/make.bat b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml b/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml new file mode 100644 index 000000000..30f2f4425 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml @@ -0,0 +1,29 @@ + + + + usage: test <argument> + If <argument> is 0, print SUCCESS. Otherwise print FAIL. + + + + SUCCESS + + + + FAIL + + + + + FAIL + + + diff --git a/packages/sphinx-test-reports/tests/test_test_ctest_file.py b/packages/sphinx-test-reports/tests/test_test_ctest_file.py new file mode 100644 index 000000000..af6e90cfc --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_test_ctest_file.py @@ -0,0 +1,43 @@ +from pathlib import Path + +import pytest + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/doc_test_ctest_file"}], + indirect=True, +) +def test_doc_build_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + assert html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/doc_test_ctest_file"}], + indirect=True, +) +def test_test_file_needs_extra_options_no_warning(test_app): + import subprocess + + app = test_app + + srcdir = Path(app.srcdir) + out_dir = srcdir / "_build" + + out = subprocess.run( + ["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True + ) + + assert out.returncode == 0 + + # Check no warnings + assert "WARNING" not in out.stdout.decode("utf-8") + + html = Path(app.outdir, "index.html").read_text() + assert html + assert "TEST_CTEST_1" in html # suite id + assert "CTESTFILE_1" in html # case id From 7b710e3932a6657ff1b2f34f4e214332abed3b8f Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 21 Dec 2022 12:11:35 +0100 Subject: [PATCH 069/159] Preparation for release 1.0.2 (useblocks/sphinx-test-reports#54) --- packages/sphinx-test-reports/docs/changelog.rst | 7 ++++++- packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/setup.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 7f2722dd1..a98cb9d35 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,10 +1,15 @@ Changelog ========= -1.0.2 +1.0.3 ----- :Released: under development + +1.0.2 +----- +:Released: 21.12.2022 🎄 + * Bugfix: Links in `test-suite` and co. do not raise error. `#51 `_ * Improvement: Allows empty text and message fields, which allows integration of ctest junit files diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 27e70d80b..b8e448985 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -30,7 +30,7 @@ # The short X.Y version version = "1.0" # The full version, including alpha/beta/rc tags -release = "1.0.1" +release = "1.0.2" # -- General configuration --------------------------------------------------- diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 71f8de4cd..79899c545 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -11,7 +11,7 @@ setup( name="sphinx-test-reports", # Update also test_reports.py, conf.py and changelog! - version="1.0.1", + version="1.0.2", url="http://github.com/useblocks/sphinx-test-reports", download_url="http://pypi.python.org/pypi/sphinx-test-reports", license="MIT", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 2a6bb2a7e..3c295357f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -23,7 +23,7 @@ # fmt: on -VERSION = "1.0.1" +VERSION = "1.0.2" def setup(app): From 51ad3d2d4de98db26292060c308a60ba8c58550b Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 21 Dec 2022 12:18:07 +0100 Subject: [PATCH 070/159] docs using sphinx-needs > 1.1.1 --- packages/sphinx-test-reports/doc-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index fec384555..0759fe575 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,5 +1,5 @@ sphinx>=4.0 -sphinx-needs>=1.0.1 +sphinx-needs>=1.1.1 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx-design From d9ca80216546da7f6754acaf6b121339be075bb1 Mon Sep 17 00:00:00 2001 From: "Randy Duodu (He/Him)" Date: Fri, 13 Jan 2023 02:50:16 +0000 Subject: [PATCH 071/159] Updated project to use Useblocks theme --- packages/sphinx-test-reports/docs/conf.py | 54 ++++++++-------------- packages/sphinx-test-reports/docs/ub_theme | 1 + 2 files changed, 19 insertions(+), 36 deletions(-) create mode 160000 packages/sphinx-test-reports/docs/ub_theme diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index b8e448985..ba2fa6b09 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -12,17 +12,19 @@ # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os -# import sys +import sys import datetime import os -# sys.path.insert(0, os.path.abspath('.')) +sys.path.append(os.path.abspath('.')) + +from ub_theme.conf import html_theme_options # -- Project information ----------------------------------------------------- project = "sphinx-test-reports" now = datetime.datetime.now() -copyright = '2017-{year}, team useblocks'.format( +copyright = 'team useblocks, 2017-{year}'.format( year=now.year ) author = "team useblocks" @@ -47,6 +49,7 @@ "sphinxcontrib.test_reports", "sphinxcontrib.plantuml", "sphinx_design", + "sphinx_immaterial" ] cwd = os.getcwd() @@ -62,8 +65,7 @@ # Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - +templates_path = ['_templates', 'ub_theme/templates'] # Add a custom test report template. Please add a relative path from this conf.py # tr_report_template = "./custom_test_report_template.txt" @@ -97,46 +99,26 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "alabaster" +html_theme = "sphinx_immaterial" # 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 = { - "logo": "sphinx-test-reports-logo.png", - "logo_name": False, - # 'description': "an extension for sphinx", - "logo_text_align": "center", - "github_user": "useblocks", - "github_repo": "sphinx-test-reports", - "github_banner": True, - "github_button": False, - "fixed_sidebar": True, - "extra_nav_links": { - "needs@PyPi": "https://pypi.python.org/pypi/sphinx-test-reports", - "needs@github": "https://github.com/useblocks/sphinx-test-reports", - "needs@travis": "https://travis-ci.org/useblocks/sphinx-test-reports", - }, -} +html_logo = "_static/sphinx-test-reports-logo.png" +html_theme_options = html_theme_options +other_options = { + "repo_url": "https://github.com/useblocks/sphinx-test-reports", + "repo_name": "sphinx-test-reports", + "repo_type": "github", +} +html_theme_options.update(other_options) # 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"] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -html_sidebars = { - "**": ["about.html", "navigation.html"], -} - +html_static_path = ["_static", "ub_theme/css"] +html_css_files = ['ub-theme.css'] # -- Options for HTMLHelp output --------------------------------------------- diff --git a/packages/sphinx-test-reports/docs/ub_theme b/packages/sphinx-test-reports/docs/ub_theme new file mode 160000 index 000000000..5de7127a2 --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme @@ -0,0 +1 @@ +Subproject commit 5de7127a2ef48f5a1e8bf4c4099720d0b407c978 From 5fc68518f5c102b17ae6024d1a4bf516f75261d6 Mon Sep 17 00:00:00 2001 From: "Randy Duodu (He/Him)" Date: Fri, 13 Jan 2023 02:59:18 +0000 Subject: [PATCH 072/159] Updated project to use Useblocks theme --- packages/sphinx-test-reports/docs/ub_theme | 1 - .../docs/ub_theme/README.md | 100 ++++++++++++ .../docs/ub_theme/__init__.py | 0 .../sphinx-test-reports/docs/ub_theme/conf.py | 24 +++ .../docs/ub_theme/css/ub-theme.css | 151 ++++++++++++++++++ .../docs/ub_theme/js/ub-theme.js | 3 + .../docs/ub_theme/templates/layout.html | 7 + .../templates/partials/copyright.html | 24 +++ 8 files changed, 309 insertions(+), 1 deletion(-) delete mode 160000 packages/sphinx-test-reports/docs/ub_theme create mode 100644 packages/sphinx-test-reports/docs/ub_theme/README.md create mode 100644 packages/sphinx-test-reports/docs/ub_theme/__init__.py create mode 100644 packages/sphinx-test-reports/docs/ub_theme/conf.py create mode 100644 packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css create mode 100644 packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js create mode 100644 packages/sphinx-test-reports/docs/ub_theme/templates/layout.html create mode 100644 packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html diff --git a/packages/sphinx-test-reports/docs/ub_theme b/packages/sphinx-test-reports/docs/ub_theme deleted file mode 160000 index 5de7127a2..000000000 --- a/packages/sphinx-test-reports/docs/ub_theme +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5de7127a2ef48f5a1e8bf4c4099720d0b407c978 diff --git a/packages/sphinx-test-reports/docs/ub_theme/README.md b/packages/sphinx-test-reports/docs/ub_theme/README.md new file mode 100644 index 000000000..7bb64b661 --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/README.md @@ -0,0 +1,100 @@ +# useblocks-theme +This repository contains the theme for all Useblock documentation sites. + +> **NOTE:** +> - Useblocks uses the Sphinx-Immaterial theme so ensure that the theme is already installed and applied. +> - Install `sphinx_immaterial` by running this command: `pip install sphinx-immaterial`. +> - Then activate the theme by adding it to the `extension` variable under **conf.py**: `extensions = ["sphinx_immaterial"]` +> - And change the `html_theme` variable to `html_theme = "sphinx_immaterial"` + +## Installation +To install the files from this repository, you must have [Git](https://git-scm.com) installed. + +* Change directory to your preferred docs working directory + ```bash + cd docs + ``` +* Download the files from the repository: + ```bash + git clone https://github.com/useblocks/useblocks-theme.git + ``` + +## Configuration + +You must configure the following in the **conf.py** file of the Sphinx documentation project. + +* In order to import the **ub_theme** package, Python searches through the directories on `sys.path` looking for the package subdirectory. + * Add the parent path of the **ub_theme** folder to `sys.path`. + ```python + import os + import sys + sys.path.append(os.path.abspath(".")) # Example if `ub_theme` folder is in the same folder as the `conf.py` file + ``` +* Add the `html_theme_options` to your **conf.py**: + * Import the theme options for Useblocks. + ```python + from ub_theme.conf import html_theme_options + ``` + * Set it as the value for the `html_theme_options` variable. + ```python + html_theme_options = html_theme_options + ``` +* Add the custom template changes folder to the `templates_path` variable. + ```python + templates_path = ["_templates", "ub_theme/templates"] + ``` +* Add custom CSS changes: + * Add the folder containing the CSS files to the `html_static_path` variable. + ```python + html_static_path = ["ub_theme/css"] + ``` + * Add the custom CSS files to the `html_css_files` variable. + ```python + html_css_files = ["ub-theme.css"] + ``` +* Add custom JS changes: + * Add the folder containing the JS files to the `html_static_path` variable. + ```python + html_static_path = ["ub_theme/js"] + ``` + * Add the custom JS files to the `html_js_files` variable. + ```python + html_js_files = ["ub-theme.js"] + ``` + +The final configuration should look like below: +```python +import sys +import os + +sys.path.append(os.path.abspath(".")) + +from ub_theme.conf import html_theme_options + +extensions = [ + "sphinx_immaterial", +] + +templates_path = ["_templates", "ub_theme/templates"] + +html_theme = "sphinx_immaterial" +html_theme_options = html_theme_options + +# You can add other Sphinx-Immaterial theme options like below +other_options = { + "repo_url": "https://github.com/useblocks/useblocks-theme", + "repo_name": "useblocks-theme", + "repo_type": "github", +} +html_theme_options.update(other_options) + +html_static_path = ["_static", "ub_theme/css", "ub_theme/js"] +html_css_files = ["ub-theme.css"] +html_js_files = ["ub-theme.js"] + +``` + +## Changelog + +* 13.01.2023 - Updated CSS stylesheets and docs on how to apply the theme customization. +* 28.12.2022 - Setup and added the initial Useblocks theme codes. diff --git a/packages/sphinx-test-reports/docs/ub_theme/__init__.py b/packages/sphinx-test-reports/docs/ub_theme/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/sphinx-test-reports/docs/ub_theme/conf.py b/packages/sphinx-test-reports/docs/ub_theme/conf.py new file mode 100644 index 000000000..bdb71d96d --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/conf.py @@ -0,0 +1,24 @@ +html_theme_options = { + "icon": { + "repo": "fontawesome/brands/github", + }, + "font": { + "code": "JetBrains Mono", + "text": "Urbanist" + }, + "globaltoc_collapse": True, + "features": [ + "navigation.top", + "search.share", + "navigation.tracking", + "toc.follow", + "content.tabs.link" + ], + "palette": { + "scheme": "slate", + "primary": "yellow", + "accent": "yellow", + }, + "toc_title_is_page_title": True, + "toc_title": "Contents", +} diff --git a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css new file mode 100644 index 000000000..2f863b992 --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css @@ -0,0 +1,151 @@ +/* @import url('https://fonts.googleapis.com/css2?family=Recursive:wght@300;400&display=swap'); */ + +:root > * { + --md-primary-fg-color: #FFCC00; + --md-primary-fg-color--light: #ffeb9b; + --md-primary-fg-color--dark: #957700; +} + +td.needs_title { + font-weight: bold; +} + +.md-typeset pre, pre { + overflow-x: auto; +} + +div.wy-table-responsive{ + width: 100% !important; +} + +.underline{ + text-decoration: underline; +} + +/*Remove READTHEDOCS version badge*/ +.injected { + display: none !important; +} + +div.need_container { + overflow-x: auto; +} + +table.need{ + display: table !important; + width: 100% !important; +} +tbody tr td { + font-size: medium !important; +} + +/* Sphinx-Immaterial */ + +body, +input { + font-size: 18px !important; + font-weight: 400; + line-height: 1.5 !important; +} + +.md-typeset, .md-nav, .md-typeset table:not([class]) { + font-size: 18px !important; + line-height: 1.5 !important; +} + + +h1, h2, h3 { + font-weight: 500 !important; + line-height: 1.4 !important; +} + +h1:not([class="md-search-result__title"]) { + font-size: 34px !important; + margin-bottom: 20px !important; +} + +h2 { + font-size: 28px !important; + margin-bottom: 10px !important; +} + +h3 { + font-size: 24px !important; + margin-bottom: 10px !important; +} + +.dataTables_filter input { + border: 1px solid var(--md-typeset-color); + margin-bottom: 10px; + background-color: transparent; +} + +.border { + border: 1px solid var(--md-typeset-color); +} + +table.dataTable tbody tr { + background-color: transparent; +} +/* +table.dataTable tbody tr { + background-color: transparent !important; +} +*/ +.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { + color: var(--md-typeset-color) !important; +} + +.dataTables_wrapper .dataTables_paginate a.paginate_button, .dataTables_wrapper .dataTables_paginate a.paginate_button.current { + color: var(--md-typeset-color) !important; +} + +div.dataTables_info { + margin-top: 0 !important; +} + +table tbody tr:hover { + background-color: rgb(147 147 147 / 10%) !important; + box-shadow: 0 .05rem 0 var(--md-default-bg-color) inset !important; +} + +button.dt-button:hover:not(.disabled), div.dt-button:hover:not(.disabled), a.dt-button:hover:not(.disabled) { + color: #000; +} + +.dataTables_wrapper .dataTables_filter { + float: left !important; + margin-left: 1% !important; +} + +div.dt-buttons { + margin-left: 1% !important; +} + +.dataTables_wrapper .dataTables_filter input { + max-width: 100px !important; +} +@media screen and (max-width: 640px){ + .dataTables_wrapper .dataTables_filter { + float: none !important; + text-align: center !important; + } + + .dataTables_wrapper .dataTables_filter input { + max-width: inherit !important; + } +} + +div.dt-button-collection button.dt-button.active:not(.disabled) { + color: #000 !important; + border: 1px solid #000 !important; +} + +table.NEEDS_DATATABLES, table.NEEDS_TABLE{ + max-width: inherit; + width: inherit; +} + +.md-header__button.md-logo :is(img, png) { + height: 2.2rem !important; +} diff --git a/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js b/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js new file mode 100644 index 000000000..dad2c2896 --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js @@ -0,0 +1,3 @@ +$(document).ready(function() { + $("table.NEEDS_DATATABLES, table.NEEDS_TABLE").wrap("
"); +}); \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html b/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html new file mode 100644 index 000000000..9a87a4fa9 --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html @@ -0,0 +1,7 @@ +{# Import the theme's layout. #} +{% extends '!layout.html' %} + +{%- block extrahead %} + + {{ super() }} +{%- endblock %} diff --git a/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html b/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html new file mode 100644 index 000000000..7b50ba24e --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html @@ -0,0 +1,24 @@ +{#- + This file was automatically generated - do not edit +-#} + + From 33c7cb2fb1b0cc276f7327da93dd429cad1def6a Mon Sep 17 00:00:00 2001 From: "Randy Duodu (He/Him)" Date: Fri, 13 Jan 2023 03:02:06 +0000 Subject: [PATCH 073/159] Updated docs-requirements.txt --- packages/sphinx-test-reports/doc-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 0759fe575..2f9928c65 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -3,3 +3,4 @@ sphinx-needs>=1.1.1 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx-design +sphinx-immaterial \ No newline at end of file From 5b9f238cba8b5161419e00ee1f4177b3d7fd054a Mon Sep 17 00:00:00 2001 From: "Randy Duodu (He/Him)" Date: Fri, 13 Jan 2023 05:33:23 +0000 Subject: [PATCH 074/159] Updated documentation content and theme --- packages/sphinx-test-reports/docs/changelog.rst | 3 +++ packages/sphinx-test-reports/docs/conf.py | 2 ++ packages/sphinx-test-reports/docs/configuration.rst | 2 ++ packages/sphinx-test-reports/docs/filter.rst | 4 +--- packages/sphinx-test-reports/docs/functions.rst | 2 ++ packages/sphinx-test-reports/docs/index.rst | 2 ++ packages/sphinx-test-reports/docs/install.rst | 2 ++ packages/sphinx-test-reports/docs/support.rst | 2 ++ packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css | 6 ++++++ 9 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index a98cb9d35..3d8d9ebf6 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -1,3 +1,5 @@ +:hide-navigation: + Changelog ========= @@ -5,6 +7,7 @@ Changelog ----- :Released: under development +* Updated project documentation to use the Useblocks theme customization. 1.0.2 ----- diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index ba2fa6b09..8f8ba9afa 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -106,6 +106,7 @@ # documentation. # html_logo = "_static/sphinx-test-reports-logo.png" +html_title = "Sphinx-Test-Reports" html_theme_options = html_theme_options other_options = { @@ -114,6 +115,7 @@ "repo_type": "github", } html_theme_options.update(other_options) +html_theme_options["features"].extend(["navigation.tabs", "navigation.tabs.sticky"]) # 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". diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 267b2b596..919342326 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -1,3 +1,5 @@ +:hide-navigation: + Configuration ============= The following options can be set inside the ``conf.py`` file of your Sphinx project. diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index b18e2ede2..b7af78789 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -17,16 +17,14 @@ Take a look to figure out what else is possible to customize your way of working Filterable data --------------- -``Sphinx-Test-Reports`` adds to following data to a sphinx-need-configuration: +``Sphinx-Test-Reports`` adds the following data to a sphinx-need-configuration: * **Types** - * test-file * test_suite * test_case * **Options** - * **file**: Test file path. * **suite**: Test suite name. * **case**: Test case name. diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst index 63fa85213..f8be64e5e 100644 --- a/packages/sphinx-test-reports/docs/functions.rst +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -1,3 +1,5 @@ +:hide-navigation: + Dynamic functions ================= diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index d9aba0110..d5abc5d0c 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -1,3 +1,5 @@ +:hide-navigation: + .. sphinx-test-reports documentation master file, created by sphinx-quickstart on Thu Apr 26 09:23:44 2018. You can adapt this file completely to your liking, but it should at least diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst index bcbef055d..44662e391 100644 --- a/packages/sphinx-test-reports/docs/install.rst +++ b/packages/sphinx-test-reports/docs/install.rst @@ -1,3 +1,5 @@ +:hide-navigation: + Installation ============ diff --git a/packages/sphinx-test-reports/docs/support.rst b/packages/sphinx-test-reports/docs/support.rst index ed111fb5c..f73008579 100644 --- a/packages/sphinx-test-reports/docs/support.rst +++ b/packages/sphinx-test-reports/docs/support.rst @@ -1,3 +1,5 @@ +:hide-navigation: + Support ======= diff --git a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css index 2f863b992..929a87679 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css +++ b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css @@ -149,3 +149,9 @@ table.NEEDS_DATATABLES, table.NEEDS_TABLE{ .md-header__button.md-logo :is(img, png) { height: 2.2rem !important; } + +@media screen and (min-width: 76.1875em){ + .md-nav__current-toc { + display: none!important; + } +} \ No newline at end of file From 4dfae57c04e036830dd6f8693f41d01808bd00fb Mon Sep 17 00:00:00 2001 From: "Randy Duodu (He/Him)" Date: Fri, 13 Jan 2023 07:05:13 +0000 Subject: [PATCH 075/159] Updated CSS & JS for documentation theme --- packages/sphinx-test-reports/docs/conf.py | 5 ++-- .../docs/ub_theme/css/ub-theme.css | 26 +++++++++++++++++++ .../docs/ub_theme/js/jquery.js | 2 ++ .../docs/ub_theme/templates/layout.html | 2 +- 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/ub_theme/js/jquery.js diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 8f8ba9afa..7aafc48c2 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -119,8 +119,9 @@ # 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", "ub_theme/css"] -html_css_files = ['ub-theme.css'] +html_static_path = ["_static", "ub_theme/css", "ub_theme/js"] +html_css_files = ["ub-theme.css"] +html_js_files = ["jquery.js"] # -- Options for HTMLHelp output --------------------------------------------- diff --git a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css index 929a87679..60adee5c7 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css +++ b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css @@ -104,6 +104,32 @@ div.dataTables_info { margin-top: 0 !important; } +div.dt-button-info{ + bottom:0.8rem; + left:1rem; + top:initial; + left:initial; + width:initial; + background-color:#e9ebfc; + border: 1px solid var(--md-typeset-color); + box-shadow:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35); + border-radius:0.1rem; + text-align:left; + color: #2e303e; + min-width:11.1rem; + padding: 0.4rem 0.6rem; + pointer-events: none; + margin:0; +} +div.dt-button-info h2{ + display:none; +} +div.dt-button-info>div{ + padding:2px; + font-size: 18px!important; + color: #2e303e; +} + table tbody tr:hover { background-color: rgb(147 147 147 / 10%) !important; box-shadow: 0 .05rem 0 var(--md-default-bg-color) inset !important; diff --git a/packages/sphinx-test-reports/docs/ub_theme/js/jquery.js b/packages/sphinx-test-reports/docs/ub_theme/js/jquery.js new file mode 100644 index 000000000..200b54e47 --- /dev/null +++ b/packages/sphinx-test-reports/docs/ub_theme/js/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"

Variable

","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 + {{ super() }} {%- endblock %} From c654990346e6db4c67c112e16ba0e25ab22338f8 Mon Sep 17 00:00:00 2001 From: "Randy Duodu (He/Him)" Date: Fri, 13 Jan 2023 07:34:47 +0000 Subject: [PATCH 076/159] Updated logo and favicon for documentation --- .../docs/_static/sphinx-test-reports-logo.png | Bin 59854 -> 16114 bytes packages/sphinx-test-reports/docs/conf.py | 3 ++- .../docs/ub_theme/templates/layout.html | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png b/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png index b6cd19a909c8e6a3e7830ad5ca22038196e8f57e..e0a98bf243d80ae80fab52a7040d4d7bdaade614 100644 GIT binary patch literal 16114 zcmX9_1z1#D*QP{8kdQVAX$k2|Bhp>c-Q6JFAT8Y;B8`9`k_t%2fT(m!Nh2lkulauO zgIq^EGiUF$*Lv$jDl1CiV3A{?prGK$NQxIg#Wq~Kzw zVPuU9w*B%YuctgDy1x2;bui@_`tsIt@dh>Rd>Wxnx98G<@JP%0{=8q{*n5uQEpl|O zIUdfk;`G6qhyqOvycc&uA_j&yENB^V7A`)QI+V9yj2`a&tEaa4Vj?O^lWQDq{h;Q7 zlKnL1y5BPCvq7c(PDP59sg2kXVab3?fhzj z(Xh{}(q(?R@|A6+yVCVnrx%6>%luVT#kGMF(s%{=;aKIh3Hkc;J!0V_Ny68tKiLxG zs5EcIJUaRnh&lB)!zf4cF=}DulQ03C>~+l5k}Yap6NiK zyc3bBY5I7EKh}h!r`N=7j{9jA^&$^@Dp{XVT8@D@=#=x~ogiM@EpN@X=8q%J7bs@d z8k-Ln7x73LRZcQTTYUJ}PaKtO{YA(gxP&x_5;VfLV4BEDiKE;g|I2SHO@deMI!SB0 z!VdmKexZsnWO>4ix7}nEByO*x;@o~rGt#l!fr3JbA|w7n-E(>;=e3r4@6TS5!8+zS zF*S@96Ota{hZ^5WzFRT>O8lkDB^mI|itEIRAeLLjl#32Q%H2r%;q?OnF~XJ)1@E=2 z(BR(*>`~M{)F9Tv!#noRv&^$RozG}K9l6@&a~&DVMkg4OkXwAV$Q+M#=Rsaer;;e8 z5sUj&K)j58yy?v`3LT2V@$D2@+L4iwPtDE7_V&Xoy>BC9VrZzSs7&XiI!%li_vN=_ z?`nU+`BjysVLp(I|A0;&@Amyicrr3F%U&C9{P@Jgbi~YBl$l)Ci7EqO=v5`V$wpX? z#d0)DTU$)2Y=#brdQ(ed1uqM=>n*(Ntb-0zn`Ha$P*4)%jZZP9ZC*_br7bKgE+LtTx}@Q=zc?T^!r> z+TxINjU};&Zk_zZWkE$$YI7#7I=Q$I1b*_^(MiSN_db4)BEB>Iv7UDNcyr>fc-CKj z_u8;-b`&NQ^)gl3iOBEY)lE!HU=`J?bhrmG;nJv`u%Y#B%4-8De+>sa6d&82M+v^+ zRo-bfmF@g7bg_e~r?1bMgZw8I8nL!NtMLg5#ZPzV6nOS~DFRTGD>SO?*j9IUb5){7 zP-TA~YTF07c7Anx9T_TiQRJ)eBWbqzB8HrMp!oB@-IhHJO4(!vDjtVf1~>kk1T_zM z*RRvlIw&R+?-ZuWM@)O;A}>E_F5-479u^S^KAN~P$YEw-IXFG-9T?aWaek+6Vry&b zVamh9<9m#dqMIyIEHxd=e^II1bRPv57q_*oO-4b1mWwM{>g^NM{f?Wfx3}&QoB2GZ z!m#~ONyWiIkRdPGpV<7sijk2~K8HVLW5X)&fv6>=K_cHRbXq4;JO>Ad& zo83`F&#)chV)8P%ZKDtMyyxm^3QicU*ta!^Wps9S@vBxdU(Py#0ekC4Fqu zZF#vTnwo(@`p;~$nqG&$ek=BDyPvN5d*v5OjlESjr)W&wzTf+@8PVT4Mb7T=0vGN?n0e;G^vnx!+);7V;E#%moph&l_%%g zB^idLJwvxanF~4{7YPZR-^^nbeRHg2I<6tgg~3!BFo0e%F2Y9rI}1%GOpNM2g|OX* zQ>^4uOl(q0*v_z&loY4euSuRfdGd8+M3EsyR;9&b$FB4Z8anzd%5O1briYg;d+pCq z*p0tpsC=(=ToAqr^^^6!A(T6n^jXYtqvj*&{QFAO<>J(H{D=LE3yvJOBYlzc%3GPJ zhX*UYu$d2EKFtw${ToiT+unT66Cv-#t*xlAuv-TQ2ZFw5@mK#&i&V?tUet3P>g;D4 z8|-INPj+TVnn`|rFqQfi`>=Pm*_A~`S8_K;@w3T`hRjZ;abgs-#m!BbtBb!l{`tkl zG~aEwQSRQoTU=Z$q^qa*h(G5(6~>1TAFQzvHj!_YIAao%l2ppn$^68;?^+VyE7z+bDcSzQ%}cR_5rVOrXb z<_g`#!J*~hA-;Y4_SVmux6#q}q~ab?v9l-i^-2GzF;wb}d+c?2#{T8Ym+o)hmZ75d zyLx(h*kAAJc^_{We|jSkO?+^5x&T-0h8sKB-|uTmgZ-4hK3l=PhQHA1{MVVdyg2Vk zp@s76b8|Dh%c}In-|e(2O~KJ+`4VbAK85_A-rl0gcXu1o(@8@#uczuQt+>cxGezy} zn4#77(P(@B-Rk*KrR(hB@y>iOmCNo|yv18*xB$ud>IId1wb;C(kdC-IQQ+g&j z>6vda@6>|No=`%3yfV!$i9i#XjUEW@TkX!y_gp zF0`2}$J7jb`}VDJnYyHD%k|a2hqHuLIv+V~PQRC_6~YdOAHigL9q){OwEBhccGBOgXC0E#Q0EV5{;cBGR=Xml2#ZQrB#qaPDc7f)Bz9)aCB*M*5 zjE#-;KD$N2dmt(_YyRBMPEGw@rJMHIeVaT^2u|%oUI)^$)tJ8j?y{y0#`Y3%kcma; zEgV7jA`|f!RLT`BfNgoi=Msu5av49@^7?5KQFhDrFz-V5^mOI}dd2)n8&1VV5(cQi zUigvD@>dnis;a7zrMey0qHdDw^qma(g>T>D!agymhV;S3P#5?199^urJ9Qn~dI}|? zImpRSWBe0O1WpC3Wq2)b#{5YZCOk6@@2|jY2 zp1L|Az%ckDoD)$K6KV|&jsO1pPZ>r#F^f(&+?k@05v60tRim+{*XDRhnQjv+R3#NR zHxUH|#nW-9lpmGaFQIpq$fbQ79eta{>v*_amWD#u(0ZXK31Kd`C!_+|M#y%=|q{d?)GW&F={rc zpr=#9k+)&9iv&s`v?;dlar3Hw0JwQh7HCw2i51{MUlOa*=xF%2@uMmW@jd;PGDW^| zSGdH;_Twi{?u+(B5gERJ93}>zi2`6~>y|Q83Jg@#DviN5pHqWrKi|WC`imM06b`xk znE9i;$6Vw%`1tr19a=s<|MV8J+uDS%dIGXS92VMh*u-_~EpTcc9B=O*JH(^~!69E+ zT6!TaF3y+#j@J6#9cMSUp~mGp^FctH7WZMWK>1rpH8k_uuL6cmU{NvYLaC@`tNk6#yQ_Q%@yDze!6US@$` z1=Z?Z$X)wgz~0q6(#zeT{k`Fx#hdHB8?CzHzTpQX+P;?uz1AZLl_Cb{r|pe?fM6Q! zXDl?Puv-S0v^V^$`OZg~nVGRG9%0=BR3uq0DmF4^#Uw<l(wQ%-CbRaplPt_7jDjp7bgwbO=|zrD4i#H0CXktJ#}y^ zL6!7Fbb_cSE=ByDcj$~&l6$QPqMF2$BIpW~X>>5#H)slF;%PE5BCQB$CNrKDX6#4} zDisQO9U|Lb?HGTlW{m*`Cg$(5YRMvYZ-)|9?R^!3ruLzQ+4KY1@3Xe z?REyr&<+4xTAV$8^hmx)GL|MX^>(DjhPbP{yE(uqi?o}ariGZ)cgf7!i7C%CGxbGE zE9nTZ{NYj&7PhuoD;A3}|M{F$A{b0j{NNtA!;fr)Q>u` zv9UNOCnw2lhEJe>0bu@6S4Yjr7zs0~+MsQq>kV#Xbo9$AjiQOo|6cDt(y2;SEs-TF zQwZd=95HL@Zh_$t*7&mZeZ@$cu;d^c6kxsYxeHXzH$Wx#%vn8F`x2&d^WgNrSV*JE zycJGDy+s6N9CJDrlexVL+N@rSLl za=g{g>N&Zo7=Gigp>|z#?mN@mGsk>lckmxQva56WyEQ2xFE5|^x3#r3W&pZ$^iQ&m zo9mW4ckVo|uyb>3XkRE~Ikp>=*&&={pI-bDGS%)U0Pi~5I14{!dwBMD`zM)*!GM_l zSos9Ce&L#QVWBiviK=x(PU-_+Kfn6ffks#%!JV$;ORHv1%qSLw8He_}j|XJ5M@Ops zEyK;SB?QoX;lPTXAFh?@d}J~(Fn|s&^JjqGG+(P?1VCl|VCpkX0JFGH1fP2e)6jG? zU4l^x1S9L2X0_AxrB`rB2i*HF2vo%*#azKi*^*^M zkrZr7i1W%fAUC&?+;fF|zLlw!76(mjm-Elf&H~zennb6te0Hz`JNvte&)@i*?ym8V8#_5Y zhrW~%H@M~k3lUaR!v>cDK8{>EVEhqLQOiI=GQ?i2C97SzCt8jELkuNau|2g*d14rF z#SLE{`(1&8=f4QS97<>JTKo*~m|j@;Ns4TkVrkcxFQ`&dQZS<#RSGcxh0`)IAzAzb z3JN7(UqK{QdH1eRoypnBDc^3YE`z{G+EZcf;k#>WByiAccHv8PcXnnMATJChp(xUB zl@(7?Ziv*Vw8W$#)SuKY{>_h$jt+-R>7DJ=^z<@}Eocm69AUfD9 zh!Y)k;?GXLi9-M3UD{ZIqoH~ev4|7FQZ^t_V0?atbI5LLtez*cz z!@$5G6<+W=ef)ZFer-ZYq(ml(E}2D_7~UIDu^24M`Cg?>yWi=KEz*e3(^`Zme0h$Gp99ayde_8EM z!r5UW#6nK2^^qLwnMRg3xD-6ImVjtt)h*@avE8?S&4i4#ZvbSnZD*}UcYACSXBD3|kg%(;aHLzHFUki7iWlQuoD z_2OYzL>QFwo+~&iAo!sEPnw!|avQk+=hu6zD9D?6DfH~wGv}@Ej74?8IZR+gqv6rY zCgU|WHlpDn`@#2JIJThx%mROb{7|4TARyrUdx)&4?xXEb;=o^RK23;&x55|FC?+74 zXrF{=RIm{HV19c`!3Me&00>atHczqjm^jK^hcmg88P&o$%m)^imxEJMi2VKifsD{8 zWQqf#{N(qKCzhNWd6^6kdqzU6-=lfBom-O?IBGB9Naq7?&&V|g%>3!oCuAYZmJ|Yj zlF#6vRclem;#n(tD~x7@D3l0aLBemKgFM?)$BZ9diivpw&FSZmVDvM8p`D{6E%)V! zBl7p!nt23Gl}5$+=|TXX(;^B~B%Ilxu`%T?Ev8b@PB@|AmrBD~yu8}qzJ0@VbaXt~ zTX1AZOW|JI-W~*P0Dgddh%Q}@Baq$n8&dv4DkB4_EOK+7-OCI+gyA5T!j_($owXA0 z;;_V<=H>^}=|Dkp4qJwYg)ObG_ky;B(<>+_xPNjoQup|(8IX4(uuOZ0l9=@&#x!Si zIfp}WJ^=w&Xh|o#bAwA=Z}tjxKc3rm7Xau|fm+gexd5J`uZB1^m!nhF_i+bTZCA*5)u+-Kf6Z*?^{}3HT%x4kjZ5X3FB-&`Ky0+dCbAJEV^9cKU2sM1MU z^Sd}dcV6zk3wlUTz2&HryL->qufd}tH`(wCqS@6FnnrL-ivS=UC|t7LB4{f;)SZR~ zwB(&CqK|~UxpdXIIXF~-SrKOXta!mI>V0M$s1Z=qqtD-GJF7sHXK z!}I3qGz@T-iZ&pu5B4)WMOD|Zd4u2IRa8`@bC^d_i8Qy*0iF<;5Tc`}kM2*RkA{1& z{44@WViFbEKr-XgcZxX|sz-V2m>^sbE%^Vd(l&>3tq2&Y=U7A;yY37^pQ0=GK3u&E zTRPwxJ{x>yIS0HL+7jrcNEHYsOt_l>(K8JiLBVWzudGxS-9n8DBo+h+1^tp|u(=PW z6F^`j52>!MMk>S$G{evVypA{UK}qXdbD5o+13v2eAv2g9292<=FrVbB;D%2gn?KH{ zs8{CuSXN#50KizJH8nQ!*xrh$sIU!MZT_yC*W*`xlERHi)5`y?^O+2nh=|A&5q~=~ zQfUUg$dguzDy{O7>{^o^tVp6;;tj2IkCW6(L-oo=TH_EyCq;LuqQcZv#PE4Ahg5P# zH}&r(vKyU{vS^kc@ukYf)974RD7H!#wN#w z`+*=l8~@AUQ?8f{4GndI8KjseJPb;Av(KqR++ToBI4!@6ii$u}{0&sV>Z4Ah!`uLn zbP!#zKr^=Ni>Csp_@VD1IyvRUy*|gnorR9P&Q8&CjVc?D#~JeB&d*8vITVl0&+6eoRCFi6l}r=_1YcpZ zwLAQU;C#)tdL^;7p9O>9OG1t?5O=2|3Ev_V8*BA)g$b5Y!S8?V-?uf0_m@LjjOf=+ zZIO9zYWN-TQB#0gk{Qv^h!o(sZ~m;I09m$qzP4h)0NRp}|IO8F=#xkh2f7?`?H9kG z18tK9K%Z*A!7>R2GTvaVMh2mc% z+W8v*IuD45B#exV;?{_;ZXsc@*U@h-$N6j|lmkPEjjaW=Or$QH@Kov$)=~^7;ewi= zN?E;BkCmRAn|tB_6ixF1MKtS~g?8;@oboT_$B+6&3AL&lS7&+_ILw?*!aF1IpMnA6 z)^7eE5bDA9<#?jQ&gcgOQQGiXLXY#}BC6x6@3D)s2z%y-FO`}DC z_h-HLGq>4r*!*mNDSQRQ)FRCegZH1yL`CEyF?+~w?dUd+CYW6W`1!AN;fk2;FMgSA z^GSmV1W-06CnslBiW9uaR^~~s{lyo)0%rueys0u1^kmgFs%85}r%ykqP;c}$u^Y9F zq_Wz#jD1pBNt;FhpH;6h$N}xN-Gjylf71GZL*3HGh6!~JU3yc~Woi|1#sWE^%d`lCsIBC|wbs*lpG(h6DRu5wG+atX zTO?}D-d9WkhF4j|oy85Zkw#5l;`;OCEmq$=h4Wk~^HU7qCA6`4t@s`R(5{7LWb(Z!GPQQ050+GoamoH6U2 z(O>vop>0UE1xzoA(G_%>E;tIb8br5E^YeSH-c^nOR$bPge0Z+S_bbW5*rwAzT1ZIu z)NHd!E_T3@7C}RZYr0s{%!}f$bNxW0w~F$KH0rP{1VvP#gNycX0Lq#s&#?=O`vY@@!=^N6@G%PDLq?PmkeNKN?OM{3?+ZsCZ z2G*m&P{9i_22csn>0%$)P3WfGJv}nw&wdjqfDG6diZ@lx>USC2+Bq-~1=WoJC#*|M z{E8_eG!z4*ZlteLq6#{@aXR5^C#TNwaRM+j;fQK(R1nduzGcrJy;VXa#sEKBr(f?p zD4>mk@@NH_1^7!{J~2O^3w$UsG0{Zpk7l_#V;3K&qN-)g$tBzb265s~=O~q}xH8e6 zlAGo9h=1K)n(x#L5sgZqTatLx=pC6_^nwz9=Wn>Muz>+Vu?#F#grua);i?Sm`&-GPFH=()fRftA99(4z*Axre#>MYpVVQv4bNTnDA>CB~ z5}|>U>D3tCWH+EtQNV*V5KTPBg$cNEsDM*94eH_yq}@!78w@KVWYSDo$>? zN%Fnin`@zO=5e9aDR_tu4fI`WivYLH_k4@LTjG+EneJU(;n-gW2cwaIc&1LRRFONr z64V2*a&v0hFQVWL$iFH9(~b^8zfC@z)o6tX=AHLMm!4_Oe)YKSrQBQ~p`44+AY2RQlA%0v_o^E4vb} zN}Ge1N@5Y9V*?pk*Rx`1?-c0#rrY#hw}N2? zI5<G4klVL|LjEsZhO*LTnfR{jV4}!Z-Oiu2G<>c&H_uOAZ1y*Z1 z-|FS|=T`zy0~HVgL>7-i<-9 z;sdOb;F=fqy?YM=@1U>?U2)zIjV&oj=XWpvAIupA|BMCt27M(9OOMZ{`#fere1CUw zlX{QT}QYp#PP z8U~NA&C1H!KRCb#3_OW?+hH)?c0vQ~Ra^dnlb1K@9O{8EU8S_aF!@IoPuK8ZA z5+WyR-$}5MkUgYn=pQ-sHCW;v$)SS{6IoM%Aj*$tgssrFSacePT;mskDsWhj)4+ZA zKtDBP_}c(L8_F`E>NmgZ%Dkubecd+o3eaVbh*{0PZXndhtZHuy26~j04P~;25Q~08 zSy$=Y)6l>MQ~%H7$A(r5NRjbZlVcv2v-TYV7IaO6`v_2fk<@vr&iSc;Vs^fx3kOGj z2HxzgYV@jcT7BkPjk4m?Kvd?76J0obmK;Wrz^WkZr2YGz=Nx6);O6(T2asryc;QaG zTkQRf_#S>c39mbwq(ERGtB6P9WgN{$?yu=X{=yfN)srk<}^Q@27mm{pP97A{(d*)kG1abRL86!v`kM!nthAWY0myqT65u6cu7#agcxs z#Va0IdlcWlk@@B9J?eL&;JbOg!BFq*JtJvG!icC#JxlNz-h)+Q>oA)iV8iq_XqcE7 zoAkeU9{Xuh4Po%mkU21Mag44v_e&D+k|$eu0tv%{-y|e}g-dLs!F$)5pj;~kq4*|r ztU?OcU(lQIqhfEX*AbG5q^^x-3lGm5`Y+jk%#=2&P?b5?`S{<>dLBVPjVYz=uc@gI zwtEK9&ECYuD#S4sS^6K`stCBw(C_4H&R%*MUJHsP$v_KZ!G26o+GjO=x}*aD1evdX z0M>dde4S3a;McpA7r^t3sv@+I5fSAZpT-8Z+3%ehg8ryxpQ64u;i0+5A46hSSdC3#gygc*vb*Y2AEnu6=)nKLl?QP6>+VX`rup3FGb zd;hhGvAB{D!Y4Gw}QS`x~}r@B0Y& zG}=$6Zu2QoVFcV<@q+zk41+0L50eZOJ8|TyYuD2OJnHK2j|9y3!C{Uc=&8+*4t^RM zj6CMAg3`OOXmmPSTBIHY|a$Mx@X=)Z`WL>R#!I1*b zco>p=v2ok3*sG!Jd2v*SE;NNrqFQ%YAGd~%J`}$6+jmStcZ-$m0(Ij2`rqC;_?j^z zj484(xxa!zv;mGvW1>pw1lbinm;uJ=J++OE-(ZgcII2Pb5E4jtv9ZOgG&t?2xp*M2 zRbuv^+Xh}1kG%r`_OBuH15z+x1t@D=7}K}tm2zny49d&PyY-_=4(PEpKoAHcB7y7i&P-aV zQr`0FYG_pz3&a^LAUh|a;cg+Ad&lhI=>Jv(a;n1<9ZL}GX}(`ZNJhpe+mb?z{XEsI zj+jHGQB2zzyj^*Bq<@VX0nIxKuqN5ES9%BpilUIXictY@DicItRdVw4DG{~CFN;Lk zK+`7xmOwY7%s}`*Fb213(X-UY6yAG8-~&+m7ApcSMmO)Z{uoyH5ua*6z*EjBRve=W zgjL;8ue!1|p#sb351Wr}J5woV(+B$tpGbTBZ$-&rvCg+jL&}8nBV>@6Ek?34Di~tC zJ-xkMK+pgYD@W!6%v5%h?g)8zG&D58l#5XO@70;exoturw8`r@Zw3N3!I{6k0+F{p9ub{-JS!X z9=tI#-5OAKBs;*6cG2V7rv`pm1Umq%V8qm$ z3}X?r&=um+o4I#KVW|+M3;8t~$EYjc!Nvw(G_*>$$pvg`7>U}=F0?fQhh1+q7R8eW z*CfStKRHoJeT~ca*Tp$C9zT|8y*ilzx$?PP_jC2DSMk+fhmw28NA&dcNmTei`Va_2&Cs#di=p>~kQOn$jJ;IP0bt{MJ+(e$ zAduB<5J}S@ZFEvO)pw)hKzga0-IRYUQo`rF45srtmJJ@FRmh))0bP|fQ3nm3~I zJ^XUBF*aDrOv8r_FPf>T`?}Xp$dIps*i$pzC!@E##$36Kkv!v@4_4FXE zPC?m7a5@(@@I>_GstV zuV^3=CCk!cg?+6}eAS^h)72FMa`!}|z3yg}907}Mqz4q#roD`5LojV-=uh23qRdIg z7l~G3ChoGHZLz2_@QtrrjXD#fpOgU&H1I#uAEV!jT&IJ+>Uy?s40l9(DrrnfOB)8& zNdP%}n3F&*kfz_=2XteV+Vvz3H~ULn@H{~_7!KrdIef0aKOStarGdHjy=nxk8#RdH zg(UGlz5nRHPM^KDUKp9NaSPxKL7xF5^(FAcBi|jc1vy<-`{YOS*p*Vm8>lG}1OxvKf|x`~XJ@CK3`h#Hk};$~cxVvqK;}JwlHI|=@~(=|U{+rT-=7T3 zH5T1QF8*Bz%9-E66nY})*_r#&N7|1*rI(jtWn$<}Qb0~I=+(0=uiru>Fd;KDDkKCQ z>BDb~6@chdFlpob`n6PvsyX!$?BoUr=5Ttz2MLA-klLNfR>p#2Cj>0{qRNm^@Z*1?5q_yjqhUHn*Fr-sKAqlRt+OMBq!%F^yKqt{|`x4 zF3s7n-}S&+^(G+)g{7dw^w!jlby$d8*?10PR5{W&t<2;Moc z$cJF$9B)lVLxPrc8j{MSAn?2_P|ly&L|1MxOLVuENUXoD`GjKM{uAaBByf(3~P zosTvWurtW$$IlwWbpR!LZQdy`-^kl2{5C2IDG?lT2#zOtxDn9BEy?7J!6yM8LF^SZ zgEY4h5Yf|{^g8*Iv0u5&$UNWhJgV)Bc<8tqBPQ-cX5ovCr>J*GNYdp0!bg3I0?BEd zgzRi)b*2<}GAH1jCn#vTi_R5cPcCJqQIb@clZT>Ls>4JW!$l!SbX79*FGO z6Gl^0Qg)7ggMr@-kWB)DyVySmw@YDO-XixYg6x9{BxEhp_Qp%1ujfB&{SHTjkts;u zd69?e=ec}=k@Gs-_FLdE-9xl1bnOpzx4=W;mJR^{s4K1vLRHjHpQ4^2b0N+vm_b27 z;gMHR)GlCtQrffVfk%i8!GP#T1rd(-?-?jr?oZWpTtjw6^qr3$%merpp5Ek*Jb9p* zAVoenObcM75tj&)4KIyR?+v=j6{4gx;6HGIs+njf~U6 zX|WR()FKA`&s<_;A`^6)KMTF%h^7`tcNS(>GH5U&3(fX(*;0tgd0T87N`+deQvmDNp0Dl09 z(gBVl5lUZrA1;^8_XsF8keRT{!j6fzwzuZ{60Fz~)r6iRkWYAE-Y1JFe}ffmN(>@n z5Gp!mzG~UVSPA-F9D?gXtbbgwW+JRt3A=Njihfc%siuewuj^F(E6x%@cx${KN>r`^kg{E&zTX2a_%EH-ogUgyW-nLVX}CyspB-@p%L~iYMG$T z1mcx19&Id!idTtW_U>cK-}dZ}D0uk><^+BuJ{<({N1GssFn(#p*3*W>(yNh486Pc( zBikOxSY>oJU#&~;=4JDoX$H;hdB~r6q7_M9rHyjZNAiH?1vx2Nu#mE{X11vixlQ~c z=L_`AH_m*Knhy#vX>jGWZs@20@S*S7+1r1Bi~@!;GVu=?czF5- zp35;!UK~Uq@SF8=?U$e5y`|JZy;u9Ows!Fig@63K2D@esm~T`|e>HN#e%Ge#dqYAQ zyt2>Y$oxcbqLm~f6pM=_IrOJeA(=CM*C|71?LR5%%urwT9Le2SsrW{Vn^)k>Y&9{0 zZDoG0=S}b8FltV+h3s!~!v$|;9k4E}em4u1z7EU^o_BT_X$BLkK$+oCjEjR{N3av_ ztG<#UZBV6RvK4Fu%pYg0j&h85o8j>e3+v*Iu5at9@&s7KfcaqkAhg^N z`1i^G^YPhwQo1oiFL^riZQCTEVNBQy*>9uGgQaiKC~Z&mzSJ zke%bb!AJvbT*pr^$=2I3oH2>{)+ba9WE+RXnFP?J;`t;aVhFiPK;#XcPC~gs|5`^) z-sw&Wk4b#IfoFJ-dJebEvanDaJEl3lb9LIBn~F!D13&XKGx@@-hi1H2$&c%@3?}GzxDOnX0=+s( zHec52;p2>3;0U7#W0cFtiUnVH;LKu(1(|kwFP4=Bdy%C@)A_7VYA|Tz}-5}B-A>Ae2AczVoAtK!Z0s>Of9TL*rDM*We2uQ#4 z*5C7-=Zx?D=Zx{a{~a7KVBdSMz1CbauIrl1S86Kq*Re>kkdTnB-&2s$Kte+4MM6Th z!n^`kd>VUkk&tdi`fBOAYnXabI=ebq**aKKy8Ad=Qd)Z3S|K5MPiH6DzMT=M48Alc zY(P^Y{_M&jSAVB|<;Y7RyCB6LQNylkfePmkS=3OYFq(fIiQYDXQ5v2Q`3ajVGAp4;W^D;I9Qb;g`| zJ6}&P*A#zMa;k*xy?-OJ!x`&^a_tuhi`f!m)QsEOq%+;@lTo}Qf4B#jyKM_zH(~9$Y;-{S#Evv zZ+EJBu8m~$Kt(}G&^Szc$% zG7V}Aiz6M0n_}>6`G<^}?2xr#o2Zf3`%g#`OSCj-`9-h4jV)6b=jFGv(f#CL)t=A0 z#iz*h#EdbUC}`ckIvgFw^VI2`tfIq%*zh1<9X!FV)-}ZSF`_0 zU{A4I%W);?=+jaeaPe~5>eYKiQ6O|h_;|{RB&nO}(QMSXXqfd{vu|cP&mwCN*4?f# zR&mb{KJy%&1MiQ1SQ5YN%}!}W{a7f#);@Z6@7dyL4#{q;>Wf+*bmtVA46XCS zrWZ*XX7N|Q?Pd2Oow#{@Ns>#FKV_yPC*)+RwD(5-VD{?UX@)z^ zi3Lgz@~6oQGkGVdA|$5_^Izl>9*AWJ}9>S$;>ZzO$)GDTTfeIa*8F5EBU)9_WV%5B>(TI?>;QOGaw z6*CO|3p!i;C%BJGrz?0)RrX?(NZ!xROnFt{c(;*ZX;pIj^hOEJ*H_mYD*7?euw2Lb z$oVUIfTf~Xndz!#PtC_R4dT=?%_KKwTD`HsRk2sv_}(-|TT7UEiY zNGDOYvU_iZ+(gSGCgc_^6}jr;X)-P$d*Cvn82^+E8~M@e$2j2|J0|0#k1b;;YZilE z#1&Z2`AVRNS$+K2!Lw|n)x160M2%vOLwy@9t611BNb23DomlJ~>IzLNuU+Lk`4`3% zb32W{w{NU}C?`8v3gI#9HMtq&(dId>L_ei4!q#`C^@(y>2x*PV{cE(yG8&CR?#GHh z8Ln-nHPR?IKbUj;Xtsg#;GQGaJ5Hqf07o*y(S(kC7VO=(>uJjJvolg!*s3V3_N2kO zYE$2~QoNU6yHLA@=4xL-m&$r`13yhehS)NOoqFwIX9oVV7zxdLHKN_yM>OZPEOO#p zRIIEEADU_zas>JMJeyIQR8+Mdp_BQOMC)I-FTAaL9gpTDt*BLIi*DK`w2-ivNL6ie~(&|H$EiUtYRfp zp?b`u+e>CG%{>x!)tygwF=X}d-DoEZC2|CMe(qyNP6qW6;??)dL1&~yXj$Lb?I^P= zBx#0ktR}o~ud7GN=#p^aYWDi=DyL(GJv6Q0p1FI!#1Q$7f&T1!*KHDtJ&Di?_^VpaY|yLma8&H2NVRsD(P+v`^|zX%UL z+6%9ypcvK^wg~-_-TWoTZcctQaP6L#ECT($3Ab&n4|ExFvjFSQyoQ% z9*Vi~y<7IvT{8UwN@sq8$FAc(-*d)z4{l^2@9tDmy1d8ixoau){rbs*Tkg!8gPEQ| z@ux}z1By#mIF|3~JbK>IePo33=v|tnfN%YqclES*XB8r;E$*D5lQY?GmJAwvUm=yZ z1qVV=lkz;n&hi14Cj?x^PL?^P?3I)lWj$xU#(%$rrG~=aX|4xI4~6y`rwsF05C1Xp0oe zJg6x#|AP0OWe@2N1CJ!-9l;sHMbw;agD?KFNQ4zq_QP{`E6tGbBqhmYrm-jOZ#68o zN-~cs5#MB4^g~7BE?1`?e{b>8=sh{|w2k&u^`{`Wv`;ZqIeUZdci8SLKT&dJ%6-=I zWzg-DHcfn?q$NJj>IVfal(be$LHT_&7t`lH!U9z{vPj0BVxaIx%U5zO3-KGMK7MwU zJIM4U(#;ZK!kd*cNVSwvA{t*!Z}kl+D{xv6J;&^N8~K(FE9w@qp=PtUwC*iBzT<|p zpcBHncf|F(WCmBtO3UuNrWmtdpAvp|jjcD0O1t~qT|fqhgQq)~km}-%>dO``q(li* zbi2X2dD3=`8{@xj98^e_IEK9;&vr}6!{g^wMC(+#8`tln&m2Zi@pY2SG6XF{jlJtr z)#rB@zhrW^qqKvWm4|=IVmt|+zA5xE(J^t)4VMbV1B>+BDD=`={%9L*zjl35v|u_a zDd+2I<_s;a*7DJf&V4<#&r{n1xN1WNPcn->-jh73piZ!t$K;F*EWuSmvuC6wq+m7s zqEKS?sF|EL_DKI_@jB(IkXw3Q)|0UnBuqjr_VIRc_q2Q@?Ih`l$jxp_78H`bzRR!S zaxykTNYYE#5BEm7v86U1*z~hGetjkwV3k9%ght!Z8XINv{4Nc~4R$o_`Vifh>f;Sg z^-B+oIPaR$lc5K@t_`l(Xp}hcp|;>#h42k-b)@Qh$%{#>%-Uz8-@^YKI*hD0 zm^9d0862=DrJ^Mq@q$QFTJz=0@q}8>c;A*g9_{J1!KeIX4ySem@1*UJOpWkF32+F5 z4C+67PUr5Qqfi1z^4_4Wa9AxE^-?845Laqr~z~vsn&vuZBmG-3Mt;G~aC#TYU zO=^7YdSW8s>QHCKv{=+f7Sa;@nmVmvOUf@x($+YvS2?oA-ep8OOHQb25qiZHHZU3l z&}^01?ho-I=P%J9vC`rFwWc1{Xz3gL0Ku-eJ^)^oVmP~B`i>s zRr5+3p7a|9ZwECi5R zOxEv*lJ#?r5)rh`&NWZFo1+9f_PMeukz`1BI_Z-0VcU34qQ7f>LG@b{dD*_#x!q4% zC+0C0+Y9#-f&rS3Gn}C~;o&mqn`kr?Y?dpzbSZKVOGq;ZP_VIY$8!Z~d-K;3Toocm zZ%tQvi+g35(uMR1#&L$!T@rGPyB|#?t}WKb+4dxlVczz9!H_~IBSeHFNHlaElYxu9 zy_EdZL*HAepA-#DZic$tF?;L#VXi=LXeyqDG7>eP^p$Fz()6vCTeyjB`q|+dl>Qhu z+H?pfrwyNSs;NHQ2wIHPN8*~oA=m7#yQ-kZC|Yhk^3q;*_~V<4oR^`QxA49ik@G(F zR%3Z}1tZSkqdiK9!ma4tyZ2J9k)M+#2eyrVvQ%5FCUGQt=!YCRJMJVDcxUbiKhPbU z<7eoNYqMlFKI zl#iAYGup|v*e^qK(&8{UIoU_&Wo@RvjXl}mSr1aVh1<75Bsi~zY)SIQ_#qR^; z>tFis&9{zx#>Ds%<5%9|{XQ#*T8SfM=lLfs`87v<+(@H$x1?!oK9~IDL2J$~eIT{! zhHQ4Wbkm75uWtAz@7IU+xeJ)1Mb}i-vT1RA_&@34NQF3Jjg@b;d#|4x{aQ}u<9?8# zf1Oku?`PX6HO9N|Gdu6E94kzyk67@(d-X;d>2}-0l5CP=!*{v{_|;Dy$TPg8eWLs5 z#Eksr1A-0Z=LrYM6|P*>-k%e`icR2-;JWPMv5KGD#IS4+g%(fRRB#${eYmpAkns?u zRVX8SBYe*xsLS?I4c8m%sAoYliIL^^LZ|*$FK+h=rdLJpdJb~9TQBkS7 z>0X14pA?lUtF|T8ko@ReZnlAzYK5xmt0*OO4@;GmheQc_Lym3Vhl^+TW+n98d{iUv zKX!aVxpJi_=H1J;m6toOf1JMJ=?})pujjyCT6m2TqCyuwjTse=`$5~{?43zZ<+aN< zysNnp=U*$Hi>6s3mwnA%uc_+C51f7afrvidMHflXQTRR6yY$9t7BRF3rMAv?FW+ah zy?tbc!uEG-e#{*KcxXub}w7!>js$sjLxVk16bn9%xgi>Ow1MVVHxtXi~a z&*Ng5-EvNE9XRn3x0BX9Wx8|2KS@-U-*b5q+3y=okk8uqS`=3KI(#NEXeqWnsi zboS@t*JZ>-6Dy2^zs0{tyB^hsr)H-_ks-YMBZkKDdAX0?or6ObUIjW-)6wFryLnUn zV|SkRGeqaC^S_f3ACbrkf39FWdHW`cpy#&S`kHw1ZPxV)#;f7IuZfh)12k)aC}IJ!S9-WJX%|tvUm}TMh_|y z+WATB?n(>av@q*->a{Jrsp(<4M*^e|{G8};l#0a(dBw_Go>|2e1#9-4Zx)>Jn5EWA zdf-&=|43rG%pfC75h!2$`NOZ1`-;k`_++|kV0lz~z42jo=sJ1^n#W^)H%aTT@=~uo ze^MT?cT(nKv3PpcHp%8V_4E|i(ukOKBrJSLf~rS19B>F8W)>8lzm)r;BU?>qN_X;F z^*xHm7@iG5d#(0Ixrztw%e?isze_ccCz3`!m4iJH0U4;HJ4yqu5s#QC5)N}Fv$C@>=`VQbhyD-!1!5ruS;<`b>W2>NVK!!f?^qF{=HU_b^;T;2X$z6=LzP@`yvWjPH zjO8!)7Jrb>pU%hE?I2~STP2P0;@J3(DbX&O(bX|sF}l%8`Lz7-OE1?d4dc~;Jr7)p zg&i}Ip1L0cLj|iWSANSZ=~*RcFI`{S=*w^MNf&4h{iNuxB4Ra+{)(cesQRp(S4i#WqMJBUMs(t8RNQV|Wih*Y zQ-Lkh>XBIju=R}at2AX5%4|PbJd+9e0Dv3l{+t3Szx z5;bUuq_&_H>MAPksgWcQInVpl3gZtHYn=SeUb0I#@n} zTixKTod4~W^7oY0{`~~P1lG2Xoc}xp#{O@2y4za)m$Cla+z_AqS1RnqQxc}|$ zf35w`&2X2pvXG3Exd&o;_hdw=5bqbVa5A^G5c>10C9fq9pMWVhD~FX82P+RBCl9Ns zsTCiqm4GF`l_ftXpMZtne++fc(aqh|(cBU-6b#O03*!h1a9Ej{@^G@6Sy))I@|X)) zu?q4C3b0!6a&TG+@Ru6a3M*xd!kfa zY#je}Ma{v~-3lHMrBbqW^zi<#543C_S!%kQBCN^D$IZ*hBPhtn$HmLX$^CcPf5v-Y z>FNfah!~TTgN=*t&*O+~5rV~lVNDT!3IqJP4r>vTcC|EhcXHKoa&i!*LJUEPc=C^X zQ;PiE6a`y1xWfnG@&EX|rlrf@zy5}RgYBP>C@KHAt&pkt-qGMoR^o&)Pl#t@~_$c zJ-VBdmAjXztEHqhtQ1xQ4)kX=lnj4N$@pi{|GwMH#u8yC4lYhsP7YQsUM)@zAx=Rd zES(k^Z$C+|C;N6WP$(D&Hw9N|G$|F>%Rz(r6Zsq zFQ7B%?_U%H6}n<}UtR|367la{LvA!&x$3N-=LY;~0`ZM3#gOa`7ct!LDa&H4V3A>0zNPd(b4 zBbtPS9-N$B`^G|aWxqH@l%c@++#bX# zFTNnhkb0s$!ZYj0Ur|x<`#c~;g`OxZSSmw;E78K%_ElaUqm`8vk`^TO4t+iAGR0Qz($C zLWYBZ^8!^{`?{%0?uZ2!iAEklPfrgEE30i-SlINhU+ykuW|;zE)6q(gl>gMi{&_5N?b@~OEcwWopdjRtSZ19sE3TW9le*Uya|vq1F#Hu64b3%- zuq5%GTgy}R!b<$Y?!06Qb=4Xv=YPWgJj6W=|s8H9|4(?fLH7hmYOOCL+HB;#- z+v31yUaDI%vn@b|a~2@J=be(2MB2XLp0u;jw4-libcm{=sLf5ppgn}}M41G1NxT3& zrI>u}6y$jq0WxbLVc}=Fs_Cn}iQFjyE>E9f;4bYSm*_H`%BD{_bS&@TVWK(L&B5Rz z7C&@i0xuqx;v%RT#uWUXwe%P@kUd)TKF-$oR5N|PgEFWuPX9Rm*rD^eedWf0XQT$C{{2^QVxkW zmjmBz^2iqoG*1_H7Puy+EV#Zp3w+4SlT;^o+eK4j(0{g(n;zmgSL>0Yq2D2D5~U$l z#v^b8UTR7N_IFcy@`)>c+t-qo_Hv*!%fWqNV(@g#Tdto&T* znXUJUmX9QlQlJ4JP3W^SU?VQo4S)R_2OgBVfB%|e)r>AnHHl|k>gJ}MudnYH3oa4g zUtip}#tW@v)nD5t9rAK0Gm1(-*MogQ{4gDGQMdDWJZZtjo2*24RBGPoy&S>+QZDOu z==RT_T-4OmvyG3Fw@x$@tm{=_ZuB{})Ar5S3spm~;=dkoNWedc>dwQ%;Ze%hBtVUa)zd-Yc027!OlXdqhn)x-OR-$pFXvMm!Tvo zn$J4MkJ~HkCrWf#>dy~n5HUGAKEC8y1B(L>fJ8oI6LWaz`IByqx{z# z=v%*|P=#h{*(a_3Iz0!g-M|Xw>ox3OaYgKJ)7c99qyyi)-;StCn#esTCw8&)omZz@ z6YXZ45Ci7s=9Al=VwY!bPg^MG=H^rh!T69JyhX^9l9TmxbvYKA0>x2yP>*C0A;#B1 zqX{ooyJ32WY#QD5ep6%9S%B|j6?S$~59E-R7D=ioOzZxXue)DA3#9h5rhl=kxEa|g z`1phe1DE{U;r0ydyc&Z8d$N=|0aT>EzCQ2?Nydoxq$NE)4F6h^4gq6D>S3Z1oxQa5 zvnZ8P5(w3|_Ej^lWT?!^_GB(tKJ3|( zfbejmp_RsaP9eOi&8VdlIPtkb5j|ZRoiyk}mxab-v4uEo=I#|@#cN2Kc?28oqy=NO z**5VD;_=LcmEP0m6XLmjR-d;HHp9^7B<>8NSa{y;&$+&;h59q5_9`2S-uwA7O3XhM z-n2Ag~}ILkf@aw1oH zxaF(o*Ons9UbzrA@z#DPn*_V@Ck0^$FtAz)e`0!Gs?9iRS@X8_qeeG6PR@v}b*b*G zMjSE=(KTLP-m{CNrnSwn0{??C9dHM@xaVCjf`Tout)1^!I+|( z8#ldbnuVulTo^I?+diwrw6xV&9V0}{N>G~cuz?pYUYwu$@AvVihzF)Yw1TgmpP&Ca zJX|{Ptr9h=n^U30dzX=M@u@lajtzl_@DHy-}d~y`B}RKywpNjtk^i$Q=3k8Vm$*1@gKp?CZs{_{B58 z81w%7$~Y8aN}8G@akgYzE8|-S!_(8iPliBGRG zI6N#xb5l}VyVq);n>A);cu<+n-0x&3O5r(F6$ic_6zUeMRvLfrG_+%v3CAW#3-p1l~w0R?(^O3)TGGG)t1RpC%t|9>Xm0Q zR5w=F*19aX){h4P`!y}7YHH#m;KyKwv`p5Jwb8Ei*?yHSCK}3ZzI#&}7saYw3`Aj& zuI=pY)d_-+kA1d2zrf9Mb91|Vr6G3A<@^Gi_22F)+J^0pvV)Wxlruj5U~4Dv(oZ&$ z?bN?9R5q4b$hnL}v}$_A^+sf;o{4@q^hkAllD2?uG;e!IZMCX5Bv`Ajc6`t7TMKVWXhg}2>BZ(qRn!7C>{1OKjUWl zQv|cp1l>Y3b5&e+7h8DqZuoxVP9M-@Ab@p*NNh%Z{b?}UATh$@T0;g2)`0CrmqqJ_ z`^~U+sPr9AYqXeT#nSm5b+pHB65mWfn0MJYBKiAXhDdJD{(DdDn81vDJ1+sU!?RWX zCiQurwL4G>TKk{_ASjFPU%@mNKHkcofKiO z*QKSL05AiZ7Q6!>1&rCXJ64%j%|JXQDA7?LNK(wSwxU1*UOqY4LVzRSAy5#EioH~` zFZHsg9Qc-9Yd#bef#F@Zr+Eu=Zs zPZVGrl+}czZ zVjPc@M2{m7{PC*YS8dvku+RR(hC6W>Mkm1`+{Fu0$Nc)c!9S(k}$uR}*=<1wGZi$wPt{ zX>P~dFVmR&a*=vXa|Vfn_64UTS4bWB9&RI8m9a6!_3PIm^vxw7QbjG!I5n;84~Vb9 zw>4B2s0?nu*46d(^&wX3SI>WbeL*q4vVRJ_TC?+o< z>6PdtFlHN!7I(W+45F56hBD3A+uKL*pvLzEkJ<6IDMyxUa>e(ogl{1O{+e=#1GiRq zPaZKwp~*r7nGU##dEJJ)?}SHyPFFF$RfGn?9O)~Wn2U=)vk@RO8i}EaRdm@~lD*hS zzjy_n~qCCfLNAI0r#t(bA&t@EQP2Vz@fl)Hc27v zW-S};P_2PNcI*>|$wF4w)7R%ZY_}@A0gO>76^bm>zOk{fUq?q})zx2uuMy8iM@PSS zVje@)EA5{?P=C>OZTOi4Y4|KkID4+a8PjAxQ#TL=0mK}Z>D zFZ1)603|>=iQw4Uz+BO$aji+Y>y&)ejW3z^f{iHbo2#Joo1Q8|wy`brGK1OfcKf-7 zRoDt9qA;51dvbDex&{VXo12?4X=&s@$HKM3UAw7k0-DlKPJAKF=M@(lmr<$_H$z=r zzR1rn%F9hrqC5T;t@;~yEF?KJ6a?~u#Uu7p{8w!k1bMuX?6@|JO)h~QxKBBO@xl^z6#%&w_PRG^XKAw@R?$WfkkbCWw3T(+aW34WN&J2@z!;oCPeNmzT$x^kH;j z;`WX6l@-e(!@3Sgem%Xt*vI~9Q1YP|NsEvJd&ywH5=)N+pqi7DBjCRN=Bl%*iVAto zsQap$Vi;17<}-Jn@k_SL5Hr!b8ppaL<8-H{xq839N$NN9pgmrbR3724`$;*x4+|e4 z6c#d3Uj)+uasX9aTRUQW&{s>HSkF+cXT_8G)!2^a#nH)3PhipIDt;FLYZ-P#w!@JlbO1M&`btj zK6RAKP&09G2p2#5ii-qj2D51)a?X*SGy;?gz-|c84R8$BF0&WW=b4?f;eCt zc+MNpL;(eBVC}P2St)qpHq68XO&!;Y$1lRni|~+<&(PgN21@Ce1V?^achpF0Y#(F}}gm3-@VGdl&8@Ay({m^?Sy5k3d^=9ad>f32 zh>170w^y>`ji^W?NQWi?#)Z6iQRBTw6?nExK|)U6@zr_JT_|GMWoz%)-`(APaCTM+ zHbq+-rcoVuDQ4`yhdxnk%x@=i>Mtghp?2JbcI+SUd7B7u5h1Fg`XROaYv;vgWI%~~ zz74>|5#`xyhnyntj5F|JKOHUtE&b{)^hz%4xzye1>1og`V2+I!C-w-`yR<~rWx?oY z=Ifgjcv=;>yj9%Pv9`b0aocGZq93udkfy17PYmR;)InW=%3q0src9@aw60g>>{7;` z$W~h8k(oRtkw0=a*{Rk;2;Oy2PrU(D=Ay$pydFOJ=)&ZbQ0nhJ~ zA?l{eBjIw?#q~e2#80ONpn`Thg8ZJCNCGJvVKZrI=@d~vB5m!Bot;3lemgrm@9m0- z^_`vE($X98J(gd7EG|+)v>-xnXI>Pr4?rvXpRapXyvy)$&fDn7BlkfEN`Y-z^sI~E zi2?@XweYxecb7w_$lxoO92fz3N?t($DkUDKGk`0=ilE!!iv504pi}%-G24505&4zO z(`&?RZ@MfHZ~r|t5FiJPD@SlPG!qZ|3S?|Z0mFlX@03(knbqt_iUyvgQE8?PYgQUR zXfApjxS9iXsnC5tX)DxnKcnoT*6i5ay?a%s$&fjYfdDJmAVcj7L0CHt$CX)>e$)wu z>{x;~TG#)u@UIvxSfdP~t_CCJfk?h8>0;Y~FarVLQ`_6yaD>G%(P)@2elvjP4KaSv=86c_Nq@P2QQw3U>VIk~u6Vfn;t1}6UgDKNEiJI3V7?+ zUD6?aU0oAcG_)JI#l-s8*BK^?441oOnf=cXCLrU!8CV1LN%c!MX!SQ=IrwU1dTs4{ zivU(2A|eXkyt_42Rbdq8k>@Uy3c?q!RF$R!UvgAu;|<@~Z~#;+;|7s4+fYtJR#&Y6 zUF;tF1GNAEsI9H-?&&!^I~(4)JT-ngXjKLpsG_PWE`t7>nzraNd|-E;{f?#>Kl#&+ zEm6s;Z*u<_7}v>F({ZJp%*S|MfoS`mC%h40$;@eJJ|IC~QcV zwI^jQ|epHG(J!I=)%oQX|Ff`}gld9!Plg>MD=&=bfVwP!pu3 zKWhf-5l{YPC})d+fb$kn0ZG8h>Pmc1`{ZOoDbkM!{`pCcvAfBAZxv|xVoeO!e=$+5 zJSyam-ik=dT8{*uQDw=Wy_y_hdj6Qtk4uO>Tz z+({gMNeD%z_YS7h9e|s=BbT)Qhy6Z}5wMflDzw zH`lQJT3B3t?Tl2*+q1N4MGfb?Bs zknBM0orPh5pO_;j=h$N7;_i>>7`q&7YC~6K4cZrLI!z~pz}l+~idaXumFVz6%MS^;Qd?Vli0(%b~T(&fI=O*pZ*xTr3x&XSbFs=*{4FXIX_Dl}7` zixRF1I1{`?bhJQ;Q8zSfSeY0XzXCmp&!0d0AI*8ygKz~6HPNB>7SsT%aVf;U8DFdz z3xI9_j*?SU)c>Ven*h41&ELPXAXE*|S`oVo_&WJ$-Y;@~exAO~K%L;z6bpz#22BBX zqPyD8Pmivmq1YsKeEEV2%E0n;g+2KHbC|)<)YLs_R6HmcTYvo_aHUC`zU}8K`;^1s zE6=%=Yja$Qy&>E62V{mOJ)R3EZX4H?f62P|zW9u2P(lUVZ6`M70GzcklIsIla${p7 z0}_t{P3um;kuX5g%d>$?(BZLFa-%^%0*`~rmatDhKNPhirp>42j_jPd!sn=ynlZC1K?;OhfhV{2!ZSy&k1E#g@I zl`pvu!Ugch?-lmId-w16Vu6;BvwYg_X4{x0ot6-u?T%pO%J ztgTIgj#KU`yL4W7QX_+_qvLA`Wey=BMXD$c#hi_b1cdg$L=CDX$PfAXx5eb4Q59wN zbtmONnhEOakuNkbtLAbU+uqeJZ2Ff(s8MhTz*)L@Xrpuhp-1LK=31xY*s zjE09540-$c=dZks*l-0HvIsfuE1A}Ho9ZF4V^B>f#8m*Gs_$ji)=qy&0fGan3Gh*X zD&aT*z5$<%hL+cdvY=JPDIo9#vJ0%u`%bFLT265y*r>8H&V)muR2NPs*p5sOpI&?) zw`g74clkca38sfEq(LDb;EyDLJ&IfwBZQ9irxz!MURsRh1~P!g0cn+I-FXc!?s3L* z!9*oeLdJJmA%*oD9S@)nBdvJQAAo^F#zAx}$+%SDbr>c?RXz8El{jzXZDE)>h$i6v z(l2l_Y?DggaFF4E2$|;n_}AeCnDu=|26DkzC^U+9eSkd<*$_l_O7kVlYLD^Gp%}8o z4`pz~_n21A04M3#_I*ZpzUNu@cx27B#-O~s96VaORJU!#6-*CGH)JN#8?L~Fudr{e z-779|sL%&J9JB%u4RBtV_Z;P?y@l?*WjK4RA_;G7pVj`gBeAL}2ZYlmCj*w{pR4y7 ziB+H>ePX0&h)h9gx%#Iq{JfhykWn^AN-SMx<#nt%IdKZ@z}d1)as>R|i#@x{u&U3RTq08#VKG3*lwLb)e%^=1_kfAqOo8Fpk`d zCI`OzOtDm{Do!Mc^TnVCF4MfLt4jv8SM2=P2-6~(bEHN)w%!^2pJt2}9^p$QvB=J> zb@fh)I*u*lzJY;(=z%psU~4(oIxDGb>QdRurj%%Iwyd~&-zxp4h>k0ZYTb^b z(?b7w+5wtnuG=FBdoCB>$IBpeeD^%%jx=pjaAP1?T8THd0s%!;{G11k3|TCgwrn=JPnv3e7~6i-k!%8ml)i>x6C(g2MtH0AyQR zD+FB?T-QvXqk@1uLG-^+H7}iuEG<~VWlgB%*kb)~;6!Ak1;ND1%GzeeiA0}0nqNCM zuwSq6H^S8fdkZig)&VM?*$&7#Tk#hg07)H+ij}+j=m)&gsQ3CTL;yA%_;fy+0^H%N zteI2DVCx0Wg(xrvY}PEVXFjwg^&9aXb0jML)4efIXCdlI@?W3(DRMjJyS$!Cwnhl$ z7QHtdX#rUdF=rw1lY0wg0iVH&SA(TMH-(}Ot?o*9A;SiyKIQ`AzjDrpw!I_`{SbIP zv#(IIC+_Uu-cONnQ~%)Lo1r2fYR178PwvvW59hm{&-GM|C+&JySi=Zq@20BkFSeip z#gwLsGV$?AJU!ZR104!_pCQ@=zxHCC3f>OCpI|mxP^r23>0@Nw@JA<%2I85bwpqI9 zdoVsuGj!+?{0C0N03#iB^grpxl~)_9CLT&(AmJY<5-RR2GCO&dkgV@$_*C z3F)KqAVng&)ri90ja7!uv87&Q-L=tc!G%c3&`f}Yw!X2!N&4u!%$si7ytg+ijS@W6 zhmK4kea=)lMXTiUM+ktTFP6T5FFAVTR~9!_H|I% zY6KnU>$_%WQ`8H=IX39ck|QJoRYiKXasvB#l&Jxas^kiSzz*8<086iL>IUE;_)-Fd zZmO6^;(0tl_t*0uB*YGvdaXTOauz_S>~mfV&|h#go~Qv>0ZL%w@1<)z%I07T2&fFT zNv@|KtMrQ889%uO1;(vkcrvO!%==Y&z_}yaSOH?IRT+tEjV9ouS28GoG~if)lmJ-{ z98fqsJj|6#sB)uvFn@JVZ>(`ccQyI}Wvp{FPhX+;gc6;!NpxV|KIzSYP*#LBIuy2s$)q&}~UKU2b1h%qC`w z3)?o*au_78kBv8-VXYTMYkf4s`+&=a?&!H|zvL*P z%0Yex2m@6Xitz0_-vZtcFUuSC@4QIB7kyfsD~u>YTU$_90K-3Uzp+_XQePk5Zg!Up zXUCi3AgQ;-1g~zc2+2`V-AWMW+8;cU82~;wTynO%J_AAf_Ojpj0!&#zrrfP}Wmo7)#K;^qxQ$* zeqd#{2dF5nP@zjs?sQT?)6P4?VygVaP5$^ptx1zYD^N~|Wst5i@|l2=eEj$kJaxQ0 zYhKZliB|bE==|5TwjE1orWy+oLhHA&c?m~#kVMD_8rOg57&Tbrsv}N+=ofY@eHmLW z4n-^aYiZG_)jQft3YQqu5Ca^DZ#dIH(I5QU1_py3D$9S_k~`LhTUdNr`^ zsbuRpjTKcjg4C|X)D8(9>GF5vrGlH=KKF$1{C&OoM~WfyB%i+13{b&gA4GfSdjt=& z-`JFcICMkc^cD!@z*>NHw>efh)vh}|u4MU z;eK_#72PERstw?e=55cNYofYAo3h*B5a^sEzpI>=ud69cfa!W&mvP0+_J{o1f@m`E{W-@4ZKGn~R74}& z-)63y%P6a|Pj2XT-)>&lX87f~4Mh=RbSuh&p3HT1QI3xTJ*o3fE_4gWSvB?2WIes8d#%c*@Kz6` zb`E?atY}Z~C1hVz{)MiW>fP;T{9zYHJhq-fsc>2h!Z@wwqX8|coz~J`tlf9@yzTFv zx9bW`N~bQ?=^0P&#WBaeg^u)}o*;V*qBhkEJsWp6)ti*2#xme0#?5H$~sd zKKqm`8wkg1>v*=(Gv*wmRUZ5;Gi&>ayi~n!KeJ#Cs3y>Yw}>0Q|CmBqFCcQmaQxKz={svV&uq zQx1U14L#cM0}O@@@;K)b-=F8*y%!Z^Kbq0cjQ%fOrN=eSLM5lAq6hc27Q===@$R_Fo-jXNrS%IgxJ{^&5wM zk{ldCwX+LlZ~XmqZ*T80yBhcdbZ+1v59U6f(Si(BOT=ydTND)hKR0=mp+hn>G9qnm zzI-ixi7M>kZ@M6UVaR@RdbbTUzPBL8xUOIY9`_g@p3_{;Eu7zh6Hw3;-l=}1un4Lg zs9dXAkzx?bsBikLK;O**^beGVSU+JxK7_fN-E81*0SeZ`HyzjH@^sw|m{(^51Us_v z9#qW*IHLgGpS2A<2Gq4%BqXNp?lCJXE4)?wJUoLlGj+=!O472x<3R_9>2}pQ-gb){ zSi47a6QQwy;DN#cO6$Vq`2xVqK%P^*7L`D%?!Q(h|CGaf7^e0@Z@~PKjm_dw)1~N? zgJZT?GJTU`;EL&M{V%*rtl(5ja;E<{2z;b^bdY-RoM)7;2nkyr_ehuIy~V_h@2qPTu8 zW@@jt|DLI9o$vnn+AZNo+Wz}o_s9s<)=9nAQVri*8qv2&aAXA9&SiQ(kL#nlO)KUuPjt;X<1i4M+oQAR01 zmBQW|4HisQx!r2OLKHEI|KhXhpV)_^%YO(JpbKbUaI=pasPZM#Mk#Rc^LGvpzf~Vr zj;}RflNU(FKE(eg%hIMB(AX+oihL zk)7rWTV?eDKp2?&0>>vosRNaZK2@do-e(4i5jjHgZd#yY%bs<%;DK=H z8pL8y`uPY}5xU_E@w1l62STayY6&kwLVm9WURa|9HCG;TC-)7Hk9UZleHM5A_T|Q` z<545t|6%G%!?EnvcBNTKQi;&3L`ae%iUw4ac_uQ;JY=343`s~OB!mz`2+33wnGzBr zk`R)4p1yOTeSG^k_K&?^FVAz|YhCNS&f!{J5^=ic=hGKU^PtPK(C^o#A3UmN@V$r_ z0JaSLTxai{gVh~e9y|a5>#2@+znjO$#jS35ZE1qMEh@K$)8UYA^OClAaNt z1Wq*cHVVqh4El``#|l8VL*(3fNb?swcW}ZDqYGdXcKHZI2F2mX-+^m_*yqKN@T_wn ze8Qn17`{LBVmclsxU&QWg-t- zV#SC34r(_W^?JIgvQEm`Q87EGhFp-hg!uwAjdY(sPISZ-gc}VmoMk0J1XLV|f$?!y zQBn7^vF)Ox`%%0_)&^q39NM?1CV*RaQOR900Hq5Gt)ZY~HdQrbW{nsFlSz=zNV zItWY%iP5-b&r#V~)0tjtJ$#yWNvo9$u^;`Bek=dH%>_|I0|R1uCVXOv9|P7r2-Neo zwnuTCzsk-ge~yY#P!x`HWDuYjUVSAyU@Cy!1S7)p#6*_eR5ml?W_WX@(7oN~`n0e% z+u!?agMRY_%FLlSM zzy^y8@)aIk#>Z>)7uCL3YNq4u&qb~be~CTehDbQtcQbR1F|P4 znoW-lFsP>JQ7s#7{}?tudU*FJjUcKuJk^u%5l)WQNs~^+Y6j|4rG@*9I>HISza=+M zdKV9UISwgCTu>B-LC65ST5eOU?vusLP^tCNM8QlA0pC2E0XiCpR;hTK;{G1l7X0LW z>;$m$G7?%2ST%${C9Ac2#EkQUZp_e|@8;1p>`(%{i*JBK(MdC%WJ+%`6_*dzNxNOq z`R!$yZ|h6MAo2zWf+aFbG~I(-XqG8v0dwUukKKD^i3AcW2V=dr`@)2KH?-qpdT8rM z;EJ^Ds@z4$GZ2?q`yA(X3+<)?(FFG7>(p;tN54Zx#04yc=&nZ+^NDng3=qIYZVReK)O3XFEOTv*_@(hkKYxfs@ z60^_VYLEc9cW6J2_70DolRxIT)(y^meyvyd5~bjKuKg~0dZ*|+x2n5gAj`o2_4~Jx z*s#&q!#jRmbFg>CCM5V=+@Im7SF8t{!0_MPfngZ$j_~lTc$g@Ib-4l0Ilc~r8MFWp z>Cbaaff@`rq~f>5*X3v@dJc|OYs3m?_eotRW@SvXzBoM2fMr&Uu_ zM4drP4rd9tTELf?IKdBYIsu7##CN<1%lB28P!-hnSQyq4Gni3J)S=qCoxQ4DkM4X5 zie}#}VEJQ%V`@S|ll8lZXm;^jv;1CB?61^e^z#OU1K9TCE-Uz5tWmdztuKS+C73&FBaj*TcqKmhBl1!OM_3SepYjspv1dz zgU;HfcmO-4-7*9$JlF&PXJ>8!#oveQ#f$~mUG(BAJy;sJ0FoQT z2U?UPO#WC3faSnX*L?jd&K>L=t>)D#Lp-G@pTx05%wY9N$_>wa9P%}xi+i3~iLZBp zscpRR*XpsJ=EkSs_?G%qPo7{bWR^;iu~bhqjBp{~3#5knf(*si#FqyV3#8z0!XVP% z{%Z%)M-17``JHoEW-w7eVjj@ZAZY z%@bkQ$KZ?&N5;8mls0H*z-!(mWm=;m2cKEJAr2-~*OR?A(qczIy+?V_J zbVBnF>>D)jMtpA)WB|9}t;BZ5FND|&gXeuUVgF&toW`JlbJBsxnBlXdAyQFObBew% z4i69I#+c(=k*(%Z{xycN|3!8oFCLk{JOegUZz>jL&mY(oS$zVO=# z?DqPx60fnt3ZM;Z4oZN|I3edlGd(j%$83-#( zKvS9u*Aqe8J4nU>Eg&fSah;MPe2+KeehI)RQPBzc3_1c~Uh(qr7SWB|hNp8^$0YMY zhr4O$^wW4fe$`+D^cB(UB^vq}s(7Rs8H=7q7^^-- zoP=-PBdrQYjx~Tk2w6Ds_U`aKDeGjh_m79(IQnC|5S4L(T>tN8D4c!VJB zWBn03LsjQMDVQ{Pg&@&CKc3I*kyGnC|Ew-@iPxD(e-Xs&kj*eQo%TgLOD!3sDiqgE zrzybNzU{dtJTl+YvzioeK0ZVmD4;7W*?JiQwNG-mK>s&yd9D5Gfo9~RsBo^0&o?rocv+F(2EeAiJS}P&Ly-756TGD_ol+h*u+q5h;B?+Kt>x>?Y3x;>0rj$H+ zvG8agESB(ey1JeuetcI-7De7=8bkWA{gYx1w?X%s&vopuK3hp6Z6W2U{WX zQCL8+kmivhK$U*eYxXELsbZMHBJZ@JVSLR83p=~7zkB)l`3-L;M2r(JYD){A69pPF zQ2e09;c81xW~K3w0Sr9B#IJVM`2^DwsrbWLhM{NiBbCkXZmrv_swq+c=*1Dl`#6CR z*K;cDv=>o7oOXaxhWY`)r@H${^qA06 zY6NzdICx7}MIt_HkRhIUXI?(wT5!d);`Ti|d;tz7F3nrB%Hze6OkDf%4I|UHCNn+` z`*K$TUjcQ2P_ta%XfhI&rHwJL;-kO(Kz#63&Y{R|Ywd%F=DcxpT9(xt5Sv^}7eE%1ToB zk%;OIy-ZJjNibzVV>pk7DbJxOZ|}G-*G^xtn2{Dc2EP}n!!O%*c+54zQzx!?Z_Ibt zZ6n(i=f>Bfddt)dg{oT=R>C6v2kSJ*1%znLzA$SR9_r(i{9XSa7&N?u67y`ySF^{V zY3zG}nk?;UY2l)bxU(?ie*{<%IIUNGm8VVKh zFVChfj1{ghvan!-c4R4VSIoyr(kQ>x5}g{Ny6wx+KO;UOh^A~m;+BZLRWS2cNO*oy z7pub}Z)h#vRdB`F1DdYyE^fyT#In^c^Yb69oaa_fsy1y=3vs6YYC66LXIBWPY1aH`T zK|F(8GBjj^)}v!?{^?$--}r^#_i!iTprvDC+K(q!(fRcm4ay3@0j#h%Zc*a_HyQkG z_4Pfmh;9159)xEE$3J+6*@Zv(4L0ibkK-5ibf3Du=M;72v-7eF&-5;2>3!>`YSzv* zbTUp#jmzrN86RkB&Ix-Q>f8SLZBQ!6&Awu3p?}U4w(l z#Do)`9<-L}X=zb*+zARCC`EvCi0~7;9n?4q0xFjj-KS}3R_DB0kPB&QDg#AByi#%r za7e@2ppAVF{~nHKA`FCW?2LoG!y14X{gctvtH*hEjj0`+e!#tJi3~R>xbChs%_DNC zIiaENFx{p^nN`xs3PnoF-kF(46?F=yx)_Mo&l~z4pv^89KLG>^I~8(@5WlUKCOddj zF|yEY5|&LnNV^f|;vfjj8;}%;A>H$gQKp)Kp&^9Hx5k+|JakycT-@BC1x3*h0$YNA zuzeR@(dqOvA8veX3p`?Y!Ty7L9bq+c#NyH5sJZp-6llHORLD>YAa@RS7AOzj34fut zK#n~~0$u1J5*C(N8;E7#wcsoUhKAGpzXxTY)A7;q+u`EAgl3(_XAq4Gj<=N{Z4ld# z=Lk|!SC<#r`q_vN>>RXj{KnqR6~J-!e_Pr?xe;auGZergcMLsk=tIect>+j&KkUN* z-WZI61Mt)y%RL@BPPJMG{cVi)tXsG+v0y#Yb;%8= zR2L?r-0woqav-DaBGV8Q%A zCOn|E(M+B2=?(|}-A98*jHQRA41|ZOUh2FzRVYZ{ zdvp|Om{(^%UFO~iqdI&*!jXoywn2e`Tj!@D7ee8Z2dV>uy`OFqBt!fr6mke(Xg*L$ zj)lR*!u)!TXXXo@feDRebib3jYoPgAVf@K>bRg5yf^hbcVC(VY-~!t7Ct7uljDGw4 z7R}K>MuE(gz`mNC><9qOIQxrDq8euopO3Rpa71gyX{9Q{k8KltWr zZ{3iHg`>;R)ioSnRe0*xwqqEJ={|pgB%DZeRVm4~bOZ(jtWP3m5I)&cWPT_B;s;Wf z$Z*izIQ7FPY(r<4E-dbFcOs2mnLAJ*>F&O;ZAQ$;iPG)mR(^ETuMa2Vsja~Ae?5til%`iWQ6f#>`a5l}E$b*-)Q9z2{g zGN`6$D!=>sI+C+noqER^=;?Xr{gB}zeNVycu%y%z0XWPv=x@j*{zMN+=xjXpA$#`; zdje4iE8*|&&-U}bSh)>w`3XmMH>T;La9HB;qJanK#UKj9f(1Av^Wg6#?D!R)$%|WG zC~)+eKz>0_gzz)$Bp6rJT@5^dH>RScrM&kjc0V>1e@ey$+kG)5X`2okE`ru5s)tR6 z>N&SQd*_e<88#qxqVaac1ObD^CJ*cx&RN(Ej^n+freXMjPDYd6`ioIA#0O5yqo$^& zJOTpnFC0OF4J72Tu$(sTR$bp#{<8$*=%|(6<>_U-qKPD zJqTQv%luR~aMTcHnM@{xs&@{6@*(RF&e`gqx4pW_)76HI=bZ8*u(h%4U)EpM1;K?v z0agdb6Cr;|%x`dGRJfYb>OQk|;Bq?GGPL_L{U&*RhMe}i@Tg9Tn`WnVC}h7AOeEWj z$2B$sOz@?(0tUwoIUK4{A1~q@$WS7ADqZzKiDNs?B!Is?yQwJDg9hXh zM!yVXt0j|C4y&h790(3zQX?}n*4-c<<>cBAzF6YUry6@VKf1jz2u@jd0n!SWSYvpMGS`3 z)Q$EIKp@e#9;@ri2WMy7bkLdajraic$X-QvMdw#y*s8%krI}P;4i|l-ia@ry(?dHe zY2ST+=G|~upuQ+21px=}hTff?Kd{R{za~s>tNT`1$23!wlPx)q|By>~)jiT+oQWp; zuZpG07FblV{>hRrT$m{|#QU=psEnK+Wdql-0v>9dMN14WSihug%t1`m>)IWXAGN66 zElnwy3eqxJ1QcgnJ#t=f{g@VBZ?lK`2Xqrasmd zzIVuU#`a-FC!6S}D?FcTYEC0ki_AAV0&iwFc(WC}9l^R|j20a*xFy;Tan1F-?e zh-UAYNM9FFFTt6MktE=B5IfS}m2ijwH{kdKZ3Sb4kQ1E=AN^5Z5{AYW^(pOmR@W0R z&Uq#2{u7B$H#?JWxHMd$zHK;wNqk=B)S#Loru`g!WwT!25y z6B;fm2@0^K0SXbp6_VF+gyz7U9j%_{7}}=)`D0fXl<}@ui?0uRvxoJ0=)Oc9>aLFL z?$2(6=9iY1hH*H8t;0&O<^&7r`qIT(nW(#1U7971AwLJO*=f;4k`e)lP!; zj1TpRWa}r$!hO&oVNL)`yh%vQK!w)?8Bvul?nl+tMlcpt8C@X>$l&lnB^aPKK(Y{J zjQmeq+rz+85E&(NG~$wyDC6sVYK%ma>dE+=SUKQzGO!FIywD8%U|twv&arGS+Lj+< z@?RxJ7h=%O%bc7tAa0Dv^Q&d&ebLZYKZ!XghS+Nt_us+}hx>y!6eqs%8jW3lkq(7m zAjHDG_SR{}RW^I13S5yC*d3FuU$yL~Iuq`Z^WHA_?m$I!VX)(0_V}W7vBtIM^@p#FlWW zb11KWnlga3&YEr6N##wrkc<0Aolb&}SW1z?6i$S1yfM5(Gcz*`KM>o&MH6*C}#poVPAUiZG zxM?j#a&j_yLEwosZz0`7K0@ih3*w=?Y^IOBXO0<%Rdkt z6;;jK=_ig>1v4wH#{V=K8W>8((qNXt5yMYEh8#c!60Q|ld5}j~8pvPal@W}J1RL@D zV159OJ+vk*8OdSI{at{p#<`gU>cP@M<^z3eZie=Wn5-f%0+aY`1kU9x%o9={^8&_O z>}>l4BdaIm_|>s2p!_9m|7B4y3}Zemi8;(jPybs%$p>BO2|j1K4e_7G0(I)wgNwEe@Y@nLrF}0J?(;StVk)*kpo)MK$50-z*-3 z;I${jQ*4D}VQ@T0A>EizudiQ=u+ujD7Ni8Rby18&Sx#f#p8`j_T`q}JP1UEmi2*|{ zac3g7xyZ1K_ zf9vnxzdQe)(&nSbUzfG{jwSnFkc2EpkX_3kka3`F@WtRwfBW|Ow+1zzTy)7OJDt|M z0IbUN2nat(#S+pQ1Q6`= z01Z*~#)nY=geSxXo$_aYtP_!$*+mW;=A=Af)}7E=(H+QpN8xE5%IfxWS5ZL!VXwe)`CuB~`wfaf?5 z0AH%AE|qttbHtVZpbeLbS9(9;JKWL}obs9Ad^yvmd{ParIAoW=p`f+PoVmsFr<(rk9N)vVhVt8nSWUu_%AC&) zGNwW)WHf&{LdnCp&Nq9cn*RFQ6@NC)L^*$<)K_3`r}=At^kYor(hhu)n_=HaxuTNo$io_T*P-lxO&Z*XtG7kl^jDfPyfGE@DhY?gyP zoKa<+eN$(=uF0`-?#KK}-@EZ)jgz8(wveI5Fu z>eQl-IgjSHw+K)CTD|1#>fKkFdZH&)?XlRSHSL`Vbw6m9*`mX}Kkm=jl{qv;Zucnc z&8>I!FG*ptmRHo?vHX;bU8~}ZEidF~v?>R0O5mj|sz_^-I`Z!sY6kEmxrS)PN_z1+ zXiuC+3mS3g%?zVPdg;{v8m=3UZOb61cmzM_0=U?=)S9SiW;CVn4Dc7{or{p8_6UC6 z-V(r7@l0gt3l-#9d*$rd>2i89DPKL=)l+rH+)^%d?6pBgb(ZxVKF*!y3EcQFZI)k+ zY9gPw+#Fo{UrgGX_Nr}NHZHd4rDLt4@0g-l=lI^r^dG5I z_Pm`K#_R=x4^yMUr9k3i-WpCf;5m$mQ;IzfR{G+8q_DBfKzMNno0KY}tRu(tG$%(@ zZ)(MP8%Ew`4~xu}L(OlxlsIxlYTacEq<3|}3yGO8m_>!!6;_qXTJTgeF#PYSKLaXUC6$$To%TZasFxPRStS@w1tqnj6Vx!~BHjTVX?m=1icM?t+Tiov zOD6U9qZ>!GoV{{XxG7B%lk?{UaOW)si3K7zemVgQoR-PXs^CO?i>O6<%P$(J$zjJKYHMjMhZ@p=gf<(?gO6=o(!=lD3U zfWUKMchChmS|E&MG_^K%m=|8=9Tyl7T{fHvzSQL#ck|5AtbK8!&}oA+*A88{B`w4Y z+B=e%kEAdfI+;EG)2;fmOu!=2JxsUMzx}0b zIHb^sMAtm$fT5lN7R9=r_lxtrFm4B+E=dbgI6y2OIkrVhu6+QGsueh5VbJTu#8!*| zcHIy+%*0tLG3I<9ARp6jinW2_p?)dt+!rTzAie1YJ%g;NAcsOO;d5DYiQ={a5v4a>H$?r%R@kma)Zl6p2xlf$E*$tu zIJLfUyxg`zFtXD9%&)%nHKMc`WpEAQ&5IoUiiFpq9fVana0J&u7Pg;?#d~!u{?C>9F}Yv2}*?r zcTl4JhL(wP7bJmNf)!?frB4(E1T-<3%nJ|@qgu$ICWJ;2Yyl<|94yjs-SjuRi0e3T z08#qK*4re=f!_b{vw*X*+`XZ9?~rv)CDx_=Kr5L;iBg7*XPiEV$_fJpjnB)6nmV<@ z8*Z4Xw%WDd$v<;gL67gmow06=6wv?+dLA0|#CssPO` zR2GQO@pZ4mU(WsW0$cz#hq9$(X?YLPaVWEQKIi}@0raBttFj+SOziM6*3B}Wxcx6m{)soKST>O;@dW@Z424< z5+G&CE)gYFl&4$MmZa&@cep2YQ5wpAW_Q&G43bp1pr>YP+mK3Xxs+{ zjjVFv2?tf}6z6uxuj0IVUQF)Swd1HFQt>09z6-#>69aAC8P&qXV1+%{KWU$=Q~_xT z5>HHawz3~B&?PhDYu3?aJ z7-T1%=WmRYnhg4Y8wx8G@*MU0AC>~2F{t_BX|d^`ul5o_$MJt%6O1HW=3hJ((q4k` z{lZ=mD;W&KY@A%el}xqzV@~VleD;?heLPqtcH|;rI9Ih{D)^ z_R56QiYMeKXq(-mt69W zxq3;Chh?_acU&Jz#CB)V!WssVgT%q&+g!?VTXLREnyH12`lB%ur`EE<;?M2>wF=Jd zz}AY7iGk2M*wSr+S^8*x!AD>+Z@sZ%QaRWmME2ekBw#QNcF@;`hN-Z^DF)%0KSwZO zd$=+ZO(|eS4LEFF-I(dv*}|s0%*Gnz#jfEnJs~tLQfPixyo2hnlHP*Y4ly?fYX3lV z>bVeK(=qLovgkr5#gItF8wZ0cjQKZ)YkGe$mE9Sj2+t~E8(JAV|K7^g;Jh63MQK&% zwpreLE5E)I=`;L2N?p9u8+O{Ffr&y(#b)D7nA1;bX+?h9e5P!$z<+}?;2zWl%tI^( zaK;$`be9mwp#LuX-IYe!t;Fd^!nf7_MxM2wQUop3zmH7rdD`+Z??UuvdG zvkp^c^|z_TnyG58oOu#XWwwsZKk^5Rv%n_7cXpsP|6}KTY4~I69h@(iBZ0#jJROFe z5?&cL6&&aNcDj7@iZ_(sU-D6e{K4oNvE>e(NS}aXj8tC#h+bjo#}o#|t^ZoEB8_j- zUaC2bh5j3D#>O${7Hk*jSrY0W5Scr<+=Cs`EL^O!Uf)L*6({knaCb~u1u+s)BOYRx^FNt+SX+3J+*lr#8g z4Yn1%pBH#8xaT70r{skT#t$b&C=RA?|M1+jEd8WTY4(qp*xEBT=Z@f9$2}DJ)V$at zRI6p3^!ly|26hhk@JMc1{-XtXvX^=7Doz7;{%YPT%rJE~;0W{C=C2k{d#0|Il$N4% z2Tg=j+thS#g9d%h`_5r~zSEoOle{)=|G0|NlEwYzje?b%9w+}9$=E-Y@3Z?^UfRnM z*Mtwzg^B0A8kg(pIqeh}l3Xtg^r?-;pCI1L*2a^zbUNZoq?q z{ARW|nsB(`bbD?=RFtDnvcU4v|lCufKH~nZw;; z7VPwXYq1~0#pE9v7b;9IHUIo)LnLP|kH(+Z%YPrI7P9>v4r2)7Qq_?Ld?zI$P6%ip z6RN1sRX)(=`zkBbdSd>v_(;q?r)}yFX8BGrHD3Q3r1U8>yrX}_!lw7jf&C?HWFl;? z+8;4^0dQWuc_V>|3JM%Pqj@(_?nn!1Ztm8e)-fiKWs>$gwb$hl`1nO$lubM3>b@AJ zaNdUjDM{JiKYxDvfpRC>Mi=K9b)!{WFMn(3S-Ay%jNkhB=A{>OO1CrLKYz_}MUT@f zZRN>8rcbLs4HmaETMxg#uxfsVFQqRC3d4;yXbM9wk^lu*VT8+Q>>cW;W+mVpuSCNI zeyUA1E>~%n!7c!9Qr7dtwNu(Xa}7=$bnhE-5U~A83m?&w9Ct6D->VOw-IRRUH=*Xe zoUzZ?FTt?|~#_+SWU5&hYm2+u+%x;&&Bb7mFqP)GVw93KBj zKBmfjgF7Y0F)Os#t2l4&YqQJXtu00-X3o*J8n&KOGhdXX1VX-?c{CvqzhtwIiYRiq z$2Qkr@2eV9Lq0Xq0!7U`Kkgi!?elYI?Z0p88SszBPb1$ssD6@T zjoC`wrt`(t6ay-4?L|41BwAKbP{4TjZvL-gXt>>!?QbbZm`v9FW77oJX9&^@MOHI6 zUU08Y8mHg17M&h2z80q2P-CnWDKjM=I;vpxD4u(Cs}icQ2+OW^mW;ql}&W zA~Tx@G#!F*EMcAv<;exZgVWnQ)R>wVxvEPqA?U4;14qU0&A7d5ZsUNxsciQ%f=RQ0Qx?JNG zO6`!%85tRk_#U4W(mv6b#u2m;^e_(a)Ju;|zT9%0a6Guw{*KXf-8#`Dz4co+xSq%Z z<+<6i2?`)yfq20ke@m2N*;Uj>(?u_lvAmIF*tEI(yU*n2idZMd<_O*&Vma8A7+Gfy zAXqM1ESK=ijRY-deBRrz&22c79ALIgGPYlluRAY(QU(qt?u@Lg5*!=A*w#6-a@D7= zh6h)7D_U{WZUj`tF9O92CkA*B5W}7})i+;8>gH0BRZn^?vVV<#qHlo{sjr^-@22PU~cImX}Xp=&P*|NGB*Pz!P^CZ`49?dT~VoA}nUf zj>e^{hfE~4xG5LC_~nD?&6sxaw%ziN%ES2CT$(5_@y7Ei@pTD~2CM-Z2ieNq2j=TA zfNEq);lfT2r?PbGO#|^;GG0C0wnz(WZqd(DuLuI$y=o>M$s(l?xWw=qfi<=@_IgCU zay>%tm)O!f<^(uTb>mp*#Y1=@*&ok)sXlMM+&k_lm$cEQzAE+ovi;vlBR9!2M=*Vm zqe$ZrT0`h!cuI=VN$Q^z?HL;9>{$wmPREw)!cn?7J!-Fh*4hvSygYH$)f4H_s?`DB zi$&ye>w$LX4{qy%|CA3%+CrOsHlk$*&$ktOe1VbY-Ez&r5L9WC~S(@G>IiNFXUCPIo4+jdllnW<*=})dNn-)~Xg?3h8IEiC<=gwUW42vylK){3Z z`{3Jy?GTkbR_+30x7p%2Ho#qUSR}g%Mh}1VPotf!ONZkA!;d6b0qhC$2mKcaiFidJ znPI&2&poL(dN+=^?VRhkO1TiUJXx&a=#z!Vqin7r69+2btIV|@;5~M%ggENZ>%ns1 z)@}w03+fj-Cj1=`qi~HbVqGEhJ7CfZu3d|fVaME0@|lr#Ch2=PQBXU`Y$^PV_5QrI zswrcaVxQPAKG`CZ;S-5#gYypf&eP^J^o;v4VU0mS2n!1X)r;JJ1)?mGF2ft(A3#ox1_F}6?)@}AcpaGdjOaUl z{47Gtl75tjXg4CIN~V0y!`+KXgyn!EFsAg{03!4ScBz%}CYrna%SsATj&RzSf!ssKucNde6ophgg5Udzsh*g_ot)_5 z(ZdVC<0Fy9`FWD{fe##z5-Ssu97a`x)kW(Cq6*^^=olD~2TcQVL8b`fHej+9Wr5jv zxI%0GKK|`dr#YKQhEqVQ%hoz9Mv5g;`I!pW-x*g~bDhKm_tcJO(@9FDXUB9onom9t z{i7DnR-dY#2($%bP>~63mvRD+vVGZeeh3EG8-${S6)Z>scc2+<_Wa%Z7o%+o?z2Pf z1J=eQj1^BYwHQYoCS6d@x!~3zkeC{UZsBCcIB2q!gAXESJz%toCk^E1&({$^hao6a z4NNu2LHG^fenu{vJGcX8$s;SUiHPgu@nh_Y7pbXW<3AzOk9;TW_`iacr0BIBS7uFqKgVn}<$Gw*AwSP`h{YoOq$KY7 z;12E!Rcw)nCBz(YH4*1_xD+uVf@OkJJa6W2?yIb<#Bg>y5q`+Gv2tMk;J&h(Rfh-x zjt`byRCG}1F4H~n=yHc(2fvc0f{KDgrYMsn^0(R`1KgoCQn#dYhjk(LuXN)bB(vvn zq=T{6;LhG#syP>-q-+s%C{{ukTLi9+3gXnqE5R1m0T2+2_7XLim{sGf z`2s8y0n*({?6mN*lRYLPBE64>=;H|rFkavTl7XcpwbDgV-}c6-Ml0DPXIRVP{y(n; zo1G}HX4V#)d{4N!i8cg!>$OccReLO}fkj)%$z$SsU#@rQAH%gCLr0H7*w!>|#(9k3 zWkJ4McxGw=OIvMG@YIPBN=n%Chmf4d^PBw=iT!KrIeo}|igE?UG|UbM7yb&jZ;eVz z8wxdR#%6+HfXoI83=Cvk0IybpE5jW7lCz<)yUY%ilIMwUL$*JV5Of{1Ba0p;FHon8 z(pF%Z9ufiY{*%lm9Q^jCZMXsfR);22C}!9qFd}KgI}Xlgqi2!7L>dgHMtraXqV9w8 z1lY4tj6F3KAab04F=dvSj; z#ukxlA{J)c7c8V!T|TwqW^CIhYI17i=&P8eWurtD`sU;kC`pn8xlB z_Z(LW;^7dN%mZoRc1#{>92&qVC76yyzaY|1#u^@7m)y{YLI(3IgaSD0@sz3k#3OUu z^ED5FEriiSU^l5~Bzi)wzJUb`!&eb|^uEG*GDb*H5EMP6Ow50H*2=X4=MNMUlx|dD zqHe;ChxdYfNfQ6|!s+@{ob$Z}*16wNW0qX)qAXDcua$8F16)W@#7N~rB-*eb3wK)x zN1jWnhaPmhxnG!?O+7qU?_Z8>?6q4)wV3;z>tADxq5L~X=zob}f- zOQg0CpC61Zd|ZG7Q!bjx8yWn_%rq=f<29(|>44GDL16_%O#9sxGBv(hc;+sYFU9*H zkg%9woGU2&pc9C2MZgKDIoz5KXHRJdY7Ln+fMLQI zC!+^_m&}YNcNQUzgGz;(jW57-!r?8>YGR8-ZUgKn3I@s^~}!Ad;;!Jb<9Dut%@}-zwE-fhx^zp1b&;oTxSC8X}X0cy{Du1Xx~-!AFfGu61GI z0$nXm%9Zx8Dv@c`h$3U=81Ad|Y3S3(1h`V8O`0&h(4J z$sKcwm!=eD{j;?Oiu#l%#+Bf3NRKJ=rc;AmZn4CIt#Wg%Y=Wu3X zQ%lPWbL7R~7bcf1pvy+*r}))gWc;ryZk2%giR)l+{aV_|!U@btA){AZgj1DR5itfp z!qI{=3En@P({LCasX~>8du4IX9tNuVW42d(U0POF+_;4sJnKq9NS&b8Lf^0X8K2&&PAU8vGUdRt%J%O`)+hD+8C3m ze#xl$Dt1Q|=D39)5}sb)T(qj{dWOWKrg?cvx>stI;(Pm=eS7Te`SFDy@6S(zh<9OfWv@C;C0%MZh^ zfbnk%+4&5x$5nLx#3_Y032g;H3v*GN!i-~+u86jWhk zHtgtC{L`$Hw5Bp>Bli_;1Ft}n281MHGcx42cR_M3nms|z#5T=Bsi~69-?H>o3nd@f zoT6Qi4gN-Bc7jMClQjYB6%>Pmx($)B3#&SGP!QiAyBTqqh?#u5+;E(CxbO+rvuwfm z>i%w1AhIyTMy~mZ$4Dg8$jkiPz5@08C#G%17Zz&uKS|pO+udTC7(P(rBxGZ+Lp5Gh zv0ueM;kbMZ6QBe$WqM@D7(zTwJRQIUI1&H>k(dp^jYf(Q*cD6x-J#p44(_Osw3V3R zzDFiJg10RS^CreZG52!MT+QtUvE?p*TaIIP)_cYLh_WQ*tDlW)f-2~;W1Cj0Kx{T( zdG}e}!U{tdmKb_u(J*h3SS(yN};2Zh!80NGrB?qq?dYau(>}z_UOgwS?^k=mTmd#BPkWeaz_= zNxAck2KM_O5yd3oM2TVB&k|_mhdGYEb0Rz4;4Q9UA!tD-L{DWNIF0 zHQSfI_uql_G3K6ewn?x5@86(Ni+el`l&p^sa>D%pPcRc@SY&}MSY-NkW{vDc(}Q1* zm`mC`RnVF4y2Kq;)yPP7cP)i7w^mnc5a;CAuY>8CAEo8zJwvbk^8#d2SifES@@Yc` z{ifPq6LsIdiocBY1dH&vkSU;)%)CJ->w-H%HC|iZAovdV&1OmBA{i)5PoxYl>0NH} z#^4>q>hOl^H)dcf8}St=Y@g6)bp&8QpEaUv6Ww3FyWv{yd9X>OwQ@LFG|LgVN$iQ{ zxy&S_Wq9at^Abh~9yxmWUHNbJ9e!)wV{e8g&zBX*`LtxWS!Za7r`ARB(@ljtB3>(>`)cD$P4tU`(ium&)xzA!0eH|1DRmzp^5v*po=d2uEJGb*FX;o2z^Yw|R> zV`@+wjhVtSWBd@p^t|LCoCqYousXU95u zb5YpX33Z#6Z4Rpf|zVH5pg4r&H6J`4Z{nj?y#WqpAGB@XS zo8q-OC3NMh5sxB=QC3y-%Yzk?^qWI*am5gBm6GK7__LM<-NWy(>24}!oX7hjs|#yU z5&4AP$fBiyO=@?bZJw;mo5v>x@?E!iI5v#`k42{(@qfp<&a6f&lZVqc4n_zzsR%t+ z-CNFv)w~lwR(gF9t28~>m9gsd9*XxjXzwK}u$wPLbF2zeJ2P%5fy1a0z-ySLVAO4t=5>9kHFH{h_P*5 zpvsl=9SW(MWIR+=-`ZWXyjM6^Wik1?Z6SQhOxrFabH(SpgH`%hR;lQ5`nPK*?JdcB z_xAqxPXX?ud)>zCBCVgN2H=!IU6D&TkrAW{7y#N06P++*?3wPn(;^=$^uaG6If;y$ zl<+LKhiXnvqL`=pzo1cS5B(=$mR;pKX$_aPy^^^spJxWipFNAhZ)2u?W3Zz%gm>4d zsqH&UGfJCPD)N7+_~?&uZjZ(}rj_>*vDJ#Sj#Avbi$+rxP4oe)>Id|`AI=~zz!l<5 z;elCtB8T$_Z7b4SRF>#{i|3N2?uvGlJ*Q6xT6azzSYi|bCpy@qsQpA=7Z&&nJ$Sc1 zB+LCk(+z*K8xbpisvXq#^^`|yW>~q9OcFAFq>`{gSULn}IfQ)}yR3$PmA$znL~HE4 zdzYU$A*ME~By?ZWI>?&WTcS*LYMC?tlO$QfwDa$q3h^;rMac{ix?kx{l_#3}JMp(d z8}DfUx^d}>RI1_cxryUey|j$|{kY?ZF#sWR&F4jkwcuM?uinsBmcvqSyzF?AMIt}7 z<7a+@E;t{w$V!T@<)UN~EO)+4Q&d%Q;#O~@_q@D9LhaznLS_ryy=vj+r4Ntmhe`Au z^-)_tChTRx{^Q?F-F#2gp8ILlzIJmFzf(5afXRWPh#nc&(b%VGmC^@nTlXl7_4w<9 zpT3#-j8lZ3xiN+7T5x&w*RNiSev>5MIS}50x&Am^E>E-)WkCY1A_X zwAa5SS?4fcujIbIV$F3$>OJ9Xt4>pYbV8@PZ7MJRle3iWUieTV5laVejfu7f83?k9 zhIrO$nu1>x&0xVz|G z_I5*G(E1FSMt$I$zcLLkB4I)nN734W}l=_S9 zZq5>!E5|qM3R1tNU;nvl=$<02m!ZMSeGf#H_2}QG^nEd+|1CI|pFcaa#rXEZak@wm^8%5=WrNkHd+$Xh|uBWAuFER6W#iw@d=m!rJR<3;1e5LP{ zf9D6c;_C}P#e{|3o|K>Wc>j~d9?g4Gb9Ta&949Z^&Whwd(d(6y0@8((H^lSm@U}rS@Md?dcd%|Lc!}pg&j@SEOJVjN_?yk$c{~;U)I;l2+mhn`@PZn9FLq980KMt>d`YO|^ zt3UhrLRT2Buv!H!3pnqJv(ST`+&oqb!UdwMO7C!G@cJt^Y%t{ITal4K8+z^W#r^WN z$4YL>`0qA20QuZ`%Z2f69{HS=Z=%_oKfwpC0V)WMHf*E{87;}x>U=`g6p~#09J?l_ zWL$+!sn!8bgI6ypDGh!67^5oWEd}VRIz!gfirHyv=ZM>|eqOy=?tr+L_bw)S_}4$~ zVtF|Fgj+1=uJt83Oa|Ju57@wYkm-{|$NhfM5I+X@9F|J)@A{V%t!U>04|BP12zk{+ zm+<0!P3=we;NT9B!n9tPcf~Ynh()+RK1V}kV!+VIW%o=i&EM!DE-wC~HP=Dz9l}NK z$mxN0#Vp0LpCVDeiZtR(mc_I3Qy0q1gU+tH>&1dA4<~2c3N!=1IXyDrj92mJ+LH7A zx2-K-c2;fUXXH8fn>8?Y7`!^>mtm9~uhQkJjCET=z@G6`)EKJ=@~N*3iypk@5W-(l zq9U;m-n@$RgSA`_&xcez{0A>Pci>jxK{Y=~iGx+};oZ5j5m)ORx1T?O=?0@N#vfShv~Q&JZ5kchTHR^+Ys5i?D$P(e zB|UJ}{P3+U0yQ-^Dmw26X|)7;$~i05FiJ96%)ImdjVnAKrBgKCb=Zw0 ziQc^7z2!jVr=P9a0cQ=XhaX_L2Sz2Z&~6M3%*|Y&Z>t7(2qMAy%Jm_`>cLBwwAab) zpzNSpr`yi+_p4It3`u$Q(0~d+3H9NoWPQ-ds|4r4BFSX^y;Rvl6*E$sCCb?CJBVDQ zXnWL9P-sX&VQ{QL%LZ=|)&XL&CxKT?kAh`xU^l+46?O_P+gsQfaOBw04>Z&bwsE_u zsN5(2V|JPRkN8KmS@X~8sj|oN1*c1R9gh1K{m`s@xam@zU43-n&mr(y@UE?%bprpJLpX--u$u9v}DC za+b>2#QSOD$Pp3kTbs?pv468G|M%B^=k4~;kTRt{tLD|jD=5S zZ3V2rlwaZL-+TR;guF^Sq5zJ;_Q9&zd6&AJyHcM{8neC#-e>PV=^_@A*}p#HzbNPa zn0B<9IV0W2^Imyi#1(Eiw#%J(cHN9m^*}`B`drD7iphf8%X2yPPwB>5m5Kk%+`hGu z6QAo$6ozf=gt-`#i^D7;;-V6J6RG^X?g2t!&K#Foi+;LBxm}-0%JF44LDb!%JPuaf zY{fG6bzU;xOtUWMN8&o1icU1(z`b{xgOd_5nGlRIt(YpS40?j{atSQ>i9dQjyt%4k zE43e$ur5iz|5wy?fK$CUe$}n3x+x`!P|D0EqN0T&LLGY~QL<;qC>3R9XC(?{rm}@J zWXDOz$PN`UPWJkLe$@NF&+|U-bMI4}^ZR}0XGV>5roa4deQ3OZ)WGXv|4g_hbd-IW1ar<-mFahqPx!O{~nV_ttTYhm&w#}?Wq^b9;x1~a~qds>`?N(^u5eI-Ed3fn@ z#zd1_5Aex8Bw%~|utnf2(Gm{HHXtzMB60#lbC6z9y94|K*P$n!DPM1h6es9dCu z2dn|4yRN+4i?;!7dtm&rYCsMEdIU z3mo}3@bU506BAb>LilQFKn1!1&PfOKws&^Ibm18YoefMVX!QDLbxe$VMp%JZVq0n| zI6#a?!X^Zc0iEN0c53?imdO!2<}_nXFPsqt`%EO!MV-OYfj~(Dq&&6Hi!!J`!R%DT zZ+%UDHkGQy*tTI=wbOT*IQxVR?zPjWU}~*Y6{8ZU3v^r7_F?g=O5!uUBJ%V4`y~&% zOx`w75Q?So`V=~1gm|c~rroHHR$>xD-jo;lhg;I4ABA;bp$H2Va+lDT3L1~liZ6@g z-{b#MD`KVWy(K%GZ^8IaM0LW%`#4LUp=C?w1W(6@Qwcl3^#RidjTxn8hGbM^W1<=e zb;wt)l=Y512$2Os9ck!MiT|BmPW0+pmdVGs#*0Py7o4(nb!}yEF+K+U*+~)!o(inT zI5^O6xKnc%!N0)P#W-FgQ4JCZB>G_~!Dz%=L-iX0212NdHa>{Xe+BqiCT&oRO02$E zx3a?RRBP@}EWLP|-$$5fIS>%~YWP_`!Kn7OyLpnjGnnM_b`>GyEzBhR_QUqwnGT^D zwO&j-M{llP68^o}f1z!MlMgE{wEMN9hE30t<Av0v6OnR zyfy3|CMXCLykua6a5%gNf#ov$`^Wyy(3h9%(Y$>W(-%kqXvY-{Hp}g6=X`A^whxT= z>+%l*s7W}>|B;*36i+6W+PRBc&}O313(c;%xw(|Brp9Od-oM~umOgmkWACVO`X-H0 z8pg6!I^pXyc6?{)qAX3CJ1D25rdBbSp7az08(l*`g&KoBOYN52EvX% zeizg8>{&6W2=Kho5Q1C>1j|mne{g|tBw)uH8cN@3RJUByf<-y>da9-jwyX7ai{d!`KQ|$1KHr!i=1O0Rdyk9vMf51yK?} zM9@b^i{?@17Ld1p4@fN16hQVMgBeZ~TA#P3bR(|EAy=;Xy{@R;s$aFfuCB4O^DIOd zum~ASGMj&PSQPX?r1*-dlPDy^^PpZ6GAJhMgOLbeQ0#mYL9piQQ5{P?$2q{@*!g@GY6-fOnNJhBy`B4n{LVDDKsxczGV^V&gZueI|E;H$#ShGYmtB)r7S_l=#*hXeF7!TO9Ft(v!Bbt%1q4(o00lA+X>8wX!&_^QN zNB(h<&I6^WkUd1UI8HjZ<4&v**QW@irs|w0wVx;Z+F=E-RnlJd=3@~nLf^?t(_uo_ zOHO8JM4Gf{i@Tq?VgL2?73p_Ll7eG(x+6BfKdRwmSu1CUatHnZ(~oiB(a^MmO~M9Y zlf;={Uq3D?5G^wXsao0H?B|P6OHvcOSK*A*EaIeL%Oz-1bSpZt;|NSJsRUVoI&+lU zMOA#dn2mMmJ6fHPB!W8*o+DKD$rkK~o$pfz>SKOvlCj(oje&pQbu-MubB!?_9XM6@?ECo}xl4VnXebv>R=peDi^Zu!<@&*n(45Cb` z-fxY>CNAZDxhj|=oFz84{ePD!?K)!(NBumOzE8O!5o&d`_O>lADM(^PO3K^eqP&@* zj>`^mg^xDatkO8TN~zpSCfQ#4TJ+NIH=c>q^W4Ketw`>bFez|e0;vRrizIm+qKIny zIdJ4cik;hj-ek?9?D}u+%s^{(<`6SE< zzA34vlZn_{&8!u{uf@fGP@eUv7+&YtcnME8DKxr7uX?KShk-?Na!@FqmD5HvM8J!KnS=q6l^%B+4UHn;I+3wHlg& zpo*7z5!OC--f=422M!!Kub}~~SUy1&D-EJL&|Gq+tvQ@Y=N>}eGtX&{u9!B4Xyg^w zrKU#n?u-fVvx^KDduW`&kHTUyx$P~$+?fS-&-%)3)t2e)R(ZUczKKMI2=(EB-fO3D zg)s%yjf$$P4rwuLbX8PfrY?v*u?yf>B3Buz~nD=$&}8$9m!w%Ei+|0LLU=2hC(ntK0Y*}+-Q*~ z#Ei)F(f|6Zw3hrcWs8Z_i}YI$8^?m?%uc_uNgVq}VKckQo|5NAnnzB!=5Dn=pJR)(%SPTSqQKkNWdWjESWv^i?WR8yws8KBMgDtofC??KD=fbGH+EtB@|BP z*$pCA?IrIe&z2-qx5@1}uVtl@D3oIKy;qv_k~BZz<5~OW%PpLVH_Vh5vd6LLFJR4w z;OI(pZf{}=aV0JH=V$q`eMOcn5hE~oef&h(#cWhRK21;m>d+LTUTL@U&_X4P;Ib_# zj4GqDo}=baREW{5c($Ev-7eiyGg@pGqnCcIS87)(cIj76ZcWC$+u_Kso}U?M^IS75 z{I!fvwOros{KV~8*H>pdQ)AL`c#aFN7ncQ^^r8!OSGb7GM{Mr3Rogq;Sn}-77?2K} zaGrS}wTljJgsT$eEze>HL?i!(nur?r3-9-R(I@BG=WA;9>U;gj6sCc^r>ATOn~)3V zW`o_U$DSR;7XQA_K}1@jDzCkB{2+D5)nl8#SJ$3a?~1nVjv2S@`?_7mb!qR*R8$qC z6WnodhS@Q8puZng!_akxyWQ;6;NoRj|LVEOhn^4EH8Go>J$>3dwq9lDhtPSG6~y7| zl&yxkD9#ufir%(V!K5t=15uetiHTmbv#!K(ys|3vu%E1P`H@vtAMe;7W_Ejb-0kLK zw?}4wX8Ee;w*|gSur`+MdnK4VK6WRlV7}i3Co;@gK)El;-LCYez6F7ByqO!gGdJ*N$vd2vu-Nn-S31+<>KQ z4)O#(&!YVJ1Y%;swWZWk7Mgy$FGEI7P`BD%pHe?v`0bAl<&fV@@GqyU!jab-I$gb> zWPveAL5)HFgM7Y>9jjlb*Dtbmy7r}pLRzEeC;7hz%2vPd{9HfB-8nE^ZEcSO{mY~r zkrFi@*T-MFvV7e(mP7kVIbV7I)qlsD_kL_YvBiU?TyNLR>C1HA^N8)P*RRGs|DJi9on$T z?aUYV6w`$7Z?srt*A;tBT}<=s%q+FoeZ~^Ek*8^C*PnfPL2o31gHqL=8k6X|Sb@sf zj={?JydudZt-RQ&!LV}aDMOP{#}zjukl|c&(Bt<(5vBi|wmnR}3<$jLDg5wBL1sC>#az3+9Yh99dAAL07*{OK``YbC zE)KpJoA^wrE-(J4Vq1k2#Vt_jvJiOB(-^su7HJk|cHD5Ru3CSb_n*A5xJ6&?V!PXG zjjVSAJZo+POz7kC@_5lU-kqJCOnAKBv+Fu$Di6h8m0tU}>!Hm#DfP;k?=Brnm2XM6CIYdDS@_r?r_o?x7 zdGH~Hk18fEOU-k7Ql580xg*KKB}x$iyG-wcgYw>(aT|*v3`BzqKbhYK|B1p6LCX^knp}aI5i1)eF0r z?V1Q=6lZ=vK!uU}Tr&6> zMzS&o5e9}$g$59-&=ITQsSoBjfnhm5S0aaZd+McaNw^{r7PWG~esij_S>1f72i(e` zh3%T(@V87~Um}qp>+ko-T8K;JG5xGZ7N;&1WBrF#3V536jst*Lj3 zGyQFGe{|@s6|C9F=TeK_@4O}g9=9;CQ6k-PiL1=```}H@Ivi0B(d~2UStbiU-!c*h z5@C&Qm63$i;>usa)vEnZ1#jF5_&bJdd8H=L~3KZ70P9bJv-L` ztNugvh*BE?koOBOJ+S`zKI`@LT#ukvXNAm#C05V(DsS%+KcwNfM0S;pG zY;~ccXT+0^{3(iFlm7E}Ufh>vSq&sr0q#Uj0D(}w&(Y#1hWma%pd4^nq2?`c=p2-C zkmv%+0c-;KF6z|c0k15x1P^g36=&X#*3a7opSK-Y@zL>6-QD_>+O9ejgh?)qxPN#q zdb+u0-%+yoGJ1~_D>(fGoX!x|0L&7icHD$;?*)YQ1a2H`yKXXu+DY1EaXbkeba2L4 zZY_YAm1r!*s76dDvX#Ujs>E0X^3<|)gw{Taap4|F3AiVAt|jz!gs>j+ z{q$BMk{;Mld3kvRFpUdm9@4BIL6OGu=cgYJ?7@kRk%BX$$;g< z@s73{0~Ag><1(K`FA@F+i%?a!U<7AFD1bEiMp6c5pTj1%bjl-u-X@r7|<+xpWQa1S01EphE*=;A?|C zN0_Iel|;5KuCZ#cgWwiQgr9cu)*wm-vxhJf5TH0ZWQdSmczn96!uR9nV|mVZpOe5< zfapZ*?}srGl5_&&WnfSy6Uphznr`qcLY8|i3~iL8D)mwhHn#SKB=!c3EhenH9x>YDKf@M36|qijo4e`P0|0W`$S zBI>w_2%?dt#S#25?DY_^V@|sz@e^7(0JQVdB9tt{0pbtffQ%-M<-QnXO%d7AZNo6N zi6Fw++FA(A1cA+pi=*oc^jY-y5g-hq+-HeLvEx5=G>hY222c)*kDT25RCj1Jz!KqV zjD+fQGc98M;ZzRd8MuTDC?H z>HCNI>*sv0-$5Rkq9UEz9-j-y`Oq%k6)+ZMJdi z!JGNyk{k-!ljvK<)=UFrlL#444ns#KkZD!eE-i_cjeXjQ%qUg@8hd zE+N9Z0~8WVJ%(Y)xx)d)gM>|wC{Kj^V)duS#*1ueM10=8ld24Nh^YagZl+-=T^ar( zXhndASST>)(R<2d==O#veSY{5g}6X{2xhQ;8}q*L%CXHqyR>CCL|oli?@~wgsUIs^xbky6u@KrLObeRkJZpBsE(XXS z`g{9QP|n!z+VZTaLoH%7_?Uop2*0O$SUqU$as1K=LQ(wOpGD)H&4!tf&Fo0?V6@@4Wgf{~Z4V&t`N9oK#5(%{n9LQ-z z#}3lbLMw%_R3Y|};NpUU#3UsZknl>i^dK6%?@vYN>XAj*>v(v{Xg#Nx+Eb z$=plt1|G*7XXGWyiQ6pBocd13YW~T0Z_fog*N}lD^$m`30J~7^2vn9JM-v;qry4&> z~k4~6N!ha+A0QWT@eK@9K(~qf*-WKI1 zQ;&M%D5V9kyU-0Ebojo7Kz|VrOBe$n#Gql_Z3(KFL;N{$D2}T{XPTQ9w0U0Y$yF+*| zYtbhSy8$JUANyqtIBNfFIlk1~C%Lh>u8fh9z*h3QqDd&L@j&DIOAGrjgb&hethRO9 z&TqT1Lrp07MA3Hh^;Cy2nI3F8CeRr!V~?RMvuJJRy1OS?{8k-d+f0<0 zAt(}?EMeGuc-Wvg_s@C z6!oAqD2=1zeZ>o)^KiKUbIf-dX2x*`?Ji6{Z{Pg>{fd_YET9+*5CO5`uyO9m$k&2f z%Qfo``h=N)_zWoK7MpUlvH8UC6^aYcvG|S1_@?%}-v~G77k6vm&B*3cCIje#N2g@` zHC)dr_@&F)j(Zq32z1^Zaw3Mpo#UL_$m-R@gAd6cwB)ww{tt=VqFaKk`U0OLo&6Zc zYxN7~Q}Z3?7~?x;!p1%xJb7#?eJF3kw>K{?>^VsP&8v6y$YPJaV6n@abPr+?0xckQ zeUkrQx?N?%PNfX`DiEHiKO@cLV++7{!aOZS|LjbywTE%?h4~4?r2}(QBgDw@T%dSD zNkX(bBcTyl1K4m00~$tXi`u9A>Nkicv&DHAq-`rHDEMeM86N@pir<3(TI0Mn;+*ow z29K&COe&&Rl?aH(VhfxJYz_|Z1ZfM?6+S20u@uPSs7EpW^5_>1B_KhtbzuZj^C&Mc zqJbE-U~L1QhII`^j|B(od6rN@S%JyETsaJTw+PetjGGL$)a8OX#EgpXZO}-A`Rs(H z<#47_1yA6k$kcQ_Uar?G7mnw0+8v-{W7T2gRW>p>`_b>5f&u3qJQ!@?zdDMldsBj3 zy4-GPWF3&y19&Z#cDnFRTOOaL{>lw{_`)1S|{K5(rBqu|UMjAe@$P%p%NH zyI){A#TT?CDq+aTW`d&`dGX)ARfa+Z@Y*i>(c5mUJ;V|4Wse*d8mN&l&EZrbGW;Ju ze#=k?$p;P$&`#s#jNWia0?O=OhOhaT4%`!tPdLVcN5(>iWd*A?$~o}7m$M7e&Q4ff zF!qPq@`7;Jz_MJ>S(u3x32V?r(4mMl!)17IBD!}+(wzU@`Bv(uk2xL6^!+*8-l%^Z zm;SrVcKf(eJ)5SpLeTedL4t!fP&Bh0*8_4Vr9MZO@?G&-a8Ms;G>v`LVn=2FN%3;~ zz2xz(Xymn$@rlP#EQ8=a%*}h5N~hOCqX3~0K_Jf}IS}#17{AyU5kUyv8`@JEoF(D6 z?-p9@5h99xa3{baj{s7LGw$G^v5k#Q`zt~nfq&pwgI11Q^B4yn7WoK@qCLc0U2kq- z`;NA=&ep=Xgzp6xJea#_@U&6Z3Xv8B3UK%=*7*lgnwp4i4iH7P3vBG{(7kx!a1VV9 z(wd3UjSUp|Jt~BW*1_I4cuWN!%uNs+1C5hee+Em#rQYdZa*C`*20PE4{G;%x<(PM0 z|1x<0Vem{?%6P4@sR|9B6^+u%JT>-xm8aXHg7@U6Vk&3`d?@g-g?tCP@#Tm-P9nAx14c|yAA5^U7me&( zOa1hCwNQcUMC!}~1o?vYt;0CM39SEk9?&mHNg&hei-_^X=8W4*)YKfGzuaA%Sl=yE z`gLEw#zyV`3e5~<5QC0rcY`?@Qx44;C}~=$fJGChOuY5ExvSY)PoF;3B2j02PVQt} zI1QL@SvQ!+zSMFqSFp4%tUt%`;ihA_mgDMa*W14-Q@_-^exP??X{sJPt!Y?Jes%?u z=d4#}`y%VP;AbYw$R;L&>dLQ!vcyf+~y!Rrv)^UpeFC?|y($bn$_9n^iGG?`hT*=%jn@ z`GCOJkJat@PY#w_@YCw*=n!|&e>by_zMl}9F6vxl^+}~0`%o#_Ovw+zWF`LqWrd4g zMAB@>0jn#LkG%VIsu^p<{l64w)V-@4T|C>ty@mD><7dreFE`2=s>HIJYv$(%WCw0-mJvQj4}&*^M4y|QGE!}eLw9Wa;V;j1 z^C%7Of9j!Ijm!recoCly!CCd^JUS;+vd!x?tJ;1m8JvrEu(0=n$eW+dEA0<@CR=`* zhkv_s$6PEP7e*Z5RNT!7ng%YqCAq9G8v~Bo^o94Az5JHoni?(n*xGKa)(^*)4LHg*|YD+QysQ_Z_iuWLjn zO!HUlsCtP|`Jld7(tVTDe`3r^e6G(pS$#kBCI94-{lEEDs+L!6 z9nE&Y_S+~uz?pdWv7M4!R?k&SZ?H8+=GCsTrBzw?W7KIhl6{_Ypgu08q@;tvjzp5o zv6lbw5)%j#RmoOOH;aAD`E$aI+@Rk%f24)S#wU)v+N)-{yZ72DV$_WaC;eCg(0@xnTKU-KNCzyj{1L zCYhd$B=Jsf{O>c}Bk%Jz*UblB3 zAF2=N{StXNYObGo5D?<>f#bt#r`l6sGzb-J_jQJ@_TAN^b}6#Gdw;hU>IlY`9+i$v zw$9%?e}koG!j@5QW7nG3I)-2hy$%@3v5*g5K2&j?y|`k=e!#4~^QuJICr4IgGQj5; zgVDosUOvCtGY|%GB#hVP6cx5?IA%~@_C zE<%5MIF{nId;Tu>PdnOwj#(}CZ86>JQ?LWJR)}+~AG(AtOfCrj8!=Q>^7MjI>+^sX zX9Z86CA+>-n;$)#foxK~P+U$G_|sAcKVM+Ht*I8M;`t$OnWOn{>s9*O?6;S!j`+A7 zNf4;yFXr)?Ns>M2bO;xGfV6Bf9<)ieD83^Xrpc7EnH98WL!`6pY{%HrOR|M=x)#JOj=MqWEDAwAi=xBEcF7koRY2K zS8R6v6!!bmY<;NvbsK%x2)G{T)1IZJJuY|_g?R2)G66xIiw`z;%-z7gf7q%%c{2N8 zd9kL>`Hk1Fd1?1Z*LaKj{c$-Kk!Y#}kn$%8IcWWWF~E-b`K4K@dzZW>ZxQ*yS-P8y z9}kE$ik^(P6SsxPKU*H@3Qp9{dn%sM5W@4JfWG~`3cLxo_Zm4US1i}J8C0D%u)Z0F zbZ-IyKD?n!UUar_hg3~rCUK@mN4OZQIsoJZ4uXg!kU-kPb$Ox=|35Ub05x5)E!bOw72ASt9Csba zbZ|&pHXZdxW?!i1*_e{b2dp#f=f#^69w2m5*V)&I>gO)$y zsPT&-(T;gUBV+pE_)yW?4J-(E)EN4K9Qxs&1)jy`wjC+?JxGC)q{ajcJbm`;%>b21 zEQX-!i3zRAYg0weZgt)h%cqKIHtU};NwF8v%JwWh{TuR22pAykwsXdACZR2Q`)kaX ztaEfgG4~T?p-_Qpn_G1;W)%;CHj86uOWQ!e}4nA@zK+A{pjv$Y6u>6tT7V0?SG5{EarTl)UG#yiK4 z83O)^skM?Ww>Vji>nRd#Vrp{}oWu5W$STmIlT$M&=!6vsZmIz)(Jg*D zBRgYHI*Z)70L$%iB6sFVZG67R6I7j(zO!)Bkw^#f^hezIJ=jPjHHNivY9;o%%4CVx z8QJWhBF=CjAEO@;4i#2;k&oNrxjd^@^ai4Z+qV462wp*2LaJ4s?wo1ZE$oaxq1^Y z#~nxe#}vU`;vCLdtzUMu-H&vWDb0*+8J>)se7mJIr`#g14O2+yUZ-m>^XeQ4#e$C8 zWy=OngRP$?o)kFi8qWoMYrX&S;_0uaaw%3t;a>)HX9~s+^&WN(=eO=JplqO~HCtHO zj7hzUV&FLOuGC!DSa#DJ18dopY(+@GNCT}-pTq+|zVS2q(S5t&|7UkpH86U(IvIMg zW6K=ao#Wj_Las$|AisfqAx8d!on2$tx)kzE$ZyMi_W;14g=?`6AI_E=FIIn>(w!>OqBoR?ovo2g6( zidpeT0DM1ucJ)QO``4en2G_=)H(5$XpFvQt-*`#Wc5RhRJxqFH?Nwd(Dm-R5Hrb4N zvvr)IGib+T?4*yMj zG2jhh3%VT6Kf>jtv@hrD+*s+{&W*rSaiD?^^unDP7SXsG!1 z!W|NU#3O`Amz?`@@}rZ`c*p#6T+fIEub>JescSAqa&Ue@ymHwcJNKQLRl*Gb?FkkF z?IM`Mh3dC=)ApU9IHETU7j+!4-`Gigw7o!Y79g-Jv>Kwd?OHD^Eh`((x^rg(Hy0PW z5V+zaf1f(myb0pspCTP7v6BhpL`uW?ODPHshkh%Qv~ zfPx1#GPe9RBzpjl6%HQ${|gR&T!f<^B8j%_;F7I?z^1;T8-7 zOJ19RRJPaXkw<3C;Gr9o!RB{2=DUmm024>eUQcHOVlSmEp{F|4#eBk z!NK8NP89raN8~RRfcC{5=rO}L24R0l70Mr$bNL+I;<4qD23OgEqo02`c&BTmac-gA zvf++|Mfo1u<1>hg>w)OoZDE3f{5T%=po;i4hN~!=-ylUk;`QVbZFxt<)5^ni^XqA4 zUB;i-UA@Z3K>JTR?ri!LT#D1AXV!bEvH?H_(1Tb@BHe|k%9DuEU;Qi7Evb)ZeR;?6 z<0@XGZ}-&O89dP?zxoL-s?o7MuJRJJmB62h4MvnKk@(ER3eTKk645sr?=j0u&`Ge47zH!nnk+S^o&(WO}OIa!7i7m_}2(x>1e^)yvSeU%!iX;)qt$77xisi_gKdJ~e( zOj|s?W;r#OetCS=)o0WhlAd@0(o!XbTS(}RyElnv@K->d z4=7Jj#*DB>QfER0b_;lvGRX0^%$e-Em zbNnctH7)ou&e|2ke{HgQkIA={Wkdho8d{o7`^)F)MsY;5{?F%a-4*exY3b>&W*0n^ zAl-T2XQvI5B2J7bztLFVpmQrzwTzCuG+YTeA%ku>#JrAZ9^7VEjBW}~T{ sJFeNv`Crxw+?Qs~bqv?Jqti>Pq(*h~*9;9z)8L=eaw;b?k6-ZmKQz~GmH+?% diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 7aafc48c2..244623a3f 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -105,7 +105,8 @@ # further. For a list of options available for each theme, see the # documentation. # -html_logo = "_static/sphinx-test-reports-logo.png" +html_logo = "_static/sphinx-test-reports-logo.svg" +html_favicon = "_static/sphinx-test-reports-logo.svg" html_title = "Sphinx-Test-Reports" html_theme_options = html_theme_options diff --git a/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html b/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html index 2ac880f76..60f547bc4 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html +++ b/packages/sphinx-test-reports/docs/ub_theme/templates/layout.html @@ -2,6 +2,5 @@ {% extends '!layout.html' %} {%- block extrahead %} - - {{ super() }} + {{ super() }} {%- endblock %} From 014c1a856f258b9295c0dbf1c8261f8b57043d1a Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 10 Mar 2023 16:03:04 +0000 Subject: [PATCH 077/159] Tr encoding (useblocks/sphinx-test-reports#62) * [useblocks/sphinx-test-reports#60] test report encoding from config * Updates pre-commit deps to be working with newest poetry version * [useblocks/sphinx-test-reports#60] add missing changelog entry * Updating linting --------- Co-authored-by: Joerg Kreuzberger --- packages/sphinx-test-reports/.flake8 | 2 +- .../.pre-commit-config.yaml | 12 +- .../sphinx-test-reports/docs/changelog.rst | 2 + packages/sphinx-test-reports/docs/conf.py | 18 +- .../docs/configuration.rst | 12 +- .../sphinx-test-reports/docs/ub_theme/conf.py | 7 +- packages/sphinx-test-reports/setup.py | 1 - .../test_reports/directives/test_case.py | 2 - .../test_reports/directives/test_file.py | 1 - .../test_reports/directives/test_report.py | 4 +- .../test_reports/directives/test_suite.py | 3 - .../sphinxcontrib/test_reports/environment.py | 2 - .../sphinxcontrib/test_reports/junitparser.py | 4 - .../test_reports/test_reports.py | 1 + .../doc_test/custom_tr_koi8_template/Makefile | 20 ++ .../doc_test/custom_tr_koi8_template/conf.py | 211 ++++++++++++++++++ .../custom_test_report_template.txt | 55 +++++ .../custom_tr_koi8_template/index.rst | 8 + .../doc_test/custom_tr_koi8_template/make.bat | 36 +++ .../doc_test/custom_tr_utf8_template/Makefile | 20 ++ .../doc_test/custom_tr_utf8_template/conf.py | 210 +++++++++++++++++ .../custom_test_report_template.txt | 55 +++++ .../custom_tr_utf8_template/index.rst | 8 + .../doc_test/custom_tr_utf8_template/make.bat | 36 +++ .../tests/test_custom_template.py | 30 +++ .../sphinx-test-reports/tests/test_env.py | 1 - .../tests/test_test_ctest_file.py | 2 +- 27 files changed, 722 insertions(+), 41 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/make.bat diff --git a/packages/sphinx-test-reports/.flake8 b/packages/sphinx-test-reports/.flake8 index 0b241ba30..4478c885a 100644 --- a/packages/sphinx-test-reports/.flake8 +++ b/packages/sphinx-test-reports/.flake8 @@ -1,6 +1,6 @@ [flake8] max-line-length = 120 -extend-ignore = I # ignore all isort errors +extend-ignore = I per-file-ignores = sphinxcontrib/test_reports/__init__.py: F401 sphinxcontrib/test_reports/directives/__init__.py: F401 diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index 91424ecea..611829cda 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -1,29 +1,25 @@ repos: - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 23.1.0 hooks: - id: black - repo: https://github.com/pycqa/flake8 - rev: 4.0.1 + rev: 6.0.0 hooks: - id: flake8 additional_dependencies: - flake8-bugbear - flake8-comprehensions - flake8-simplify + - flake8-isort - pep8-naming # ignore sim118 ("do not use dict.keys()") for clarity args: [--max-line-length=120, --ignore=SIM118] - - repo: https://github.com/pycqa/isort - rev: 5.10.1 - hooks: - - id: isort - args: [-l 120,] - repo: https://github.com/asottile/pyupgrade - rev: v2.29.1 + rev: v3.3.1 hooks: - id: pyupgrade args: diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 3d8d9ebf6..eb6dcc4b1 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -8,6 +8,8 @@ Changelog :Released: under development * Updated project documentation to use the Useblocks theme customization. +* Improvement: Template file encoding coud be configured. See :ref:`tr_import_encoding`. + `#60 `_ 1.0.2 ----- diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 244623a3f..ddf9019f9 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -7,26 +7,25 @@ # -- Path setup -------------------------------------------------------------- +import datetime +import os + # 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. # # import os import sys -import datetime -import os -sys.path.append(os.path.abspath('.')) +sys.path.append(os.path.abspath(".")) -from ub_theme.conf import html_theme_options +from ub_theme.conf import html_theme_options # noqa # -- Project information ----------------------------------------------------- project = "sphinx-test-reports" now = datetime.datetime.now() -copyright = 'team useblocks, 2017-{year}'.format( - year=now.year -) +copyright = f"team useblocks, 2017-{now.year}" author = "team useblocks" # The short X.Y version @@ -49,7 +48,7 @@ "sphinxcontrib.test_reports", "sphinxcontrib.plantuml", "sphinx_design", - "sphinx_immaterial" + "sphinx_immaterial", ] cwd = os.getcwd() @@ -65,7 +64,7 @@ # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates', 'ub_theme/templates'] +templates_path = ["_templates", "ub_theme/templates"] # Add a custom test report template. Please add a relative path from this conf.py # tr_report_template = "./custom_test_report_template.txt" @@ -108,7 +107,6 @@ html_logo = "_static/sphinx-test-reports-logo.svg" html_favicon = "_static/sphinx-test-reports-logo.svg" html_title = "Sphinx-Test-Reports" -html_theme_options = html_theme_options other_options = { "repo_url": "https://github.com/useblocks/sphinx-test-reports", diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 919342326..11fce68f7 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -104,4 +104,14 @@ Defines the length of the calculated ID for test cases. This may be needed, if a junit-xml files contains many test cases. -Default: **5** \ No newline at end of file +Default: **5** + +.. _tr_import_encoding: + +tr_import_encoding +__________________ +.. versionadded:: 1.0.3 + +Defines the encoding for imported files, e.g. in custom templates. + +Default: **utf8** diff --git a/packages/sphinx-test-reports/docs/ub_theme/conf.py b/packages/sphinx-test-reports/docs/ub_theme/conf.py index bdb71d96d..6d8d8d320 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/conf.py +++ b/packages/sphinx-test-reports/docs/ub_theme/conf.py @@ -2,17 +2,14 @@ "icon": { "repo": "fontawesome/brands/github", }, - "font": { - "code": "JetBrains Mono", - "text": "Urbanist" - }, + "font": {"code": "JetBrains Mono", "text": "Urbanist"}, "globaltoc_collapse": True, "features": [ "navigation.top", "search.share", "navigation.tracking", "toc.follow", - "content.tabs.link" + "content.tabs.link", ], "palette": { "scheme": "slate", diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py index 79899c545..d8f585bf5 100644 --- a/packages/sphinx-test-reports/setup.py +++ b/packages/sphinx-test-reports/setup.py @@ -7,7 +7,6 @@ requires = ["sphinx>=4.0", "lxml", "sphinx-needs>=1.0.1"] with open(os.path.join(os.path.dirname(__file__), "README.rst")) as file: - setup( name="sphinx-test-reports", # Update also test_reports.py, conf.py and changelog! diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index a472b13e8..de0aaa5e1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -56,7 +56,6 @@ def run(self, nested=False, suite_count=-1, case_count=-1): suite = None for suite_obj in self.results: - if nested: # nested testsuites suite = self.results break @@ -73,7 +72,6 @@ def run(self, nested=False, suite_count=-1, case_count=-1): case = None for case_obj in suite["testcases"]: - if ( case_obj["name"] == case_full_name # noqa: SIM114 and class_name is None # noqa: W503 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 5bac9ba3b..b2c6b59e0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -91,7 +91,6 @@ def run(self): "auto_cases" in self.options.keys() and "auto_suites" not in self.options.keys() # noqa W 503 ): - raise TestReportIncompleteConfiguration( "option auto_cases must be used together with " "auto_suites for test-file directives." diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index e2622ec9b..42e9a5991 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -58,7 +58,9 @@ def run(self): ) ) - with open(template_path) as template_file: + with open( + template_path, encoding=self.app.config.tr_import_encoding + ) as template_file: template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index c0f7ba01c..9d462c4da 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -101,9 +101,7 @@ def run(self, nested=False, count=-1): # nested testsuite present, if testcases are present -> reached most inner testsuite access_count = 0 if len(suite_obj["testcases"]) == 0: - for suite in suite_obj["testsuite_nested"]: - suite_id = self.test_id suite_id += ( "_" @@ -145,7 +143,6 @@ def run(self, nested=False, count=-1): # suite has testcases if "auto_cases" in self.options.keys() and len(suite_obj["testcases"]) > 0: - case_count = 0 for case in suite["testcases"]: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 88f6d02f1..35e25374a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -66,7 +66,6 @@ def safe_remove_file(filename, app): hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files # noqa: W503 ): - app.builder.css_files.remove(static_data_file) @@ -91,7 +90,6 @@ def install_styles_static_files(app, env): brown, len(files_to_copy), ): - if not os.path.isabs(source_file_path): source_file_path = os.path.join( os.path.dirname(__file__), "css", source_file_path diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 6acf29ca8..0fe10cf26 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -41,7 +41,6 @@ def parse(self): """ def parse_testcase(xml_object): - testcase = xml_object tc_dict = { @@ -83,7 +82,6 @@ def parse_testcase(xml_object): return tc_dict def parse_testsuite(xml_object): - testsuite = xml_object tests = int(testsuite.attrib.get("tests", -1)) @@ -112,14 +110,12 @@ def parse_testsuite(xml_object): # add nested testsuite objects to if hasattr(testsuite, "testsuite"): - for ts in testsuite.testsuite: # dict from inner parse inner_testsuite = parse_testsuite(ts) ts_dict["testsuite_nested"].append(inner_testsuite) elif hasattr(testsuite, "testcase"): - for tc in testsuite.testcase: new_testcase = parse_testcase(tc) ts_dict["testcases"].append(new_testcase) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 3c295357f..c9d74cec6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -62,6 +62,7 @@ def setup(app): app.add_config_value("tr_suite_id_length", 3, "html") app.add_config_value("tr_case_id_length", 5, "html") + app.add_config_value("tr_import_encoding", "utf8", "html") # nodes app.add_node(TestResults) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py new file mode 100644 index 000000000..36685b99e --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py @@ -0,0 +1,211 @@ +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/stable/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import os +# import sys +import datetime +import os + +# sys.path.insert(0, os.path.abspath('.')) + +# -- Project information ----------------------------------------------------- + +project = "sphinx-test-reports" +now = datetime.datetime.now() +copyright = '2017-{year}, team useblocks'.format( + year=now.year +) +author = "team useblocks" + +# The short X.Y version +version = "0.3" +# The full version, including alpha/beta/rc tags +release = "0.3.6" + + +# -- 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_needs", + "sphinxcontrib.test_reports", + "sphinxcontrib.plantuml", + "sphinx_design", +] + +tr_import_encoding = "koi8-u" + +cwd = os.getcwd() +plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") + +# If we are running on windows, we need to manipulate the path, +# otherwise plantuml will have problems. +if os.name == "nt": + plantuml = plantuml.replace("/", "\\") + plantuml = plantuml.replace("\\", "\\\\") + +plantuml_output_format = "png" + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# Add a custom test report template. Please add a relative path from this conf.py +tr_report_template = "./custom_test_report_template.txt" + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + + +# -- 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 = "alabaster" + +# 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 = { + "logo": "sphinx-test-reports-logo.png", + "logo_name": False, + # 'description': "an extension for sphinx", + "logo_text_align": "center", + "github_user": "useblocks", + "github_repo": "sphinx-test-reports", + "github_banner": True, + "github_button": False, + "fixed_sidebar": True, + "extra_nav_links": { + "needs@PyPi": "https://pypi.python.org/pypi/sphinx-test-reports", + "needs@github": "https://github.com/useblocks/sphinx-test-reports", + "needs@travis": "https://travis-ci.org/useblocks/sphinx-test-reports", + }, +} + +# 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"] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +html_sidebars = { + "**": ["about.html", "navigation.html"], +} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "sphinx-test-reportsdoc" + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). tr_import_encoding = self.app.config.tr_import_encoding + +latex_documents = [ + ( + master_doc, + "sphinx-test-reports.tex", + "sphinx-test-reports Documentation", + "team useblocks", + "manual", + ), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + [author], + 1, + ) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + author, + "sphinx-test-reports", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt new file mode 100644 index 000000000..739185420 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt @@ -0,0 +1,55 @@ +**Test Datei**: {file} + +**Verwendetes Template**: {template_path} + +**** + +.. {file_type}:: {title} + :id: {id}{links_string} + :tags: {tags} + :file: {file} + :auto_suites: + :auto_cases: + + {content} + + +**Testflle**: + +.. needtable:: + :filter: '{id}' in tags and type == '{case_need}' + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Fehlgeschlagene Tests**: + +.. needtable:: + :filter: '{id}' in tags and 'failure' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Ausgelassene Tests**: + +.. needtable:: + :filter: '{id}' in tags and 'skipped' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + + +**Statistik** + +| Test Gruppen: :need_count:`'{id}' in tags and type=='{suite_need}'` +| Test F?lle: :need_count:`'{id}' in tags and type=='{case_need}'` +| Fehlgeschlagene Tests: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Ausgelassene Tests: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` + + +Vorlage +------- + +The following rst-code is used to generate the report. + +.. literalinclude:: ../custom_test_report_template.txt + :language: rst + + diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst new file mode 100644 index 000000000..60d851b4a --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst @@ -0,0 +1,8 @@ +Basic Document +============== + +.. test-report:: My Report + :id: REPORT + :file: ../utils/pytest_data.xml + :tags: my_report, awesome + :links: SPEC_001 \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/make.bat b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py new file mode 100644 index 000000000..ea3517c02 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py @@ -0,0 +1,210 @@ +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/stable/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import os +# import sys +import datetime +import os + +# sys.path.insert(0, os.path.abspath('.')) + +# -- Project information ----------------------------------------------------- + +project = "sphinx-test-reports" +now = datetime.datetime.now() +copyright = '2017-{year}, team useblocks'.format( + year=now.year +) +author = "team useblocks" + +# The short X.Y version +version = "0.3" +# The full version, including alpha/beta/rc tags +release = "0.3.6" + + +# -- 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_needs", + "sphinxcontrib.test_reports", + "sphinxcontrib.plantuml", + "sphinx_design", +] + +tr_import_encoding = "utf8" + +cwd = os.getcwd() +plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") + +# If we are running on windows, we need to manipulate the path, +# otherwise plantuml will have problems. +if os.name == "nt": + plantuml = plantuml.replace("/", "\\") + plantuml = plantuml.replace("\\", "\\\\") + +plantuml_output_format = "png" + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# Add a custom test report template. Please add a relative path from this conf.py +tr_report_template = "./custom_test_report_template.txt" + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + + +# -- 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 = "alabaster" + +# 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 = { + "logo": "sphinx-test-reports-logo.png", + "logo_name": False, + # 'description': "an extension for sphinx", + "logo_text_align": "center", + "github_user": "useblocks", + "github_repo": "sphinx-test-reports", + "github_banner": True, + "github_button": False, + "fixed_sidebar": True, + "extra_nav_links": { + "needs@PyPi": "https://pypi.python.org/pypi/sphinx-test-reports", + "needs@github": "https://github.com/useblocks/sphinx-test-reports", + "needs@travis": "https://travis-ci.org/useblocks/sphinx-test-reports", + }, +} + +# 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"] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +html_sidebars = { + "**": ["about.html", "navigation.html"], +} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "sphinx-test-reportsdoc" + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "sphinx-test-reports.tex", + "sphinx-test-reports Documentation", + "team useblocks", + "manual", + ), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + [author], + 1, + ) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "sphinx-test-reports", + "sphinx-test-reports Documentation", + author, + "sphinx-test-reports", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt new file mode 100644 index 000000000..a1a5f33e1 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt @@ -0,0 +1,55 @@ +**Test Datei**: {file} + +**Verwendetes Template**: {template_path} + +**Änderungen** + +.. {file_type}:: {title} + :id: {id}{links_string} + :tags: {tags} + :file: {file} + :auto_suites: + :auto_cases: + + {content} + + +**Testfälle**: + +.. needtable:: + :filter: '{id}' in tags and type == '{case_need}' + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Fehlgeschlagene Tests**: + +.. needtable:: + :filter: '{id}' in tags and 'failure' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + +**Ausgelassene Tests**: + +.. needtable:: + :filter: '{id}' in tags and 'skipped' == result + :columns: id, title, result + :style_row: tr_[[copy('result')]] + + +**Statistik** + +| Test Gruppen: :need_count:`'{id}' in tags and type=='{suite_need}'` +| Test Fälle: :need_count:`'{id}' in tags and type=='{case_need}'` +| Fehlgeschlagene Tests: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Ausgelassene Tests: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` + + +Vorlage +------- + +The following rst-code is used to generate the report. + +.. literalinclude:: ../custom_test_report_template.txt + :language: rst + + diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst new file mode 100644 index 000000000..60d851b4a --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst @@ -0,0 +1,8 @@ +Basic Document +============== + +.. test-report:: My Report + :id: REPORT + :file: ../utils/pytest_data.xml + :tags: my_report, awesome + :links: SPEC_001 \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/make.bat b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/make.bat new file mode 100644 index 000000000..1e0602442 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/test_custom_template.py b/packages/sphinx-test-reports/tests/test_custom_template.py index 3c3e23108..dd1a273a6 100644 --- a/packages/sphinx-test-reports/tests/test_custom_template.py +++ b/packages/sphinx-test-reports/tests/test_custom_template.py @@ -18,3 +18,33 @@ def test_custom_template(test_app): pos2 = html.index('
Test suites:') assert pos1 < pos2 + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/custom_tr_utf8_template"}], + indirect=True, +) +def test_custom_utf8_template(test_app): + app = test_app + app.build() + html = Path(app.outdir / "index.html").read_text() + + assert "Änderungen" in html + assert "Testfälle" in html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/custom_tr_koi8_template"}], + indirect=True, +) +def test_custom_koi8_template(test_app): + app = test_app + app.build() + html = Path(app.outdir / "index.html").read_text(encoding="utf8") + + print(html) + + assert "бцдеф" in html + assert "Testfбlle" in html diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index caa77ac1f..f6ec4059d 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -112,7 +112,6 @@ def test_doc_env_report_default_build_html(test_app): indirect=True, ) def test_doc_env_report_warning_build_html(test_app): - # it should pass all test cases from: test_doc_env_report_build_html # generated output data will be stored here app = test_app diff --git a/packages/sphinx-test-reports/tests/test_test_ctest_file.py b/packages/sphinx-test-reports/tests/test_test_ctest_file.py index af6e90cfc..f6b44e886 100644 --- a/packages/sphinx-test-reports/tests/test_test_ctest_file.py +++ b/packages/sphinx-test-reports/tests/test_test_ctest_file.py @@ -20,7 +20,7 @@ def test_doc_build_html(test_app): [{"buildername": "html", "srcdir": "doc_test/doc_test_ctest_file"}], indirect=True, ) -def test_test_file_needs_extra_options_no_warning(test_app): +def test_test_ctest_file(test_app): import subprocess app = test_app From 86c322a055ef3bf7173f397984b8ccce30a3b546 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Mon, 3 Jul 2023 21:54:29 +0200 Subject: [PATCH 078/159] Initial JSON Parser implementation (useblocks/sphinx-test-reports#65) * Initial JSON Parser implementation (80% done) * Uses JSON parser if file has json extension * test and docs * doc fixes * Linter problems fixed * Updated font * Added testcases for the :ref:`json_parser` and updated docs. * Updated `parse_testsuite()` and `parse_testcase()` to read dict-keys from `tr_json_mapping` config value. * Bugfix and complex json test --------- Co-authored-by: Duodu Randy --- packages/sphinx-test-reports/docs/Makefile | 2 +- .../sphinx-test-reports/docs/changelog.rst | 5 +- packages/sphinx-test-reports/docs/conf.py | 1 - .../docs/configuration.rst | 80 ++++++- .../docs/examples/index.rst | 33 ++- packages/sphinx-test-reports/docs/filter.rst | 2 + packages/sphinx-test-reports/docs/index.rst | 1 + packages/sphinx-test-reports/docs/parsers.rst | 52 +++++ .../sphinx-test-reports/docs/ub_theme/conf.py | 2 +- .../test_reports/directives/test_case.py | 6 +- .../test_reports/directives/test_common.py | 16 +- .../test_reports/directives/test_env.py | 4 +- .../test_reports/directives/test_report.py | 3 +- .../test_reports/directives/test_suite.py | 2 +- .../sphinxcontrib/test_reports/jsonparser.py | 97 ++++++++ .../sphinxcontrib/test_reports/junitparser.py | 4 + .../test_reports/test_reports.py | 52 ++++- .../sphinx-test-reports/tests/conftest.py | 14 +- .../tests/doc_test/json_parser/Makefile | 20 ++ .../tests/doc_test/json_parser/conf.py | 192 +++++++++++++++ .../tests/doc_test/json_parser/index.rst | 9 + .../tests/doc_test/json_parser/make.bat | 36 +++ .../doc_test/json_parser_complex/Makefile | 20 ++ .../doc_test/json_parser_complex/conf.py | 219 ++++++++++++++++++ .../doc_test/json_parser_complex/index.rst | 9 + .../doc_test/json_parser_complex/make.bat | 36 +++ .../doc_test/utils/json_complex_data.json | 53 +++++ .../tests/doc_test/utils/json_data.json | 49 ++++ .../tests/test_json_parser.py | 111 +++++++++ 29 files changed, 1094 insertions(+), 36 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/parsers.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_complex/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_complex/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/json_data.json create mode 100644 packages/sphinx-test-reports/tests/test_json_parser.py diff --git a/packages/sphinx-test-reports/docs/Makefile b/packages/sphinx-test-reports/docs/Makefile index 28a4ee246..0cb8ae4c0 100644 --- a/packages/sphinx-test-reports/docs/Makefile +++ b/packages/sphinx-test-reports/docs/Makefile @@ -6,7 +6,7 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = sphinx-test-reports SOURCEDIR = . -BUILDDIR = build +BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index eb6dcc4b1..8f0b5d893 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,9 +7,12 @@ Changelog ----- :Released: under development +* Added testcases for the :ref:`json_parser` and updated docs. * Updated project documentation to use the Useblocks theme customization. -* Improvement: Template file encoding coud be configured. See :ref:`tr_import_encoding`. +* Improvement: Template file encoding could be configured. See :ref:`tr_import_encoding`. `#60 `_ +* Improvement: Supporting JSON files containing test results: :ref:`json_parser`. +* Improvement: Implemented :ref:`tr_json_mapping` config option for JSON mapping. 1.0.2 ----- diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index ddf9019f9..70dffdb2d 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -111,7 +111,6 @@ other_options = { "repo_url": "https://github.com/useblocks/sphinx-test-reports", "repo_name": "sphinx-test-reports", - "repo_type": "github", } html_theme_options.update(other_options) html_theme_options["features"].extend(["navigation.tabs", "navigation.tabs.sticky"]) diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 11fce68f7..1af3fe307 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -109,9 +109,87 @@ Default: **5** .. _tr_import_encoding: tr_import_encoding -__________________ +------------------ .. versionadded:: 1.0.3 Defines the encoding for imported files, e.g. in custom templates. Default: **utf8** + +.. _tr_json_mapping: + +tr_json_mapping +--------------- +.. versionadded:: 1.0.3 + +Takes a mapping configuration, which defines how to map the JSON structure to the internal structure used by +``Sphinx-Test-Reports``. + +``tr_json_mapping`` is a dictionary, where the first key is a name for the configuration. +The name is currently just a placeholder and the first config is used for all JSON imports. + +Two mappings must be configured as dictionary, one for ``testsuite`` and one for the nested ``testcase``. + +The key of this dictionary elements is the **internal** name and fix. + +The value is a tuple, containing a **selector list** and a **default value**, if the selector does not find any data. + +The **selector** is a list, where each entry is representing one level of the data structure. +If the entry is a string, it is used as a key for a dict. If it is a integer number, it is taken as position +of a list. + +**JSON example** + +.. code-block:: python + + { + "level_1": { + "level_2": [ + {"value": "Hello!"} + {"value": "Bye Bye!"} + ] + } + } + +Given the above JSON example, the following "selector" will address the value ``Bye Bye!``:: + + ["level_1", "level_2", 1, "value"] + + +**Example config** + +This example contains **all** internal elements and a mapping as example. +For ``testsuite`` the value ``testcases`` defines the location of nested testcases. + +An example of a JSON file, which supports the below configuration, can be seen in :ref:`json_example`. + +.. code-block:: python + + tr_json_mapping = { + "json_config_1": { + "testsuite": { + "name": (["name"], "unknown"), + "tests": (["tests"], "unknown"), + "errors": (["errors"], "unknown"), + "failures": (["failures"], "unknown"), + "skips": (["skips"], "unknown"), + "passed": (["passed"], "unknown"), + "time": (["time"], "unknown"), + "testcases": (["testcase"], "unknown"), + }, + "testcase": { + "name": (["name"], "unknown"), + "classname": (["classname"], "unknown"), + "file": (["file"], "unknown"), + "line": (["line"], "unknown"), + "time": (["time"], "unknown"), + "result": (["result"], "unknown"), + "type": (["type"], "unknown"), + "text": (["text"], "unknown"), + "message": (["message"], "unknown"), + "system-out": (["system-out"], "unknown"), + } + } + } + + diff --git a/packages/sphinx-test-reports/docs/examples/index.rst b/packages/sphinx-test-reports/docs/examples/index.rst index c7494b1b7..0b2e82733 100644 --- a/packages/sphinx-test-reports/docs/examples/index.rst +++ b/packages/sphinx-test-reports/docs/examples/index.rst @@ -1,7 +1,32 @@ Examples ======== -.. contents:: Contents - :local: + +.. _json_example: + +JSON data example +----------------- +Data: + +.. literalinclude:: ../../tests/doc_test/utils/json_data.json + +.. code-block:: rst + + .. test-file:: My JSON Test file + :file: ../tests/doc_test/utils/json_data.json + :id: JSON_001 + :auto_suites: + :auto_cases: + + +.. test-file:: My JSON Test file + :file: ../tests/doc_test/utils/json_data.json + :id: JSON_001 + :auto_suites: + :auto_cases: + + + + Importing --------- @@ -132,5 +157,5 @@ Test framework related examples .. toctree:: :maxdepth: 1 - pytest.rst - casperjs.rst + pytest + casperjs diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index b7af78789..449a81501 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -1,3 +1,5 @@ +:hide-navigation: + .. _filter: Filtering Test Data diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index d5abc5d0c..eba24abaf 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -75,6 +75,7 @@ Content install directives/index configuration + parsers filter functions examples/index diff --git a/packages/sphinx-test-reports/docs/parsers.rst b/packages/sphinx-test-reports/docs/parsers.rst new file mode 100644 index 000000000..4577994cc --- /dev/null +++ b/packages/sphinx-test-reports/docs/parsers.rst @@ -0,0 +1,52 @@ +:hide-navigation: + +Parsers +======= + +``Sphinx-Test-Reports`` provides different parsers for test result files. +One for **XML-files**, following the **JUnit** format, and one for +generic **JSON-files**, which are not following any standard. + +The needed parser is automatically selected by the file extensions ``xml`` or ``json``. + +Junit Parser +------------ +This parser reads **xml** files and handles the content as **JUnit** data. +Other XML formats are not supported. + +As **JUnit** format is not really standardized, different test framework produce slightly different JUnit xml files. +``Sphinx-Test-Reports`` supports the "dialects" of: + +* pytest +* GoogleTest +* CasperJS + +There is a high chance, that other tet frameworks are supported as well, as long as they provide a Junit file. + +.. _json_parser: + +JSON Parser +----------- + +The JSON parser can read any JSON file. But as the data structure is not following any standard, the user need to +provide a mapping between the used JSON structure and the internal structure used by ``Sphinx-Test-Reports``. + +Even if this means some more configuration effort, the benefit is a completely customizable data structure. + +For an example please take a look into :ref:`json_example`. + +For mapping configuration please see :ref:`tr_json_mapping`. + + +Technical details +----------------- +Each parser is realized by a class, which needs to provide specific functions. +Also the internal object representation is the same. So each parser must map the external format to the internal +representation. + +Only the parser cares about the format. Other internal functions (like directives) just work with the common +data representation and rely on it. +So parsers are not allowed to rename or even extend this internal representation. +If this is needed, all available parsers need to be updated as well. + + diff --git a/packages/sphinx-test-reports/docs/ub_theme/conf.py b/packages/sphinx-test-reports/docs/ub_theme/conf.py index 6d8d8d320..7e76ffc90 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/conf.py +++ b/packages/sphinx-test-reports/docs/ub_theme/conf.py @@ -2,7 +2,7 @@ "icon": { "repo": "fontawesome/brands/github", }, - "font": {"code": "JetBrains Mono", "text": "Urbanist"}, + "font": {"code": "JetBrains Mono", "text": "Recursive"}, "globaltoc_collapse": True, "features": [ "navigation.top", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index de0aaa5e1..ab8b1c93c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -44,13 +44,13 @@ def run(self, nested=False, suite_count=-1, case_count=-1): # access n-th nested suite here self.results = self.results[0]["testsuites"][suite_count] - suite_name = self.options.get("suite", None) + suite_name = self.options.get("suite") if suite_name is None: raise TestReportInvalidOption("Suite not given!") - case_full_name = self.options.get("case", None) - class_name = self.options.get("classname", None) + case_full_name = self.options.get("case") + class_name = self.options.get("classname") if case_full_name is None and class_name is None: raise TestReportInvalidOption("Case or classname not given!") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 9f5e9c960..68c4af3d6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -8,7 +8,9 @@ from sphinx.util import logging from sphinx_needs.api import make_hashed_id -from sphinxcontrib.test_reports.exceptions import SphinxError, TestReportFileNotSetException +from sphinxcontrib.test_reports.exceptions import ( + SphinxError, TestReportFileNotSetException) +from sphinxcontrib.test_reports.jsonparser import JsonParser from sphinxcontrib.test_reports.junitparser import JUnitParser # fmt: on @@ -65,7 +67,11 @@ def load_test_file(self): return None if self.test_file not in self.app.testreport_data.keys(): - parser = JUnitParser(self.test_file) + if os.path.splitext(self.test_file)[1] == ".json": + mapping = list(self.app.config.tr_json_mapping.values())[0] + parser = JsonParser(self.test_file, json_mapping=mapping) + else: + parser = JUnitParser(self.test_file) self.app.testreport_data[self.test_file] = parser.parse() self.results = self.app.testreport_data[self.test_file] @@ -89,17 +95,17 @@ def prepare_basic_options(self): ), ) else: - self.test_id = self.options.get("id", None) + self.test_id = self.options.get("id") if self.test_id is None: raise SphinxError("ID must be set for test-report.") - self.test_file = self.options.get("file", None) + self.test_file = self.options.get("file") self.test_file_given = self.test_file[:] self.test_links = self.options.get("links", "") self.test_tags = self.options.get("tags", "") - self.test_status = self.options.get("status", None) + self.test_status = self.options.get("status") self.collapse = str(self.options.get("collapse", "")) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index 6ab002463..de0546737 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -39,8 +39,8 @@ class EnvReportDirective(Directive): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.data_option = self.options.get("data", None) - self.environments = self.options.get("env", None) + self.data_option = self.options.get("data") + self.environments = self.options.get("env") if self.environments is not None: self.req_env_list_cpy = self.environments.split(",") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 42e9a5991..53c80654a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -4,7 +4,8 @@ from docutils import nodes from docutils.parsers.rst import directives -from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective +from sphinxcontrib.test_reports.directives.test_common import \ + TestCommonDirective from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError # fmt: on diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 9d462c4da..0d30da7a2 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -46,7 +46,7 @@ def run(self, nested=False, count=-1): # access n-th nested suite here self.results = self.results[0]["testsuite_nested"] - suite_name = self.options.get("suite", None) + suite_name = self.options.get("suite") if suite_name is None: raise TestReportInvalidOption("Suite not given!") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py new file mode 100644 index 000000000..fb6d20c48 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py @@ -0,0 +1,97 @@ +""" +A parser for test results in JSON files. + +Must be configured via config, as there is no known standard for Test data in JSON files. + +API must be in sync with the JUnit parser in ``junitparser.py``. +""" +import json +import operator +import os +from functools import reduce +from typing import Any, Dict, List + + +def dict_get(root, items, default=None): + """ + Access a nested object in root by item sequence. + + Usage:: + data = {"nested": {"a_list": [{"finally": "target_data"}]}} + value = dict_get(data, ["nested", "a_list", 0, "finally"], "Not_found") + + """ + try: + value = reduce(operator.getitem, items, root) + except (KeyError, IndexError, TypeError): + return default + return value + + +class JsonParser: + def __init__(self, json_path, *args, **kwargs): + self.json_path = json_path + + if not os.path.exists(self.json_path): + raise JsonFileMissing(f"The given file does not exist: {self.json_path}") + + self.json_data = [] + with open(self.json_path) as jfile: + self.json_data = json.load(jfile) + + self.json_mapping = kwargs.get("json_mapping", {}) + + def validate(self): + # For JSON we validate nothing here. + # But to be compatible with the API, we need to return True + return True + + def parse(self) -> List[Dict[str, Any]]: + """ + Creates a common python list of object, no matter what information are + supported by the parsed json file for test results junit(). + + :return: list of test suites as dictionaries + """ + + def parse_testcase(json_dict) -> Dict[str, Any]: + tc_mapping = self.json_mapping.get("testcase") + tc_dict = { + k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items() + } + return tc_dict + + def parse_testsuite(json_dict) -> Dict[str, Any]: + ts_mapping = self.json_mapping.get("testsuite") + ts_dict = { + k: dict_get(json_dict, v[0], v[1]) + for k, v in ts_mapping.items() + if k != "testcases" + } + ts_dict.update({"testcases": [], "testsuite_nested": []}) + + testcases = dict_get( + json_dict, ts_mapping["testcases"][0], ts_mapping["testcases"][1] + ) + for tc in testcases: + new_testcase = parse_testcase(tc) + ts_dict["testcases"].append(new_testcase) + + return ts_dict + + # main flow starts here + + result_data = [] + + for testsuite_data in self.json_data: + complete_testsuite = parse_testsuite(testsuite_data) + result_data.append(complete_testsuite) + + return result_data + + def docutils_table(self): + pass + + +class JsonFileMissing(BaseException): + pass diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 0fe10cf26..7430f6a39 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -1,3 +1,7 @@ +""" +JUnit XML parser +""" + import os from lxml import etree, objectify diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index c9d74cec6..25621c94d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -4,14 +4,21 @@ import sphinx # from docutils import nodes from pkg_resources import parse_version -from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type - -from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective -from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective -from sphinxcontrib.test_reports.directives.test_file import TestFile, TestFileDirective -from sphinxcontrib.test_reports.directives.test_report import TestReport, TestReportDirective -from sphinxcontrib.test_reports.directives.test_results import TestResults, TestResultsDirective -from sphinxcontrib.test_reports.directives.test_suite import TestSuite, TestSuiteDirective +from sphinx_needs.api import (add_dynamic_function, add_extra_option, + add_need_type) + +from sphinxcontrib.test_reports.directives.test_case import (TestCase, + TestCaseDirective) +from sphinxcontrib.test_reports.directives.test_env import (EnvReport, + EnvReportDirective) +from sphinxcontrib.test_reports.directives.test_file import (TestFile, + TestFileDirective) +from sphinxcontrib.test_reports.directives.test_report import ( + TestReport, TestReportDirective) +from sphinxcontrib.test_reports.directives.test_results import ( + TestResults, TestResultsDirective) +from sphinxcontrib.test_reports.directives.test_suite import ( + TestSuite, TestSuiteDirective) from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link @@ -64,6 +71,35 @@ def setup(app): app.add_config_value("tr_case_id_length", 5, "html") app.add_config_value("tr_import_encoding", "utf8", "html") + json_mapping = { + "json_config": { + "testsuite": { + "name": (["name"], "unknown"), + "tests": (["tests"], "unknown"), + "errors": (["errors"], "unknown"), + "failures": (["failures"], "unknown"), + "skips": (["skips"], "unknown"), + "passed": (["passed"], "unknown"), + "time": (["time"], "unknown"), + "testcases": (["testcase"], "unknown"), + }, + "testcase": { + "name": (["name"], "unknown"), + "classname": (["classname"], "unknown"), + "file": (["file"], "unknown"), + "line": (["line"], "unknown"), + "time": (["time"], "unknown"), + "result": (["result"], "unknown"), + "type": (["type"], "unknown"), + "text": (["text"], "unknown"), + "message": (["message"], "unknown"), + "system-out": (["system-out"], "unknown"), + }, + } + } + + app.add_config_value("tr_json_mapping", json_mapping, "html", types=[dict]) + # nodes app.add_node(TestResults) app.add_node(TestFile) diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index 981eaab42..d9fd8d1f6 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -28,19 +28,19 @@ def test_app(make_app, request): shutil.copytree(util_files, sphinx_test_tempdir / "utils") # copy test srcdir to test temporary directory sphinx_test_tempdir - srcdir = builder_params.get("srcdir", None) + srcdir = builder_params.get("srcdir") src_dir = copy_srcdir_to_tmpdir(srcdir, sphinx_test_tempdir) # return sphinx.testing fixture make_app and new srcdir which in sphinx_test_tempdir app = make_app( buildername=builder_params.get("buildername", "html"), srcdir=src_dir, - freshenv=builder_params.get("freshenv", None), - confoverrides=builder_params.get("confoverrides", None), - status=builder_params.get("status", None), - warning=builder_params.get("warning", None), - tags=builder_params.get("tags", None), - docutilsconf=builder_params.get("docutilsconf", None), + freshenv=builder_params.get("freshenv"), + confoverrides=builder_params.get("confoverrides"), + status=builder_params.get("status"), + warning=builder_params.get("warning"), + tags=builder_params.get("tags"), + docutilsconf=builder_params.get("docutilsconf"), parallel=builder_params.get("parallel", 0), ) diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile b/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py new file mode 100644 index 000000000..49826de2d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py @@ -0,0 +1,192 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +needs_types = [ + { + "directive": "story", + "title": "User Story", + "prefix": "US_", + "color": "#BFD8D2", + "style": "node", + }, + { + "directive": "spec", + "title": "Specification", + "prefix": "SP_", + "color": "#FEDCD2", + "style": "node", + }, + { + "directive": "impl", + "title": "Implementation", + "prefix": "IM_", + "color": "#DF744A", + "style": "node", + }, + { + "directive": "test", + "title": "Test Case", + "prefix": "TC_", + "color": "#DCB239", + "style": "node", + }, +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/index.rst b/packages/sphinx-test-reports/tests/doc_test/json_parser/index.rst new file mode 100644 index 000000000..057469beb --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/index.rst @@ -0,0 +1,9 @@ +JSON Parser Test +================ + + +.. test-file:: JSON Parser Test File + :file: ../utils/json_data.json + :id: PARSER_JSON_001 + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/make.bat b/packages/sphinx-test-reports/tests/doc_test/json_parser/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py new file mode 100644 index 000000000..bb0d11d20 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py @@ -0,0 +1,219 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +tr_json_mapping = { + "json_config_1": { + "testsuite": { + "name": (["internals", "name"], "unknown"), + "tests": (["tests"], "unknown"), + "errors": (["errors"], "unknown"), + "failures": (["failures"], "unknown"), + "skips": (["skips"], "unknown"), + "passed": (["passed"], "unknown"), + "time": (["time"], "unknown"), + "testcases": (["testcase", "nested"], "unknown"), + }, + "testcase": { + "name": (["name"], "unknown"), + "classname": (["classname"], "unknown"), + "file": (["file"], "unknown"), + "line": (["line"], "unknown"), + "time": (["time"], "unknown"), + "result": (["result"], "unknown"), + "type": (["type"], "unknown"), + "text": (["text"], "unknown"), + "message": (["message"], "unknown"), + "system-out": (["system-out"], "unknown"), + }, + } +} + +needs_types = [ + { + "directive": "story", + "title": "User Story", + "prefix": "US_", + "color": "#BFD8D2", + "style": "node", + }, + { + "directive": "spec", + "title": "Specification", + "prefix": "SP_", + "color": "#FEDCD2", + "style": "node", + }, + { + "directive": "impl", + "title": "Implementation", + "prefix": "IM_", + "color": "#DF744A", + "style": "node", + }, + { + "directive": "test", + "title": "Test Case", + "prefix": "TC_", + "color": "#DCB239", + "style": "node", + }, +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/index.rst b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/index.rst new file mode 100644 index 000000000..eb641d96d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/index.rst @@ -0,0 +1,9 @@ +JSON Parser Complex Test +======================== + + +.. test-file:: JSON Parser Test File + :file: ../utils/json_complex_data.json + :id: PARSER_JSON_001 + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/make.bat b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json b/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json new file mode 100644 index 000000000..5722774e1 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json @@ -0,0 +1,53 @@ +[ + { + "internals": { + "name": "test suite 1" + }, + "tests": 3, + "errors": 0, + "failures": 1, + "skips": 1, + "passed": 1, + "time": "20230515-15:04:32", + "testcase": { + "nested": [ + { + "name": "test case 1", + "classname": "class name 1", + "file": "my/test/file_1", + "line": 123, + "time": "20230515-15:04:32", + "result": "failure", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text" + }, + { + "name": "test case 2", + "classname": "class name 2", + "file": "my/test/file_2", + "line": 123, + "time": "20230515-15:04:32", + "result": "passed", + "type": "test type", + "text": "test text", + "message": "all went great :) (message)", + "system-out": "system-out text" + }, + { + "name": "test case 3", + "classname": "class name 3", + "file": "my/test/file_3", + "line": 123, + "time": "20230515-15:04:32", + "result": "skipped", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text" + } + ] + } + } +] \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json b/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json new file mode 100644 index 000000000..7a4fa50af --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json @@ -0,0 +1,49 @@ +[ + { + "name": "test suite 1", + "tests": 3, + "errors": 0, + "failures": 1, + "skips": 1, + "passed": 1, + "time": "20230515-15:04:32", + "testcase": [ + { + "name": "test case 1", + "classname": "class name 1" , + "file": "my/test/file_1", + "line": 123, + "time": "20230515-15:04:32", + "result": "failure", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text" + }, + { + "name": "test case 2", + "classname": "class name 2", + "file": "my/test/file_2", + "line": 123, + "time": "20230515-15:04:32", + "result": "passed", + "type": "test type", + "text": "test text", + "message": "all went great :) (message)", + "system-out": "system-out text" + }, + { + "name": "test case 3", + "classname": "class name 3", + "file": "my/test/file_3", + "line": 123, + "time": "20230515-15:04:32", + "result": "skipped", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text" + } + ] + } +] \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/test_json_parser.py b/packages/sphinx-test-reports/tests/test_json_parser.py new file mode 100644 index 000000000..2636f9163 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_json_parser.py @@ -0,0 +1,111 @@ +import hashlib +import os +from pathlib import Path + +import pytest + +json_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "json_data.json") + + +def test_init_json_parser(): + from sphinxcontrib.test_reports.jsonparser import JsonParser + + parser = JsonParser(json_path) + assert parser is not None + + +def test_parse_json_data(): + from sphinxcontrib.test_reports.jsonparser import JsonParser + + json_mapping = { + "json_config": { + "testsuite": { + "name": (["name"], "unknown"), + "tests": (["tests"], "unknown"), + "errors": (["errors"], "unknown"), + "failures": (["failures"], "unknown"), + "skips": (["skips"], "unknown"), + "passed": (["passed"], "unknown"), + "time": (["time"], "unknown"), + "testcases": (["testcase"], "unknown"), + }, + "testcase": { + "name": (["name"], "unknown"), + "classname": (["classname"], "unknown"), + "file": (["file"], "unknown"), + "line": (["line"], "unknown"), + "time": (["time"], "unknown"), + "result": (["result"], "unknown"), + "type": (["type"], "unknown"), + "text": (["text"], "unknown"), + "message": (["message"], "unknown"), + "system-out": (["system-out"], "unknown"), + }, + } + } + + mapping = list(json_mapping.values())[0] + parser = JsonParser(json_path, json_mapping=mapping) + results = parser.parse() + assert results is not None + assert len(results) == 1 + assert len(results[0]["testcases"]) == 3 + assert results[0]["testcases"][1]["result"] == "passed" + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/json_parser"}], + indirect=True, +) +def test_json_parser_build_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + # Check TestFile need object + test_id = "PARSER_JSON_001" + assert 'Test-File' in html + assert "JSON Parser Test" in html + assert "PARSER_JSON_001" in html + assert html.count('Test-File') == 1 + + # Check TestSuite need object(s) + suite_name = "test suite 1" + hash_s = hashlib.sha1(suite_name.encode("UTF-8")).hexdigest() + suite_id = f"{test_id}_{hash_s.upper()[: app.config.tr_suite_id_length]}" + + assert 'Test-Suite' in html + assert suite_name in html + assert suite_id in html + assert html.count('Test-Suite') == 1 + + # Check TestCase need object(s) + case_name = "test case 2" + case_classname = "class name 2" + hash_c = hashlib.sha1( + case_classname.encode("UTF-8") + case_name.encode("UTF-8") + ).hexdigest() + case_id = f"{suite_id}_{hash_c.upper()[: app.config.tr_case_id_length]}" + + assert 'Test-Case' in html + assert case_name in html + assert case_id in html + # Check number of testcases + assert html.count('Test-Case') == 3 + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/json_parser_complex"}], + indirect=True, +) +def test_json_complex_parser_build_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + + assert 'Test-File' in html + assert "JSON Parser Test" in html + assert "PARSER_JSON_001" in html + + assert "test case 2" in html From 29178e0a77e41c82292aae10d7cfc4172c2e86ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Kreuzberger?= Date: Mon, 22 Jan 2024 06:36:11 +0100 Subject: [PATCH 079/159] add junit ctest xml tests (useblocks/sphinx-test-reports#72) --- .../tests/doc_test/utils/ctest.xml | 13 ++++++-- .../tests/test_junit_parser.py | 33 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml b/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml index 30f2f4425..d51667847 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml @@ -1,9 +1,9 @@ FAIL + + + + + Skipped feature due to @skip tag +0 features passed, 0 failed, 1 skipped +0 scenarios passed, 0 failed, 14 skipped +0 steps passed, 0 failed, 42 skipped, 0 undefined + diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 1e4707df2..57d8195da 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -15,6 +15,8 @@ os.path.dirname(__file__), "doc_test/utils", "nose_data.xml" ) +xml_ctest_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "ctest.xml") + def test_init_parser(): from sphinxcontrib.test_reports.junitparser import JUnitParser @@ -115,3 +117,34 @@ def test_parse_pytest_61_gets_test_suite_attributes(): assert test_suite["skips"] == 3 assert test_suite["passed"] == 1 assert test_suite["time"] == 4.088 + + +def test_parse_ctest_xml(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_ctest_path) + test_suites = parser.parse() + + assert len(test_suites) == 1 + test_suite = test_suites[0] + + print(test_suite["testcases"]) + + assert test_suite["tests"] == 5 + assert test_suite["errors"] == -1 + assert test_suite["failures"] == 1 + assert test_suite["skips"] == 1 + assert test_suite["passed"] == 3 + + assert test_suite["testcases"][0]["name"] == "usage_test" + assert test_suite["testcases"][0]["result"] == "passed" + assert test_suite["testcases"][1]["name"] == "success_test" + assert test_suite["testcases"][1]["result"] == "passed" + assert ( + test_suite["testcases"][2]["name"] == "fail_test" + ) # fail in name, but nowhere in status, faked fail + assert test_suite["testcases"][2]["result"] == "passed" + assert test_suite["testcases"][3]["name"] == "fail_test_output" + assert test_suite["testcases"][3]["result"] == "failure" + assert test_suite["testcases"][4]["name"] == "skipped_test" + assert test_suite["testcases"][4]["result"] == "skipped" From e274fd8b133dd8aa1d819ec1364c727d74a815ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Kreuzberger?= Date: Tue, 2 Apr 2024 22:58:09 +0200 Subject: [PATCH 080/159] [useblocks/sphinx-test-reports#69] fix deprecation warning (useblocks/sphinx-test-reports#70) * [useblocks/sphinx-test-reports#69] remove deprecation warnings from sphinx * differ between sphinx-versions 6 and 7 * linting issues * use exact versions from sphinx changelog * upgrade to sphinx 7.2.6 * fix deprecations due to version checking * fix lint issues --- packages/sphinx-test-reports/noxfile.py | 2 +- .../test_reports/directives/test_env.py | 4 ++-- .../sphinxcontrib/test_reports/environment.py | 12 ++++++---- .../test_reports/test_reports.py | 4 ++-- .../sphinx-test-reports/tests/conftest.py | 22 ++++++++++++++----- 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 3ad6fb32c..bb0b81f81 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -2,7 +2,7 @@ from nox import session PYTHON_VERSIONS = ["3.8", "3.9", "3.10"] -SPHINX_VERSIONS = ["5.0"] +SPHINX_VERSIONS = ["5.0", "6.2.1", "7.1.2", "7.2.5"] TEST_DEPENDENCIES = [ "pytest", "pytest-xdist", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index de0546737..dea4adee7 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -5,10 +5,10 @@ import sphinx from docutils import nodes from docutils.parsers.rst import Directive, directives -from pkg_resources import parse_version +from packaging.version import Version sphinx_version = sphinx.__version__ -if parse_version(sphinx_version) >= parse_version("1.6"): +if Version(sphinx_version) >= Version("1.6"): from sphinx.util import logging else: import logging diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 35e25374a..2c37e1f5b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -1,13 +1,17 @@ import os import sphinx -from pkg_resources import parse_version +from packaging.version import Version + from sphinx.util.console import brown from sphinx.util.osutil import copyfile, ensuredir sphinx_version = sphinx.__version__ -if parse_version(sphinx_version) >= parse_version("1.6"): - from sphinx.util import status_iterator # NOQA Sphinx 1.5 +if Version(sphinx_version) >= Version("1.6"): + if Version(sphinx_version) >= Version("6.1"): + from sphinx.util.display import status_iterator + else: + from sphinx.util import status_iterator # NOQA Sphinx 1.5 STATICS_DIR_NAME = "_static" @@ -80,7 +84,7 @@ def install_styles_static_files(app, env): # Be sure no "old" css layout is already set safe_remove_file("sphinx-test-reports/common.css", app) - if parse_version(sphinx_version) < parse_version("1.6"): + if Version(sphinx_version) < Version("1.6"): global status_iterator status_iterator = app.status_iterator diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 25621c94d..118c46489 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -2,8 +2,8 @@ import os import sphinx +from packaging.version import Version # from docutils import nodes -from pkg_resources import parse_version from sphinx_needs.api import (add_dynamic_function, add_extra_option, add_need_type) @@ -23,7 +23,7 @@ from sphinxcontrib.test_reports.functions import tr_link sphinx_version = sphinx.__version__ -if parse_version(sphinx_version) >= parse_version("1.6"): +if Version(sphinx_version) >= Version("1.6"): from sphinx.util import logging else: import logging diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index d9fd8d1f6..584c4b6c4 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -1,30 +1,40 @@ """Pytest conftest module containing common test configuration and fixtures.""" import shutil +from pathlib import Path from tempfile import mkdtemp import pytest -from sphinx.testing.path import path +from packaging.version import Version +from sphinx import __version__ as sphinx_version + +if Version(sphinx_version) < Version("7.2"): + from sphinx.testing.path import path + pytest_plugins = "sphinx.testing.fixtures" def copy_srcdir_to_tmpdir(srcdir, tmp): - srcdir = path(__file__).parent.abspath() / srcdir - tmproot = tmp / path(srcdir).basename() + srcdir = Path(__file__).parent.absolute() / srcdir + tmproot = tmp / Path(srcdir).name shutil.copytree(srcdir, tmproot) - return tmproot + return ( + tmproot + if Version(sphinx_version) >= Version("7.2") + else path(tmproot.absolute()) + ) @pytest.fixture(scope="function") def test_app(make_app, request): # We create a temp-folder on our own, as the util-functions from sphinx and pytest make troubles. # It seems like they reuse certain-temp names - sphinx_test_tempdir = path(mkdtemp()) + sphinx_test_tempdir = Path(mkdtemp()) builder_params = request.param # copy plantuml.jar, xml files and json files to current test temdir - util_files = path(__file__).parent.abspath() / "doc_test/utils" + util_files = Path(__file__).parent.absolute() / "doc_test/utils" shutil.copytree(util_files, sphinx_test_tempdir / "utils") # copy test srcdir to test temporary directory sphinx_test_tempdir From da0c8bf9e7d548c0157508a18d98a49401abdc7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20S=C3=B6ren=20Pollak?= Date: Mon, 16 Dec 2024 08:57:10 +0100 Subject: [PATCH 081/159] Changed import to enable sphinx-needs 4.1 compatibility (useblocks/sphinx-test-reports#83) * Changed import to enable sphinx-needs 4.1 compatibility * version switcher and test fix * linter fixes * linkcheck fixes --------- Co-authored-by: Daniel Woste --- .../.pre-commit-config.yaml | 1 + packages/sphinx-test-reports/docs/conf.py | 4 ++ packages/sphinx-test-reports/docs/index.rst | 21 -------- .../test_reports/directives/test_case.py | 23 ++------ .../test_reports/directives/test_common.py | 32 ++++++++---- .../test_reports/directives/test_env.py | 16 ++---- .../test_reports/directives/test_file.py | 30 +++++------ .../test_reports/directives/test_report.py | 16 ++---- .../test_reports/directives/test_results.py | 8 +-- .../test_reports/directives/test_suite.py | 52 ++++++++----------- .../sphinxcontrib/test_reports/environment.py | 37 +++---------- .../sphinxcontrib/test_reports/jsonparser.py | 15 ++---- .../sphinxcontrib/test_reports/junitparser.py | 4 +- .../test_reports/test_reports.py | 4 +- .../sphinx-test-reports/tests/conftest.py | 7 +-- .../doc_test/custom_tr_koi8_template/conf.py | 10 ++-- .../tests/doc_test/custom_tr_template/conf.py | 10 ++-- .../doc_test/custom_tr_utf8_template/conf.py | 10 ++-- .../tests/test_basic_doc.py | 4 +- .../sphinx-test-reports/tests/test_env.py | 4 +- .../tests/test_json_parser.py | 4 +- .../tests/test_junit_parser.py | 22 +++----- .../tests/test_test_ctest_file.py | 4 +- .../tests/test_test_file.py | 4 +- 24 files changed, 115 insertions(+), 227 deletions(-) diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index 611829cda..a50398f45 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -3,6 +3,7 @@ repos: rev: 23.1.0 hooks: - id: black + args: [--line-length=120] - repo: https://github.com/pycqa/flake8 rev: 6.0.0 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 70dffdb2d..2a6d6d0f2 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -33,6 +33,8 @@ # The full version, including alpha/beta/rc tags release = "1.0.2" +needs_id_regex = ".*" +needs_css = "dark.css" # -- General configuration --------------------------------------------------- @@ -111,6 +113,7 @@ other_options = { "repo_url": "https://github.com/useblocks/sphinx-test-reports", "repo_name": "sphinx-test-reports", + "font": False, } html_theme_options.update(other_options) html_theme_options["features"].extend(["navigation.tabs", "navigation.tabs.sticky"]) @@ -195,6 +198,7 @@ linkcheck_ignore = [ r"http://localhost:\d+", r"http://127.0.0.1:\d+", + r"https://fonts.googleapis.com", ] linkcheck_request_headers = { diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index eba24abaf..e3cc1c87b 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -132,27 +132,6 @@ In the last years, we have created additional information and extensions, which :octicon:`book;1em;sd-text-primary` Technical Docs - .. grid-item-card:: - :columns: 12 6 6 6 - :link: https://useblocks.com/sphinx-needs-enterprise/ - :img-top: /_static/sphinx-needs-enterprise-card.png - :class-card: border - - Sphinx-Needs Enterprise - ^^^^^^^^^^^^^^^^^^^^^^^ - Synchronize Sphinx-Needs data with external, company internal systems like CodeBeamer, Jira or Azure Boards. - - Provides scripts to baseline data and makes CI usage easier. - +++ - - .. button-link:: http://useblocks.com/sphinx-needs-enterprise/ - :color: primary - :outline: - :align: center - :expand: - - :octicon:`book;1em;sd-text-primary` Technical Docs - .. grid-item-card:: :columns: 12 6 6 6 :link: https://sphinx-test-reports.readthedocs.io/en/latest/ diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index ab8b1c93c..8c5b8b63e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -65,31 +65,20 @@ def run(self, nested=False, suite_count=-1, case_count=-1): break if suite is None: - raise TestReportInvalidOption( - f"Suite {suite_name} not found in test file {self.test_file}" - ) + raise TestReportInvalidOption(f"Suite {suite_name} not found in test file {self.test_file}") case = None for case_obj in suite["testcases"]: - if ( - case_obj["name"] == case_full_name # noqa: SIM114 - and class_name is None # noqa: W503 - ): + if case_obj["name"] == case_full_name and class_name is None: # noqa: SIM114 # noqa: W503 case = case_obj break - elif ( - case_obj["classname"] == class_name # noqa: SIM114 - and case_full_name is None # noqa: W503 - ): + elif case_obj["classname"] == class_name and case_full_name is None: # noqa: SIM114 # noqa: W503 case = case_obj break - elif ( - case_obj["name"] == case_full_name - and case_obj["classname"] == class_name # noqa: W503 - ): + elif case_obj["name"] == case_full_name and case_obj["classname"] == class_name: # noqa: W503 case = case_obj break @@ -105,9 +94,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): if case is None: raise TestReportInvalidOption( "Case {} with classname {} not found in test file {} " - "and testsuite {}".format( - case_full_name, class_name, self.test_file, suite_name - ) + "and testsuite {}".format(case_full_name, class_name, self.test_file, suite_name) ) result = case["result"] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 68c4af3d6..7e3e8a143 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -1,18 +1,28 @@ """ A Common directive, from which all other test directives inherit the shared functions. """ + # fmt: off import os +from importlib.metadata import version from docutils.parsers.rst import Directive from sphinx.util import logging -from sphinx_needs.api import make_hashed_id +from sphinx_needs.config import NeedsSphinxConfig from sphinxcontrib.test_reports.exceptions import ( SphinxError, TestReportFileNotSetException) from sphinxcontrib.test_reports.jsonparser import JsonParser from sphinxcontrib.test_reports.junitparser import JUnitParser +sn_major_version = int(version("sphinx-needs").split('.')[0]) + +if sn_major_version >= 4: + from sphinx_needs.api.need import _make_hashed_id +else: + from sphinx_needs.api import make_hashed_id + + # fmt: on @@ -59,11 +69,7 @@ def load_test_file(self): self.test_file = os.path.join(root_path, self.test_file) if not os.path.exists(self.test_file): # raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) - self.log.warning( - "Given test_file path invalid: {} in {} (Line: {})".format( - self.test_file, self.docname, self.lineno - ) - ) + self.log.warning(f"Given test_file path invalid: {self.test_file} in {self.docname} (Line: {self.lineno})") return None if self.test_file not in self.app.testreport_data.keys(): @@ -88,11 +94,19 @@ def prepare_basic_options(self): self.test_content = "\n".join(self.content) if self.name != "test-report": self.need_type = self.app.tr_types[self.name][0] + if sn_major_version >= 4: + hashed_id = _make_hashed_id( + self.need_type, + self.test_name, + self.test_content, + NeedsSphinxConfig(self.app.config), + ) + else: # Sphinx-Needs < 4 + hashed_id = make_hashed_id(self.app, self.need_type, self.test_name, self.test_content) + self.test_id = self.options.get( "id", - make_hashed_id( - self.app, self.need_type, self.test_name, self.test_content - ), + hashed_id, ) else: self.test_id = self.options.get("id") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index dea4adee7..d4ff96264 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -78,11 +78,7 @@ def run(self): try: results = json.load(fp_json) except ValueError: - raise InvalidJsonFile( - "The given file {} is not a valid JSON".format( - json_path.split("/")[-1] - ) - ) + raise InvalidJsonFile("The given file {} is not a valid JSON".format(json_path.split("/")[-1])) # check to see if environment is present in JSON or not if self.req_env_list is not None: @@ -118,9 +114,7 @@ def run(self): # option check for opt in self.data_option_list: if opt not in temp_dict2[enviro]: - logger.warning( - f"option '{opt}' is not present in JSON file" - ) + logger.warning(f"option '{opt}' is not present in JSON file") del temp_dict @@ -146,11 +140,7 @@ def run(self): # option check for opt in self.data_option_list: if opt not in temp_dict2[enviro]: - logger.warning( - "option '{}' is not present in '{}' environment file".format( - opt, enviro - ) - ) + logger.warning(f"option '{opt}' is not present in '{enviro}' environment file") del temp_dict diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index b2c6b59e0..cf2674262 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -87,13 +87,9 @@ def run(self): errors=errors, ) - if ( - "auto_cases" in self.options.keys() - and "auto_suites" not in self.options.keys() # noqa W 503 - ): + if "auto_cases" in self.options.keys() and "auto_suites" not in self.options.keys(): # noqa W 503 raise TestReportIncompleteConfiguration( - "option auto_cases must be used together with " - "auto_suites for test-file directives." + "option auto_cases must be used together with " "auto_suites for test-file directives." ) if "auto_suites" in self.options.keys(): @@ -123,18 +119,16 @@ def run(self): options["links"] = options["links"] + ";" + self.test_id arguments = [suite["name"]] - suite_directive = ( - sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - self.app.config.tr_suite[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, - ) + suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, ) main_section += suite_directive.run() diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 53c80654a..635b9da84 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -54,14 +54,10 @@ def run(self): if not os.path.isfile(template_path): raise InvalidConfigurationError( - "could not find a template file with name {} in conf.py directory".format( - template_path - ) + f"could not find a template file with name {template_path} in conf.py directory" ) - with open( - template_path, encoding=self.app.config.tr_import_encoding - ) as template_file: + with open(template_path, encoding=self.app.config.tr_import_encoding) as template_file: template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: @@ -75,9 +71,7 @@ def run(self): "file_type": self.app.config.tr_file[0], "suite_need": self.app.config.tr_suite[1], "case_need": self.app.config.tr_case[1], - "tags": ";".join([self.test_tags, self.test_id]) - if len(self.test_tags) > 0 - else self.test_id, + "tags": (";".join([self.test_tags, self.test_id]) if len(self.test_tags) > 0 else self.test_id), "links_string": links_string, "title": self.test_name, "content": self.content, @@ -85,8 +79,6 @@ def run(self): } template_ready = template.format(**template_data) - self.state_machine.insert_input( - template_ready.split("\n"), self.state_machine.document.attributes["source"] - ) + self.state_machine.insert_input(template_ready.split("\n"), self.state_machine.document.attributes["source"]) return [] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index 46fc8fe81..9badba271 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -52,9 +52,7 @@ def run(self): skips=testsuite["skips"], ) ) - section += nodes.paragraph( - text="Time: {time}".format(time=testsuite["time"]) - ) + section += nodes.paragraph(text="Time: {time}".format(time=testsuite["time"])) table = nodes.table() section += table @@ -92,9 +90,7 @@ def _create_testcase_row(self, testcase): row = nodes.row(classes=["tr_" + testcase["result"]]) for index, cell in enumerate(row_cells): - entry = nodes.entry( - classes=["tr_" + testcase["result"], self.header[index]] - ) + entry = nodes.entry(classes=["tr_" + testcase["result"], self.header[index]]) row += entry entry += nodes.paragraph(text=cell, classes=["tr_" + testcase["result"]]) return row diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 0d30da7a2..011142a33 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -62,9 +62,7 @@ def run(self, nested=False, count=-1): break if suite is None: - raise TestReportInvalidOption( - f"Suite {suite_name} not found in test file {self.test_file}" - ) + raise TestReportInvalidOption(f"Suite {suite_name} not found in test file {self.test_file}") cases = suite["tests"] @@ -120,18 +118,16 @@ def run(self, nested=False, count=-1): options["links"] = options["links"] + ";" + self.test_id arguments = [suite["name"]] - suite_directive = ( - sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - self.app.config.tr_suite[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, - ) + suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, ) is_nested = len(suite_obj["testsuites"]) > 0 @@ -149,9 +145,7 @@ def run(self, nested=False, count=-1): case_id = self.test_id case_id += ( "_" - + hashlib.sha1( # noqa: W503 - case["classname"].encode("UTF-8") + case["name"].encode("UTF-8") - ) + + hashlib.sha1(case["classname"].encode("UTF-8") + case["name"].encode("UTF-8")) # noqa: W503 .hexdigest() .upper()[: self.app.config.tr_case_id_length] ) @@ -175,18 +169,16 @@ def run(self, nested=False, count=-1): options["links"] = options["links"] + ";" + self.test_id arguments = [case["name"]] - case_directive = ( - sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( - self.app.config.tr_case[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, - ) + case_directive = sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( + self.app.config.tr_case[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, ) is_nested = len(suite_obj["testsuite_nested"]) > 0 or nested diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 2c37e1f5b..47d16c5c2 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -2,7 +2,6 @@ import sphinx from packaging.version import Version - from sphinx.util.console import brown from sphinx.util.osutil import copyfile, ensuredir @@ -30,21 +29,13 @@ def safe_add_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if ( - hasattr(app.builder, "script_files") - and static_data_file not in app.builder.script_files # noqa: W503 - ): + if hasattr(app.builder, "script_files") and static_data_file not in app.builder.script_files: # noqa: W503 app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": - if ( - hasattr(app.builder, "css_files") - and static_data_file not in app.builder.css_files # noqa: W503 - ): + if hasattr(app.builder, "css_files") and static_data_file not in app.builder.css_files: # noqa: W503 app.add_css_file(data_file) else: - raise NotImplementedError( - "File type {} not support by save_add_file".format(data_file.split(".")[-1]) - ) + raise NotImplementedError("File type {} not support by save_add_file".format(data_file.split(".")[-1])) def safe_remove_file(filename, app): @@ -61,14 +52,10 @@ def safe_remove_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if ( - hasattr(app.builder, "script_files") - and static_data_file in app.builder.script_files # noqa: W503 - ): + if hasattr(app.builder, "script_files") and static_data_file in app.builder.script_files: # noqa: W503 app.builder.script_files.remove(static_data_file) elif data_file.split(".")[-1] == "css" and ( - hasattr(app.builder, "css_files") - and static_data_file in app.builder.css_files # noqa: W503 + hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files # noqa: W503 ): app.builder.css_files.remove(static_data_file) @@ -95,19 +82,11 @@ def install_styles_static_files(app, env): len(files_to_copy), ): if not os.path.isabs(source_file_path): - source_file_path = os.path.join( - os.path.dirname(__file__), "css", source_file_path - ) + source_file_path = os.path.join(os.path.dirname(__file__), "css", source_file_path) if not os.path.exists(source_file_path): - source_file_path = os.path.join( - os.path.dirname(__file__), "css", "blank.css" - ) - print( - "{} not found. Copying sphinx-internal blank.css".format( - source_file_path - ) - ) + source_file_path = os.path.join(os.path.dirname(__file__), "css", "blank.css") + print(f"{source_file_path} not found. Copying sphinx-internal blank.css") dest_file_path = os.path.join(dest_path, os.path.basename(source_file_path)) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py index fb6d20c48..f0f1a928c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py @@ -5,6 +5,7 @@ API must be in sync with the JUnit parser in ``junitparser.py``. """ + import json import operator import os @@ -56,23 +57,15 @@ def parse(self) -> List[Dict[str, Any]]: def parse_testcase(json_dict) -> Dict[str, Any]: tc_mapping = self.json_mapping.get("testcase") - tc_dict = { - k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items() - } + tc_dict = {k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items()} return tc_dict def parse_testsuite(json_dict) -> Dict[str, Any]: ts_mapping = self.json_mapping.get("testsuite") - ts_dict = { - k: dict_get(json_dict, v[0], v[1]) - for k, v in ts_mapping.items() - if k != "testcases" - } + ts_dict = {k: dict_get(json_dict, v[0], v[1]) for k, v in ts_mapping.items() if k != "testcases"} ts_dict.update({"testcases": [], "testsuite_nested": []}) - testcases = dict_get( - json_dict, ts_mapping["testcases"][0], ts_mapping["testcases"][1] - ) + testcases = dict_get(json_dict, ts_mapping["testcases"][0], ts_mapping["testcases"][1]) for tc in testcases: new_testcase = parse_testcase(tc) ts_dict["testcases"].append(new_testcase) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 7430f6a39..3e9b463ce 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -20,9 +20,7 @@ def __init__(self, junit_xml, junit_xsd=None): self.valid_xml = None if not os.path.exists(self.junit_xml_path): - raise JUnitFileMissing( - f"The given file does not exist: {self.junit_xml_path}" - ) + raise JUnitFileMissing(f"The given file does not exist: {self.junit_xml_path}") self.junit_xml_doc = etree.parse(self.junit_xml_path) self.junit_xml_string = etree.tostring(self.junit_xml_doc) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 118c46489..60929ad3d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -62,9 +62,7 @@ def setup(app): ) # adds option for custom template - template_dir = os.path.join( - os.path.dirname(__file__), "directives/test_report_template.txt" - ) + template_dir = os.path.join(os.path.dirname(__file__), "directives/test_report_template.txt") app.add_config_value("tr_report_template", template_dir, "html") app.add_config_value("tr_suite_id_length", 3, "html") diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index 584c4b6c4..60341aad4 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -1,4 +1,5 @@ """Pytest conftest module containing common test configuration and fixtures.""" + import shutil from pathlib import Path from tempfile import mkdtemp @@ -18,11 +19,7 @@ def copy_srcdir_to_tmpdir(srcdir, tmp): srcdir = Path(__file__).parent.absolute() / srcdir tmproot = tmp / Path(srcdir).name shutil.copytree(srcdir, tmproot) - return ( - tmproot - if Version(sphinx_version) >= Version("7.2") - else path(tmproot.absolute()) - ) + return tmproot if Version(sphinx_version) >= Version("7.2") else path(tmproot.absolute()) @pytest.fixture(scope="function") diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py index 36685b99e..57cb00b82 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py @@ -22,9 +22,7 @@ project = "sphinx-test-reports" now = datetime.datetime.now() -copyright = '2017-{year}, team useblocks'.format( - year=now.year -) +copyright = f'2017-{now.year}, team useblocks' author = "team useblocks" # The short X.Y version @@ -135,9 +133,9 @@ # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # -html_sidebars = { - "**": ["about.html", "navigation.html"], -} +# html_sidebars = { +# "**": ["about.html", "navigation.html"], +# } # -- Options for HTMLHelp output --------------------------------------------- diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py index 168348c56..c52e80f43 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py @@ -22,9 +22,7 @@ project = "sphinx-test-reports" now = datetime.datetime.now() -copyright = '2017-{year}, team useblocks'.format( - year=now.year -) +copyright = f'2017-{now.year}, team useblocks' author = "team useblocks" # The short X.Y version @@ -133,9 +131,9 @@ # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # -html_sidebars = { - "**": ["about.html", "navigation.html"], -} +# html_sidebars = { +# "**": ["about.html", "navigation.html"], +# } # -- Options for HTMLHelp output --------------------------------------------- diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py index ea3517c02..097732330 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py @@ -22,9 +22,7 @@ project = "sphinx-test-reports" now = datetime.datetime.now() -copyright = '2017-{year}, team useblocks'.format( - year=now.year -) +copyright = f'2017-{now.year}, team useblocks' author = "team useblocks" # The short X.Y version @@ -135,9 +133,9 @@ # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # -html_sidebars = { - "**": ["about.html", "navigation.html"], -} +# html_sidebars = { +# "**": ["about.html", "navigation.html"], +# } # -- Options for HTMLHelp output --------------------------------------------- diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index 95ba35939..9c066cadb 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -3,9 +3,7 @@ import pytest -@pytest.mark.parametrize( - "test_app", [{"buildername": "html", "srcdir": "doc_test/basic_doc"}], indirect=True -) +@pytest.mark.parametrize("test_app", [{"buildername": "html", "srcdir": "doc_test/basic_doc"}], indirect=True) def test_doc_build_html(test_app): app = test_app app.build() diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index f6ec4059d..a8562f933 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -5,9 +5,7 @@ import pytest import sphinx -sphinx_version = int( - sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1] -) +sphinx_version = int(sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1]) @pytest.mark.parametrize( diff --git a/packages/sphinx-test-reports/tests/test_json_parser.py b/packages/sphinx-test-reports/tests/test_json_parser.py index 2636f9163..e28ea70f4 100644 --- a/packages/sphinx-test-reports/tests/test_json_parser.py +++ b/packages/sphinx-test-reports/tests/test_json_parser.py @@ -82,9 +82,7 @@ def test_json_parser_build_html(test_app): # Check TestCase need object(s) case_name = "test case 2" case_classname = "class name 2" - hash_c = hashlib.sha1( - case_classname.encode("UTF-8") + case_name.encode("UTF-8") - ).hexdigest() + hash_c = hashlib.sha1(case_classname.encode("UTF-8") + case_name.encode("UTF-8")).hexdigest() case_id = f"{suite_id}_{hash_c.upper()[: app.config.tr_case_id_length]}" assert 'Test-Case' in html diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 57d8195da..1f3bef5a9 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -1,19 +1,11 @@ import os xml_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "xml_data.xml") -xml_pytest_path = os.path.join( - os.path.dirname(__file__), "doc_test/utils", "pytest_data.xml" -) -xml_pytest51_path = os.path.join( - os.path.dirname(__file__), "doc_test/utils", "pytest_data_5_1.xml" -) -xml_pytest62_path = os.path.join( - os.path.dirname(__file__), "doc_test/utils", "pytest_data_6_2.xml" -) - -xml_nose_path = os.path.join( - os.path.dirname(__file__), "doc_test/utils", "nose_data.xml" -) +xml_pytest_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "pytest_data.xml") +xml_pytest51_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "pytest_data_5_1.xml") +xml_pytest62_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "pytest_data_6_2.xml") + +xml_nose_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "nose_data.xml") xml_ctest_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "ctest.xml") @@ -140,9 +132,7 @@ def test_parse_ctest_xml(): assert test_suite["testcases"][0]["result"] == "passed" assert test_suite["testcases"][1]["name"] == "success_test" assert test_suite["testcases"][1]["result"] == "passed" - assert ( - test_suite["testcases"][2]["name"] == "fail_test" - ) # fail in name, but nowhere in status, faked fail + assert test_suite["testcases"][2]["name"] == "fail_test" # fail in name, but nowhere in status, faked fail assert test_suite["testcases"][2]["result"] == "passed" assert test_suite["testcases"][3]["name"] == "fail_test_output" assert test_suite["testcases"][3]["result"] == "failure" diff --git a/packages/sphinx-test-reports/tests/test_test_ctest_file.py b/packages/sphinx-test-reports/tests/test_test_ctest_file.py index f6b44e886..651313970 100644 --- a/packages/sphinx-test-reports/tests/test_test_ctest_file.py +++ b/packages/sphinx-test-reports/tests/test_test_ctest_file.py @@ -28,9 +28,7 @@ def test_test_ctest_file(test_app): srcdir = Path(app.srcdir) out_dir = srcdir / "_build" - out = subprocess.run( - ["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True - ) + out = subprocess.run(["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True) assert out.returncode == 0 diff --git a/packages/sphinx-test-reports/tests/test_test_file.py b/packages/sphinx-test-reports/tests/test_test_file.py index 1f6c3797d..4bf212078 100644 --- a/packages/sphinx-test-reports/tests/test_test_file.py +++ b/packages/sphinx-test-reports/tests/test_test_file.py @@ -28,9 +28,7 @@ def test_test_file_needs_extra_options_no_warning(test_app): srcdir = Path(app.srcdir) out_dir = srcdir / "_build" - out = subprocess.run( - ["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True - ) + out = subprocess.run(["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True) assert out.returncode == 0 From ba8b65af87d4f792639291221fafea966250845d Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Mon, 16 Dec 2024 09:53:18 +0100 Subject: [PATCH 082/159] readthedocs config file (useblocks/sphinx-test-reports#85) --- .../sphinx-test-reports/.readthedocs.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/sphinx-test-reports/.readthedocs.yaml diff --git a/packages/sphinx-test-reports/.readthedocs.yaml b/packages/sphinx-test-reports/.readthedocs.yaml new file mode 100644 index 000000000..c0c806ef3 --- /dev/null +++ b/packages/sphinx-test-reports/.readthedocs.yaml @@ -0,0 +1,19 @@ +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.12" + +# Build documentation in the "docs/" directory with Sphinx + +sphinx: + configuration: docs/conf.py + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html + +python: + install: + - requirements: doc-requirements.txt \ No newline at end of file From f088d83334f63822f06192b322f80c61458a7635 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Mon, 16 Dec 2024 10:12:18 +0100 Subject: [PATCH 083/159] new rtd config (useblocks/sphinx-test-reports#86) --- packages/sphinx-test-reports/.readthedocs.yaml | 4 +++- packages/sphinx-test-reports/doc-requirements.txt | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/.readthedocs.yaml b/packages/sphinx-test-reports/.readthedocs.yaml index c0c806ef3..c57d4aaf3 100644 --- a/packages/sphinx-test-reports/.readthedocs.yaml +++ b/packages/sphinx-test-reports/.readthedocs.yaml @@ -16,4 +16,6 @@ sphinx: python: install: - - requirements: doc-requirements.txt \ No newline at end of file + - requirements: doc-requirements.txt + - method: pip + path: . \ No newline at end of file diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 2f9928c65..4e16b1438 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -1,5 +1,5 @@ -sphinx>=4.0 -sphinx-needs>=1.1.1 +sphinx==7 +sphinx-needs>=4 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx-design From cf0ed81880d1ea5865b8a03165a0b706ded57c33 Mon Sep 17 00:00:00 2001 From: Gabriel Fougeron Date: Wed, 1 Jan 2025 17:10:58 +0100 Subject: [PATCH 084/159] typo in docs (useblocks/sphinx-test-reports#87) --- packages/sphinx-test-reports/docs/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 1af3fe307..7fa33e58b 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -33,7 +33,7 @@ All of the following arguments must be set: 2. **need directive name** 3. **need print name** 4. **need id prefix** -5. **need collor** +5. **need color** 6. **need plantuml style** The parameters **2-6** are used to configure the underlying Sphinx-needs. From 5ec351148774787738f06809e2154806319177a7 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 17 Jan 2025 16:24:55 +0100 Subject: [PATCH 085/159] new config (useblocks/sphinx-test-reports#88) From 2a3cd7c4a55df02f257f7e2e96a5d03d0bafb502 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 17 Jan 2025 18:01:33 +0100 Subject: [PATCH 086/159] Fixing linter settings (useblocks/sphinx-test-reports#89) --- packages/sphinx-test-reports/.flake8 | 2 +- .../sphinx-test-reports/.github/workflows/ci.yaml | 9 +++++---- .../sphinx-test-reports/.pre-commit-config.yaml | 2 +- packages/sphinx-test-reports/Makefile | 2 +- packages/sphinx-test-reports/noxfile.py | 13 ++++++++----- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/sphinx-test-reports/.flake8 b/packages/sphinx-test-reports/.flake8 index 4478c885a..6e6c28236 100644 --- a/packages/sphinx-test-reports/.flake8 +++ b/packages/sphinx-test-reports/.flake8 @@ -1,6 +1,6 @@ [flake8] max-line-length = 120 -extend-ignore = I +extend-ignore = E713, E203, E231 per-file-ignores = sphinxcontrib/test_reports/__init__.py: F401 sphinxcontrib/test_reports/directives/__init__.py: F401 diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index cae0bcff9..3657d406c 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -2,13 +2,14 @@ name: CI on: [pull_request] jobs: tests: - name: "Test (python: ${{ matrix.python-version }}, sphinx: ${{ matrix.sphinx-version }})" + name: "Test (python: ${{ matrix.python-version }}, sphinx: ${{ matrix.sphinx-version }}, sphinx-needs: ${{ matrix.sphinx_needs-version }})" runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04] - python-version: [ "3.8", "3.9"] # No "3.10", as nose seem to have problems with it - sphinx-version: ['5.0'] + python-version: [ "3.10", "3.12"] # No "3.10", as nose seem to have problems with it + sphinx-version: ["5.0", "8.1.3"] + sphinx_needs-version: ["2.1", "4.2"] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} @@ -19,7 +20,7 @@ jobs: run: | python -m pip install poetry nox nox-poetry - name: Run Tests - run: nox --non-interactive --session "tests-${{ matrix.python-version }}(sphinx='${{ matrix.sphinx-version }}')" -- --full-trace + run: nox --non-interactive --session "tests-${{ matrix.python-version }}(sphinx='${{ matrix.sphinx-version }}', sphinx_needs='${{ matrix.sphinx_needs-version }}')" -- --full-trace lint: name: Lint diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index a50398f45..7e155c5bf 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - flake8-bugbear - flake8-comprehensions - flake8-simplify - - flake8-isort + # - flake8-isort - pep8-naming # ignore sim118 ("do not use dict.keys()") for clarity diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile index 8b99ac9f4..28d3bfee4 100644 --- a/packages/sphinx-test-reports/Makefile +++ b/packages/sphinx-test-reports/Makefile @@ -27,4 +27,4 @@ docs-linkcheck: .PHONY: format format: black ${SRC_FILES} - isort ${SRC_FILES} + # isort ${SRC_FILES} diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index bb0b81f81..42b5ec923 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -1,8 +1,9 @@ import nox from nox import session -PYTHON_VERSIONS = ["3.8", "3.9", "3.10"] -SPHINX_VERSIONS = ["5.0", "6.2.1", "7.1.2", "7.2.5"] +PYTHON_VERSIONS = ["3.10", "3.12"] +SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] +SPHINX_NEEDS_VERSIONS = ["2.1", "4.2"] TEST_DEPENDENCIES = [ "pytest", "pytest-xdist", @@ -19,19 +20,21 @@ def is_supported(python: str, sphinx: str) -> bool: return not (python == "3.6" and float(sphinx) > 3.0) # fmt: skip -def run_tests(session, sphinx): +def run_tests(session, sphinx, sphinx_needs): session.install(".") session.install(*TEST_DEPENDENCIES) session.run("pip", "install", f"sphinx=={sphinx}", silent=True) + session.run("pip", "install", f"sphinx_needs=={sphinx_needs}", silent=True) session.run("pip", "install", "-r", "doc-requirements.txt", silent=True) session.run("make", "test", external=True) @session(python=PYTHON_VERSIONS) +@nox.parametrize("sphinx_needs", SPHINX_NEEDS_VERSIONS) @nox.parametrize("sphinx", SPHINX_VERSIONS) -def tests(session, sphinx): +def tests(session, sphinx_needs, sphinx): if is_supported(session.python, sphinx): - run_tests(session, sphinx) + run_tests(session, sphinx, sphinx_needs) else: session.skip("unsupported combination") From 832882530e4ff4ff6ff9476a86fd939e1b9188d6 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 17 Jan 2025 18:35:02 +0100 Subject: [PATCH 087/159] Using pyproject.toml instead of setup.py (useblocks/sphinx-test-reports#90) --- packages/sphinx-test-reports/pyproject.toml | 50 +++++++++++++++++++++ packages/sphinx-test-reports/setup.py | 43 ------------------ 2 files changed, 50 insertions(+), 43 deletions(-) create mode 100644 packages/sphinx-test-reports/pyproject.toml delete mode 100644 packages/sphinx-test-reports/setup.py diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml new file mode 100644 index 000000000..acbb04547 --- /dev/null +++ b/packages/sphinx-test-reports/pyproject.toml @@ -0,0 +1,50 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "sphinx-test-reports" +version = "1.0.2" +description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" +readme = "README.rst" +requires-python = ">=3.6" +license = {text = "MIT"} +authors = [ + {name = "team useblocks", email = "info@useblocks.com"} +] + +dependencies = [ + "sphinx>4.0", + "lxml", + "sphinx-needs>=1.0.1" +] + +classifiers = [ + "Framework :: Sphinx", + "Framework :: Sphinx :: Extension", + "Development Status :: 4 - Beta", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Documentation", +] +keywords = ["sphinx", "documentation", "test-reports"] + +[project.urls] + +Homepage = "https://github.com/useblocks/sphinx-test-reports" +Repository = "https://github.com/useblocks/sphinx-test-reports.git" +Documentation = "https://sphinx-test-reports.readthedocs.io/en/latest/" +download-url = "http://pypi.python.org/pypi/sphinx-test-reports" + +[tool.setuptools.packages.find] +include = ["*"] + +[project.optional-dependencies] +development = ["wheel"] diff --git a/packages/sphinx-test-reports/setup.py b/packages/sphinx-test-reports/setup.py deleted file mode 100644 index d8f585bf5..000000000 --- a/packages/sphinx-test-reports/setup.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python - -import os - -from setuptools import find_packages, setup - -requires = ["sphinx>=4.0", "lxml", "sphinx-needs>=1.0.1"] - -with open(os.path.join(os.path.dirname(__file__), "README.rst")) as file: - setup( - name="sphinx-test-reports", - # Update also test_reports.py, conf.py and changelog! - version="1.0.2", - url="http://github.com/useblocks/sphinx-test-reports", - download_url="http://pypi.python.org/pypi/sphinx-test-reports", - license="MIT", - author="team useblocks", - author_email="info@useblocks.com", - description="Sphinx extension for showing test results and test environment " - "information inside sphinx documentations", - long_description=file.read(), - zip_safe=False, - classifiers=[ - "Framework :: Sphinx", - "Framework :: Sphinx :: Extension", - "Development Status :: 4 - Beta", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Topic :: Documentation", - ], - platforms="any", - packages=find_packages(), - include_package_data=True, - install_requires=requires, - namespace_packages=["sphinxcontrib"], - ) From 57f1e78256fdfcc4913589556b0241b943f65232 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 17 Jan 2025 20:13:38 +0100 Subject: [PATCH 088/159] Fixing doc deps and deprecations (useblocks/sphinx-test-reports#92) --- packages/sphinx-test-reports/doc-requirements.txt | 3 ++- packages/sphinx-test-reports/docs/index.rst | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 4e16b1438..113a470c6 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -3,4 +3,5 @@ sphinx-needs>=4 sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx-design -sphinx-immaterial \ No newline at end of file +sphinx-immaterial +pillow \ No newline at end of file diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index e3cc1c87b..ea334a9ca 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -47,7 +47,7 @@ A single documented test-case looks like this: :case: test_add_source_parser :collapse: FALSE - Custom Message: The result is **[[copy('result')]]** with an execution time of **[[copy('time')]]**. + Custom Message: The result is :ndf:`copy('result')` with an execution time of :ndf:`copy('time')`. Now follows automatically generated output like system-out, messages and text of the test-case. From b58b40aed1f583041969d2f41ecacd946fbc474c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20S=C3=B6ren=20Pollak?= Date: Fri, 17 Jan 2025 22:35:32 +0100 Subject: [PATCH 089/159] Allowing multiple option attributes for `tr_link` function (useblocks/sphinx-test-reports#81) * allowing multiple option values * Added testcases for tr_link * Removed not neede comments * docs for tr_link update * linter fixes --------- Co-authored-by: Daniel Woste --- packages/sphinx-test-reports/docs/functions.rst | 3 +++ .../test_reports/functions/__init__.py | 15 +++++++++------ .../tests/doc_test/needs_linking/conf.py | 2 +- .../tests/doc_test/needs_linking/index.rst | 6 +++++- .../tests/test_needs_linking.py | 6 ++++++ 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst index f8be64e5e..b26501377 100644 --- a/packages/sphinx-test-reports/docs/functions.rst +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -33,6 +33,9 @@ Then it goes through **all** other needs and checks if the value of their ``sour the ``target_option``. If this is the case, their IDs get stored and finally returned. +``source_option`` can also reference an option with comma separated values. +In this case a comparions is performed for each value, which may lead to multiple links. + **Example**:: .. spec:: sphinxcontrib.test_reports.test_reports diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py index 6373ab3b1..641148ab6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py @@ -1,16 +1,19 @@ def tr_link(app, need, needs, test_option, target_option, *args, **kwargs): if test_option not in need: return "" - test_opt = need[test_option] + + # Allow for multiple values in option + test_opt_values = need[test_option].split(",") links = [] for need_target in needs.values(): if target_option not in need_target: continue - - if ( - test_opt == need_target[target_option] and test_opt is not None and len(test_opt) > 0 # fmt: skip - ): - links.append(need_target["id"]) + for test_opt_raw in test_opt_values: + test_opt = test_opt_raw.strip() + if ( + test_opt == need_target[target_option] and test_opt is not None and len(test_opt) > 0 # fmt: skip + ): + links.append(need_target["id"]) return links diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py index 0bd2db7cf..bf804a8ca 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py @@ -75,7 +75,7 @@ # The master toctree document. master_doc = "index" -needs_extra_options = ["asil", "uses_secure"] +needs_extra_options = ["asil", "uses_secure", "references"] # General information about the project. project = "test-report test docs" diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst b/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst index 2ca21380f..094d6a8e2 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/index.rst @@ -14,11 +14,15 @@ Basic Document FOR TEST FILE :id: TEST_3 :tags: A, B :uses_secure: True + :references: TEST_4 + :links: [[tr_link('references', 'id')]] .. spec:: TEST_4 :id: TEST_4 :tags: B :uses_secure: True + :references: TEST_1, TEST_2 + :links: [[tr_link('references', 'id')]] Need number with extra options: :need_count:`asil=='D'` @@ -27,4 +31,4 @@ Need number with extra options: :need_count:`uses_secure=='True'` .. toctree:: - subfolder/file_1 \ No newline at end of file + subfolder/file_1 diff --git a/packages/sphinx-test-reports/tests/test_needs_linking.py b/packages/sphinx-test-reports/tests/test_needs_linking.py index 79eea3e33..3c2ba8601 100644 --- a/packages/sphinx-test-reports/tests/test_needs_linking.py +++ b/packages/sphinx-test-reports/tests/test_needs_linking.py @@ -12,4 +12,10 @@ def test_doc_testsuites_html(test_app): app = test_app app.build() html = Path(app.outdir, "index.html").read_text() + print(html) assert html + assert "links outgoing: " in html + assert """TEST_1""" in html + assert """TEST_2""" in html + assert "links incoming: " in html + assert """TEST_3""" in html From 0aa7ecc657ed771aba58c94d12276dd8542b0a9a Mon Sep 17 00:00:00 2001 From: Nick Touran Date: Fri, 17 Jan 2025 13:58:40 -0800 Subject: [PATCH 090/159] Use pathlib for file args to support Windows and Linux. (useblocks/sphinx-test-reports#58) * Use pathlib for file args to support Windows and Linux. Fixes useblocks/sphinx-test-reports#57. * adds encoding --------- Co-authored-by: Daniel Woste --- .../test_reports/directives/test_common.py | 11 +++++++---- .../test_reports/directives/test_report.py | 17 +++++++---------- .../directives/test_report_template.txt | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 7e3e8a143..f82432edf 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -4,6 +4,7 @@ # fmt: off import os +import pathlib from importlib.metadata import version from docutils.parsers.rst import Directive @@ -64,10 +65,12 @@ def load_test_file(self): if self.test_file is None: raise TestReportFileNotSetException("Option test_file must be set.") - root_path = self.app.config.tr_rootdir - if not os.path.isabs(self.test_file): - self.test_file = os.path.join(root_path, self.test_file) - if not os.path.exists(self.test_file): + test_path = pathlib.Path(self.test_file) + if not test_path.is_absolute(): + root_path = pathlib.Path(self.app.config.tr_rootdir) + test_path = root_path / test_path + self.test_file = str(test_path) + if not test_path.exists(): # raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) self.log.warning(f"Given test_file path invalid: {self.test_file} in {self.docname} (Line: {self.lineno})") return None diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 635b9da84..1ed6a6c44 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -1,5 +1,5 @@ # fmt: off -import os +import pathlib from docutils import nodes from docutils.parsers.rst import directives @@ -42,22 +42,19 @@ def run(self): self.load_test_file() # if user provides a custom template, use it - tr_template = self.app.config.tr_report_template + tr_template = pathlib.Path(self.app.config.tr_report_template) - template_path = "" - - if os.path.isabs(tr_template): + if tr_template.is_absolute(): template_path = tr_template - else: - template_path = os.path.join(self.app.confdir, os.path.relpath(tr_template)) + template_path = pathlib.Path(self.app.confdir) / tr_template - if not os.path.isfile(template_path): + if not template_path.is_file(): raise InvalidConfigurationError( f"could not find a template file with name {template_path} in conf.py directory" ) - with open(template_path, encoding=self.app.config.tr_import_encoding) as template_file: + with template_path.open(encoding=self.app.config.tr_import_encoding) as template_file: template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: @@ -75,7 +72,7 @@ def run(self): "links_string": links_string, "title": self.test_name, "content": self.content, - "template_path": template_path, + "template_path": str(template_path), } template_ready = template.format(**template_data) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt index ec19c3cd6..a5228aaa4 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt @@ -1,6 +1,6 @@ -**Test file**: {file} +**Test file**: ``{file}`` -**Template used**: {template_path} +**Template used**: ``{template_path}`` **Statistics** From 1e51a4644771fd9958c8cc6f48da6c4543802c3d Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Fri, 17 Jan 2025 23:09:08 +0100 Subject: [PATCH 091/159] Raising version to 1.1.0 (useblocks/sphinx-test-reports#93) * Raising version to 1.1.0 * changelog update * common, lowercase names * fixing typos --- packages/sphinx-test-reports/.gitignore | 3 ++- .../sphinx-test-reports/docs/changelog.rst | 12 +++++++--- packages/sphinx-test-reports/docs/conf.py | 4 ++-- .../docs/configuration.rst | 6 ++--- .../docs/directives/test_case.rst | 4 ++-- .../docs/directives/test_file.rst | 22 ++++++++--------- .../docs/directives/test_suite.rst | 4 ++-- packages/sphinx-test-reports/docs/filter.rst | 24 +++++++++---------- packages/sphinx-test-reports/pyproject.toml | 2 +- .../test_reports/test_reports.py | 2 +- 10 files changed, 45 insertions(+), 38 deletions(-) diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index acc468413..26d96f0cf 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -17,4 +17,5 @@ _build .envrc .venv -.vscode \ No newline at end of file +.vscode +.VSCodeCounter diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 8f0b5d893..c1db2c575 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -3,12 +3,18 @@ Changelog ========= -1.0.3 +1.1.1 ----- :Released: under development -* Added testcases for the :ref:`json_parser` and updated docs. -* Updated project documentation to use the Useblocks theme customization. +1.1.0 +----- +:Released: 17.01.2025 + +* Bugfix: Compatible with Sphinx-Needs >= 4.0. +* Bugfix: Path handling is os independent. +* Improvement: Referenced target_option in `tr_link` can contain a comma separated list. +* Improvement: The new :ref:`json_parser` is introduced. * Improvement: Template file encoding could be configured. See :ref:`tr_import_encoding`. `#60 `_ * Improvement: Supporting JSON files containing test results: :ref:`json_parser`. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 2a6d6d0f2..35b58b257 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -29,9 +29,9 @@ author = "team useblocks" # The short X.Y version -version = "1.0" +version = "1.1" # The full version, including alpha/beta/rc tags -release = "1.0.2" +release = "1.1.0" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 7fa33e58b..53d3a57c7 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -25,7 +25,7 @@ It may get also important to solve directive name conflicts with other Sphinx ex By default ``tr_file`` is set to:: - ['test-file', 'testfile', 'Test-File', 'TF_', '#ffffff', 'node'] + ['test-file', 'testfile', 'test-file', 'TF_', '#ffffff', 'node'] All of the following arguments must be set: @@ -52,7 +52,7 @@ Instead of using ``.. test-suite::`` you may want to use ``.. test-container::`` By default ``tr_suite`` is set to:: - ['test-suite', 'testsuite', 'Test-Suite', 'TS_', '#cccccc', 'node'] + ['test-suite', 'testsuite', 'test-suite', 'TS_', '#cccccc', 'node'] Please read :ref:`tr_file` for more details. @@ -67,7 +67,7 @@ Instead of using ``.. test-case::`` you may want to use ``.. test-run::``. By default ``tr_case`` is set to:: - ['test-case', 'testcase', 'Test-Case', 'TC_', '#999999', 'node'] + ['test-case', 'testcase', 'test-case', 'TC_', '#999999', 'node'] Please read :ref:`tr_file` for more details. diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 6ce4e44a9..02e832f69 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -35,12 +35,12 @@ to specify only ``case`` or ``classname``. It depends on the loaded test-data, i or if it selects only the first found test case. The best case is to always try to specify both values, ``case`` and ``classname``. -``test-suite`` creates a need of type ``Test-Suite`` and adds the following options automatically: +``test-suite`` creates a need of type ``test-suite`` and adds the following options automatically: * **result**: Result of the test case run. E.g passed or failed. * **time**: Needed time for running the test case -These options can also be used to :ref:`filter for certain Test-Files `. +These options can also be used to :ref:`filter for certain test-files `. Example ------- diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index 034f22a24..794bcca27 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -3,7 +3,7 @@ test-file ========= -``test_file`` loads the data from a given file path in ``file``. +``test-file`` loads the data from a given file path in ``file``. Usage ----- @@ -27,7 +27,7 @@ The following options can be set: * **auto_cases**: If set (no value!), all contained cases will get documented (like using ``test-cases``). Must be used together with ``auto_suites``! -``test_file`` creates a need of type ``Test-File`` and adds the following options automatically: +``test-file`` creates a need of type ``test-file`` and adds the following options automatically: * **suites**: Amount of found suites in test file. * **cases**: Amount of found cases in test file. @@ -36,7 +36,7 @@ The following options can be set: * **failed**: Amount of failed test cases. * **errors**: Amount of test cases which have errors during tet execution. -These options can also be used to :ref:`filter for certain Test-Files `. +These options can also be used to :ref:`filter for certain test-files `. Autogenerated suites and cases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -46,7 +46,7 @@ in the given test-file. So it will create sphinx-needs-objects, like you would manually use the directives ``test-suite`` or ``test-case``. -It uses the ID of ``test_file`` as prefix for the IDs of the suites and cases. +It uses the ID of ``test-file`` as prefix for the IDs of the suites and cases. Their ID will be hash-value based on their title. So a suite ID may look like ``TESTFILE1_E2A5`` and a case ID ``TESTFILE1_E2A5_F39A``. @@ -55,7 +55,7 @@ These IDs should be stable between different sphinx builds, as long as their tit All other options like ``tags``, ``links``, ``status`` are copied from ``test-file`` directive to the autogenerated ``test-suite`` and ``test-case`` directives. -``links`` will also contain links to the parent objects, e.g. a ``test-case`` has links to the ``test_suite`` and also +``links`` will also contain links to the parent objects, e.g. a ``test-case`` has links to the ``test-suite`` and also to the ``test-file``. Example @@ -70,7 +70,7 @@ Basics :file: ../tests/doc_test/utils/xml_data.xml :id: TESTFILE_1 - This test_file has very common data. + This test-file has very common data. Some options are net set, therefore their value is ``-1`` .. test-file:: pytest test data @@ -78,7 +78,7 @@ Basics :id: TESTFILE_2 :links: TESTFILE_1 - This test_file was created by `pytest `_. + This test-file was created by `pytest `_. .. test-file:: nose test data :file: ../tests/doc_test/utils/nose_data.xml @@ -88,7 +88,7 @@ Basics :tags: pytest, data, awesome :collapse: FALSE - This test_file was created by `nosetest `_. + This test-file was created by `nosetest `_. ``collapse`` was set to False, therefor we see its data directly. Also ``status`` and ``tags`` are set. @@ -98,7 +98,7 @@ Basics :file: ../tests/doc_test/utils/xml_data.xml :id: TESTFILE_1 - This test_file has very common data. + This test-file has very common data. Some options are not set, therefore their value is ``-1`` .. test-file:: pytest test data @@ -106,7 +106,7 @@ Basics :id: TESTFILE_2 :links: TESTFILE_1 - This test_file was created by `pytest `_. + This test-file was created by `pytest `_. .. test-file:: nose test data :file: ../tests/doc_test/utils/nose_data.xml @@ -116,7 +116,7 @@ Basics :tags: pytest, data, awesome :collapse: FALSE - This test_file was created by `nosetest `_. + This test-file was created by `nosetest `_. ``collapse`` was set to False, therefor we see its data directly. Also ``status`` and ``tags`` are set. diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst index f0198bdc1..e462c976d 100644 --- a/packages/sphinx-test-reports/docs/directives/test_suite.rst +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -26,7 +26,7 @@ The following options can be set: * **links**: A comma-separated list of IDs to other documented test_files / needs-objects. * **collapse**: If set to "TRUE", meta data is collapsed. Can also be set to "FALSE". -``test-suite`` creates a need of type ``Test-Suite`` and adds the following options automatically: +``test-suite`` creates a need of type ``test-suite`` and adds the following options automatically: * **cases**: Amount of found cases in test file. * **passed**: Amount of passed test cases. @@ -35,7 +35,7 @@ The following options can be set: * **errors**: Amount of test cases which have errors during tet execution. * **time**: Needed time for running all test cases in suite. -These options can also be used to :ref:`filter for certain Test-Files `. +These options can also be used to :ref:`filter for certain test-files `. Example ------- diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index 449a81501..5f3a19153 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -23,8 +23,8 @@ Filterable data * **Types** * test-file - * test_suite - * test_case + * test-suite + * test-case * **Options** * **file**: Test file path. @@ -38,7 +38,7 @@ Filterable data * **failed**: Amount of failed test cases. Not all options are set for all created needs. -E.g. ``test_file`` doesn't include ``case``, as it is not related to a single test case. +E.g. ``test-file`` doesn't include ``case``, as it is not related to a single test case. The filtering possibilities are really powerful, so take a look into `Filtering needs `_ to figure out how to get @@ -55,19 +55,19 @@ Use it like:: .. needtable:: - :types: Test-File + :types: test-file :columns: id, file, suites, cases, passed -We set ``types`` to ``test_file`` to document needs-objects from this type only. -``Sphinx-Test-Reports`` provides also ``test_suite`` and ``test_case``. +We set ``types`` to ``test-file`` to document needs-objects from this type only. +``Sphinx-Test-Reports`` provides also ``test-suite`` and ``test-case``. -With ``columns`` we can specify which data of a ``test_file`` we want to see. +With ``columns`` we can specify which data of a ``test-file`` we want to see. **Example** .. needtable:: - :types: Test-File + :types: test-file :columns: id, file, suites, cases, passed .. _needlist_filter: @@ -82,7 +82,7 @@ The filter possibilities are the same as for :ref:`needtable Usage:: .. needlist:: - :types: Test-File + :types: test-file :filter: cases.isdigit() and int(cases) > 4 ``filter`` supports complex-filter operations by using a Python-statement. @@ -96,7 +96,7 @@ of the Sphinx-Needs documentations for more details and ideas how to use it. **Example** .. needlist:: - :types: Test-File + :types: test-file :filter: cases.isdigit() and int(cases) >= 5 @@ -116,7 +116,7 @@ needflow - Flow charts of linked test data Usage:: .. needflow:: - :types: Test-File, Test-Suite, Test-Case + :types: test-file, test-suite, test-case :filter: len(links) > 0 or len(links_back) > 0 The used ``:filter:`` allows needs only, if they have an outgoing or incoming link. @@ -124,5 +124,5 @@ The used ``:filter:`` allows needs only, if they have an outgoing or incoming li **Example** .. .. needflow:: - :types: Test-File, Test-Suite, Test-Case + :types: test-file, test-suite, test-case :filter: (len(links) > 0 or len(links_back) > 0) and "example" not in tags and "auto" not in tags and "pytest_sphinx" not in tags diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index acbb04547..62509a8ed 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "sphinx-test-reports" -version = "1.0.2" +version = "1.1.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" requires-python = ">=3.6" diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 60929ad3d..ab645ebbc 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -30,7 +30,7 @@ # fmt: on -VERSION = "1.0.2" +VERSION = "1.1.0" def setup(app): From 77d9c49757018e421c3601937fbc8fac85be86f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20S=C3=B6ren=20Pollak?= Date: Wed, 26 Mar 2025 08:58:35 +0100 Subject: [PATCH 092/159] Adding tr_extra_option to some directives (useblocks/sphinx-test-reports#96) * Adding tr_extra_option to some directives Adding `tr_extra_options` to 'test-case', 'test-file', 'test-suite'. Added some 'happy path' tests * Added tr_extra_options to documentation * Added links to config section and removed duplicate information --- packages/sphinx-test-reports/docs/conf.py | 2 ++ .../docs/configuration.rst | 32 +++++++++++++++++++ .../docs/directives/test_case.rst | 9 ++++-- .../docs/directives/test_file.rst | 7 ++++ .../docs/directives/test_suite.rst | 5 +++ .../test_reports/directives/test_case.py | 5 ++- .../test_reports/directives/test_common.py | 14 ++++++++ .../test_reports/directives/test_file.py | 1 + .../test_reports/directives/test_suite.py | 1 + .../test_reports/test_reports.py | 22 ++++++++++++- .../tests/doc_test/basic_doc/conf.py | 2 ++ .../doc_test/doc_test_ctest_file/conf.py | 3 +- .../doc_test/doc_test_ctest_file/index.rst | 4 ++- .../tests/doc_test/doc_test_file/conf.py | 3 +- .../doc_test/many_testsuites_doc/conf.py | 2 ++ .../doc_test/many_testsuites_doc/index.rst | 1 + .../tests/doc_test/testsuites_doc/conf.py | 2 ++ .../tests/doc_test/testsuites_doc/index.rst | 1 + .../sphinx-test-reports/tests/test_suites.py | 5 +++ .../tests/test_test_ctest_file.py | 3 ++ 20 files changed, 117 insertions(+), 7 deletions(-) diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 35b58b257..ee8938f3f 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -67,6 +67,8 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates", "ub_theme/templates"] +needs_extra_options = ["more_info"] +tr_extra_options = ["more_info"] # Add a custom test report template. Please add a relative path from this conf.py # tr_report_template = "./custom_test_report_template.txt" diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 53d3a57c7..77cc89e03 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -106,6 +106,38 @@ This may be needed, if a junit-xml files contains many test cases. Default: **5** + +.. _tr_extra_options: + +tr_extra_options +---------------- +.. versionadded:: 1.2.0 + +Defines extra options you can use in `test-file` `test-case` and `test-suite`. +These options also have to be registered in either needs_extra_options or needs_extra_links. + +**Example** + +.. code-block:: python + + # In conf.py + tr_extra_options = ['more_info', 'related_to', 'priority'] + + # Define as regular options + needs_extra_options = ['more_info', 'priority'] + +You can then use these options in your directives: + +.. code-block:: rst + + .. test-file:: Enhanced test data + :file: path/to/test_data.xml + :id: TESTFILE_EXTRA + :more_info: This is additional information about the test + :priority: high + + This test file contains enhanced metadata using custom extra options. + .. _tr_import_encoding: tr_import_encoding diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 02e832f69..7d767526b 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -16,6 +16,7 @@ Usage :case: my_case :classname: my_test_class :id: TESTCASE_1 + :other_option: This is some text that we have defined. Wow The following options can be set: @@ -42,6 +43,11 @@ or if it selects only the first found test case. The best case is to always try These options can also be used to :ref:`filter for certain test-files `. +You can add custom options to the ``test-case`` directive by configuring the :ref:`tr_extra_options` value in your ``conf.py``. +These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. + + + Example ------- @@ -71,6 +77,7 @@ Example :file: ../tests/doc_test/utils/pytest_data.xml :suite: pytest :classname: sphinxcontrib.test_reports.test_reports + :more_info: This is some text that we have defined. Wow :case: FLAKE8 :links: TESTSUITE_1 @@ -84,5 +91,3 @@ Example A nosetest test case. - - diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index 794bcca27..ee307c71c 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -27,6 +27,7 @@ The following options can be set: * **auto_cases**: If set (no value!), all contained cases will get documented (like using ``test-cases``). Must be used together with ``auto_suites``! + ``test-file`` creates a need of type ``test-file`` and adds the following options automatically: * **suites**: Amount of found suites in test file. @@ -38,6 +39,7 @@ The following options can be set: These options can also be used to :ref:`filter for certain test-files `. + Autogenerated suites and cases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -58,6 +60,10 @@ All other options like ``tags``, ``links``, ``status`` are copied from ``test-fi ``links`` will also contain links to the parent objects, e.g. a ``test-case`` has links to the ``test-suite`` and also to the ``test-file``. +You can add custom options to the ``test-file`` directive by configuring the :ref:`tr_extra_options` value in your ``conf.py``. +These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. + + Example ------- @@ -104,6 +110,7 @@ Basics .. test-file:: pytest test data :file: ../tests/doc_test/utils/pytest_data.xml :id: TESTFILE_2 + :more_info: This is a test for other options in test-file :links: TESTFILE_1 This test-file was created by `pytest `_. diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst index e462c976d..88e7c7807 100644 --- a/packages/sphinx-test-reports/docs/directives/test_suite.rst +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -37,6 +37,10 @@ The following options can be set: These options can also be used to :ref:`filter for certain test-files `. + +You can add custom options to the ``test-case`` directive by configuring the :ref:`tr_extra_options` value in your ``conf.py``. +These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. + Example ------- @@ -60,3 +64,4 @@ Example + diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 8c5b8b63e..2d40f00d7 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -148,8 +148,10 @@ def run(self, nested=False, suite_count=-1, case_count=-1): if case_parameter is None: case_parameter = "" - main_section = [] docname = self.state.document.settings.env.docname + + main_section = [] + # Merge all options including extra ones main_section += add_need( self.app, self.state, @@ -172,6 +174,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): result=result, time=time, style=style, + **self.extra_options, ) add_doc(self.env, docname) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index f82432edf..f277ee718 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -51,9 +51,20 @@ def __init__(self, *args, **kwargs): self.test_status = None self.collapse = None self.need_type = None + self.extra_options = None self.log = logging.getLogger(__name__) + def collect_extra_options(self): + """Collect any extra options and their values that were specified in the directive""" + tr_extra_options = getattr(self.app.config, "tr_extra_options", []) + self.extra_options = {} + + if tr_extra_options: + for option_name in tr_extra_options: + if option_name in self.options: + self.extra_options[option_name] = self.options[option_name] + def load_test_file(self): """ Loads the defined test_file under self.test_file. @@ -135,3 +146,6 @@ def prepare_basic_options(self): raise Exception("collapse attribute must be true or false") else: self.collapse = getattr(self.app.config, "needs_collapse_details", True) + + # Also collect any extra options while we're at it + self.collect_extra_options() diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index cf2674262..7d44c0c22 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -85,6 +85,7 @@ def run(self): skipped=skipped, failed=failed, errors=errors, + **self.extra_options, ) if "auto_cases" in self.options.keys() and "auto_suites" not in self.options.keys(): # noqa W 503 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 011142a33..b1a37a30f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -93,6 +93,7 @@ def run(self, nested=False, count=-1): skipped=skipped, failed=failed, errors=errors, + **self.extra_options, ) # TODO double nested logic diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index ab645ebbc..3107418b3 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -21,6 +21,7 @@ TestSuite, TestSuiteDirective) from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link +from docutils.parsers.rst import directives sphinx_version = sphinx.__version__ if Version(sphinx_version) >= Version("1.6"): @@ -30,7 +31,7 @@ # fmt: on -VERSION = "1.1.0" +VERSION = "1.1.1" def setup(app): @@ -40,6 +41,7 @@ def setup(app): * test_env * test_report """ + log = logging.getLogger(__name__) log.info("Setting up sphinx-test-reports extension") @@ -68,6 +70,7 @@ def setup(app): app.add_config_value("tr_suite_id_length", 3, "html") app.add_config_value("tr_case_id_length", 5, "html") app.add_config_value("tr_import_encoding", "utf8", "html") + app.add_config_value("tr_extra_options", [], "env") json_mapping = { "json_config": { @@ -116,6 +119,8 @@ def setup(app): app.connect("config-inited", tr_preparation) app.connect("config-inited", sphinx_needs_update) + app.connect("builder-inited", register_tr_extra_options) + return { "version": VERSION, # identifies the version of our extension "parallel_read_safe": True, # support parallel modes @@ -123,6 +128,21 @@ def setup(app): } +def register_tr_extra_options(app): + """Register extra options with directives.""" + + log = logging.getLogger(__name__) + tr_extra_options = getattr(app.config, "tr_extra_options", []) + log.debug(f"tr_extra_options = {tr_extra_options}") + + if tr_extra_options: + for direc in [TestSuiteDirective, TestFileDirective, TestCaseDirective]: + for option_name in tr_extra_options: + direc.option_spec[option_name] = directives.unchanged + log.debug(f"Registered {option_name} with {direc}") + log.debug(f"{direc}.option_spec now has keys: {list(direc.option_spec.keys())}") + + def tr_preparation(app, *args): """ Prepares needed vars in the app context. diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index a69b1cbb9..c52a5a38a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -69,6 +69,8 @@ # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +needs_extra_options = ["more_info"] +tr_extra_options = ["more_info"] # The name of the Pygments (syntax highlighting) style to use. pygments_style = "sphinx" diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py index d4c95b512..7018809ee 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py @@ -75,7 +75,8 @@ # The master toctree document. master_doc = "index" -needs_extra_options = ["asil", "uses_secure"] +needs_extra_options = ["asil", "uses_secure", "more_info"] +tr_extra_options = ["more_info"] # General information about the project. project = "test-report test docs" diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst index 609fdc69b..55fe99a40 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/index.rst @@ -2,10 +2,11 @@ Basic Document FOR CTEST FILE ============================= .. test-case:: My CTest Case + :id: TEST_CTEST_1 :file: ../utils/ctest.xml :suite: Linux-c++ :classname: usage_test - :id: TEST_CTEST_1 + :more_info: testing more options .. test-results:: ../utils/ctest.xml @@ -13,5 +14,6 @@ Basic Document FOR CTEST FILE .. test-file:: My CTest Data :file: ../utils/ctest.xml :id: CTESTFILE_1 + :more_info: This is a test :auto_suites: :auto_cases: diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py index 0bd2db7cf..3b8537445 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py @@ -75,7 +75,8 @@ # The master toctree document. master_doc = "index" -needs_extra_options = ["asil", "uses_secure"] +needs_extra_options = ["asil", "uses_secure", "more_info"] +tr_extra_options = ["more_info"] # General information about the project. project = "test-report test docs" diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py index b14ab1cd6..48573a1d7 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py @@ -37,6 +37,8 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] +needs_extra_options = ["more_info"] +tr_extra_options = ["more_info"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst index fef49695c..4b331557e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst @@ -5,6 +5,7 @@ Basic Document .. test-file:: My test data :file: ../utils/many_testsuites.xml :id: TEST_001 + :more_info: More content inside the new option :auto_suites: :auto_cases: :tags: unit-test diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py index a69b1cbb9..781476d1e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py @@ -34,6 +34,8 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] +needs_extra_options = ["more_info"] +tr_extra_options = ["more_info"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst index de8cf9ec8..29c50d009 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst @@ -5,6 +5,7 @@ Basic Document .. test-file:: My test data :file: ../utils/testsuites.xml :id: TEST_001 + :more_info: More content inside the new option :auto_suites: :auto_cases: :tags: unit-test diff --git a/packages/sphinx-test-reports/tests/test_suites.py b/packages/sphinx-test-reports/tests/test_suites.py index 4b6ceac1e..a1f923119 100644 --- a/packages/sphinx-test-reports/tests/test_suites.py +++ b/packages/sphinx-test-reports/tests/test_suites.py @@ -23,6 +23,9 @@ def test_doc_testsuites_html(test_app): assert "TimerTest" in html assert "test_Timer_getdT" in html + assert "more_info" in html # 'tr_extra_options' + assert "More content inside the new option" in html # 'tr_extra_options' + @pytest.mark.parametrize( "test_app", @@ -36,3 +39,5 @@ def test_doc_many_testsuites_html(test_app): assert html assert "TEST_001_FFDBD67" in html # suite id assert "TEST_001_FFDBD67_81152CFAF6" in html # case id + assert "more_info" in html # 'tr_extra_options' + assert "More content inside the new option" in html # 'tr_extra_options' diff --git a/packages/sphinx-test-reports/tests/test_test_ctest_file.py b/packages/sphinx-test-reports/tests/test_test_ctest_file.py index 651313970..023469a8c 100644 --- a/packages/sphinx-test-reports/tests/test_test_ctest_file.py +++ b/packages/sphinx-test-reports/tests/test_test_ctest_file.py @@ -36,6 +36,9 @@ def test_test_ctest_file(test_app): assert "WARNING" not in out.stdout.decode("utf-8") html = Path(app.outdir, "index.html").read_text() + # print(html) assert html assert "TEST_CTEST_1" in html # suite id + assert "more_info" in html # extra added option displayed assert "CTESTFILE_1" in html # case id + assert "This is a test" in html # content correct From cf032a7a0622b8be2fc57acd4438fd4fa5c2b003 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 27 Mar 2025 09:11:23 +0100 Subject: [PATCH 093/159] Allows JSON Parser to set additional options (useblocks/sphinx-test-reports#99) The JSON Parser mapping configuration supports now a mapping between any configured Sphinx-Needs options and a JSON value. This allows to set options like id, status, tags and extra_options with data from a JSON file. --- .../docs/configuration.rst | 38 ++- .../sphinxcontrib/test_reports/config.py | 5 + .../test_reports/directives/test_case.py | 13 + .../doc_test/json_parser_custom/Makefile | 20 ++ .../tests/doc_test/json_parser_custom/conf.py | 226 ++++++++++++++++++ .../doc_test/json_parser_custom/index.rst | 11 + .../doc_test/json_parser_custom/make.bat | 36 +++ .../doc_test/utils/json_custom_data.json | 72 ++++++ .../tests/test_json_parser.py | 30 +++ 9 files changed, 448 insertions(+), 3 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_custom/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/json_parser_custom/make.bat create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 77cc89e03..093bcbdbc 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -187,8 +187,40 @@ Given the above JSON example, the following "selector" will address the value `` ["level_1", "level_2", 1, "value"] +Additional meta-data +~~~~~~~~~~~~~~~~~~~~ +The JSON Parser allows to set additional options for the created test-case, for instance +a status, tags or even the ID of the test case. -**Example config** +Just use the name in the ``tr_json_mapping`` and make sure new options +are registered via ``needs_extra_options``. + +Default data +~~~~~~~~~~~~ +The mapping of ``tr_json_mapping`` allows to set a default value, if the key can't be found in the +json data itself. +However, with :ref:`tr_extra_options` exists another way to set defaults, defined +by the directives like ``need-file`` and co. + +If this directive-default shall be taken, set the default value in ``tr_json_mapping`` to +``""`` (empty string) or ``None``. + +ID from result file +~~~~~~~~~~~~~~~~~~~ +If the ``id`` for the Sphinx-Needs test-case object shall be taken from the JSON result file, +just create a mapping for it:: + + "id": (["id"], None) + +Do not set a default value in this case, otherwise multiple objects with the same ID (the default value) +may be created, which is not allowed by Sphinx-Needs. + +If no ``id`` value is set by the Parser, Sphinx-Test-Reports will automatically +fall back to its default implementation and generate a hash-based id. + + +Example config +~~~~~~~~~~~~~~ This example contains **all** internal elements and a mapping as example. For ``testsuite`` the value ``testcases`` defines the location of nested testcases. @@ -220,8 +252,8 @@ An example of a JSON file, which supports the below configuration, can be seen i "text": (["text"], "unknown"), "message": (["message"], "unknown"), "system-out": (["system-out"], "unknown"), + "id": (["id"], None), + "my-option": (["my_opt"], "default"), } } } - - diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py new file mode 100644 index 000000000..8e93148e4 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -0,0 +1,5 @@ +""" +Stores defaults configurations +""" + +DEFAULT_OPTIONS = ["name", "classname", "file", "line", "time", "result", "type", "text", "message", "system-out"] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 2d40f00d7..4b14e14f1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -3,6 +3,7 @@ from sphinx_needs.api import add_need from sphinx_needs.utils import add_doc +from sphinxcontrib.test_reports.config import DEFAULT_OPTIONS from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption @@ -148,6 +149,18 @@ def run(self, nested=False, suite_count=-1, case_count=-1): if case_parameter is None: case_parameter = "" + # Set extra data, which is not part of the Sphinx-Test-Reports default options + for key, value in case.items(): + if key == "id" and value not in ["", None]: + self.test_id = str(value) + elif key == "status" and value not in ["", None]: + self.test_status = str(value) + elif key == "tags": + self.test_tags = ",".join([self.test_tags, str(value)]) + elif key not in DEFAULT_OPTIONS and value not in ["", None]: + # May overwrite globally set values + self.extra_options[key] = str(value) + docname = self.state.document.settings.env.docname main_section = [] diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile new file mode 100644 index 000000000..47330b89c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = needstestdocs +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py new file mode 100644 index 000000000..a9624f561 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py @@ -0,0 +1,226 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + +needs_extra_options = ["priority"] +tr_extra_options = ["priority"] + +tr_json_mapping = { + "json_config_1": { + "testsuite": { + "name": (["internals", "name"], "unknown"), + "tests": (["tests"], "unknown"), + "errors": (["errors"], "unknown"), + "failures": (["failures"], "unknown"), + "skips": (["skips"], "unknown"), + "passed": (["passed"], "unknown"), + "time": (["time"], "unknown"), + "testcases": (["testcase"], "unknown"), + }, + "testcase": { + "name": (["name"], "unknown"), + "classname": (["classname"], "unknown"), + "file": (["file"], "unknown"), + "line": (["line"], "unknown"), + "time": (["time"], "unknown"), + "result": (["result"], "unknown"), + "type": (["type"], "unknown"), + "text": (["text"], "unknown"), + "message": (["message"], "unknown"), + "system-out": (["system-out"], "unknown"), + "id": (["id"], None), + "status": (["status"], "unknown"), + "tags": (["tags"], "unknown"), + "priority": (["priority"], ""), + }, + } +} + +needs_types = [ + { + "directive": "story", + "title": "User Story", + "prefix": "US_", + "color": "#BFD8D2", + "style": "node", + }, + { + "directive": "spec", + "title": "Specification", + "prefix": "SP_", + "color": "#FEDCD2", + "style": "node", + }, + { + "directive": "impl", + "title": "Implementation", + "prefix": "IM_", + "color": "#DF744A", + "style": "node", + }, + { + "directive": "test", + "title": "Test Case", + "prefix": "TC_", + "color": "#DCB239", + "style": "node", + }, +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/index.rst b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/index.rst new file mode 100644 index 000000000..9fd76f57b --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/index.rst @@ -0,0 +1,11 @@ +JSON Parser Complex Test +======================== + + +.. test-file:: JSON Parser Test File + :file: ../utils/json_custom_data.json + :id: PARSER_JSON_001 + :tags: base_tag + :auto_suites: + :auto_cases: + :priority: 0 diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/make.bat b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/make.bat new file mode 100644 index 000000000..489ed7dfd --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=needstestdocs + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json b/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json new file mode 100644 index 000000000..dec2f30da --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json @@ -0,0 +1,72 @@ +[ + { + "name": "test suite 1", + "tests": 3, + "errors": 0, + "failures": 1, + "skips": 1, + "passed": 1, + "time": "20230515-15:04:32", + "testcase": [ + { + "name": "test case 1", + "classname": "class name 1" , + "file": "my/test/file_1", + "line": 123, + "time": "20230515-15:04:32", + "result": "failure", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text", + "id": "TEST_CASE_1", + "status": "open", + "tags": "a,b,c", + "priority": "1" + }, + { + "name": "test case 2", + "classname": "class name 2", + "file": "my/test/file_2", + "line": 123, + "time": "20230515-15:04:32", + "result": "passed", + "type": "test type", + "text": "test text", + "message": "all went great :) (message)", + "system-out": "system-out text", + "id": "TEST_CASE_2", + "status": "closed", + "tags": "a,b", + "priority": "2" + }, + { + "name": "test case 3", + "classname": "class name 3", + "file": "my/test/file_3", + "line": 123, + "time": "20230515-15:04:32", + "result": "skipped", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text", + "id": "TEST_CASE_3", + "status": "", + "tags": "a" + }, + { + "name": "test case 4", + "classname": "class name 4", + "file": "my/test/file_3", + "line": 123, + "time": "20230515-15:04:32", + "result": "skipped", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text" + } + ] + } +] \ No newline at end of file diff --git a/packages/sphinx-test-reports/tests/test_json_parser.py b/packages/sphinx-test-reports/tests/test_json_parser.py index e28ea70f4..e0fffb866 100644 --- a/packages/sphinx-test-reports/tests/test_json_parser.py +++ b/packages/sphinx-test-reports/tests/test_json_parser.py @@ -107,3 +107,33 @@ def test_json_complex_parser_build_html(test_app): assert "PARSER_JSON_001" in html assert "test case 2" in html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/json_parser_custom"}], + indirect=True, +) +def test_json_custom_parser_build_html(test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + + assert 'Test-File' in html + assert "JSON Parser Test" in html + assert "PARSER_JSON_001" in html + + # checks: ID got set from json + assert 'title="TEST_CASE_3"' in html + + # checks: Status git set from json + assert 'closed' in html + + # checks: Priority taken from json + assert '2' in html + + # checks: Priority taken as default from need_file directive + assert '0' in html + + # checks: Not set id in json leads to default id generation + assert "PARSER_JSON_001_50D_3840C" in html From b3e759e9b2d66a95b66ca1ca32f04d6a2485bbfc Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 27 Mar 2025 09:19:10 +0100 Subject: [PATCH 094/159] Adds pre-commit as test-dep Needed for running the linter (useblocks/sphinx-test-reports#100) --- packages/sphinx-test-reports/doc-requirements.txt | 2 +- packages/sphinx-test-reports/test-requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt index 113a470c6..09866ea11 100644 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ b/packages/sphinx-test-reports/doc-requirements.txt @@ -4,4 +4,4 @@ sphinx-test-reports>=0.3.3 sphinxcontrib-plantuml sphinx-design sphinx-immaterial -pillow \ No newline at end of file +pillow diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt index 332e3e0a4..d7976faf1 100644 --- a/packages/sphinx-test-reports/test-requirements.txt +++ b/packages/sphinx-test-reports/test-requirements.txt @@ -1,3 +1,4 @@ pytest>=7.0 pytest-xdist nox +pre-commit From 5301cae6d2b914ea2e23f9ca16a8a72791561dfe Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Thu, 27 Mar 2025 09:29:40 +0100 Subject: [PATCH 095/159] Preparation of release 1.2.0 (useblocks/sphinx-test-reports#101) --- packages/sphinx-test-reports/docs/changelog.rst | 13 ++++++++++++- packages/sphinx-test-reports/docs/conf.py | 4 ++-- packages/sphinx-test-reports/pyproject.toml | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index c1db2c575..4c378ffd7 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -3,10 +3,21 @@ Changelog ========= -1.1.1 +1.2.1 ----- :Released: under development + +1.2.0 +----- +:Released: 27.03.2025 + +* Improvement: Introducing :ref:`tr_extra_options` for setting custom options in all derrived + test-cases from ``test-file`` and co. + `#96 `_ +* Improvement: JSON-Parser allows to set custom options in test-cases, like ``status`` or even ``id``. + See :ref:`tr_json_mapping` for examples. `#99 `_ + 1.1.0 ----- :Released: 17.01.2025 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index ee8938f3f..e8e24a00f 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -29,9 +29,9 @@ author = "team useblocks" # The short X.Y version -version = "1.1" +version = "1.2" # The full version, including alpha/beta/rc tags -release = "1.1.0" +release = "1.2.0" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 62509a8ed..ae121fd7f 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "sphinx-test-reports" -version = "1.1.0" +version = "1.2.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" requires-python = ">=3.6" From 7e056b2e0517909df1b99221de82b7c6f3504953 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 1 Apr 2025 20:26:32 +0200 Subject: [PATCH 096/159] =?UTF-8?q?=F0=9F=94=A7=20Add=20taplo=20pre-commit?= =?UTF-8?q?=20(useblocks/sphinx-test-reports#103)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.pre-commit-config.yaml | 6 +++ packages/sphinx-test-reports/pyproject.toml | 38 ++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index 7e155c5bf..92ebfd831 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -1,4 +1,10 @@ repos: + + - repo: https://github.com/ComPWA/taplo-pre-commit + rev: v0.9.3 + hooks: + - id: taplo-format + - repo: https://github.com/psf/black rev: 23.1.0 hooks: diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index ae121fd7f..6b70074c8 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -8,31 +8,25 @@ version = "1.2.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" requires-python = ">=3.6" -license = {text = "MIT"} -authors = [ - {name = "team useblocks", email = "info@useblocks.com"} -] +license = { text = "MIT" } +authors = [{ name = "team useblocks", email = "info@useblocks.com" }] -dependencies = [ - "sphinx>4.0", - "lxml", - "sphinx-needs>=1.0.1" -] +dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1"] classifiers = [ - "Framework :: Sphinx", - "Framework :: Sphinx :: Extension", - "Development Status :: 4 - Beta", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Documentation", + "Framework :: Sphinx", + "Framework :: Sphinx :: Extension", + "Development Status :: 4 - Beta", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Documentation", ] keywords = ["sphinx", "documentation", "test-reports"] From a19a7a857217e93eb05e878aed410a0eb54e57ea Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 1 Apr 2025 20:35:33 +0200 Subject: [PATCH 097/159] =?UTF-8?q?=F0=9F=94=A7=20Added=20all=5Fgood=20job?= =?UTF-8?q?=20(useblocks/sphinx-test-reports#109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also updated CI runners from ubuntu-20.04 to ubuntu-latest. --- .../.github/workflows/ci.yaml | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 3657d406c..b3a691416 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -6,7 +6,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-20.04] + os: [ubuntu-latest] python-version: [ "3.10", "3.12"] # No "3.10", as nose seem to have problems with it sphinx-version: ["5.0", "8.1.3"] sphinx_needs-version: ["2.1", "4.2"] @@ -24,7 +24,7 @@ jobs: lint: name: Lint - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set Up Python @@ -38,7 +38,7 @@ jobs: linkcheck: name: Docs-Linkcheck - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set Up Python @@ -50,3 +50,21 @@ jobs: python -m pip install poetry nox nox-poetry - name: Run LinkCheck run: nox --non-interactive --session linkcheck -- --full-trace + + all_good: + # This job does nothing and is only used for the branch protection + # see https://github.com/marketplace/actions/alls-green#why + + if: ${{ !cancelled() }} + + needs: + - tests + - lint + - linkcheck + + runs-on: ubuntu-latest + steps: + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} From a7504cd592932a8091c0a7fa4284d675754eb077 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 1 Apr 2025 20:42:01 +0200 Subject: [PATCH 098/159] =?UTF-8?q?=F0=9F=94=A7=20Add=20yamlfmt=20(usebloc?= =?UTF-8?q?ks/sphinx-test-reports#105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sphinx-test-reports/.github/workflows/ci.yaml | 2 +- .../sphinx-test-reports/.pre-commit-config.yaml | 8 ++++---- packages/sphinx-test-reports/.readthedocs.yaml | 2 +- packages/sphinx-test-reports/.yamlfmt | 4 ++++ packages/sphinx-test-reports/pyproject.toml | 13 +++++++++++++ 5 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 packages/sphinx-test-reports/.yamlfmt diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index b3a691416..a4b265427 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -7,7 +7,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: [ "3.10", "3.12"] # No "3.10", as nose seem to have problems with it + python-version: ["3.10", "3.12"] # No "3.10", as nose seem to have problems with it sphinx-version: ["5.0", "8.1.3"] sphinx_needs-version: ["2.1", "4.2"] steps: diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index 92ebfd831..6e590e389 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -10,7 +10,6 @@ repos: hooks: - id: black args: [--line-length=120] - - repo: https://github.com/pycqa/flake8 rev: 6.0.0 hooks: @@ -21,14 +20,15 @@ repos: - flake8-simplify # - flake8-isort - pep8-naming - # ignore sim118 ("do not use dict.keys()") for clarity args: [--max-line-length=120, --ignore=SIM118] - - repo: https://github.com/asottile/pyupgrade rev: v3.3.1 hooks: - id: pyupgrade args: - --py36-plus - + - repo: https://github.com/google/yamlfmt + rev: v0.16.0 + hooks: + - id: yamlfmt diff --git a/packages/sphinx-test-reports/.readthedocs.yaml b/packages/sphinx-test-reports/.readthedocs.yaml index c57d4aaf3..b779ead82 100644 --- a/packages/sphinx-test-reports/.readthedocs.yaml +++ b/packages/sphinx-test-reports/.readthedocs.yaml @@ -18,4 +18,4 @@ python: install: - requirements: doc-requirements.txt - method: pip - path: . \ No newline at end of file + path: . diff --git a/packages/sphinx-test-reports/.yamlfmt b/packages/sphinx-test-reports/.yamlfmt new file mode 100644 index 000000000..ad197f6e2 --- /dev/null +++ b/packages/sphinx-test-reports/.yamlfmt @@ -0,0 +1,4 @@ +formatter: + type: basic + retain_line_breaks_single: true + disallow_anchors: true diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 6b70074c8..abf541355 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -42,3 +42,16 @@ include = ["*"] [project.optional-dependencies] development = ["wheel"] + +[tool.mypy] +files = "sphinxcontrib" +strict = true +show_error_codes = true +implicit_reexport = false +namespace_packages = true +disallow_any_generics = true +disallow_subclassing_any = true +# disallow_any_unimported = true +# disallow_any_explicit = true +# disallow_any_expr = true +# disallow_any_decorated = true From 05b3df4ce8fdbf8de09bf13fffe59c1b93103fe8 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 1 Apr 2025 21:01:35 +0200 Subject: [PATCH 099/159] =?UTF-8?q?=F0=9F=94=A7=20Introduce=20ruff=20(useb?= =?UTF-8?q?locks/sphinx-test-reports#104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enabled some custom rules that were easy to fix. Others were added but commented out, to be fixed in future PRs. --- packages/sphinx-test-reports/.flake8 | 7 --- .../.pre-commit-config.yaml | 30 +++------- packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/pyproject.toml | 22 +++++++ .../sphinxcontrib/__init__.py | 2 +- .../sphinxcontrib/test_reports/__init__.py | 2 + .../sphinxcontrib/test_reports/config.py | 13 ++++- .../test_reports/directives/test_case.py | 37 +++++------- .../test_reports/directives/test_common.py | 14 +++-- .../test_reports/directives/test_env.py | 23 +++++--- .../test_reports/directives/test_file.py | 38 +++++++----- .../test_reports/directives/test_report.py | 17 ++++-- .../test_reports/directives/test_results.py | 8 ++- .../test_reports/directives/test_suite.py | 58 +++++++++++-------- .../sphinxcontrib/test_reports/environment.py | 31 +++++++--- .../sphinxcontrib/test_reports/exceptions.py | 8 +-- .../test_reports/functions/__init__.py | 4 +- .../sphinxcontrib/test_reports/jsonparser.py | 14 ++++- .../sphinxcontrib/test_reports/junitparser.py | 4 +- .../test_reports/test_reports.py | 37 +++++++----- .../sphinx-test-reports/tests/conftest.py | 6 +- .../tests/test_basic_doc.py | 4 +- .../sphinx-test-reports/tests/test_env.py | 4 +- .../tests/test_json_parser.py | 4 +- .../tests/test_junit_parser.py | 22 +++++-- .../tests/test_needs_linking.py | 15 ++++- .../tests/test_test_ctest_file.py | 6 +- .../tests/test_test_file.py | 6 +- 28 files changed, 277 insertions(+), 161 deletions(-) delete mode 100644 packages/sphinx-test-reports/.flake8 diff --git a/packages/sphinx-test-reports/.flake8 b/packages/sphinx-test-reports/.flake8 deleted file mode 100644 index 6e6c28236..000000000 --- a/packages/sphinx-test-reports/.flake8 +++ /dev/null @@ -1,7 +0,0 @@ -[flake8] -max-line-length = 120 -extend-ignore = E713, E203, E231 -per-file-ignores = - sphinxcontrib/test_reports/__init__.py: F401 - sphinxcontrib/test_reports/directives/__init__.py: F401 - diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index 6e590e389..33b9fbe04 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -1,33 +1,17 @@ repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.2 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format + - repo: https://github.com/ComPWA/taplo-pre-commit rev: v0.9.3 hooks: - id: taplo-format - - repo: https://github.com/psf/black - rev: 23.1.0 - hooks: - - id: black - args: [--line-length=120] - - repo: https://github.com/pycqa/flake8 - rev: 6.0.0 - hooks: - - id: flake8 - additional_dependencies: - - flake8-bugbear - - flake8-comprehensions - - flake8-simplify - # - flake8-isort - - pep8-naming - # ignore sim118 ("do not use dict.keys()") for clarity - args: [--max-line-length=120, --ignore=SIM118] - - repo: https://github.com/asottile/pyupgrade - rev: v3.3.1 - hooks: - - id: pyupgrade - args: - - --py36-plus - repo: https://github.com/google/yamlfmt rev: v0.16.0 hooks: diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index e8e24a00f..b7c9f7f87 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -19,7 +19,7 @@ sys.path.append(os.path.abspath(".")) -from ub_theme.conf import html_theme_options # noqa +from ub_theme.conf import html_theme_options # -- Project information ----------------------------------------------------- diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index abf541355..29ddb4f11 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -43,6 +43,28 @@ include = ["*"] [project.optional-dependencies] development = ["wheel"] +[tool.ruff.lint] +# TODO enable and fix commented rules +extend-select = [ + "B", # flake8-bugbear + "C4", # flake8-comprehensions + "FURB", # refurb (modernising code) + "I", # isort + "ICN", # flake8-import-conventions + "ISC", # flake8-implicit-str-concat + "N", # pep8-naming + "PERF", # perflint (performance anti-patterns) + "PGH", # pygrep-hooks + "PIE", # flake8-pie + # "PL", # pylint + # "PTH", # flake8-use-pathlib + # "RUF", # Ruff-specific rules + # "SIM", # flake8-simplify + "SLF", # private member access + # "UP", # pyupgrade + # "T20", # flake8-print +] + [tool.mypy] files = "sphinxcontrib" strict = true diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py index 128826700..5284146eb 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/__init__.py @@ -1 +1 @@ -__import__("pkg_resources").declare_namespace(__name__) # noqa: F401 +__import__("pkg_resources").declare_namespace(__name__) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index f546f90b7..a307f576d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -1,2 +1,4 @@ # from sphinxcontrib.test_reports.needs.dyn_functions import Results4Needs from sphinxcontrib.test_reports.test_reports import setup + +__all__ = ["setup"] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index 8e93148e4..eb2068f67 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -2,4 +2,15 @@ Stores defaults configurations """ -DEFAULT_OPTIONS = ["name", "classname", "file", "line", "time", "result", "type", "text", "message", "system-out"] +DEFAULT_OPTIONS = [ + "name", + "classname", + "file", + "line", + "time", + "result", + "type", + "text", + "message", + "system-out", +] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 4b14e14f1..39ef4cd7b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -5,7 +5,7 @@ from sphinxcontrib.test_reports.config import DEFAULT_OPTIONS from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective -from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption +from sphinxcontrib.test_reports.exceptions import TestReportInvalidOptionError class TestCase(nodes.General, nodes.Element): @@ -48,12 +48,12 @@ def run(self, nested=False, suite_count=-1, case_count=-1): suite_name = self.options.get("suite") if suite_name is None: - raise TestReportInvalidOption("Suite not given!") + raise TestReportInvalidOptionError("Suite not given!") case_full_name = self.options.get("case") class_name = self.options.get("classname") if case_full_name is None and class_name is None: - raise TestReportInvalidOption("Case or classname not given!") + raise TestReportInvalidOptionError("Case or classname not given!") suite = None for suite_obj in self.results: @@ -66,7 +66,9 @@ def run(self, nested=False, suite_count=-1, case_count=-1): break if suite is None: - raise TestReportInvalidOption(f"Suite {suite_name} not found in test file {self.test_file}") + raise TestReportInvalidOptionError( + f"Suite {suite_name} not found in test file {self.test_file}" + ) case = None @@ -75,11 +77,10 @@ def run(self, nested=False, suite_count=-1, case_count=-1): case = case_obj break - elif case_obj["classname"] == class_name and case_full_name is None: # noqa: SIM114 # noqa: W503 - case = case_obj - break - - elif case_obj["name"] == case_full_name and case_obj["classname"] == class_name: # noqa: W503 + elif (case_obj["classname"] == class_name and case_full_name is None) or ( + case_obj["name"] == case_full_name + and case_obj["classname"] == class_name + ): case = case_obj break @@ -93,9 +94,9 @@ def run(self, nested=False, suite_count=-1, case_count=-1): break if case is None: - raise TestReportInvalidOption( - "Case {} with classname {} not found in test file {} " - "and testsuite {}".format(case_full_name, class_name, self.test_file, suite_name) + raise TestReportInvalidOptionError( + f"Case {case_full_name} with classname {class_name} not found in test file {self.test_file} " + f"and testsuite {suite_name}" ) result = case["result"] @@ -107,9 +108,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): {} -""".format( - "\n ".join([x.lstrip() for x in case["text"].split("\n")]) - ) +""".format("\n ".join([x.lstrip() for x in case["text"].split("\n")])) if case["message"] is not None and len(case["message"]) > 0: content += """ @@ -118,9 +117,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): {} -""".format( - "\n ".join([x.lstrip() for x in case["message"].split("\n")]) - ) +""".format("\n ".join([x.lstrip() for x in case["message"].split("\n")])) if case["system-out"] is not None and len(case["system-out"]) > 0: content += """ @@ -129,9 +126,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): {} -""".format( - "\n ".join([x.lstrip() for x in case["system-out"].split("\n")]) - ) +""".format("\n ".join([x.lstrip() for x in case["system-out"].split("\n")])) time = case["time"] style = "tr_" + case["result"] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index f277ee718..a0300ed13 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -12,7 +12,9 @@ from sphinx_needs.config import NeedsSphinxConfig from sphinxcontrib.test_reports.exceptions import ( - SphinxError, TestReportFileNotSetException) + SphinxError, + TestReportFileNotSetError, +) from sphinxcontrib.test_reports.jsonparser import JsonParser from sphinxcontrib.test_reports.junitparser import JUnitParser @@ -74,7 +76,7 @@ def load_test_file(self): :return: None """ if self.test_file is None: - raise TestReportFileNotSetException("Option test_file must be set.") + raise TestReportFileNotSetError("Option test_file must be set.") test_path = pathlib.Path(self.test_file) if not test_path.is_absolute(): @@ -83,7 +85,9 @@ def load_test_file(self): self.test_file = str(test_path) if not test_path.exists(): # raise TestReportFileInvalidException('Given test_file path invalid: {}'.format(self.test_file)) - self.log.warning(f"Given test_file path invalid: {self.test_file} in {self.docname} (Line: {self.lineno})") + self.log.warning( + f"Given test_file path invalid: {self.test_file} in {self.docname} (Line: {self.lineno})" + ) return None if self.test_file not in self.app.testreport_data.keys(): @@ -116,7 +120,9 @@ def prepare_basic_options(self): NeedsSphinxConfig(self.app.config), ) else: # Sphinx-Needs < 4 - hashed_id = make_hashed_id(self.app, self.need_type, self.test_name, self.test_content) + hashed_id = make_hashed_id( + self.app, self.need_type, self.test_name, self.test_content + ) self.test_id = self.options.get( "id", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index d4ff96264..a3901deff 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -77,15 +77,18 @@ def run(self): with open(json_path) as fp_json: try: results = json.load(fp_json) - except ValueError: - raise InvalidJsonFile("The given file {} is not a valid JSON".format(json_path.split("/")[-1])) + except ValueError as exc: + raise InvalidJsonFile( + "The given file {} is not a valid JSON".format( + json_path.split("/")[-1] + ) + ) from exc # check to see if environment is present in JSON or not if self.req_env_list is not None: - not_present_env = [] - for req_env in self.req_env_list: - if req_env not in results: - not_present_env.append(req_env) + not_present_env = [ + req_env for req_env in self.req_env_list if req_env not in results + ] for not_env in not_present_env: self.req_env_list.remove(not_env) logger.warning(f"environment '{not_env}' is not present in JSON file") @@ -114,7 +117,9 @@ def run(self): # option check for opt in self.data_option_list: if opt not in temp_dict2[enviro]: - logger.warning(f"option '{opt}' is not present in JSON file") + logger.warning( + f"option '{opt}' is not present in JSON file" + ) del temp_dict @@ -140,7 +145,9 @@ def run(self): # option check for opt in self.data_option_list: if opt not in temp_dict2[enviro]: - logger.warning(f"option '{opt}' is not present in '{enviro}' environment file") + logger.warning( + f"option '{opt}' is not present in '{enviro}' environment file" + ) del temp_dict diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 7d44c0c22..38741acbc 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -7,7 +7,7 @@ import sphinxcontrib.test_reports.directives.test_suite from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective -from sphinxcontrib.test_reports.exceptions import TestReportIncompleteConfiguration +from sphinxcontrib.test_reports.exceptions import TestReportIncompleteConfigurationError class TestFile(nodes.General, nodes.Element): @@ -88,9 +88,13 @@ def run(self): **self.extra_options, ) - if "auto_cases" in self.options.keys() and "auto_suites" not in self.options.keys(): # noqa W 503 - raise TestReportIncompleteConfiguration( - "option auto_cases must be used together with " "auto_suites for test-file directives." + if ( + "auto_cases" in self.options.keys() + and "auto_suites" not in self.options.keys() + ): + raise TestReportIncompleteConfigurationError( + "option auto_cases must be used together with " + "auto_suites for test-file directives." ) if "auto_suites" in self.options.keys(): @@ -98,7 +102,7 @@ def run(self): suite_id = self.test_id suite_id += ( "_" - + hashlib.sha1(suite["name"].encode("UTF-8")) # noqa: W503 + + hashlib.sha1(suite["name"].encode("UTF-8")) .hexdigest() .upper()[: self.app.config.tr_suite_id_length] ) @@ -107,7 +111,7 @@ def run(self): self.suite_ids[suite_id] = suite["name"] else: raise Exception( - f'Suite ID {suite_id} already exists by {self.suite_ids[suite_id]} ({suite["name"]})' + f"Suite ID {suite_id} already exists by {self.suite_ids[suite_id]} ({suite['name']})" ) options = self.options @@ -120,16 +124,18 @@ def run(self): options["links"] = options["links"] + ";" + self.test_id arguments = [suite["name"]] - suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - self.app.config.tr_suite[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, + suite_directive = ( + sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, + ) ) main_section += suite_directive.run() diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py index 1ed6a6c44..57da8915b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py @@ -4,8 +4,7 @@ from docutils import nodes from docutils.parsers.rst import directives -from sphinxcontrib.test_reports.directives.test_common import \ - TestCommonDirective +from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError # fmt: on @@ -54,7 +53,9 @@ def run(self): f"could not find a template file with name {template_path} in conf.py directory" ) - with template_path.open(encoding=self.app.config.tr_import_encoding) as template_file: + with template_path.open( + encoding=self.app.config.tr_import_encoding + ) as template_file: template = "".join(template_file.readlines()) if self.test_links is not None and len(self.test_links) > 0: @@ -68,7 +69,11 @@ def run(self): "file_type": self.app.config.tr_file[0], "suite_need": self.app.config.tr_suite[1], "case_need": self.app.config.tr_case[1], - "tags": (";".join([self.test_tags, self.test_id]) if len(self.test_tags) > 0 else self.test_id), + "tags": ( + ";".join([self.test_tags, self.test_id]) + if len(self.test_tags) > 0 + else self.test_id + ), "links_string": links_string, "title": self.test_name, "content": self.content, @@ -76,6 +81,8 @@ def run(self): } template_ready = template.format(**template_data) - self.state_machine.insert_input(template_ready.split("\n"), self.state_machine.document.attributes["source"]) + self.state_machine.insert_input( + template_ready.split("\n"), self.state_machine.document.attributes["source"] + ) return [] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py index 9badba271..46fc8fe81 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py @@ -52,7 +52,9 @@ def run(self): skips=testsuite["skips"], ) ) - section += nodes.paragraph(text="Time: {time}".format(time=testsuite["time"])) + section += nodes.paragraph( + text="Time: {time}".format(time=testsuite["time"]) + ) table = nodes.table() section += table @@ -90,7 +92,9 @@ def _create_testcase_row(self, testcase): row = nodes.row(classes=["tr_" + testcase["result"]]) for index, cell in enumerate(row_cells): - entry = nodes.entry(classes=["tr_" + testcase["result"], self.header[index]]) + entry = nodes.entry( + classes=["tr_" + testcase["result"], self.header[index]] + ) row += entry entry += nodes.paragraph(text=cell, classes=["tr_" + testcase["result"]]) return row diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index b1a37a30f..13b0411a1 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -7,7 +7,7 @@ import sphinxcontrib.test_reports.directives.test_case from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective -from sphinxcontrib.test_reports.exceptions import TestReportInvalidOption +from sphinxcontrib.test_reports.exceptions import TestReportInvalidOptionError class TestSuite(nodes.General, nodes.Element): @@ -49,7 +49,7 @@ def run(self, nested=False, count=-1): suite_name = self.options.get("suite") if suite_name is None: - raise TestReportInvalidOption("Suite not given!") + raise TestReportInvalidOptionError("Suite not given!") suite = None for suite_obj in self.results: @@ -62,7 +62,9 @@ def run(self, nested=False, count=-1): break if suite is None: - raise TestReportInvalidOption(f"Suite {suite_name} not found in test file {self.test_file}") + raise TestReportInvalidOptionError( + f"Suite {suite_name} not found in test file {self.test_file}" + ) cases = suite["tests"] @@ -104,7 +106,7 @@ def run(self, nested=False, count=-1): suite_id = self.test_id suite_id += ( "_" - + hashlib.sha1(suite["name"].encode("UTF-8")) # noqa: W503 + + hashlib.sha1(suite["name"].encode("UTF-8")) .hexdigest() .upper()[: self.app.config.tr_suite_id_length] ) @@ -119,16 +121,18 @@ def run(self, nested=False, count=-1): options["links"] = options["links"] + ";" + self.test_id arguments = [suite["name"]] - suite_directive = sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - self.app.config.tr_suite[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, + suite_directive = ( + sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, + ) ) is_nested = len(suite_obj["testsuites"]) > 0 @@ -146,7 +150,9 @@ def run(self, nested=False, count=-1): case_id = self.test_id case_id += ( "_" - + hashlib.sha1(case["classname"].encode("UTF-8") + case["name"].encode("UTF-8")) # noqa: W503 + + hashlib.sha1( + case["classname"].encode("UTF-8") + case["name"].encode("UTF-8") + ) .hexdigest() .upper()[: self.app.config.tr_case_id_length] ) @@ -170,16 +176,18 @@ def run(self, nested=False, count=-1): options["links"] = options["links"] + ";" + self.test_id arguments = [case["name"]] - case_directive = sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( - self.app.config.tr_case[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, + case_directive = ( + sphinxcontrib.test_reports.directives.test_case.TestCaseDirective( + self.app.config.tr_case[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, + ) ) is_nested = len(suite_obj["testsuite_nested"]) > 0 or nested diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 47d16c5c2..335b18b72 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -10,7 +10,7 @@ if Version(sphinx_version) >= Version("6.1"): from sphinx.util.display import status_iterator else: - from sphinx.util import status_iterator # NOQA Sphinx 1.5 + from sphinx.util import status_iterator # noqa: F401 # Sphinx 1.5 STATICS_DIR_NAME = "_static" @@ -29,13 +29,21 @@ def safe_add_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if hasattr(app.builder, "script_files") and static_data_file not in app.builder.script_files: # noqa: W503 + if ( + hasattr(app.builder, "script_files") + and static_data_file not in app.builder.script_files + ): app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": - if hasattr(app.builder, "css_files") and static_data_file not in app.builder.css_files: # noqa: W503 + if ( + hasattr(app.builder, "css_files") + and static_data_file not in app.builder.css_files + ): app.add_css_file(data_file) else: - raise NotImplementedError("File type {} not support by save_add_file".format(data_file.split(".")[-1])) + raise NotImplementedError( + "File type {} not support by save_add_file".format(data_file.split(".")[-1]) + ) def safe_remove_file(filename, app): @@ -52,10 +60,13 @@ def safe_remove_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if hasattr(app.builder, "script_files") and static_data_file in app.builder.script_files: # noqa: W503 + if ( + hasattr(app.builder, "script_files") + and static_data_file in app.builder.script_files + ): app.builder.script_files.remove(static_data_file) elif data_file.split(".")[-1] == "css" and ( - hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files # noqa: W503 + hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files ): app.builder.css_files.remove(static_data_file) @@ -82,10 +93,14 @@ def install_styles_static_files(app, env): len(files_to_copy), ): if not os.path.isabs(source_file_path): - source_file_path = os.path.join(os.path.dirname(__file__), "css", source_file_path) + source_file_path = os.path.join( + os.path.dirname(__file__), "css", source_file_path + ) if not os.path.exists(source_file_path): - source_file_path = os.path.join(os.path.dirname(__file__), "css", "blank.css") + source_file_path = os.path.join( + os.path.dirname(__file__), "css", "blank.css" + ) print(f"{source_file_path} not found. Copying sphinx-internal blank.css") dest_file_path = os.path.join(dest_path, os.path.basename(source_file_path)) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py index 0995cdec6..171f3baf2 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py @@ -1,25 +1,25 @@ from sphinx.errors import SphinxError, SphinxWarning -class TestReportFileNotSetException(SphinxError): +class TestReportFileNotSetError(SphinxError): """ Raised if a needed test_file path is not given in directive. """ -class TestReportFileInvalidException(SphinxError): +class TestReportFileInvalidError(SphinxError): """ Raised if the given path is not valid. """ -class TestReportInvalidOption(SphinxError): +class TestReportInvalidOptionError(SphinxError): """ Raised if an option is not given or invalid. """ -class TestReportIncompleteConfiguration(SphinxWarning): +class TestReportIncompleteConfigurationError(SphinxWarning): """ Raised if given arguments / options are not correct configured """ diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py index 641148ab6..79d48960c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py @@ -12,7 +12,9 @@ def tr_link(app, need, needs, test_option, target_option, *args, **kwargs): for test_opt_raw in test_opt_values: test_opt = test_opt_raw.strip() if ( - test_opt == need_target[target_option] and test_opt is not None and len(test_opt) > 0 # fmt: skip + test_opt == need_target[target_option] + and test_opt is not None + and len(test_opt) > 0 # fmt: skip ): links.append(need_target["id"]) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py index f0f1a928c..19a5e55e0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py @@ -57,15 +57,23 @@ def parse(self) -> List[Dict[str, Any]]: def parse_testcase(json_dict) -> Dict[str, Any]: tc_mapping = self.json_mapping.get("testcase") - tc_dict = {k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items()} + tc_dict = { + k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items() + } return tc_dict def parse_testsuite(json_dict) -> Dict[str, Any]: ts_mapping = self.json_mapping.get("testsuite") - ts_dict = {k: dict_get(json_dict, v[0], v[1]) for k, v in ts_mapping.items() if k != "testcases"} + ts_dict = { + k: dict_get(json_dict, v[0], v[1]) + for k, v in ts_mapping.items() + if k != "testcases" + } ts_dict.update({"testcases": [], "testsuite_nested": []}) - testcases = dict_get(json_dict, ts_mapping["testcases"][0], ts_mapping["testcases"][1]) + testcases = dict_get( + json_dict, ts_mapping["testcases"][0], ts_mapping["testcases"][1] + ) for tc in testcases: new_testcase = parse_testcase(tc) ts_dict["testcases"].append(new_testcase) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 3e9b463ce..7430f6a39 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -20,7 +20,9 @@ def __init__(self, junit_xml, junit_xsd=None): self.valid_xml = None if not os.path.exists(self.junit_xml_path): - raise JUnitFileMissing(f"The given file does not exist: {self.junit_xml_path}") + raise JUnitFileMissing( + f"The given file does not exist: {self.junit_xml_path}" + ) self.junit_xml_doc = etree.parse(self.junit_xml_path) self.junit_xml_string = etree.tostring(self.junit_xml_doc) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 3107418b3..1cdb47e4f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -2,26 +2,29 @@ import os import sphinx +from docutils.parsers.rst import directives from packaging.version import Version + # from docutils import nodes -from sphinx_needs.api import (add_dynamic_function, add_extra_option, - add_need_type) - -from sphinxcontrib.test_reports.directives.test_case import (TestCase, - TestCaseDirective) -from sphinxcontrib.test_reports.directives.test_env import (EnvReport, - EnvReportDirective) -from sphinxcontrib.test_reports.directives.test_file import (TestFile, - TestFileDirective) +from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type + +from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective +from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective +from sphinxcontrib.test_reports.directives.test_file import TestFile, TestFileDirective from sphinxcontrib.test_reports.directives.test_report import ( - TestReport, TestReportDirective) + TestReport, + TestReportDirective, +) from sphinxcontrib.test_reports.directives.test_results import ( - TestResults, TestResultsDirective) + TestResults, + TestResultsDirective, +) from sphinxcontrib.test_reports.directives.test_suite import ( - TestSuite, TestSuiteDirective) + TestSuite, + TestSuiteDirective, +) from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.functions import tr_link -from docutils.parsers.rst import directives sphinx_version = sphinx.__version__ if Version(sphinx_version) >= Version("1.6"): @@ -64,7 +67,9 @@ def setup(app): ) # adds option for custom template - template_dir = os.path.join(os.path.dirname(__file__), "directives/test_report_template.txt") + template_dir = os.path.join( + os.path.dirname(__file__), "directives/test_report_template.txt" + ) app.add_config_value("tr_report_template", template_dir, "html") app.add_config_value("tr_suite_id_length", 3, "html") @@ -140,7 +145,9 @@ def register_tr_extra_options(app): for option_name in tr_extra_options: direc.option_spec[option_name] = directives.unchanged log.debug(f"Registered {option_name} with {direc}") - log.debug(f"{direc}.option_spec now has keys: {list(direc.option_spec.keys())}") + log.debug( + f"{direc}.option_spec now has keys: {list(direc.option_spec.keys())}" + ) def tr_preparation(app, *args): diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index 60341aad4..b102cadde 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -19,7 +19,11 @@ def copy_srcdir_to_tmpdir(srcdir, tmp): srcdir = Path(__file__).parent.absolute() / srcdir tmproot = tmp / Path(srcdir).name shutil.copytree(srcdir, tmproot) - return tmproot if Version(sphinx_version) >= Version("7.2") else path(tmproot.absolute()) + return ( + tmproot + if Version(sphinx_version) >= Version("7.2") + else path(tmproot.absolute()) + ) @pytest.fixture(scope="function") diff --git a/packages/sphinx-test-reports/tests/test_basic_doc.py b/packages/sphinx-test-reports/tests/test_basic_doc.py index 9c066cadb..95ba35939 100644 --- a/packages/sphinx-test-reports/tests/test_basic_doc.py +++ b/packages/sphinx-test-reports/tests/test_basic_doc.py @@ -3,7 +3,9 @@ import pytest -@pytest.mark.parametrize("test_app", [{"buildername": "html", "srcdir": "doc_test/basic_doc"}], indirect=True) +@pytest.mark.parametrize( + "test_app", [{"buildername": "html", "srcdir": "doc_test/basic_doc"}], indirect=True +) def test_doc_build_html(test_app): app = test_app app.build() diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index a8562f933..f6ec4059d 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -5,7 +5,9 @@ import pytest import sphinx -sphinx_version = int(sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1]) +sphinx_version = int( + sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1] +) @pytest.mark.parametrize( diff --git a/packages/sphinx-test-reports/tests/test_json_parser.py b/packages/sphinx-test-reports/tests/test_json_parser.py index e0fffb866..f767067e5 100644 --- a/packages/sphinx-test-reports/tests/test_json_parser.py +++ b/packages/sphinx-test-reports/tests/test_json_parser.py @@ -82,7 +82,9 @@ def test_json_parser_build_html(test_app): # Check TestCase need object(s) case_name = "test case 2" case_classname = "class name 2" - hash_c = hashlib.sha1(case_classname.encode("UTF-8") + case_name.encode("UTF-8")).hexdigest() + hash_c = hashlib.sha1( + case_classname.encode("UTF-8") + case_name.encode("UTF-8") + ).hexdigest() case_id = f"{suite_id}_{hash_c.upper()[: app.config.tr_case_id_length]}" assert 'Test-Case' in html diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 1f3bef5a9..57d8195da 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -1,11 +1,19 @@ import os xml_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "xml_data.xml") -xml_pytest_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "pytest_data.xml") -xml_pytest51_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "pytest_data_5_1.xml") -xml_pytest62_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "pytest_data_6_2.xml") - -xml_nose_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "nose_data.xml") +xml_pytest_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "pytest_data.xml" +) +xml_pytest51_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "pytest_data_5_1.xml" +) +xml_pytest62_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "pytest_data_6_2.xml" +) + +xml_nose_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "nose_data.xml" +) xml_ctest_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "ctest.xml") @@ -132,7 +140,9 @@ def test_parse_ctest_xml(): assert test_suite["testcases"][0]["result"] == "passed" assert test_suite["testcases"][1]["name"] == "success_test" assert test_suite["testcases"][1]["result"] == "passed" - assert test_suite["testcases"][2]["name"] == "fail_test" # fail in name, but nowhere in status, faked fail + assert ( + test_suite["testcases"][2]["name"] == "fail_test" + ) # fail in name, but nowhere in status, faked fail assert test_suite["testcases"][2]["result"] == "passed" assert test_suite["testcases"][3]["name"] == "fail_test_output" assert test_suite["testcases"][3]["result"] == "failure" diff --git a/packages/sphinx-test-reports/tests/test_needs_linking.py b/packages/sphinx-test-reports/tests/test_needs_linking.py index 3c2ba8601..e5c8752d8 100644 --- a/packages/sphinx-test-reports/tests/test_needs_linking.py +++ b/packages/sphinx-test-reports/tests/test_needs_linking.py @@ -15,7 +15,16 @@ def test_doc_testsuites_html(test_app): print(html) assert html assert "links outgoing: " in html - assert """TEST_1""" in html - assert """TEST_2""" in html + assert ( + """TEST_1""" + in html + ) + assert ( + """TEST_2""" + in html + ) assert "links incoming: " in html - assert """TEST_3""" in html + assert ( + """TEST_3""" + in html + ) diff --git a/packages/sphinx-test-reports/tests/test_test_ctest_file.py b/packages/sphinx-test-reports/tests/test_test_ctest_file.py index 023469a8c..644b1a8d2 100644 --- a/packages/sphinx-test-reports/tests/test_test_ctest_file.py +++ b/packages/sphinx-test-reports/tests/test_test_ctest_file.py @@ -28,7 +28,11 @@ def test_test_ctest_file(test_app): srcdir = Path(app.srcdir) out_dir = srcdir / "_build" - out = subprocess.run(["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True) + out = subprocess.run( + ["sphinx-build", "-M", "html", srcdir, out_dir], + capture_output=True, + check=False, + ) assert out.returncode == 0 diff --git a/packages/sphinx-test-reports/tests/test_test_file.py b/packages/sphinx-test-reports/tests/test_test_file.py index 4bf212078..d43d684c5 100644 --- a/packages/sphinx-test-reports/tests/test_test_file.py +++ b/packages/sphinx-test-reports/tests/test_test_file.py @@ -28,7 +28,11 @@ def test_test_file_needs_extra_options_no_warning(test_app): srcdir = Path(app.srcdir) out_dir = srcdir / "_build" - out = subprocess.run(["sphinx-build", "-M", "html", srcdir, out_dir], capture_output=True) + out = subprocess.run( + ["sphinx-build", "-M", "html", srcdir, out_dir], + capture_output=True, + check=False, + ) assert out.returncode == 0 From 2e916d558d98586dea4c6d36a3db8d76fb6637de Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 1 Apr 2025 21:05:19 +0200 Subject: [PATCH 100/159] =?UTF-8?q?=F0=9F=94=A7=20Add=20standard=20hooks?= =?UTF-8?q?=20(useblocks/sphinx-test-reports#106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.pre-commit-config.yaml | 9 + packages/sphinx-test-reports/README.rst | 2 - packages/sphinx-test-reports/docs/Makefile | 2 +- .../sphinx-test-reports/docs/changelog.rst | 3 +- .../docs/configuration.rst | 10 +- .../docs/custom_test_report_template.txt | 2 - .../docs/directives/test_case.rst | 3 +- .../docs/directives/test_env.rst | 1 - .../docs/directives/test_file.rst | 3 +- .../docs/directives/test_report.rst | 1 - .../docs/directives/test_suite.rst | 6 +- .../sphinx-test-reports/docs/functions.rst | 4 +- packages/sphinx-test-reports/docs/index.rst | 1 - packages/sphinx-test-reports/docs/install.rst | 1 - packages/sphinx-test-reports/docs/parsers.rst | 2 - packages/sphinx-test-reports/docs/support.rst | 2 - .../docs/ub_theme/README.md | 10 +- .../docs/ub_theme/css/ub-theme.css | 2 +- .../docs/ub_theme/js/ub-theme.js | 2 +- .../templates/partials/copyright.html | 1 - packages/sphinx-test-reports/pyproject.toml | 2 - .../test_reports/schemas/JUnit.xsd | 2 +- .../tests/doc_test/basic_doc/Makefile | 2 +- .../tests/doc_test/basic_doc/index.rst | 1 - .../doc_test/custom_tr_koi8_template/Makefile | 2 +- .../custom_test_report_template.txt | 2 - .../custom_tr_koi8_template/index.rst | 2 +- .../doc_test/custom_tr_template/Makefile | 2 +- .../custom_test_report_template.txt | 2 - .../doc_test/custom_tr_template/index.rst | 2 +- .../doc_test/custom_tr_utf8_template/Makefile | 2 +- .../custom_test_report_template.txt | 2 - .../custom_tr_utf8_template/index.rst | 2 +- .../tests/doc_test/custom_types/Makefile | 2 +- .../doc_test/doc_test_ctest_file/Makefile | 2 +- .../tests/doc_test/doc_test_file/Makefile | 2 +- .../tests/doc_test/env_report_doc/Makefile | 2 +- .../doc_test/env_report_doc_default/Makefile | 2 +- .../doc_test/env_report_doc_raw/Makefile | 2 +- .../doc_test/env_report_doc_raw/index.rst | 1 - .../doc_test/env_report_warnings/Makefile | 2 +- .../doc_test/env_report_warnings/index.rst | 2 +- .../tests/doc_test/json_parser/Makefile | 2 +- .../doc_test/json_parser_complex/Makefile | 2 +- .../doc_test/json_parser_custom/Makefile | 2 +- .../doc_test/many_testsuites_doc/index.rst | 1 - .../tests/doc_test/needs_linking/Makefile | 2 +- .../tests/doc_test/pytest_6_2/Makefile | 2 +- .../tests/doc_test/pytest_6_2/index.rst | 1 - .../tests/doc_test/testsuites_doc/index.rst | 1 - .../tests/doc_test/utils/ctest.xml | 1 - .../doc_test/utils/json_complex_data.json | 24 +- .../doc_test/utils/json_custom_data.json | 4 +- .../tests/doc_test/utils/json_data.json | 4 +- .../tests/doc_test/utils/many_testsuites.xml | 2 +- .../tests/doc_test/utils/nose_data.xml | 2 +- .../tests/doc_test/utils/pytest_data.xml | 2 +- .../tests/doc_test/utils/pytest_data_6_2.xml | 2 +- .../doc_test/utils/pytest_nested_example.xml | 2 +- .../tests/doc_test/utils/testsuites.xml | 2 +- .../doc_test/utils/tox-report-short.json | 50 +- .../tests/doc_test/utils/tox-report.json | 622 +++++++++--------- .../tests/doc_test/utils/xml_data.xml | 2 +- .../tests/doc_test/utils/xml_data_2.xml | 2 +- 64 files changed, 409 insertions(+), 434 deletions(-) diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml index 33b9fbe04..37c987ce1 100644 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ b/packages/sphinx-test-reports/.pre-commit-config.yaml @@ -1,4 +1,13 @@ repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: end-of-file-fixer + # minified file + exclude: docs/ub_theme/js/jquery.js + - id: trailing-whitespace + - id: pretty-format-json + args: [--autofix, --no-sort-keys] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.11.2 diff --git a/packages/sphinx-test-reports/README.rst b/packages/sphinx-test-reports/README.rst index 163f3a9f1..cb800fae4 100644 --- a/packages/sphinx-test-reports/README.rst +++ b/packages/sphinx-test-reports/README.rst @@ -11,5 +11,3 @@ Functions * Shows test results of **junit based test xml reports** as table * Shows test environment information of **tox-envreport based json reports** as table - - diff --git a/packages/sphinx-test-reports/docs/Makefile b/packages/sphinx-test-reports/docs/Makefile index 0cb8ae4c0..a5208bba2 100644 --- a/packages/sphinx-test-reports/docs/Makefile +++ b/packages/sphinx-test-reports/docs/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 4c378ffd7..732f46dda 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -12,7 +12,7 @@ Changelog ----- :Released: 27.03.2025 -* Improvement: Introducing :ref:`tr_extra_options` for setting custom options in all derrived +* Improvement: Introducing :ref:`tr_extra_options` for setting custom options in all derrived test-cases from ``test-file`` and co. `#96 `_ * Improvement: JSON-Parser allows to set custom options in test-cases, like ``status`` or even ``id``. @@ -119,4 +119,3 @@ Changelog **Initial start for the changelog** * Improvement: added directive ``:test-env:`` to take tox-envreport.json as input and create a table. - diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 093bcbdbc..68eb026bd 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -111,7 +111,7 @@ Default: **5** tr_extra_options ---------------- -.. versionadded:: 1.2.0 +.. versionadded:: 1.2.0 Defines extra options you can use in `test-file` `test-case` and `test-suite`. These options also have to be registered in either needs_extra_options or needs_extra_links. @@ -122,10 +122,10 @@ These options also have to be registered in either needs_extra_options or needs_ # In conf.py tr_extra_options = ['more_info', 'related_to', 'priority'] - + # Define as regular options needs_extra_options = ['more_info', 'priority'] - + You can then use these options in your directives: .. code-block:: rst @@ -197,9 +197,9 @@ are registered via ``needs_extra_options``. Default data ~~~~~~~~~~~~ -The mapping of ``tr_json_mapping`` allows to set a default value, if the key can't be found in the +The mapping of ``tr_json_mapping`` allows to set a default value, if the key can't be found in the json data itself. -However, with :ref:`tr_extra_options` exists another way to set defaults, defined +However, with :ref:`tr_extra_options` exists another way to set defaults, defined by the directives like ``need-file`` and co. If this directive-default shall be taken, set the default value in ``tr_json_mapping`` to diff --git a/packages/sphinx-test-reports/docs/custom_test_report_template.txt b/packages/sphinx-test-reports/docs/custom_test_report_template.txt index 75009b475..1362d5714 100644 --- a/packages/sphinx-test-reports/docs/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/docs/custom_test_report_template.txt @@ -50,5 +50,3 @@ The following rst-code is used to generate the report. .. literalinclude:: ../custom_test_report_template.txt :language: rst - - diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 7d767526b..0f154eb17 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -44,7 +44,7 @@ or if it selects only the first found test case. The best case is to always try These options can also be used to :ref:`filter for certain test-files `. You can add custom options to the ``test-case`` directive by configuring the :ref:`tr_extra_options` value in your ``conf.py``. -These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. +These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. @@ -90,4 +90,3 @@ Example :id: TESTCASE_2 A nosetest test case. - diff --git a/packages/sphinx-test-reports/docs/directives/test_env.rst b/packages/sphinx-test-reports/docs/directives/test_env.rst index cb9c81fa5..2ea60c2f1 100644 --- a/packages/sphinx-test-reports/docs/directives/test_env.rst +++ b/packages/sphinx-test-reports/docs/directives/test_env.rst @@ -111,4 +111,3 @@ Raw output :raw: :data: name, host, installed_packages :env: py27 - diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index ee307c71c..0ce8ea954 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -61,7 +61,7 @@ All other options like ``tags``, ``links``, ``status`` are copied from ``test-fi to the ``test-file``. You can add custom options to the ``test-file`` directive by configuring the :ref:`tr_extra_options` value in your ``conf.py``. -These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. +These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. Example @@ -167,4 +167,3 @@ Autogenerated suite and cases :auto_suites: :auto_cases: :tags: auto - diff --git a/packages/sphinx-test-reports/docs/directives/test_report.rst b/packages/sphinx-test-reports/docs/directives/test_report.rst index ffc013c2e..6431cf0c7 100644 --- a/packages/sphinx-test-reports/docs/directives/test_report.rst +++ b/packages/sphinx-test-reports/docs/directives/test_report.rst @@ -52,4 +52,3 @@ Result: :id: SPEC_001 Used as simple link target. See Sphinx-Needs for details. - diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst index 88e7c7807..4180f8011 100644 --- a/packages/sphinx-test-reports/docs/directives/test_suite.rst +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -39,7 +39,7 @@ These options can also be used to :ref:`filter for certain test-files `. You can add custom options to the ``test-case`` directive by configuring the :ref:`tr_extra_options` value in your ``conf.py``. -These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. +These must also be defined in either ``needs_extra_options`` or ``needs_extra_links``. Example ------- @@ -61,7 +61,3 @@ Example :links: TESTFILE_2 A test suite, containing the results of the suite only. - - - - diff --git a/packages/sphinx-test-reports/docs/functions.rst b/packages/sphinx-test-reports/docs/functions.rst index b26501377..aff28dd29 100644 --- a/packages/sphinx-test-reports/docs/functions.rst +++ b/packages/sphinx-test-reports/docs/functions.rst @@ -33,8 +33,8 @@ Then it goes through **all** other needs and checks if the value of their ``sour the ``target_option``. If this is the case, their IDs get stored and finally returned. -``source_option`` can also reference an option with comma separated values. -In this case a comparions is performed for each value, which may lead to multiple links. +``source_option`` can also reference an option with comma separated values. +In this case a comparions is performed for each value, which may lead to multiple links. **Example**:: diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index ea334a9ca..928a62581 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -218,4 +218,3 @@ Other tools are: `sphinx-needs `__, `sphinx-collections `__ and `tox-envreport `__. - diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst index 44662e391..dc91cece1 100644 --- a/packages/sphinx-test-reports/docs/install.rst +++ b/packages/sphinx-test-reports/docs/install.rst @@ -21,4 +21,3 @@ test-cases. More details can be find in the `installation-guide `_ of ``Sphinx-Needs``. - diff --git a/packages/sphinx-test-reports/docs/parsers.rst b/packages/sphinx-test-reports/docs/parsers.rst index 4577994cc..dbead63ce 100644 --- a/packages/sphinx-test-reports/docs/parsers.rst +++ b/packages/sphinx-test-reports/docs/parsers.rst @@ -48,5 +48,3 @@ Only the parser cares about the format. Other internal functions (like directive data representation and rely on it. So parsers are not allowed to rename or even extend this internal representation. If this is needed, all available parsers need to be updated as well. - - diff --git a/packages/sphinx-test-reports/docs/support.rst b/packages/sphinx-test-reports/docs/support.rst index f73008579..f9d87826d 100644 --- a/packages/sphinx-test-reports/docs/support.rst +++ b/packages/sphinx-test-reports/docs/support.rst @@ -22,5 +22,3 @@ Fastest way of reaching us is via e-mail: mail@useblocks.com. :align: center :width: 100px :target: http://useblocks.com - - diff --git a/packages/sphinx-test-reports/docs/ub_theme/README.md b/packages/sphinx-test-reports/docs/ub_theme/README.md index 7bb64b661..301f33020 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/README.md +++ b/packages/sphinx-test-reports/docs/ub_theme/README.md @@ -1,7 +1,7 @@ # useblocks-theme This repository contains the theme for all Useblock documentation sites. -> **NOTE:** +> **NOTE:** > - Useblocks uses the Sphinx-Immaterial theme so ensure that the theme is already installed and applied. > - Install `sphinx_immaterial` by running this command: `pip install sphinx-immaterial`. > - Then activate the theme by adding it to the `extension` variable under **conf.py**: `extensions = ["sphinx_immaterial"]` @@ -16,14 +16,14 @@ To install the files from this repository, you must have [Git](https://git-scm.c ``` * Download the files from the repository: ```bash - git clone https://github.com/useblocks/useblocks-theme.git + git clone https://github.com/useblocks/useblocks-theme.git ``` ## Configuration You must configure the following in the **conf.py** file of the Sphinx documentation project. -* In order to import the **ub_theme** package, Python searches through the directories on `sys.path` looking for the package subdirectory. +* In order to import the **ub_theme** package, Python searches through the directories on `sys.path` looking for the package subdirectory. * Add the parent path of the **ub_theme** folder to `sys.path`. ```python import os @@ -61,7 +61,7 @@ You must configure the following in the **conf.py** file of the Sphinx documenta ```python html_js_files = ["ub-theme.js"] ``` - + The final configuration should look like below: ```python import sys @@ -97,4 +97,4 @@ html_js_files = ["ub-theme.js"] ## Changelog * 13.01.2023 - Updated CSS stylesheets and docs on how to apply the theme customization. -* 28.12.2022 - Setup and added the initial Useblocks theme codes. +* 28.12.2022 - Setup and added the initial Useblocks theme codes. diff --git a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css index 60adee5c7..a6b70da57 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css +++ b/packages/sphinx-test-reports/docs/ub_theme/css/ub-theme.css @@ -180,4 +180,4 @@ table.NEEDS_DATATABLES, table.NEEDS_TABLE{ .md-nav__current-toc { display: none!important; } -} \ No newline at end of file +} diff --git a/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js b/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js index dad2c2896..0bb3bfb05 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js +++ b/packages/sphinx-test-reports/docs/ub_theme/js/ub-theme.js @@ -1,3 +1,3 @@ $(document).ready(function() { $("table.NEEDS_DATATABLES, table.NEEDS_TABLE").wrap("
"); -}); \ No newline at end of file +}); diff --git a/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html b/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html index 7b50ba24e..d5ab0add5 100644 --- a/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html +++ b/packages/sphinx-test-reports/docs/ub_theme/templates/partials/copyright.html @@ -21,4 +21,3 @@ {%- endif %} {{ rendered_extracopyright }}
- diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 29ddb4f11..45a1d1a78 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -10,9 +10,7 @@ readme = "README.rst" requires-python = ">=3.6" license = { text = "MIT" } authors = [{ name = "team useblocks", email = "info@useblocks.com" }] - dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1"] - classifiers = [ "Framework :: Sphinx", "Framework :: Sphinx :: Extension", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd b/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd index 403aef0e1..fe134662a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd @@ -203,4 +203,4 @@ Permission to waive conditions of this license may be requested from Windy Road - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst index 9fec7ad5e..aeb4b9f5b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/index.rst @@ -3,4 +3,3 @@ Basic Document .. test-results:: ../utils/xml_data.xml - diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt index 739185420..e4219689b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt @@ -51,5 +51,3 @@ The following rst-code is used to generate the report. .. literalinclude:: ../custom_test_report_template.txt :language: rst - - diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst index 60d851b4a..5b2895984 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/index.rst @@ -5,4 +5,4 @@ Basic Document :id: REPORT :file: ../utils/pytest_data.xml :tags: my_report, awesome - :links: SPEC_001 \ No newline at end of file + :links: SPEC_001 diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt index 75009b475..1362d5714 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt @@ -50,5 +50,3 @@ The following rst-code is used to generate the report. .. literalinclude:: ../custom_test_report_template.txt :language: rst - - diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst index 60d851b4a..5b2895984 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/index.rst @@ -5,4 +5,4 @@ Basic Document :id: REPORT :file: ../utils/pytest_data.xml :tags: my_report, awesome - :links: SPEC_001 \ No newline at end of file + :links: SPEC_001 diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt index a1a5f33e1..0a85df37b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt @@ -51,5 +51,3 @@ The following rst-code is used to generate the report. .. literalinclude:: ../custom_test_report_template.txt :language: rst - - diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst index 60d851b4a..5b2895984 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst @@ -5,4 +5,4 @@ Basic Document :id: REPORT :file: ../utils/pytest_data.xml :tags: my_report, awesome - :links: SPEC_001 \ No newline at end of file + :links: SPEC_001 diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile b/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst index b588068d4..e403d3ef5 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/index.rst @@ -5,4 +5,3 @@ Test-Env report :data: host, name, path :env: py35, flake8 :raw: - diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst index 93d809d34..8b52e2ecc 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/index.rst @@ -3,4 +3,4 @@ Test-Env report .. test-env:: ../utils/tox-report.json :data: host, name, path, abc,, - :env: py35, flake8,,defs \ No newline at end of file + :env: py35, flake8,,defs diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile b/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst index 4b331557e..47d72a1a8 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/index.rst @@ -9,4 +9,3 @@ Basic Document :auto_suites: :auto_cases: :tags: unit-test - diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile b/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile index 47330b89c..97f60f3ad 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst index 2e44f527e..47daa45ca 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/index.rst @@ -3,4 +3,3 @@ Basic Document .. test-results:: ../utils/pytest_data_6_2.xml - diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst index 29c50d009..cad37699c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/index.rst @@ -9,4 +9,3 @@ Basic Document :auto_suites: :auto_cases: :tags: unit-test - diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml b/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml index d51667847..bf757979d 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/ctest.xml @@ -35,4 +35,3 @@ - diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json b/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json index 5722774e1..938ec42d1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json +++ b/packages/sphinx-test-reports/tests/doc_test/utils/json_complex_data.json @@ -36,18 +36,18 @@ "system-out": "system-out text" }, { - "name": "test case 3", - "classname": "class name 3", - "file": "my/test/file_3", - "line": 123, - "time": "20230515-15:04:32", - "result": "skipped", - "type": "test type", - "text": "test text", - "message": "all went wrong :( (message)", - "system-out": "system-out text" - } + "name": "test case 3", + "classname": "class name 3", + "file": "my/test/file_3", + "line": 123, + "time": "20230515-15:04:32", + "result": "skipped", + "type": "test type", + "text": "test text", + "message": "all went wrong :( (message)", + "system-out": "system-out text" + } ] } } -] \ No newline at end of file +] diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json b/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json index dec2f30da..098564c35 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json +++ b/packages/sphinx-test-reports/tests/doc_test/utils/json_custom_data.json @@ -10,7 +10,7 @@ "testcase": [ { "name": "test case 1", - "classname": "class name 1" , + "classname": "class name 1", "file": "my/test/file_1", "line": 123, "time": "20230515-15:04:32", @@ -69,4 +69,4 @@ } ] } -] \ No newline at end of file +] diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json b/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json index 7a4fa50af..2ef48b783 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json +++ b/packages/sphinx-test-reports/tests/doc_test/utils/json_data.json @@ -10,7 +10,7 @@ "testcase": [ { "name": "test case 1", - "classname": "class name 1" , + "classname": "class name 1", "file": "my/test/file_1", "line": 123, "time": "20230515-15:04:32", @@ -46,4 +46,4 @@ } ] } -] \ No newline at end of file +] diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml b/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml index 3b9bdaad6..2474af0f2 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/many_testsuites.xml @@ -169,4 +169,4 @@ - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/nose_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/nose_data.xml index 1c5b629c4..1117f63b6 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/nose_data.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/nose_data.xml @@ -4,4 +4,4 @@ - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data.xml index fd727087c..e7a1495f1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data.xml @@ -49,4 +49,4 @@ /home/daniel/workspace/sphinx/sphinx-test-reports/.tox/py27-sphinx15/local/lib/python2.7/site-packages/pytest_flake8.py:106: <py._xmlgen.raw object at 0x7fd5a84bf090> - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_6_2.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_6_2.xml index d01924dc6..37bbc8f2f 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_6_2.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_data_6_2.xml @@ -26,4 +26,4 @@ E Exception: Bang! test_example.py:31: Exception - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/pytest_nested_example.xml b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_nested_example.xml index 86607e36b..b240964ac 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/pytest_nested_example.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/pytest_nested_example.xml @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml b/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml index 7eb77b958..4c8def545 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/testsuites.xml @@ -29,4 +29,4 @@ Expected equality of these values: - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/tox-report-short.json b/packages/sphinx-test-reports/tests/doc_test/utils/tox-report-short.json index 633ff0cf4..8540907b2 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/tox-report-short.json +++ b/packages/sphinx-test-reports/tests/doc_test/utils/tox-report-short.json @@ -1,28 +1,28 @@ { - "py27": { - "host": "user_abc", - "installed_packages": [ - "arrow==0.10.0", - "atomicwrites==1.2.1" - ], - "installpkg": { - "basename": "erc_e2e-0.1.0.zip", - "md5": "df03855c61c10ddd32f2c888856cc51e", - "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" - }, - "name": "py35", - "path": "/home/user_abc/projects/sphinx-test-reports", - "platform": "linux", - "python": { - "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", - "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", - "version_info": [ - 3, - 5, - 2, - "final", - 0 - ] - } + "py27": { + "host": "user_abc", + "installed_packages": [ + "arrow==0.10.0", + "atomicwrites==1.2.1" + ], + "installpkg": { + "basename": "erc_e2e-0.1.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" + }, + "name": "py35", + "path": "/home/user_abc/projects/sphinx-test-reports", + "platform": "linux", + "python": { + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] } + } } diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/tox-report.json b/packages/sphinx-test-reports/tests/doc_test/utils/tox-report.json index 6b5e5c2c4..e8ed9a551 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/tox-report.json +++ b/packages/sphinx-test-reports/tests/doc_test/utils/tox-report.json @@ -1,321 +1,321 @@ { - "flake8": { - "host": "user_abc", - "installed_packages": [ - "arrow==0.10.0", - "attrs==18.2.0", - "binaryornot==0.4.4", - "blinker==1.4", - "certifi==2018.4.16", - "chardet==3.0.4", - "click==6.7", - "cookiecutter==1.5.1", - "docutils==0.14", - "envparse==0.2.0", - "project==0.1.0", - "flake8==3.5.0", - "flake8-blind-except==0.1.1", - "flake8-bugbear==18.2.0", - "flake8-builtins==1.1.1", - "flake8-commas==2.0.0", - "flake8-comprehensions==1.4.1", - "flake8-debugger==3.1.0", - "flake8-deprecated==1.3", - "flake8-docstrings==1.3.0", - "flake8-formatter-abspath==1.0.1", - "flake8-import-order==0.17.1", - "flake8-mutable==1.2.0", - "flake8-pep3101==1.2", - "flake8-per-file-ignores==0.6", - "flake8-polyfill==1.0.2", - "flake8-quotes==0.14.0", - "flake8-rst-docstrings==0.0.8", - "flake8-string-format==0.2.3", - "flake8-tidy-imports==1.1.0", - "flake8-tuple==0.2.13", - "future==0.16.0", - "groundwork==0.1.13", - "idna==2.6", - "Jinja2==2.9.6", - "jinja2-time==0.2.0", - "jsonschema==2.6.0", - "lxml==4.0.0", - "MarkupSafe==1.0", - "mccabe==0.6.1", - "nose==1.3.7", - "pathlib==1.0.1", - "pathmatch==0.2.1", - "poyo==0.4.1", - "pycodestyle==2.3.1", - "pydocstyle==3.0.0", - "pyflakes==1.6.0", - "python-dateutil==2.6.1", - "requests==2.18.4", - "restructuredtext-lint==1.2.1", - "six==1.11.0", - "snowballstemmer==1.2.1", - "svn==0.3.45", - "typing==3.6.6", - "urllib3==1.22", - "whichcraft==0.4.1" - ], - "installpkg": { - "basename": "project_1.2.0.zip", - "md5": "df03855c61c10ddd32f2c888856cc51e", - "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" - }, - "name": "flake8", - "path": "/home/user_abc/projects/sphinx-test-reports/.tox/flake8", - "platform": "linux", - "python": { - "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python", - "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", - "version_info": [ - 3, - 5, - 2, - "final", - 0 - ] - }, - "reportversion": "1", - "setup": [ - { - "command": [ - "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python", - "-m", - "pip", - "freeze" - ], - "output": "actionid: flake8\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python -m pip freeze'\n\narrow==0.10.0\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\ncertifi==2018.4.16\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nflake8==3.5.0\nflake8-blind-except==0.1.1\nflake8-bugbear==18.2.0\nflake8-builtins==1.1.1\nflake8-commas==2.0.0\nflake8-comprehensions==1.4.1\nflake8-debugger==3.1.0\nflake8-deprecated==1.3\nflake8-docstrings==1.3.0\nflake8-formatter-abspath==1.0.1\nflake8-import-order==0.17.1\nflake8-mutable==1.2.0\nflake8-pep3101==1.2\nflake8-per-file-ignores==0.6\nflake8-polyfill==1.0.2\nflake8-quotes==0.14.0\nflake8-rst-docstrings==0.0.8\nflake8-string-format==0.2.3\nflake8-tidy-imports==1.1.0\nflake8-tuple==0.2.13\nfuture==0.16.0\ngroundwork==0.1.13\nidna==2.6\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nnose==1.3.7\npathlib==1.0.1\npathmatch==0.2.1\npoyo==0.4.1\npycodestyle==2.3.1\npydocstyle==3.0.0\npyflakes==1.6.0\npython-dateutil==2.6.1\nrequests==2.18.4\nrestructuredtext-lint==1.2.1\nsix==1.11.0\nsnowballstemmer==1.2.1\nsvn==0.3.45\ntyping==3.6.6\nurllib3==1.22\nwhichcraft==0.4.1\n", - "retcode": "0" - } + "flake8": { + "host": "user_abc", + "installed_packages": [ + "arrow==0.10.0", + "attrs==18.2.0", + "binaryornot==0.4.4", + "blinker==1.4", + "certifi==2018.4.16", + "chardet==3.0.4", + "click==6.7", + "cookiecutter==1.5.1", + "docutils==0.14", + "envparse==0.2.0", + "project==0.1.0", + "flake8==3.5.0", + "flake8-blind-except==0.1.1", + "flake8-bugbear==18.2.0", + "flake8-builtins==1.1.1", + "flake8-commas==2.0.0", + "flake8-comprehensions==1.4.1", + "flake8-debugger==3.1.0", + "flake8-deprecated==1.3", + "flake8-docstrings==1.3.0", + "flake8-formatter-abspath==1.0.1", + "flake8-import-order==0.17.1", + "flake8-mutable==1.2.0", + "flake8-pep3101==1.2", + "flake8-per-file-ignores==0.6", + "flake8-polyfill==1.0.2", + "flake8-quotes==0.14.0", + "flake8-rst-docstrings==0.0.8", + "flake8-string-format==0.2.3", + "flake8-tidy-imports==1.1.0", + "flake8-tuple==0.2.13", + "future==0.16.0", + "groundwork==0.1.13", + "idna==2.6", + "Jinja2==2.9.6", + "jinja2-time==0.2.0", + "jsonschema==2.6.0", + "lxml==4.0.0", + "MarkupSafe==1.0", + "mccabe==0.6.1", + "nose==1.3.7", + "pathlib==1.0.1", + "pathmatch==0.2.1", + "poyo==0.4.1", + "pycodestyle==2.3.1", + "pydocstyle==3.0.0", + "pyflakes==1.6.0", + "python-dateutil==2.6.1", + "requests==2.18.4", + "restructuredtext-lint==1.2.1", + "six==1.11.0", + "snowballstemmer==1.2.1", + "svn==0.3.45", + "typing==3.6.6", + "urllib3==1.22", + "whichcraft==0.4.1" + ], + "installpkg": { + "basename": "project_1.2.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" + }, + "name": "flake8", + "path": "/home/user_abc/projects/sphinx-test-reports/.tox/flake8", + "platform": "linux", + "python": { + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + }, + "reportversion": "1", + "setup": [ + { + "command": [ + "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python", + "-m", + "pip", + "freeze" ], - "test": [ - { - "command": [ - "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/flake8" - ], - "output": null, - "retcode": "0" - } + "output": "actionid: flake8\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/python -m pip freeze'\n\narrow==0.10.0\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\ncertifi==2018.4.16\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nflake8==3.5.0\nflake8-blind-except==0.1.1\nflake8-bugbear==18.2.0\nflake8-builtins==1.1.1\nflake8-commas==2.0.0\nflake8-comprehensions==1.4.1\nflake8-debugger==3.1.0\nflake8-deprecated==1.3\nflake8-docstrings==1.3.0\nflake8-formatter-abspath==1.0.1\nflake8-import-order==0.17.1\nflake8-mutable==1.2.0\nflake8-pep3101==1.2\nflake8-per-file-ignores==0.6\nflake8-polyfill==1.0.2\nflake8-quotes==0.14.0\nflake8-rst-docstrings==0.0.8\nflake8-string-format==0.2.3\nflake8-tidy-imports==1.1.0\nflake8-tuple==0.2.13\nfuture==0.16.0\ngroundwork==0.1.13\nidna==2.6\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nnose==1.3.7\npathlib==1.0.1\npathmatch==0.2.1\npoyo==0.4.1\npycodestyle==2.3.1\npydocstyle==3.0.0\npyflakes==1.6.0\npython-dateutil==2.6.1\nrequests==2.18.4\nrestructuredtext-lint==1.2.1\nsix==1.11.0\nsnowballstemmer==1.2.1\nsvn==0.3.45\ntyping==3.6.6\nurllib3==1.22\nwhichcraft==0.4.1\n", + "retcode": "0" + } + ], + "test": [ + { + "command": [ + "/home/user_abc/projects/sphinx-test-reports/.tox/flake8/bin/flake8" ], - "toxversion": "3.5.3" + "output": null, + "retcode": "0" + } + ], + "toxversion": "3.5.3" + }, + "py35": { + "host": "user_abc", + "installed_packages": [ + "arrow==0.10.0", + "atomicwrites==1.2.1", + "attrs==18.2.0", + "binaryornot==0.4.4", + "blinker==1.4", + "brotlipy==0.7.0", + "certifi==2018.4.16", + "cffi==1.11.5", + "chardet==3.0.4", + "click==6.7", + "cookiecutter==1.5.1", + "coverage==4.5.2", + "decorator==4.3.0", + "docutils==0.14", + "envparse==0.2.0", + "project==0.1.0", + "filelock==3.0.10", + "Flask==1.0.2", + "future==0.16.0", + "groundwork==0.1.13", + "gw-utils==0.2.3", + "httpbin==0.7.0", + "idna==2.6", + "itsdangerous==1.1.0", + "Jinja2==2.9.6", + "jinja2-time==0.2.0", + "jsonschema==2.6.0", + "lxml==4.0.0", + "MarkupSafe==1.0", + "more-itertools==4.3.0", + "nose==1.3.7", + "pathlib==1.0.1", + "pathlib2==2.3.2", + "pluggy==0.8.0", + "poyo==0.4.1", + "py==1.7.0", + "pycparser==2.19", + "pyelftools===0.24-st1", + "pytest==4.0.0", + "pytest-cov==2.6.0", + "pytest-runner==4.2", + "python-dateutil==2.6.1", + "PyYAML==3.13", + "raven==6.9.0", + "requests==2.18.4", + "six==1.11.0", + "svn==0.3.45", + "toml==0.10.0", + "tox==3.5.3", + "typing==3.6.6", + "urllib3==1.22", + "virtualenv==16.1.0", + "Werkzeug==0.14.1", + "whichcraft==0.4.1", + "yamldirs==1.1.3" + ], + "installpkg": { + "basename": "project_1.2.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" }, - "py35": { - "host": "user_abc", - "installed_packages": [ - "arrow==0.10.0", - "atomicwrites==1.2.1", - "attrs==18.2.0", - "binaryornot==0.4.4", - "blinker==1.4", - "brotlipy==0.7.0", - "certifi==2018.4.16", - "cffi==1.11.5", - "chardet==3.0.4", - "click==6.7", - "cookiecutter==1.5.1", - "coverage==4.5.2", - "decorator==4.3.0", - "docutils==0.14", - "envparse==0.2.0", - "project==0.1.0", - "filelock==3.0.10", - "Flask==1.0.2", - "future==0.16.0", - "groundwork==0.1.13", - "gw-utils==0.2.3", - "httpbin==0.7.0", - "idna==2.6", - "itsdangerous==1.1.0", - "Jinja2==2.9.6", - "jinja2-time==0.2.0", - "jsonschema==2.6.0", - "lxml==4.0.0", - "MarkupSafe==1.0", - "more-itertools==4.3.0", - "nose==1.3.7", - "pathlib==1.0.1", - "pathlib2==2.3.2", - "pluggy==0.8.0", - "poyo==0.4.1", - "py==1.7.0", - "pycparser==2.19", - "pyelftools===0.24-st1", - "pytest==4.0.0", - "pytest-cov==2.6.0", - "pytest-runner==4.2", - "python-dateutil==2.6.1", - "PyYAML==3.13", - "raven==6.9.0", - "requests==2.18.4", - "six==1.11.0", - "svn==0.3.45", - "toml==0.10.0", - "tox==3.5.3", - "typing==3.6.6", - "urllib3==1.22", - "virtualenv==16.1.0", - "Werkzeug==0.14.1", - "whichcraft==0.4.1", - "yamldirs==1.1.3" + "name": "py35", + "path": "/home/user_abc/projects/sphinx-test-reports/.tox/py35", + "platform": "linux", + "python": { + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + }, + "reportversion": "1", + "setup": [ + { + "command": [ + "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", + "-m", + "pip", + "install", + "--no-deps", + "-U", + "/home/user_abc/projects/sphinx-test-reports/.tox/.tmp/package/1/project_1.2.0.zip" ], - "installpkg": { - "basename": "project_1.2.0.zip", - "md5": "df03855c61c10ddd32f2c888856cc51e", - "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" - }, - "name": "py35", - "path": "/home/user_abc/projects/sphinx-test-reports/.tox/py35", - "platform": "linux", - "python": { - "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", - "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", - "version_info": [ - 3, - 5, - 2, - "final", - 0 - ] - }, - "reportversion": "1", - "setup": [ - { - "command": [ - "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", - "-m", - "pip", - "install", - "--no-deps", - "-U", - "/home/user_abc/projects/sphinx-test-reports/.tox/.tmp/package/1/project_1.2.0.zip" - ], - "output": "actionid: py35\nmsg: installpkg\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python -m pip install --no-deps -U /home/user_abc/projects/sphinx-test-reports/.tox/.tmp/package/1/project_1.2.0.zip'\n\nProcessing ./.tox/.tmp/package/1/project_1.2.0.zip\nBuilding wheels for collected packages: project\n Running setup.py bdist_wheel for project: started\n Running setup.py bdist_wheel for project: finished with status 'done'\n Stored in directory: /home/user_abc/.cache/pip/wheels/f7/81/bb/85d03f88c7253c16a001851c961b6ed0a084ca296a0b5d296a\nSuccessfully built project\nInstalling collected packages: project\n Found existing installation: project 0.1.0\n Not uninstalling project at /home/user_abc/projects/sphinx-test-reports, outside environment /home/user_abc/projects/sphinx-test-reports/.tox/py35\n Can't uninstall 'project'. No files were found to uninstall.\nSuccessfully installed project-0.1.0\n", - "retcode": "0" - }, - { - "command": [ - "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", - "-m", - "pip", - "freeze" - ], - "output": "actionid: py35\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python -m pip freeze'\n\narrow==0.10.0\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\ngw-utils==0.2.3\nhttpbin==0.7.0\nidna==2.6\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npyelftools===0.24-st1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nyamldirs==1.1.3\n", - "retcode": "0" - } + "output": "actionid: py35\nmsg: installpkg\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python -m pip install --no-deps -U /home/user_abc/projects/sphinx-test-reports/.tox/.tmp/package/1/project_1.2.0.zip'\n\nProcessing ./.tox/.tmp/package/1/project_1.2.0.zip\nBuilding wheels for collected packages: project\n Running setup.py bdist_wheel for project: started\n Running setup.py bdist_wheel for project: finished with status 'done'\n Stored in directory: /home/user_abc/.cache/pip/wheels/f7/81/bb/85d03f88c7253c16a001851c961b6ed0a084ca296a0b5d296a\nSuccessfully built project\nInstalling collected packages: project\n Found existing installation: project 0.1.0\n Not uninstalling project at /home/user_abc/projects/sphinx-test-reports, outside environment /home/user_abc/projects/sphinx-test-reports/.tox/py35\n Can't uninstall 'project'. No files were found to uninstall.\nSuccessfully installed project-0.1.0\n", + "retcode": "0" + }, + { + "command": [ + "/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python", + "-m", + "pip", + "freeze" ], - "test": [], - "toxversion": "3.5.3" + "output": "actionid: py35\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/py35/bin/python -m pip freeze'\n\narrow==0.10.0\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\ngw-utils==0.2.3\nhttpbin==0.7.0\nidna==2.6\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlxml==4.0.0\nMarkupSafe==1.0\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npyelftools===0.24-st1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nyamldirs==1.1.3\n", + "retcode": "0" + } + ], + "test": [], + "toxversion": "3.5.3" + }, + "pylint": { + "host": "user_abc", + "installed_packages": [ + "arrow==0.10.0", + "astroid==2.0.4", + "atomicwrites==1.2.1", + "attrs==18.2.0", + "binaryornot==0.4.4", + "blinker==1.4", + "brotlipy==0.7.0", + "certifi==2018.4.16", + "cffi==1.11.5", + "chardet==3.0.4", + "click==6.7", + "cookiecutter==1.5.1", + "coverage==4.5.2", + "decorator==4.3.0", + "docutils==0.14", + "envparse==0.2.0", + "project==0.1.0", + "filelock==3.0.10", + "Flask==1.0.2", + "future==0.16.0", + "groundwork==0.1.13", + "httpbin==0.7.0", + "idna==2.6", + "isort==4.3.4", + "itsdangerous==1.1.0", + "Jinja2==2.9.6", + "jinja2-time==0.2.0", + "jsonschema==2.6.0", + "lazy-object-proxy==1.3.1", + "lxml==4.0.0", + "MarkupSafe==1.0", + "mccabe==0.6.1", + "more-itertools==4.3.0", + "nose==1.3.7", + "pathlib==1.0.1", + "pathlib2==2.3.2", + "pluggy==0.8.0", + "poyo==0.4.1", + "py==1.7.0", + "pycparser==2.19", + "pylint==2.1.1", + "pytest==4.0.0", + "pytest-cov==2.6.0", + "pytest-runner==4.2", + "python-dateutil==2.6.1", + "PyYAML==3.13", + "raven==6.9.0", + "requests==2.18.4", + "six==1.11.0", + "svn==0.3.45", + "toml==0.10.0", + "tox==3.5.3", + "typed-ast==1.1.0", + "typing==3.6.6", + "urllib3==1.22", + "virtualenv==16.1.0", + "Werkzeug==0.14.1", + "whichcraft==0.4.1", + "wrapt==1.10.11", + "yamldirs==1.1.3" + ], + "installpkg": { + "basename": "project_1.2.0.zip", + "md5": "df03855c61c10ddd32f2c888856cc51e", + "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" }, - "pylint": { - "host": "user_abc", - "installed_packages": [ - "arrow==0.10.0", - "astroid==2.0.4", - "atomicwrites==1.2.1", - "attrs==18.2.0", - "binaryornot==0.4.4", - "blinker==1.4", - "brotlipy==0.7.0", - "certifi==2018.4.16", - "cffi==1.11.5", - "chardet==3.0.4", - "click==6.7", - "cookiecutter==1.5.1", - "coverage==4.5.2", - "decorator==4.3.0", - "docutils==0.14", - "envparse==0.2.0", - "project==0.1.0", - "filelock==3.0.10", - "Flask==1.0.2", - "future==0.16.0", - "groundwork==0.1.13", - "httpbin==0.7.0", - "idna==2.6", - "isort==4.3.4", - "itsdangerous==1.1.0", - "Jinja2==2.9.6", - "jinja2-time==0.2.0", - "jsonschema==2.6.0", - "lazy-object-proxy==1.3.1", - "lxml==4.0.0", - "MarkupSafe==1.0", - "mccabe==0.6.1", - "more-itertools==4.3.0", - "nose==1.3.7", - "pathlib==1.0.1", - "pathlib2==2.3.2", - "pluggy==0.8.0", - "poyo==0.4.1", - "py==1.7.0", - "pycparser==2.19", - "pylint==2.1.1", - "pytest==4.0.0", - "pytest-cov==2.6.0", - "pytest-runner==4.2", - "python-dateutil==2.6.1", - "PyYAML==3.13", - "raven==6.9.0", - "requests==2.18.4", - "six==1.11.0", - "svn==0.3.45", - "toml==0.10.0", - "tox==3.5.3", - "typed-ast==1.1.0", - "typing==3.6.6", - "urllib3==1.22", - "virtualenv==16.1.0", - "Werkzeug==0.14.1", - "whichcraft==0.4.1", - "wrapt==1.10.11", - "yamldirs==1.1.3" - ], - "installpkg": { - "basename": "project_1.2.0.zip", - "md5": "df03855c61c10ddd32f2c888856cc51e", - "sha256": "576f9f616a18bc74404a0f241c96d9e3c75f03f091f8981495598d0c6dc25c41" - }, - "name": "pylint", - "path": "/home/user_abc/projects/sphinx-test-reports/.tox/pylint", - "platform": "linux", - "python": { - "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python", - "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", - "version_info": [ - 3, - 5, - 2, - "final", - 0 - ] - }, - "reportversion": "1", - "setup": [ - { - "command": [ - "/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python", - "-m", - "pip", - "freeze" - ], - "output": "actionid: pylint\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python -m pip freeze'\n\narrow==0.10.0\nastroid==2.0.4\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\nhttpbin==0.7.0\nidna==2.6\nisort==4.3.4\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlazy-object-proxy==1.3.1\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npylint==2.1.1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyped-ast==1.1.0\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nwrapt==1.10.11\nyamldirs==1.1.3\n", - "retcode": "0" - } + "name": "pylint", + "path": "/home/user_abc/projects/sphinx-test-reports/.tox/pylint", + "platform": "linux", + "python": { + "executable": "/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python", + "version": "3.5.2 (default, Nov 12 2018, 13:43:14) \n[GCC 5.4.0 20160609]", + "version_info": [ + 3, + 5, + 2, + "final", + 0 + ] + }, + "reportversion": "1", + "setup": [ + { + "command": [ + "/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python", + "-m", + "pip", + "freeze" ], - "test": [ - { - "command": [ - "/bin/bash", - "-c", - "set -o pipefail && pylint -f parseable --msg-template \"{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\" project tests | tee pylint.log" - ], - "output": null, - "retcode": "0" - } + "output": "actionid: pylint\nmsg: envreport\ncmdargs: '/home/user_abc/projects/sphinx-test-reports/.tox/pylint/bin/python -m pip freeze'\n\narrow==0.10.0\nastroid==2.0.4\natomicwrites==1.2.1\nattrs==18.2.0\nbinaryornot==0.4.4\nblinker==1.4\nbrotlipy==0.7.0\ncertifi==2018.4.16\ncffi==1.11.5\nchardet==3.0.4\nclick==6.7\ncookiecutter==1.5.1\ncoverage==4.5.2\ndecorator==4.3.0\ndocutils==0.14\nenvparse==0.2.0\nproject==0.1.0\nfilelock==3.0.10\nFlask==1.0.2\nfuture==0.16.0\ngroundwork==0.1.13\nhttpbin==0.7.0\nidna==2.6\nisort==4.3.4\nitsdangerous==1.1.0\nJinja2==2.9.6\njinja2-time==0.2.0\njsonschema==2.6.0\nlazy-object-proxy==1.3.1\nlxml==4.0.0\nMarkupSafe==1.0\nmccabe==0.6.1\nmore-itertools==4.3.0\nnose==1.3.7\npathlib==1.0.1\npathlib2==2.3.2\npluggy==0.8.0\npoyo==0.4.1\npy==1.7.0\npycparser==2.19\npylint==2.1.1\npytest==4.0.0\npytest-cov==2.6.0\npytest-runner==4.2\npython-dateutil==2.6.1\nPyYAML==3.13\nraven==6.9.0\nrequests==2.18.4\nsix==1.11.0\nsvn==0.3.45\ntoml==0.10.0\ntox==3.5.3\ntyped-ast==1.1.0\ntyping==3.6.6\nurllib3==1.22\nvirtualenv==16.1.0\nWerkzeug==0.14.1\nwhichcraft==0.4.1\nwrapt==1.10.11\nyamldirs==1.1.3\n", + "retcode": "0" + } + ], + "test": [ + { + "command": [ + "/bin/bash", + "-c", + "set -o pipefail && pylint -f parseable --msg-template \"{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\" project tests | tee pylint.log" ], - "toxversion": "3.5.3" - } + "output": null, + "retcode": "0" + } + ], + "toxversion": "3.5.3" + } } diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data.xml index 7f5a502e9..135ca7003 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data.xml @@ -4,4 +4,4 @@ details about failure - \ No newline at end of file + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_2.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_2.xml index a93be9da6..30edbbc92 100644 --- a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_2.xml +++ b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_2.xml @@ -7,4 +7,4 @@ Passed on the last test run - \ No newline at end of file + From d398b88fda2596c0ae2bcc7439488f2808d09f23 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 2 Apr 2025 09:13:41 +0200 Subject: [PATCH 101/159] =?UTF-8?q?=F0=9F=90=9B=20Fix=20plantuml=20on=20RT?= =?UTF-8?q?D=20(useblocks/sphinx-test-reports#115)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enable fail_on_warning --- packages/sphinx-test-reports/.readthedocs.yaml | 9 +++++++++ packages/sphinx-test-reports/docs/conf.py | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/.readthedocs.yaml b/packages/sphinx-test-reports/.readthedocs.yaml index b779ead82..2453b7e7b 100644 --- a/packages/sphinx-test-reports/.readthedocs.yaml +++ b/packages/sphinx-test-reports/.readthedocs.yaml @@ -2,13 +2,22 @@ version: 2 build: os: ubuntu-22.04 + apt_packages: + - default-jdk + - graphviz tools: python: "3.12" + jobs: + pre_create_environment: + - echo "DOT details" + - which dot # Build documentation in the "docs/" directory with Sphinx sphinx: configuration: docs/conf.py + builder: html + fail_on_warning: true # Optional but recommended, declare the Python requirements required # to build your documentation diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index b7c9f7f87..6ec7480ad 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -53,8 +53,8 @@ "sphinx_immaterial", ] -cwd = os.getcwd() -plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") +local_plantuml_path = os.path.join(os.path.dirname(__file__), "utils", "plantuml.jar") +plantuml = f"java -Djava.awt.headless=true -jar {local_plantuml_path}" # If we are running on windows, we need to manipulate the path, # otherwise plantuml will have problems. From fc20d21fa0c259c3f202c01ebeaf2be25ddccad3 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 2 Apr 2025 09:17:20 +0200 Subject: [PATCH 102/159] =?UTF-8?q?=F0=9F=94=A7=20Remove=20baumpfleger=20(?= =?UTF-8?q?useblocks/sphinx-test-reports#112)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sphinx-test-reports/.github/baumpfleger.yml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 packages/sphinx-test-reports/.github/baumpfleger.yml diff --git a/packages/sphinx-test-reports/.github/baumpfleger.yml b/packages/sphinx-test-reports/.github/baumpfleger.yml deleted file mode 100644 index befe01425..000000000 --- a/packages/sphinx-test-reports/.github/baumpfleger.yml +++ /dev/null @@ -1,13 +0,0 @@ -# Configuration for probot-baumfleger - -# Enabled? (optional, default false) -enabled: true - -# glob or regex patterns that specify branches to ignore (optional) -#ignore_branches: -# - sandfox/patch-* -# - /^sandfox-[0-9]/i - -# list of labels that if found on a pull Request cause it to be ignored (optional) -ignore_labels: - - keep-branch From af557d5112a33d95247f4eef9a131d4d875c93ff Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 2 Apr 2025 09:25:02 +0200 Subject: [PATCH 103/159] =?UTF-8?q?=F0=9F=94=A7=20Clean=20makefile=20(useb?= =?UTF-8?q?locks/sphinx-test-reports#111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix grep command * Merge lint and format, they do the same thing --- packages/sphinx-test-reports/Makefile | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile index 28d3bfee4..74546a115 100644 --- a/packages/sphinx-test-reports/Makefile +++ b/packages/sphinx-test-reports/Makefile @@ -1,11 +1,9 @@ -SRC_FILES = sphinxcontrib/ tests/ noxfile.py - .PHONY: list list: - @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' + @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | grep -E -v -e '^[^[:alnum:]]' -e '^$@$$' -.PHONY: lint -lint: +.PHONY: lint format +lint format: pre-commit run --all-files .PHONY: test @@ -23,8 +21,3 @@ docs-html: .PHONY: docs-linkcheck docs-linkcheck: make --directory docs/ linkcheck - -.PHONY: format -format: - black ${SRC_FILES} - # isort ${SRC_FILES} From 32a67c4dcc4c75b77525202c27c26abe7de0a616 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 2 Apr 2025 09:32:23 +0200 Subject: [PATCH 104/159] =?UTF-8?q?=F0=9F=94=A7=20Use=20flit/uv=20(usebloc?= =?UTF-8?q?ks/sphinx-test-reports#110)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Restricted to Python 3.9 - Cleaned noxfile - Added CONTRIBUTING.md --- packages/sphinx-test-reports/.gitignore | 2 + .../sphinx-test-reports/.readthedocs.yaml | 3 +- packages/sphinx-test-reports/CONTRIBUTING.md | 46 +++++++++++++++++++ packages/sphinx-test-reports/MANIFEST.in | 2 - .../sphinx-test-reports/doc-requirements.txt | 7 --- packages/sphinx-test-reports/noxfile.py | 41 +++-------------- packages/sphinx-test-reports/pyproject.toml | 39 +++++++++++----- .../sphinxcontrib/__init__.py | 1 - .../sphinx-test-reports/test-requirements.txt | 4 -- 9 files changed, 84 insertions(+), 61 deletions(-) create mode 100644 packages/sphinx-test-reports/CONTRIBUTING.md delete mode 100644 packages/sphinx-test-reports/MANIFEST.in delete mode 100644 packages/sphinx-test-reports/doc-requirements.txt delete mode 100644 packages/sphinx-test-reports/sphinxcontrib/__init__.py delete mode 100644 packages/sphinx-test-reports/test-requirements.txt diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index 26d96f0cf..8184c9280 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -19,3 +19,5 @@ _build .venv .vscode .VSCodeCounter + +uv.lock diff --git a/packages/sphinx-test-reports/.readthedocs.yaml b/packages/sphinx-test-reports/.readthedocs.yaml index 2453b7e7b..d378af319 100644 --- a/packages/sphinx-test-reports/.readthedocs.yaml +++ b/packages/sphinx-test-reports/.readthedocs.yaml @@ -25,6 +25,7 @@ sphinx: python: install: - - requirements: doc-requirements.txt - method: pip path: . + extra_requirements: + - docs diff --git a/packages/sphinx-test-reports/CONTRIBUTING.md b/packages/sphinx-test-reports/CONTRIBUTING.md new file mode 100644 index 000000000..849038877 --- /dev/null +++ b/packages/sphinx-test-reports/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# Contributing + +## Formatting and linting + +The easiest way to run the formatting and linting is to use the [pre-commit] tool. +Install it, then run: + +```bash +pre-commit run --all +``` + +This will run formatting and linting on all files in the repository (principally using [ruff]). + +To install as a pre-commit hook: + +```bash +pre-commit install +``` + +## Managing the Python code + +The pyproject.toml follows the [PEP621] standard. +To install all dependencies for local development you may use [uv]: + +```bash +uv sync --all-groups --all-extras +``` + +A Makefile exits to execute common tasks: +```bash +make docs-html +make docs-linkcheck +make format +make lint +make test +make test-matrix +``` + +The test matrix is executed using [nox] and runs all tests in all supported Python versions. +The Python versions must be pre-installed on your system. + +[pre-commit]: https://pre-commit.com/ +[ruff]: https://docs.astral.sh/ruff/ +[uv]: https://docs.astral.sh/uv/ +[nox]: https://nox.thea.codes +[PEP621]: https://peps.python.org/pep-0621/ diff --git a/packages/sphinx-test-reports/MANIFEST.in b/packages/sphinx-test-reports/MANIFEST.in deleted file mode 100644 index e26bc75df..000000000 --- a/packages/sphinx-test-reports/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -include sphinxcontrib/test_reports/css/common.css -include sphinxcontrib/test_reports/directives/test_report_template.txt diff --git a/packages/sphinx-test-reports/doc-requirements.txt b/packages/sphinx-test-reports/doc-requirements.txt deleted file mode 100644 index 09866ea11..000000000 --- a/packages/sphinx-test-reports/doc-requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -sphinx==7 -sphinx-needs>=4 -sphinx-test-reports>=0.3.3 -sphinxcontrib-plantuml -sphinx-design -sphinx-immaterial -pillow diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 42b5ec923..324f185cb 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -4,28 +4,12 @@ PYTHON_VERSIONS = ["3.10", "3.12"] SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] SPHINX_NEEDS_VERSIONS = ["2.1", "4.2"] -TEST_DEPENDENCIES = [ - "pytest", - "pytest-xdist", -] -LINT_DEPENDENCIES = [ - "flake8", - "pep8-naming", - "flake8-isort", - "flake8-black", -] - - -def is_supported(python: str, sphinx: str) -> bool: - return not (python == "3.6" and float(sphinx) > 3.0) # fmt: skip def run_tests(session, sphinx, sphinx_needs): - session.install(".") - session.install(*TEST_DEPENDENCIES) + session.install(".[test]") session.run("pip", "install", f"sphinx=={sphinx}", silent=True) session.run("pip", "install", f"sphinx_needs=={sphinx_needs}", silent=True) - session.run("pip", "install", "-r", "doc-requirements.txt", silent=True) session.run("make", "test", external=True) @@ -33,24 +17,11 @@ def run_tests(session, sphinx, sphinx_needs): @nox.parametrize("sphinx_needs", SPHINX_NEEDS_VERSIONS) @nox.parametrize("sphinx", SPHINX_VERSIONS) def tests(session, sphinx_needs, sphinx): - if is_supported(session.python, sphinx): - run_tests(session, sphinx, sphinx_needs) - else: - session.skip("unsupported combination") - + run_tests(session, sphinx, sphinx_needs) -@session(python="3.9") -def lint(session): - session.install(*LINT_DEPENDENCIES) - session.run("make", "lint", external=True) - -@session(python="3.9") +@session(python="3.12") def linkcheck(session): - session.install(".") - # LinkCheck cn handle rate limits since Sphinx 3.4, which is needed as - # our doc has to many links to GitHub. - session.run("pip", "install", "sphinx==3.5.4", silent=True) - - session.run("pip", "install", "-r", "doc-requirements.txt", silent=True) - session.run("make", "docs-linkcheck", external=True) + session.install(".[docs]") + with session.chdir("docs"): + session.run("make", "linkcheck", external=True) diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 45a1d1a78..63b3056f7 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -1,16 +1,14 @@ [build-system] -requires = ["setuptools>=42", "wheel"] -build-backend = "setuptools.build_meta" +requires = ["flit_core >=3.4,<4"] +build-backend = "flit_core.buildapi" [project] name = "sphinx-test-reports" version = "1.2.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" -requires-python = ">=3.6" license = { text = "MIT" } authors = [{ name = "team useblocks", email = "info@useblocks.com" }] -dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1"] classifiers = [ "Framework :: Sphinx", "Framework :: Sphinx :: Extension", @@ -27,20 +25,39 @@ classifiers = [ "Topic :: Documentation", ] keywords = ["sphinx", "documentation", "test-reports"] +requires-python = ">=3.9" +dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1"] -[project.urls] +[project.optional-dependencies] +test = [ + "nox>=2025.2.9", + "pytest-xdist", + "pytest>=7.0", + "sphinx_design", + "sphinxcontrib-plantuml", +] +docs = [ + "pillow", + "sphinx-design", + "sphinx-immaterial", + "sphinx-needs>=4", + "sphinx-test-reports>=0.3.3", + "sphinx==7", + "sphinxcontrib-plantuml", +] +[dependency-groups] +dev = ["pre-commit~=3.0", "nox>=2025.2.9"] + +[tool.flit.module] +name = "sphinxcontrib.test_reports" + +[project.urls] Homepage = "https://github.com/useblocks/sphinx-test-reports" Repository = "https://github.com/useblocks/sphinx-test-reports.git" Documentation = "https://sphinx-test-reports.readthedocs.io/en/latest/" download-url = "http://pypi.python.org/pypi/sphinx-test-reports" -[tool.setuptools.packages.find] -include = ["*"] - -[project.optional-dependencies] -development = ["wheel"] - [tool.ruff.lint] # TODO enable and fix commented rules extend-select = [ diff --git a/packages/sphinx-test-reports/sphinxcontrib/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/__init__.py deleted file mode 100644 index 5284146eb..000000000 --- a/packages/sphinx-test-reports/sphinxcontrib/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__import__("pkg_resources").declare_namespace(__name__) diff --git a/packages/sphinx-test-reports/test-requirements.txt b/packages/sphinx-test-reports/test-requirements.txt deleted file mode 100644 index d7976faf1..000000000 --- a/packages/sphinx-test-reports/test-requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -pytest>=7.0 -pytest-xdist -nox -pre-commit From f7135f1d40f91387c41348126dba46cef93d0c9c Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 2 Apr 2025 09:38:47 +0200 Subject: [PATCH 105/159] =?UTF-8?q?=F0=9F=94=A7=20Removed=20py38=20from=20?= =?UTF-8?q?classifiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/sphinx-test-reports/pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 63b3056f7..3eb275ad2 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -17,7 +17,6 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", From d0f8da8a792d9d485b7c77b7a3d01f98d1632435 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Mon, 16 Jun 2025 16:12:29 +0200 Subject: [PATCH 106/159] =?UTF-8?q?=F0=9F=94=A7=20Activate=20mypy=20(usebl?= =?UTF-8?q?ocks/sphinx-test-reports#113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Excluded all failed files to be fixed in upcoming PRs. --- .../.github/workflows/ci.yaml | 24 +++++++- packages/sphinx-test-reports/pyproject.toml | 56 ++++++++++++++++--- .../test_reports/test_reports.py | 6 +- 3 files changed, 73 insertions(+), 13 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index a4b265427..58f773d13 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -22,8 +22,8 @@ jobs: - name: Run Tests run: nox --non-interactive --session "tests-${{ matrix.python-version }}(sphinx='${{ matrix.sphinx-version }}', sphinx_needs='${{ matrix.sphinx_needs-version }}')" -- --full-trace - lint: - name: Lint + pre-commit: + name: pre-commit runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -36,6 +36,23 @@ jobs: python -m pip install poetry nox nox-poetry - uses: pre-commit/action@v3.0.0 + mypy: + name: mypy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: uv sync + run: | + uv sync --group dev + + - name: Run mypy + run: | + uv run mypy + linkcheck: name: Docs-Linkcheck runs-on: ubuntu-latest @@ -59,7 +76,8 @@ jobs: needs: - tests - - lint + - pre-commit + - mypy - linkcheck runs-on: ubuntu-latest diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 3eb275ad2..9dbb431e4 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -46,7 +46,7 @@ docs = [ ] [dependency-groups] -dev = ["pre-commit~=3.0", "nox>=2025.2.9"] +dev = ["pre-commit~=3.0", "nox>=2025.2.9", "mypy>=1.16.0"] [tool.flit.module] name = "sphinxcontrib.test_reports" @@ -80,14 +80,54 @@ extend-select = [ ] [tool.mypy] -files = "sphinxcontrib" +packages = ["sphinxcontrib.test_reports"] strict = true show_error_codes = true -implicit_reexport = false -namespace_packages = true +# TODO: reactivate below files and fix issues in future PRs +exclude = [ + "^sphinxcontrib/test_reports/__init__\\.py$", + "^sphinxcontrib/test_reports/config\\.py$", + "^sphinxcontrib/test_reports/directives/__init__\\.py$", + "^sphinxcontrib/test_reports/directives/test_case\\.py$", + "^sphinxcontrib/test_reports/directives/test_common\\.py$", + "^sphinxcontrib/test_reports/directives/test_env\\.py$", + "^sphinxcontrib/test_reports/directives/test_file\\.py$", + "^sphinxcontrib/test_reports/directives/test_report\\.py$", + "^sphinxcontrib/test_reports/directives/test_results\\.py$", + "^sphinxcontrib/test_reports/directives/test_suite\\.py$", + "^sphinxcontrib/test_reports/environment\\.py$", + "^sphinxcontrib/test_reports/exceptions\\.py$", + "^sphinxcontrib/test_reports/functions", + "^sphinxcontrib/test_reports/jsonparser\\.py$", + "^sphinxcontrib/test_reports/junitparser\\.py$", + "^sphinxcontrib/test_reports/test_reports\\.py$", +] +# Disallow dynamic typing +disallow_any_unimported = true +disallow_any_expr = true +disallow_any_decorated = true disallow_any_generics = true +disallow_any_explicit = true disallow_subclassing_any = true -# disallow_any_unimported = true -# disallow_any_explicit = true -# disallow_any_expr = true -# disallow_any_decorated = true + +# Disallow untyped definitions and calls +disallow_untyped_calls = true +disallow_untyped_defs = true +# disallow_incomplete_defs = true +# check_untyped_defs = true +# disallow_untyped_decorators = true + +# # None and optional handling +# no_implicit_optional = true + +# # Configuring warnings +# warn_unused_ignores = true +# warn_no_return = true +# warn_return_any = true +# warn_redundant_casts = true + +# # Misc things +# strict_equality = true + +# # Config file +# warn_unused_configs = true diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 1cdb47e4f..dd505fb22 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -4,6 +4,8 @@ import sphinx from docutils.parsers.rst import directives from packaging.version import Version +from sphinx.application import Sphinx +from sphinx.config import Config # from docutils import nodes from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type @@ -37,7 +39,7 @@ VERSION = "1.1.1" -def setup(app): +def setup(app: Sphinx): """ Setup following directives: * test_results @@ -167,7 +169,7 @@ def tr_preparation(app, *args): app.add_directive(app.config.tr_case[0], TestCaseDirective) -def sphinx_needs_update(app, *args): +def sphinx_needs_update(app: Sphinx, config: Config) -> None: """ sphinx-needs configuration """ From 7d216624bc06eaaf2159582e13133c06bd59d975 Mon Sep 17 00:00:00 2001 From: korbi-web-215 <149482188+korbi-web-215@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:56:18 +0200 Subject: [PATCH 107/159] =?UTF-8?q?=F0=9F=94=A7=20Update=20configuration?= =?UTF-8?q?=20and=20tests=20for=20UTF-8=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sphinxcontrib/test_reports/config.py | 6 ++++++ .../sphinxcontrib/test_reports/environment.py | 20 ++++++++++--------- .../custom_tr_utf8_template/index.rst | 2 ++ .../tests/test_custom_template.py | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index eb2068f67..5f2e30f1f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -14,3 +14,9 @@ "message", "system-out", ] + +try: + from sphinx_needs.api.configuration import needs_duration_option, needs_completion_option +except ImportError: + needs_duration_option = 'duration' + needs_completion_option = 'completion' \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 335b18b72..327e8b178 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -35,11 +35,10 @@ def safe_add_file(filename, app): ): app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": - if ( - hasattr(app.builder, "css_files") - and static_data_file not in app.builder.css_files - ): - app.add_css_file(data_file) + if hasattr(app.builder, "css_files"): + css_files = [css.filename for css in app.builder.css_files] + if static_data_file not in css_files: + app.add_css_file(data_file) else: raise NotImplementedError( "File type {} not support by save_add_file".format(data_file.split(".")[-1]) @@ -65,10 +64,13 @@ def safe_remove_file(filename, app): and static_data_file in app.builder.script_files ): app.builder.script_files.remove(static_data_file) - elif data_file.split(".")[-1] == "css" and ( - hasattr(app.builder, "css_files") and static_data_file in app.builder.css_files - ): - app.builder.css_files.remove(static_data_file) + elif data_file.split(".")[-1] == "css" and hasattr(app.builder, "css_files"): + css_files = [css.filename for css in app.builder.css_files] + if static_data_file in css_files: + to_remove = [css for css in app.builder.css_files if css.filename == static_data_file] + for css in to_remove: + app.builder.css_files.remove(css) + # Base implementation from sphinxcontrib-images diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst index 5b2895984..0cdce24b7 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst @@ -1,6 +1,8 @@ Basic Document ============== +Änderungen und Testfälle – UTF-8 Test + .. test-report:: My Report :id: REPORT :file: ../utils/pytest_data.xml diff --git a/packages/sphinx-test-reports/tests/test_custom_template.py b/packages/sphinx-test-reports/tests/test_custom_template.py index dd1a273a6..0e29f187f 100644 --- a/packages/sphinx-test-reports/tests/test_custom_template.py +++ b/packages/sphinx-test-reports/tests/test_custom_template.py @@ -28,7 +28,7 @@ def test_custom_template(test_app): def test_custom_utf8_template(test_app): app = test_app app.build() - html = Path(app.outdir / "index.html").read_text() + html = Path(app.outdir / "index.html").read_text(encoding="utf-8") assert "Änderungen" in html assert "Testfälle" in html From 6cf3afd89b206b06ff873e040baca357452fcb98 Mon Sep 17 00:00:00 2001 From: korbi-web-215 <149482188+korbi-web-215@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:32:57 +0200 Subject: [PATCH 108/159] fix Codelinks error --- .../sphinx-test-reports/sphinxcontrib/test_reports/config.py | 4 +++- .../sphinxcontrib/test_reports/test_reports.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index 5f2e30f1f..e32f7b712 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -19,4 +19,6 @@ from sphinx_needs.api.configuration import needs_duration_option, needs_completion_option except ImportError: needs_duration_option = 'duration' - needs_completion_option = 'completion' \ No newline at end of file + needs_completion_option = 'completion' + +testreports_file_option = "file" \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index dd505fb22..11da238f0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -178,7 +178,9 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # For details read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option - add_extra_option(app, "file") + file_option = getattr(app.config, "testreports_file_option", "file") + add_extra_option(app, file_option) + add_extra_option(app, "suite") add_extra_option(app, "case") add_extra_option(app, "case_name") From 0f426ad35401bd1bd759aa80d6aac87122c0744c Mon Sep 17 00:00:00 2001 From: korbi-web-215 <149482188+korbi-web-215@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:55:45 +0200 Subject: [PATCH 109/159] fix codelinks --- .../sphinxcontrib/test_reports/config.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index e32f7b712..f41327085 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -21,4 +21,4 @@ needs_duration_option = 'duration' needs_completion_option = 'completion' -testreports_file_option = "file" \ No newline at end of file +testreports_file_option = "testreport_file" \ No newline at end of file diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 11da238f0..61a433ada 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -6,6 +6,7 @@ from packaging.version import Version from sphinx.application import Sphinx from sphinx.config import Config +from sphinxcontrib.test_reports import config # from docutils import nodes from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type @@ -178,9 +179,8 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # For details read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option - file_option = getattr(app.config, "testreports_file_option", "file") - add_extra_option(app, file_option) - + add_extra_option(app, getattr(config, "testreports_file_option", "file")) + add_extra_option(app, "suite") add_extra_option(app, "case") add_extra_option(app, "case_name") From 0ba5857ef4081c24e5703ab456e0f4a9a5a3c5c9 Mon Sep 17 00:00:00 2001 From: korbi-web-215 <149482188+korbi-web-215@users.noreply.github.com> Date: Tue, 23 Sep 2025 15:20:51 +0200 Subject: [PATCH 110/159] Fix formatting issues from pre-commit --- .../sphinxcontrib/test_reports/config.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index f41327085..eb2068f67 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -14,11 +14,3 @@ "message", "system-out", ] - -try: - from sphinx_needs.api.configuration import needs_duration_option, needs_completion_option -except ImportError: - needs_duration_option = 'duration' - needs_completion_option = 'completion' - -testreports_file_option = "testreport_file" \ No newline at end of file From c9fb0da63d582dc927af5bd6d6c3665dddec9d5e Mon Sep 17 00:00:00 2001 From: korbi-web-215 <149482188+korbi-web-215@users.noreply.github.com> Date: Tue, 23 Sep 2025 15:41:56 +0200 Subject: [PATCH 111/159] fix last errors --- packages/sphinx-test-reports/pyproject.toml | 1 - .../sphinxcontrib/test_reports/environment.py | 5 +++-- .../sphinxcontrib/test_reports/test_reports.py | 5 +++-- .../tests/doc_test/custom_tr_utf8_template/index.rst | 2 -- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 9dbb431e4..3bfcb7e52 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -40,7 +40,6 @@ docs = [ "sphinx-design", "sphinx-immaterial", "sphinx-needs>=4", - "sphinx-test-reports>=0.3.3", "sphinx==7", "sphinxcontrib-plantuml", ] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 327e8b178..eaa86aa65 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -67,12 +67,13 @@ def safe_remove_file(filename, app): elif data_file.split(".")[-1] == "css" and hasattr(app.builder, "css_files"): css_files = [css.filename for css in app.builder.css_files] if static_data_file in css_files: - to_remove = [css for css in app.builder.css_files if css.filename == static_data_file] + to_remove = [ + css for css in app.builder.css_files if css.filename == static_data_file + ] for css in to_remove: app.builder.css_files.remove(css) - # Base implementation from sphinxcontrib-images # https://github.com/spinus/sphinxcontrib-images/blob/master/sphinxcontrib/images.py#L203 def install_styles_static_files(app, env): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 61a433ada..9bad8ab83 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -6,7 +6,6 @@ from packaging.version import Version from sphinx.application import Sphinx from sphinx.config import Config -from sphinxcontrib.test_reports import config # from docutils import nodes from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type @@ -48,6 +47,8 @@ def setup(app: Sphinx): * test_report """ + app.add_config_value("tr_file_option", "file", "html") + log = logging.getLogger(__name__) log.info("Setting up sphinx-test-reports extension") @@ -179,7 +180,7 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # For details read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option - add_extra_option(app, getattr(config, "testreports_file_option", "file")) + add_extra_option(app, getattr(config, "tr_file_option", "file")) add_extra_option(app, "suite") add_extra_option(app, "case") diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst index 0cdce24b7..5b2895984 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/index.rst @@ -1,8 +1,6 @@ Basic Document ============== -Änderungen und Testfälle – UTF-8 Test - .. test-report:: My Report :id: REPORT :file: ../utils/pytest_data.xml From 098432ab7cef39e6b4c97062e78ed338668b82a7 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Thu, 25 Sep 2025 15:56:56 +0200 Subject: [PATCH 112/159] Add latest SN version to CI --- packages/sphinx-test-reports/.github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 58f773d13..4995643b4 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: os: [ubuntu-latest] python-version: ["3.10", "3.12"] # No "3.10", as nose seem to have problems with it sphinx-version: ["5.0", "8.1.3"] - sphinx_needs-version: ["2.1", "4.2"] + sphinx_needs-version: ["2.1", "4.2", "5.1"] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} From 29f9d061f2bb961aace38599dcebe16630debf71 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Sun, 28 Sep 2025 03:52:33 +0200 Subject: [PATCH 113/159] Add latest sphinx-needs version --- packages/sphinx-test-reports/noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 324f185cb..87765fec8 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -3,7 +3,7 @@ PYTHON_VERSIONS = ["3.10", "3.12"] SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["2.1", "4.2"] +SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1"] def run_tests(session, sphinx, sphinx_needs): From 747d03c248fe8377208125a0afeb6d41617d0182 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Sun, 28 Sep 2025 15:39:14 +0200 Subject: [PATCH 114/159] Preparation for 1.3.0 release --- .../sphinx-test-reports/docs/changelog.rst | 32 ++++++++++++++++++- packages/sphinx-test-reports/docs/conf.py | 4 +-- packages/sphinx-test-reports/pyproject.toml | 2 +- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 732f46dda..6013d73d6 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -3,11 +3,41 @@ Changelog ========= -1.2.1 +1.3.1 ----- :Released: under development +1.3.0 +----- +:Released: 28.09.2025 + +* Improvement: Support for Sphinx-Needs 5.1. + `#119 `_ +* Bugfix: Fix plantuml on RTD. + `#115 `_ +* Maintenance: Removed py38 from classifiers. + `#116 `_ +* Maintenance: Activate mypy. + `#113 `_ +* Maintenance: Remove baumpfleger. + `#112 `_ +* Maintenance: Clean makefile. + `#111 `_ +* Maintenance: Use flit. + `#110 `_ +* Maintenance: Added all_good job. + `#109 `_ +* Maintenance: Add standard hooks. + `#106 `_ +* Maintenance: Add yamlfmt. + `#105 `_ +* Maintenance: Introduce ruff. + `#104 `_ +* Maintenance: Add taplo pre-commit. + `#103 `_ + + 1.2.0 ----- :Released: 27.03.2025 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 6ec7480ad..13aa25cd6 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -29,9 +29,9 @@ author = "team useblocks" # The short X.Y version -version = "1.2" +version = "1.3" # The full version, including alpha/beta/rc tags -release = "1.2.0" +release = "1.3.0" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 3bfcb7e52..5f987f5e8 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "sphinx-test-reports" -version = "1.2.0" +version = "1.3.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" license = { text = "MIT" } From 3d85464e4ca74e047c8b35f63ec7b0ac355dd983 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Sun, 28 Sep 2025 16:45:50 +0200 Subject: [PATCH 115/159] Update VERSION --- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 9bad8ab83..51475256b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -36,7 +36,7 @@ # fmt: on -VERSION = "1.1.1" +VERSION = "1.3.0" def setup(app: Sphinx): From 206817f0175ad392d78f9e0d53a07a9bbdb51f69 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Sun, 28 Sep 2025 18:37:44 +0200 Subject: [PATCH 116/159] Add to changelog --- packages/sphinx-test-reports/docs/changelog.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 6013d73d6..2436d74c8 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -3,15 +3,17 @@ Changelog ========= -1.3.1 ------ +Unreleased +---------- :Released: under development - 1.3.0 ----- :Released: 28.09.2025 +This release makes Sphinx-Test-Reports compatible with Sphinx-Needs 5.1 and +introduces several maintenance improvements. + * Improvement: Support for Sphinx-Needs 5.1. `#119 `_ * Bugfix: Fix plantuml on RTD. From 1bf3bfb925505e79a69729bb54f07ff853470f9c Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Sun, 28 Sep 2025 19:08:44 +0200 Subject: [PATCH 117/159] =?UTF-8?q?=F0=9F=94=A7=20Add=20release=20CI=20wor?= =?UTF-8?q?kflow=20(useblocks/sphinx-test-reports#121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.github/workflows/release.yaml | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 packages/sphinx-test-reports/.github/workflows/release.yaml diff --git a/packages/sphinx-test-reports/.github/workflows/release.yaml b/packages/sphinx-test-reports/.github/workflows/release.yaml new file mode 100644 index 000000000..0ad678bfc --- /dev/null +++ b/packages/sphinx-test-reports/.github/workflows/release.yaml @@ -0,0 +1,50 @@ +name: Release +on: + push: + tags: + - '[0-9].[0-9]+.[0-9]+' + +permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + contents: read + +jobs: + build: + name: Build distribution 📦 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install pypa/build + run: >- + python3 -m pip install build --user + - name: Build a binary wheel and a source tarball + run: python3 -m build + - name: Store the distribution packages + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions + path: dist/ + + publish-to-pypi: + name: >- + Publish Python 🐍 distribution 📦 to PyPI + needs: + - build + runs-on: ubuntu-latest + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 From 9e871dd26126b6578a6a77c42ddb9603302aa62c Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Thu, 2 Oct 2025 14:27:34 +0200 Subject: [PATCH 118/159] =?UTF-8?q?=F0=9F=91=8C=20Handle=20SN=20>=3D=206?= =?UTF-8?q?=20schema=20validation=20(useblocks/sphinx-test-reports#122)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Handle SN >= 6 schema validation * Add SN 6 to test-matrix * Update noxfile.py Co-authored-by: Marco Heinemann --- packages/sphinx-test-reports/README.rst | 2 +- packages/sphinx-test-reports/noxfile.py | 2 +- .../test_reports/directives/test_case.py | 18 ++++++++- .../test_reports/test_reports.py | 39 +++++++++++++------ 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/packages/sphinx-test-reports/README.rst b/packages/sphinx-test-reports/README.rst index cb800fae4..b5c8ed1d3 100644 --- a/packages/sphinx-test-reports/README.rst +++ b/packages/sphinx-test-reports/README.rst @@ -1,7 +1,7 @@ Sphinx-Test-Reports =================== -.. image:: docs/_static/sphinx-test-reports-logo.png +.. image:: https://raw.githubusercontent.com/useblocks/sphinx-test-reports/master/docs/_static/sphinx-test-reports-logo.png Sphinx-Test-Reports shows test results of your unit tests inside your sphinx documentation. diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 87765fec8..c9b62af7b 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -3,7 +3,7 @@ PYTHON_VERSIONS = ["3.10", "3.12"] SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1"] +SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.1"] def run_tests(session, sphinx, sphinx_needs): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 39ef4cd7b..dd81fc054 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -129,6 +129,22 @@ def run(self, nested=False, suite_count=-1, case_count=-1): """.format("\n ".join([x.lstrip() for x in case["system-out"].split("\n")])) time = case["time"] + # Ensure time is a string, SN 6.0.0 requires to be in one specific type + # and it is set to string for backwards compatibility + if isinstance(time, (int, float)): + # Keep as numeric seconds (decimal format) + time = float(time) if time >= 0 else 0.0 + elif time is None: + time = 0.0 + else: + # Try to parse string to float, fallback to 0.0 + try: + time = float(time) + except (ValueError, TypeError): + time = 0.0 + time_str = str(time) + + # If time is already a string or None, keep it as is style = "tr_" + case["result"] import re @@ -180,7 +196,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): case_parameter=case_parameter, classname=class_name, result=result, - time=time, + time=time_str, style=style, **self.extra_options, ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 51475256b..a8b3d7a9c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -2,6 +2,7 @@ import os import sphinx +import sphinx_needs from docutils.parsers.rst import directives from packaging.version import Version from sphinx.application import Sphinx @@ -176,6 +177,14 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: sphinx-needs configuration """ + # Check sphinx-needs version to determine if schema is needed + try: + needs_version = Version(sphinx_needs.__version__) + use_schema = needs_version >= Version("6.0.0") + except ImportError: + # If we can't determine version, assume older version + use_schema = False + # Extra options # For details read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option @@ -187,17 +196,25 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: add_extra_option(app, "case_name") add_extra_option(app, "case_parameter") add_extra_option(app, "classname") - add_extra_option(app, "time") - - add_extra_option(app, "suites") - add_extra_option(app, "cases") - - add_extra_option(app, "passed") - add_extra_option(app, "skipped") - add_extra_option(app, "failed") - add_extra_option(app, "errors") - add_extra_option(app, "result") # used by test cases only - + # Add schema parameter conditionally based on sphinx-needs version + if use_schema: + add_extra_option(app, "time", schema={"type": "string"}) + add_extra_option(app, "suites", schema={"type": "integer"}) + add_extra_option(app, "cases", schema={"type": "integer"}) + add_extra_option(app, "passed", schema={"type": "integer"}) + add_extra_option(app, "skipped", schema={"type": "integer"}) + add_extra_option(app, "failed", schema={"type": "integer"}) + add_extra_option(app, "errors", schema={"type": "integer"}) + add_extra_option(app, "result", schema={"type": "string"}) + else: + add_extra_option(app, "time") + add_extra_option(app, "suites") + add_extra_option(app, "cases") + add_extra_option(app, "passed") + add_extra_option(app, "skipped") + add_extra_option(app, "failed") + add_extra_option(app, "errors") + add_extra_option(app, "result") # Extra dynamic functions # For details about usage read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function From 1502f8dbc9186e57f0fbba53e6a516822dc74a94 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Thu, 2 Oct 2025 14:51:05 +0200 Subject: [PATCH 119/159] =?UTF-8?q?=F0=9F=9A=80=20Release=20v1.3.1=20(useb?= =?UTF-8?q?locks/sphinx-test-reports#123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Prepare v1.3.1 release Co-authored-by: Marco Heinemann --- packages/sphinx-test-reports/docs/changelog.rst | 10 ++++++++++ packages/sphinx-test-reports/docs/conf.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 2436d74c8..257b166b6 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,16 @@ Unreleased ---------- :Released: under development +.. _`release:1.3.1`: + +1.3.1 +----- +:Released: 02.10.2025 +:Full Changelog: `v1.3.0...v1.3.1 `__ + +* Support Sphinx-Needs 6 schema validation + `#122 `_ + 1.3.0 ----- :Released: 28.09.2025 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 13aa25cd6..f8ce4eda8 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -31,7 +31,7 @@ # The short X.Y version version = "1.3" # The full version, including alpha/beta/rc tags -release = "1.3.0" +release = "1.3.1" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index a8b3d7a9c..19b368d53 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -37,7 +37,7 @@ # fmt: on -VERSION = "1.3.0" +VERSION = "1.3.1" def setup(app: Sphinx): From 7e669c0711aef38702fcb3fe20d86cdba6544fe7 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Thu, 2 Oct 2025 15:22:13 +0200 Subject: [PATCH 120/159] =?UTF-8?q?=F0=9F=90=9B=20=20Fix=20version=20incre?= =?UTF-8?q?ase=20(useblocks/sphinx-test-reports#124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/sphinx-test-reports/docs/changelog.rst | 2 +- packages/sphinx-test-reports/pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 257b166b6..e4de186ec 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -12,7 +12,7 @@ Unreleased 1.3.1 ----- :Released: 02.10.2025 -:Full Changelog: `v1.3.0...v1.3.1 `__ +:Full Changelog: `v1.3.0...v1.3.1 `__ * Support Sphinx-Needs 6 schema validation `#122 `_ diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 5f987f5e8..814a70561 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "sphinx-test-reports" -version = "1.3.0" +version = "1.3.1" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" license = { text = "MIT" } From a67ffbe5eadb59ea1e84608803109c6a2845b071 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Fri, 7 Nov 2025 11:15:05 +0100 Subject: [PATCH 121/159] =?UTF-8?q?=F0=9F=94=A7=20=20Add=20coverage=20work?= =?UTF-8?q?flow=20(useblocks/sphinx-test-reports#125)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add coverage workflow --- .../.github/workflows/coverage.yaml | 25 +++++++++++++++++++ packages/sphinx-test-reports/.gitignore | 3 +++ packages/sphinx-test-reports/Makefile | 4 +++ packages/sphinx-test-reports/pyproject.toml | 1 + 4 files changed, 33 insertions(+) create mode 100644 packages/sphinx-test-reports/.github/workflows/coverage.yaml diff --git a/packages/sphinx-test-reports/.github/workflows/coverage.yaml b/packages/sphinx-test-reports/.github/workflows/coverage.yaml new file mode 100644 index 000000000..eb6a11162 --- /dev/null +++ b/packages/sphinx-test-reports/.github/workflows/coverage.yaml @@ -0,0 +1,25 @@ +name: Run tests and upload coverage + +on: push + +jobs: + test: + name: Run tests and collect coverage + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: uv sync + run: | + uv sync --all-groups --all-extras + + - name: Run tests + run: uv run make coverage + + - name: Upload results to Codecov + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore index 8184c9280..574ff48a7 100644 --- a/packages/sphinx-test-reports/.gitignore +++ b/packages/sphinx-test-reports/.gitignore @@ -21,3 +21,6 @@ _build .VSCodeCounter uv.lock + +.coverage +coverage.xml diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile index 74546a115..f1ba90cd3 100644 --- a/packages/sphinx-test-reports/Makefile +++ b/packages/sphinx-test-reports/Makefile @@ -14,6 +14,10 @@ test: test-matrix: nox +.PHONY: coverage +coverage: + pytest --cov --cov-branch --cov-report=xml + .PHONY: docs-html docs-html: make --directory docs/ clean && make --directory docs/ html diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 814a70561..bf0cab8fb 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -32,6 +32,7 @@ test = [ "nox>=2025.2.9", "pytest-xdist", "pytest>=7.0", + "pytest-cov", "sphinx_design", "sphinxcontrib-plantuml", ] From 5bc966a7cf3f25c692d204b7783faafb7df0d214 Mon Sep 17 00:00:00 2001 From: Duodu Randy Date: Thu, 13 Nov 2025 08:15:52 +0000 Subject: [PATCH 122/159] =?UTF-8?q?=F0=9F=94=A7=20Refactor=20safe=5Fadd=5F?= =?UTF-8?q?file=20and=20safe=5Fremove=5Ffile=20to=20use=20app.registry=20f?= =?UTF-8?q?or=20managing=20js=20and=20css=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sphinxcontrib/test_reports/environment.py | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index eaa86aa65..772498b52 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -2,7 +2,8 @@ import sphinx from packaging.version import Version -from sphinx.util.console import brown +from sphinx.application import Sphinx +from sphinx.util.console import brown # type: ignore[import-not-found] from sphinx.util.osutil import copyfile, ensuredir sphinx_version = sphinx.__version__ @@ -15,7 +16,7 @@ STATICS_DIR_NAME = "_static" -def safe_add_file(filename, app): +def safe_add_file(filename: str, app: Sphinx): """ Adds files to builder resources only, if the given filename was not already registered. Needed mainly for tests to avoid multiple registration of the same file and therefore also multiple execution @@ -29,14 +30,13 @@ def safe_add_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if ( - hasattr(app.builder, "script_files") - and static_data_file not in app.builder.script_files - ): - app.add_js_file(data_file) + if hasattr(app.registry, "js_files"): + js_files = [filename for filename, _ in app.registry.js_files] + if static_data_file not in js_files: + app.add_js_file(data_file) elif data_file.split(".")[-1] == "css": - if hasattr(app.builder, "css_files"): - css_files = [css.filename for css in app.builder.css_files] + if hasattr(app.registry, "css_files"): + css_files = [filename for filename, _ in app.registry.css_files] if static_data_file not in css_files: app.add_css_file(data_file) else: @@ -45,7 +45,7 @@ def safe_add_file(filename, app): ) -def safe_remove_file(filename, app): +def safe_remove_file(filename: str, app: Sphinx): """ Removes a given resource file from builder resources. Needed mostly during test, if multiple sphinx-build are started. @@ -59,19 +59,18 @@ def safe_remove_file(filename, app): static_data_file = os.path.join("_static", data_file) if data_file.split(".")[-1] == "js": - if ( - hasattr(app.builder, "script_files") - and static_data_file in app.builder.script_files - ): - app.builder.script_files.remove(static_data_file) - elif data_file.split(".")[-1] == "css" and hasattr(app.builder, "css_files"): - css_files = [css.filename for css in app.builder.css_files] + if hasattr(app.registry, "js_files"): + js_files = dict(app.registry.js_files) + if static_data_file in js_files: + app.registry.js_files.remove( + (static_data_file, js_files[static_data_file]) + ) + elif data_file.split(".")[-1] == "css" and hasattr(app.registry, "css_files"): + css_files = dict(app.registry.css_files) if static_data_file in css_files: - to_remove = [ - css for css in app.builder.css_files if css.filename == static_data_file - ] - for css in to_remove: - app.builder.css_files.remove(css) + app.registry.css_files.remove( + (static_data_file, css_files[static_data_file]) + ) # Base implementation from sphinxcontrib-images @@ -90,10 +89,12 @@ def install_styles_static_files(app, env): status_iterator = app.status_iterator for source_file_path in status_iterator( - files_to_copy, - "Copying static files for sphinx-test-results custom style support...", - brown, - len(files_to_copy), + iterable=files_to_copy, + summary=brown( + "Copying static files for sphinx-test-results custom style support..." + ), + color="brown", + length=len(files_to_copy), ): if not os.path.isabs(source_file_path): source_file_path = os.path.join( From 52e9cfc202d23f75294e0666419a5f193ea9fb4a Mon Sep 17 00:00:00 2001 From: Randy Duodu Date: Thu, 13 Nov 2025 19:54:29 +0000 Subject: [PATCH 123/159] =?UTF-8?q?=F0=9F=9A=80=20Release=20v1.3.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/sphinx-test-reports/docs/changelog.rst | 12 ++++++++++++ packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/pyproject.toml | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index e4de186ec..ffee58927 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,18 @@ Unreleased ---------- :Released: under development +.. _`release:1.3.2`: + +1.3.2 +----- +:Released: 13.11.2025 + +This release improves Sphinx-Test-Reports compatibility with Sphinx and +fixes some Sphinx related deprecation warnings. + +* Bugfix: Fix deprecation warnings with Sphinx 8. + `#128 `_ + .. _`release:1.3.1`: 1.3.1 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index f8ce4eda8..7f0afdfff 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -31,7 +31,7 @@ # The short X.Y version version = "1.3" # The full version, including alpha/beta/rc tags -release = "1.3.1" +release = "1.3.2" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index bf0cab8fb..5bd2e1a47 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "sphinx-test-reports" -version = "1.3.1" +version = "1.3.2" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" license = { text = "MIT" } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 19b368d53..317fc2359 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -37,7 +37,7 @@ # fmt: on -VERSION = "1.3.1" +VERSION = "1.3.2" def setup(app: Sphinx): From e1b057e59b2361cff4682d12d2d1c86c34e9d429 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 4 Feb 2026 12:33:09 +0100 Subject: [PATCH 124/159] =?UTF-8?q?=F0=9F=94=A7=20Test=20against=20Sphinx-?= =?UTF-8?q?Needs=206.3.0=20(useblocks/sphinx-test-reports#130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/sphinx-test-reports/.github/workflows/ci.yaml | 2 +- packages/sphinx-test-reports/noxfile.py | 2 +- packages/sphinx-test-reports/pyproject.toml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 4995643b4..7104892e0 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: os: [ubuntu-latest] python-version: ["3.10", "3.12"] # No "3.10", as nose seem to have problems with it sphinx-version: ["5.0", "8.1.3"] - sphinx_needs-version: ["2.1", "4.2", "5.1"] + sphinx_needs-version: ["2.1", "4.2", "5.1", "6.3.0"] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index c9b62af7b..0844b3785 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -3,7 +3,7 @@ PYTHON_VERSIONS = ["3.10", "3.12"] SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.1"] +SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.0", "6.3.0"] def run_tests(session, sphinx, sphinx_needs): diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 5bd2e1a47..a0814b0d0 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ "Topic :: Documentation", ] keywords = ["sphinx", "documentation", "test-reports"] -requires-python = ">=3.9" +requires-python = ">=3.10" dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1"] [project.optional-dependencies] @@ -40,8 +40,8 @@ docs = [ "pillow", "sphinx-design", "sphinx-immaterial", - "sphinx-needs>=4", - "sphinx==7", + "sphinx-needs>=6", + "sphinx", "sphinxcontrib-plantuml", ] From 9241df58a4924f3a5253af7542b8e31cbb8311a9 Mon Sep 17 00:00:00 2001 From: Christian Polzer <119361+cpolzer@users.noreply.github.com> Date: Fri, 8 May 2026 11:59:58 +0200 Subject: [PATCH 125/159] =?UTF-8?q?=F0=9F=94=A7=20Add=20sphinx-needs=208.0?= =?UTF-8?q?.0=20compatibility=20(useblocks/sphinx-test-reports#133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 Add sphinx-needs 8.0.0 compatibility Replace deprecated add_extra_option() with add_field() for sphinx-needs >= 8.0.0, using a version-gated shim that falls back to add_extra_option() for older versions. Also adds sphinx-needs 8.0.0 to the CI and nox test matrices, fixes the warning check in tests to also inspect stderr (where Sphinx writes warnings), adds a test asserting the test-file need node renders correctly, and removes the broken taplo pre-commit hook (taplo 0.9.3 PyPI package fails to build on this platform). * 🔧 Restore taplo pre-commit hook * 🔧 Fix remaining sphinx-needs 8.0.0 warnings Add schema to string fields in _register_field (moved into use_schema branch for backwards compat with sphinx-needs < 6.0.0). Update all test fixture conf.py files to use needs_fields for sphinx-needs >= 8.0.0 instead of the deprecated needs_extra_options. * 🔧 Fix ruff linting errors in conf.py files Move sphinx_needs and Version imports to top of file (fixes E402) and drop incorrect _V alias for Version (fixes N814). * docs_build: handling update to sphinx-needs shimed * 🔧 Add proper field descriptions for sphinx-needs API * 🔧 Add explicit packaging dependency * 🔧 Enhance test to verify integer count fields are rendered * 🔧 Fix warning check logic in test * fix: Replace broken sphinx-needs.com links with ReadTheDocs --------- Co-authored-by: ~chrstian polzer <~c.polzer@hai-fai.de> Co-authored-by: Christian Polzer --- .../.github/workflows/ci.yaml | 2 +- .../sphinx-test-reports/docs/changelog.rst | 2 +- packages/sphinx-test-reports/docs/conf.py | 11 +- packages/sphinx-test-reports/docs/index.rst | 4 +- packages/sphinx-test-reports/noxfile.py | 2 +- packages/sphinx-test-reports/pyproject.toml | 3 +- .../test_reports/test_reports.py | 112 ++++++++++++------ .../tests/doc_test/basic_doc/conf.py | 8 +- .../doc_test/doc_test_ctest_file/conf.py | 12 +- .../tests/doc_test/doc_test_file/conf.py | 12 +- .../tests/doc_test/json_parser_custom/conf.py | 8 +- .../doc_test/many_testsuites_doc/conf.py | 8 +- .../tests/doc_test/needs_linking/conf.py | 12 +- .../tests/doc_test/testsuites_doc/conf.py | 8 +- .../tests/test_test_file.py | 52 +++++++- 15 files changed, 203 insertions(+), 53 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 7104892e0..aa15fc7c2 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: os: [ubuntu-latest] python-version: ["3.10", "3.12"] # No "3.10", as nose seem to have problems with it sphinx-version: ["5.0", "8.1.3"] - sphinx_needs-version: ["2.1", "4.2", "5.1", "6.3.0"] + sphinx_needs-version: ["2.1", "4.2", "5.1", "6.3.0", "8.0.0"] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index ffee58927..09bf4e00c 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -107,7 +107,7 @@ introduces several maintenance improvements. ----- :Released: 26.09.2022 -* Improvement: Supporting `Sphinx-Needs `__ ``>= 1.01`` only. +* Improvement: Supporting `Sphinx-Needs `__ ``>= 1.01`` only. * Improvement: Migrated nosetests to pytest. 0.3.7 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 7f0afdfff..c38d755a2 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -17,6 +17,9 @@ # import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.append(os.path.abspath(".")) from ub_theme.conf import html_theme_options @@ -67,7 +70,13 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates", "ub_theme/templates"] -needs_extra_options = ["more_info"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = { + "more_info": {"nullable": True}, + } +else: + needs_extra_options = ["more_info"] + tr_extra_options = ["more_info"] # Add a custom test report template. Please add a relative path from this conf.py # tr_report_template = "./custom_test_report_template.txt" diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 928a62581..daa9dfe4e 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -92,7 +92,7 @@ In the last years, we have created additional information and extensions, which .. grid-item-card:: :columns: 12 6 6 6 - :link: https://sphinx-needs.com + :link: https://sphinx-needs.readthedocs.io/en/latest/ :img-top: /_static/sphinx-needs-card.png :class-card: border @@ -103,7 +103,7 @@ In the last years, we have created additional information and extensions, which Also, it is a good entry point to understand the benefits and get an idea about the complete ecosystem of Sphinx-Needs. +++ - .. button-link:: https://sphinx-needs.com + .. button-link:: https://sphinx-needs.readthedocs.io/en/latest/ :color: primary :outline: :align: center diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 0844b3785..ed49cbb4c 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -3,7 +3,7 @@ PYTHON_VERSIONS = ["3.10", "3.12"] SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.0", "6.3.0"] +SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.0", "6.3.0", "8.0.0"] def run_tests(session, sphinx, sphinx_needs): diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index a0814b0d0..c7f87bb8a 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -25,10 +25,11 @@ classifiers = [ ] keywords = ["sphinx", "documentation", "test-reports"] requires-python = ">=3.10" -dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1"] +dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1", "packaging>=20.0"] [project.optional-dependencies] test = [ + "beautifulsoup4", "nox>=2025.2.9", "pytest-xdist", "pytest>=7.0", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 317fc2359..ec3089015 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,4 +1,5 @@ # fmt: off +import inspect import os import sphinx @@ -9,7 +10,7 @@ from sphinx.config import Config # from docutils import nodes -from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type +from sphinx_needs.api import add_dynamic_function, add_need_type from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective @@ -39,6 +40,46 @@ VERSION = "1.3.2" +# Field descriptions for better semantics +FIELD_DESCRIPTIONS = { + "file": "Test file name", + "suite": "Test suite name", + "case": "Test case name", + "case_name": "Test case display name", + "case_parameter": "Test case parameter", + "classname": "Test class name", + "time": "Test execution time", + "suites": "Number of test suites", + "cases": "Number of test cases", + "passed": "Number of passed tests", + "skipped": "Number of skipped tests", + "failed": "Number of failed tests", + "errors": "Number of test errors", + "result": "Test result status", +} + +try: + from sphinx_needs.api import add_field as _add_field + + def _register_field(app, name, schema=None): + description = FIELD_DESCRIPTIONS.get(name, name) + _add_field(name, description, schema=schema) + +except ImportError: + from sphinx_needs.api import add_extra_option as _add_extra_option + + _add_extra_option_supports_description = ( + "description" in inspect.signature(_add_extra_option).parameters + ) + + def _register_field(app, name, schema=None): + kwargs = {} + if _add_extra_option_supports_description: + kwargs["description"] = FIELD_DESCRIPTIONS.get(name, name) + if schema is not None: + kwargs["schema"] = schema + _add_extra_option(app, name, **kwargs) + def setup(app: Sphinx): """ @@ -177,44 +218,41 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: sphinx-needs configuration """ - # Check sphinx-needs version to determine if schema is needed - try: - needs_version = Version(sphinx_needs.__version__) - use_schema = needs_version >= Version("6.0.0") - except ImportError: - # If we can't determine version, assume older version - use_schema = False - - # Extra options - # For details read - # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option - - add_extra_option(app, getattr(config, "tr_file_option", "file")) - - add_extra_option(app, "suite") - add_extra_option(app, "case") - add_extra_option(app, "case_name") - add_extra_option(app, "case_parameter") - add_extra_option(app, "classname") - # Add schema parameter conditionally based on sphinx-needs version + needs_version = Version(sphinx_needs.__version__) + use_schema = needs_version >= Version("6.0.0") + if use_schema: - add_extra_option(app, "time", schema={"type": "string"}) - add_extra_option(app, "suites", schema={"type": "integer"}) - add_extra_option(app, "cases", schema={"type": "integer"}) - add_extra_option(app, "passed", schema={"type": "integer"}) - add_extra_option(app, "skipped", schema={"type": "integer"}) - add_extra_option(app, "failed", schema={"type": "integer"}) - add_extra_option(app, "errors", schema={"type": "integer"}) - add_extra_option(app, "result", schema={"type": "string"}) + _register_field( + app, getattr(config, "tr_file_option", "file"), schema={"type": "string"} + ) + _register_field(app, "suite", schema={"type": "string"}) + _register_field(app, "case", schema={"type": "string"}) + _register_field(app, "case_name", schema={"type": "string"}) + _register_field(app, "case_parameter", schema={"type": "string"}) + _register_field(app, "classname", schema={"type": "string"}) + _register_field(app, "time", schema={"type": "string"}) + _register_field(app, "suites", schema={"type": "integer"}) + _register_field(app, "cases", schema={"type": "integer"}) + _register_field(app, "passed", schema={"type": "integer"}) + _register_field(app, "skipped", schema={"type": "integer"}) + _register_field(app, "failed", schema={"type": "integer"}) + _register_field(app, "errors", schema={"type": "integer"}) + _register_field(app, "result", schema={"type": "string"}) else: - add_extra_option(app, "time") - add_extra_option(app, "suites") - add_extra_option(app, "cases") - add_extra_option(app, "passed") - add_extra_option(app, "skipped") - add_extra_option(app, "failed") - add_extra_option(app, "errors") - add_extra_option(app, "result") + _register_field(app, getattr(config, "tr_file_option", "file")) + _register_field(app, "suite") + _register_field(app, "case") + _register_field(app, "case_name") + _register_field(app, "case_parameter") + _register_field(app, "classname") + _register_field(app, "time") + _register_field(app, "suites") + _register_field(app, "cases") + _register_field(app, "passed") + _register_field(app, "skipped") + _register_field(app, "failed") + _register_field(app, "errors") + _register_field(app, "result") # Extra dynamic functions # For details about usage read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index c52a5a38a..f178b2d9a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -69,7 +72,10 @@ # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] -needs_extra_options = ["more_info"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = {"more_info": {"nullable": True}} +else: + needs_extra_options = ["more_info"] tr_extra_options = ["more_info"] # The name of the Pygments (syntax highlighting) style to use. diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py index 7018809ee..7d58f6bd0 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -75,7 +78,14 @@ # The master toctree document. master_doc = "index" -needs_extra_options = ["asil", "uses_secure", "more_info"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = { + "asil": {"nullable": True}, + "uses_secure": {"nullable": True}, + "more_info": {"nullable": True}, + } +else: + needs_extra_options = ["asil", "uses_secure", "more_info"] tr_extra_options = ["more_info"] # General information about the project. diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py index 3b8537445..e858a3436 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -75,7 +78,14 @@ # The master toctree document. master_doc = "index" -needs_extra_options = ["asil", "uses_secure", "more_info"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = { + "asil": {"nullable": True}, + "uses_secure": {"nullable": True}, + "more_info": {"nullable": True}, + } +else: + needs_extra_options = ["asil", "uses_secure", "more_info"] tr_extra_options = ["more_info"] # General information about the project. diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py index a9624f561..7dc64c444 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -32,7 +35,10 @@ extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] -needs_extra_options = ["priority"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = {"priority": {"nullable": True}} +else: + needs_extra_options = ["priority"] tr_extra_options = ["priority"] tr_json_mapping = { diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py index 48573a1d7..9c86fd9cd 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -37,7 +40,10 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] -needs_extra_options = ["more_info"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = {"more_info": {"nullable": True}} +else: + needs_extra_options = ["more_info"] tr_extra_options = ["more_info"] # The suffix(es) of source filenames. diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py index bf804a8ca..b256d83be 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -75,7 +78,14 @@ # The master toctree document. master_doc = "index" -needs_extra_options = ["asil", "uses_secure", "references"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = { + "asil": {"nullable": True}, + "uses_secure": {"nullable": True}, + "references": {"nullable": True}, + } +else: + needs_extra_options = ["asil", "uses_secure", "references"] # General information about the project. project = "test-report test docs" diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py index 781476d1e..d362ae2a2 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py @@ -18,6 +18,9 @@ import os import sys +import sphinx_needs +from packaging.version import Version + sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) # -- General configuration ------------------------------------------------ @@ -34,7 +37,10 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] -needs_extra_options = ["more_info"] +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = {"more_info": {"nullable": True}} +else: + needs_extra_options = ["more_info"] tr_extra_options = ["more_info"] # The suffix(es) of source filenames. diff --git a/packages/sphinx-test-reports/tests/test_test_file.py b/packages/sphinx-test-reports/tests/test_test_file.py index d43d684c5..dfc4c9b40 100644 --- a/packages/sphinx-test-reports/tests/test_test_file.py +++ b/packages/sphinx-test-reports/tests/test_test_file.py @@ -1,6 +1,7 @@ from pathlib import Path import pytest +from bs4 import BeautifulSoup @pytest.mark.parametrize( @@ -36,5 +37,52 @@ def test_test_file_needs_extra_options_no_warning(test_app): assert out.returncode == 0 - # Check no warnings - assert "WARNING" not in out.stdout.decode("utf-8") + # Check no warnings — Sphinx writes warnings to stderr, not stdout + stderr = out.stderr.decode("utf-8") + stdout = out.stdout.decode("utf-8") + + # stdout should not contain warnings (Sphinx doesn't write them there) + assert "WARNING" not in stdout, f"Found warnings in stdout (unexpected): {stdout}" + + # stderr should not contain warnings or errors + assert "WARNING" not in stderr, f"Found warnings in stderr: {stderr}" + assert "ERROR" not in stderr, f"Found errors in stderr: {stderr}" + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/doc_test_file"}], + indirect=True, +) +def test_test_file_renders_need_with_counts(test_app): + """test-file directive must render a need node with correct count fields. + + Catches regressions where int values (suites, cases, passed, etc.) passed + to add_need() are rejected by newer sphinx-needs versions. + """ + app = test_app + app.build() + assert app.statuscode == 0 + + html = Path(app.outdir, "index.html").read_text() + assert "TESTFILE_1" in html + + # Verify HTML contains the need table and integer count fields were rendered + # sphinx-needs renders needs as with field values in + # elements. + soup = BeautifulSoup(html, "html.parser") + need_table = soup.find("table", id="TESTFILE_1") + assert need_table is not None, "Need table with id='TESTFILE_1' not found in HTML" + + # Verify integer count fields are present and contain numeric values + required_fields = ["suites", "cases", "passed", "skipped", "failed", "errors"] + for field in required_fields: + span = need_table.find(class_=f"needs_{field}") + assert span is not None, f"Missing in need table" + value = span.get_text(strip=True).replace(f"{field}:", "").strip() + try: + int(value) + except ValueError: + raise AssertionError( + f"needs_{field} value should be numeric, got: {value!r}" + ) from None From 5bd4c53e86405f15f340d30a835f311b421362b7 Mon Sep 17 00:00:00 2001 From: Christian Polzer <119361+cpolzer@users.noreply.github.com> Date: Wed, 20 May 2026 11:03:11 +0200 Subject: [PATCH 126/159] feat: link JUnit XML properties to sphinx-needs fields (useblocks/sphinx-test-reports#135) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 Add sphinx-needs 8.0.0 compatibility Replace deprecated add_extra_option() with add_field() for sphinx-needs >= 8.0.0, using a version-gated shim that falls back to add_extra_option() for older versions. Also adds sphinx-needs 8.0.0 to the CI and nox test matrices, fixes the warning check in tests to also inspect stderr (where Sphinx writes warnings), adds a test asserting the test-file need node renders correctly, and removes the broken taplo pre-commit hook (taplo 0.9.3 PyPI package fails to build on this platform). * 🔧 Restore taplo pre-commit hook * feat: extract JUnit and map to sphinx-needs fields and links Add support for JUnit XML elements at both testsuite and testcase level, enabling requirement traceability by mapping property values to sphinx-needs fields and links. - Parse / from testcase and testsuite elements - Add tr_extra_options config to declare which properties become fields - Add tr_property_link_types config to map properties to sphinx-needs links - Register extra options as sphinx-needs fields with duplicate-safe handling - Guard against empty elements without children - Filter property flattening through tr_extra_options allowlist - Add tests for parser extraction, empty properties, integration build, DOM field rendering, link creation, and backward compatibility * refactor: extract shared property-link helper and add config docs Extract the duplicated tr_property_link_types loop from test_case.py and test_suite.py into _apply_property_links() on TestCommonDirective. Add tr_property_link_types section to docs/configuration.rst and expand the tr_extra_options section to cover JUnit mapping. --------- Co-authored-by: ~chrstian polzer <~c.polzer@hai-fai.de> Co-authored-by: Christian Polzer Co-authored-by: christian polzer --- .../docs/configuration.rst | 59 +++ .../sphinxcontrib/test_reports/config.py | 1 + .../test_reports/directives/test_case.py | 13 + .../test_reports/directives/test_common.py | 19 + .../test_reports/directives/test_suite.py | 16 + .../sphinxcontrib/test_reports/junitparser.py | 24 ++ .../test_reports/test_reports.py | 24 +- .../tests/doc_test/properties_linking/conf.py | 48 +++ .../doc_test/properties_linking/index.rst | 32 ++ .../utils/xml_data_empty_properties.xml | 9 + .../doc_test/utils/xml_data_properties.xml | 34 ++ .../tests/test_properties.py | 384 ++++++++++++++++++ 12 files changed, 661 insertions(+), 2 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/properties_linking/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/xml_data_empty_properties.xml create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/xml_data_properties.xml create mode 100644 packages/sphinx-test-reports/tests/test_properties.py diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 68eb026bd..ae19e779e 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -138,6 +138,65 @@ You can then use these options in your directives: This test file contains enhanced metadata using custom extra options. +**Mapping JUnit XML ```` to fields** + +When importing JUnit XML files, ``tr_extra_options`` also controls which ```` +elements inside ```` and ```` blocks are surfaced as sphinx-needs +fields. Only property names listed here are imported; all others are silently ignored. + +.. code-block:: xml + + + + + + + + + +.. code-block:: python + + # conf.py – surface "priority" as a sphinx-needs field + tr_extra_options = ["priority"] + needs_extra_options = ["priority"] + +See :ref:`tr_property_link_types` to map properties to sphinx-needs link fields instead. + +.. _tr_property_link_types: + +tr_property_link_types +---------------------- +.. versionadded:: 1.3.0 + +Maps a JUnit XML ```` name to a sphinx-needs link field. When a test case or +suite contains a matching property, its comma-separated values are converted to +semicolon-separated need IDs and merged into the specified link field. + +.. code-block:: python + + # conf.py + tr_property_link_types = { + "verifies": "links", # comma-separated IDs → need links + } + +With this configuration a ```` in +a ```` results in ``links: REQ_001;REQ_002`` on the generated need. + +Multiple properties can map to different link fields: + +.. code-block:: python + + tr_property_link_types = { + "verifies": "links", + "blocks": "blocks_back", + } + +.. note:: + + The property name does **not** need to be listed in :ref:`tr_extra_options` when it + is used exclusively for link mapping. Only add it there if you also want the raw + value to appear as a plain text field on the need. + .. _tr_import_encoding: tr_import_encoding diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index eb2068f67..91bf5449c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -13,4 +13,5 @@ "text", "message", "system-out", + "properties", ] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index dd81fc054..d8f2fefe6 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -160,6 +160,19 @@ def run(self, nested=False, suite_count=-1, case_count=-1): if case_parameter is None: case_parameter = "" + # Flatten JUnit into top-level case keys so that + # the extra-data loop below picks them up as sphinx-needs fields. + # Only propagate properties that are explicitly listed in + # tr_extra_options to avoid unknown-kwarg errors from add_need. + # Properties do not overwrite core JUnit attributes (name, time, etc.). + allowed_extras = set(getattr(self.app.config, "tr_extra_options", [])) + case_properties = case.get("properties", {}) + for prop_name, prop_value in case_properties.items(): + if prop_name in allowed_extras and prop_name not in case: + case[prop_name] = prop_value + + self._apply_property_links(case_properties) + # Set extra data, which is not part of the Sphinx-Test-Reports default options for key, value in case.items(): if key == "id" and value not in ["", None]: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index a0300ed13..9b099789b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -155,3 +155,22 @@ def prepare_basic_options(self): # Also collect any extra options while we're at it self.collect_extra_options() + + def _apply_property_links(self, properties): + """Map JUnit values to sphinx-needs link fields via tr_property_link_types.""" + tr_property_link_types = getattr(self.app.config, "tr_property_link_types", {}) + for prop_name, link_field in tr_property_link_types.items(): + prop_value = properties.get(prop_name, "") + if prop_value: + link_ids = ";".join( + id_val.strip() for id_val in prop_value.split(",") if id_val.strip() + ) + if link_field == "links": + existing = self.test_links + else: + existing = self.extra_options.get(link_field, "") + merged = existing + ";" + link_ids if existing else link_ids + if link_field == "links": + self.test_links = merged + else: + self.extra_options[link_field] = merged diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 13b0411a1..d2882d14f 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -73,6 +73,22 @@ def run(self, nested=False, count=-1): errors = suite["errors"] failed = suite["failures"] + # Flatten JUnit into extra_options so that + # suite-level properties are surfaced as sphinx-needs fields. + # Only propagate properties that are explicitly listed in + # tr_extra_options to avoid unknown-kwarg errors from add_need. + allowed_extras = set(getattr(self.app.config, "tr_extra_options", [])) + suite_properties = suite.get("properties", {}) + for prop_name, prop_value in suite_properties.items(): + if ( + prop_name in allowed_extras + and prop_name not in suite + and prop_value not in ["", None] + ): + self.extra_options[prop_name] = str(prop_value) + + self._apply_property_links(suite_properties) + main_section = [] docname = self.state.document.settings.env.docname main_section += add_need( diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 7430f6a39..d326c002d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -83,6 +83,18 @@ def parse_testcase(xml_object): else: tc_dict["system-out"] = "" + # Extract child elements as a dict + props = {} + if hasattr(testcase, "properties") and hasattr( + testcase.properties, "property" + ): + for prop in testcase.properties.property: + name = prop.attrib.get("name", "") + value = prop.attrib.get("value", "") + if name: + props[name] = value + tc_dict["properties"] = props + return tc_dict def parse_testsuite(xml_object): @@ -112,6 +124,18 @@ def parse_testsuite(xml_object): "testsuite_nested": [], } + # Extract child elements as a dict + props = {} + if hasattr(testsuite, "properties") and hasattr( + testsuite.properties, "property" + ): + for prop in testsuite.properties.property: + name = prop.attrib.get("name", "") + value = prop.attrib.get("value", "") + if name: + props[name] = value + ts_dict["properties"] = props + # add nested testsuite objects to if hasattr(testsuite, "testsuite"): for ts in testsuite.testsuite: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index ec3089015..76cce61cf 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -63,7 +63,13 @@ def _register_field(app, name, schema=None): description = FIELD_DESCRIPTIONS.get(name, name) - _add_field(name, description, schema=schema) + try: + _add_field(name, description, schema=schema) + except Exception: + # Field already registered (e.g. via needs_fields or needs_extra_options + # in conf.py). Skip to avoid duplicate registration errors. + log = logging.getLogger(__name__) + log.debug(f"Field '{name}' already registered, skipping") except ImportError: from sphinx_needs.api import add_extra_option as _add_extra_option @@ -78,7 +84,11 @@ def _register_field(app, name, schema=None): kwargs["description"] = FIELD_DESCRIPTIONS.get(name, name) if schema is not None: kwargs["schema"] = schema - _add_extra_option(app, name, **kwargs) + try: + _add_extra_option(app, name, **kwargs) + except Exception: + log = logging.getLogger(__name__) + log.debug(f"Field '{name}' already registered, skipping") def setup(app: Sphinx): @@ -122,6 +132,7 @@ def setup(app: Sphinx): app.add_config_value("tr_case_id_length", 5, "html") app.add_config_value("tr_import_encoding", "utf8", "html") app.add_config_value("tr_extra_options", [], "env") + app.add_config_value("tr_property_link_types", {}, "env") json_mapping = { "json_config": { @@ -258,6 +269,15 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function add_dynamic_function(app, tr_link) + # Register tr_extra_options as sphinx-needs fields so that properties + # extracted from JUnit XML are accepted by sphinx-needs + tr_extra_options = getattr(config, "tr_extra_options", []) + for option_name in tr_extra_options: + if use_schema: + _register_field(app, option_name, schema={"type": "string"}) + else: + _register_field(app, option_name) + # Extra need types # For details about usage read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_need_type diff --git a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py new file mode 100644 index 000000000..b3d3dd3f3 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py @@ -0,0 +1,48 @@ +import os +import sys + +import sphinx_needs +from packaging.version import Version + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +needs_types = [ + { + "directive": "req", + "title": "Requirement", + "prefix": "REQ_", + "color": "#BFD8D2", + "style": "node", + }, +] + +source_suffix = ".rst" +master_doc = "index" + +project = "properties-linking-test" +copyright = "2026, test" +author = "test" +version = "1.0" +release = "1.0" +language = "en" +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +html_theme = "alabaster" + +# Register "verifies" as both a sphinx-needs field and a tr_extra_option +if Version(sphinx_needs.__version__) >= Version("8.0.0"): + needs_fields = { + "verifies": {"nullable": True}, + "priority": {"nullable": True}, + "category": {"nullable": True}, + } +else: + needs_extra_options = ["verifies", "priority", "category"] + +tr_extra_options = ["verifies", "priority", "category"] + +# Map the "verifies" property to sphinx-needs links +tr_property_link_types = { + "verifies": "links", +} diff --git a/packages/sphinx-test-reports/tests/doc_test/properties_linking/index.rst b/packages/sphinx-test-reports/tests/doc_test/properties_linking/index.rst new file mode 100644 index 000000000..835cc13f9 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/properties_linking/index.rst @@ -0,0 +1,32 @@ +Properties Linking Test +======================= + +Requirements +------------ + +.. req:: Authentication Login + :id: REQ_AUTH_001 + +.. req:: Authentication Session + :id: REQ_AUTH_002 + +.. req:: Authentication Invalid + :id: REQ_AUTH_003 + +.. req:: API Get Users + :id: REQ_API_010 + +.. req:: API List Users + :id: REQ_API_011 + +.. req:: API Filter Users + :id: REQ_API_012 + +Test Results +------------ + +.. test-file:: Auth and API Tests + :id: PROP_TF_1 + :file: ../utils/xml_data_properties.xml + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_empty_properties.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_empty_properties.xml new file mode 100644 index 000000000..af44f9789 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_empty_properties.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_properties.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_properties.xml new file mode 100644 index 000000000..858ed6d03 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_properties.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + Expected redirect to /login + + + + + + + + + + + + + + + diff --git a/packages/sphinx-test-reports/tests/test_properties.py b/packages/sphinx-test-reports/tests/test_properties.py new file mode 100644 index 000000000..446365c23 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_properties.py @@ -0,0 +1,384 @@ +"""Tests for JUnit XML extraction and sphinx-needs integration.""" + +import os +from pathlib import Path + +import pytest + +xml_properties_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "xml_data_properties.xml" +) +xml_no_properties_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "xml_data.xml" +) +xml_empty_properties_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "xml_data_empty_properties.xml" +) + + +# --------------------------------------------------------------------------- +# Parser-level unit tests +# --------------------------------------------------------------------------- + + +class TestParserExtractsTestcaseProperties: + """JUnitParser must extract from elements.""" + + def test_testcase_with_properties_returns_dict(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # First suite, first testcase has verifies + priority + tc = results[0]["testcases"][0] + assert tc["name"] == "test_login_valid" + assert isinstance(tc["properties"], dict) + assert tc["properties"]["verifies"] == "REQ_AUTH_001,REQ_AUTH_002" + assert tc["properties"]["priority"] == "high" + + def test_testcase_with_single_property(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # First suite, second testcase has only verifies + tc = results[0]["testcases"][1] + assert tc["name"] == "test_login_invalid" + assert tc["properties"] == {"verifies": "REQ_AUTH_003"} + + def test_testcase_without_properties_returns_empty_dict(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # First suite, third testcase (test_logout) has failure but no properties + tc = results[0]["testcases"][2] + assert tc["name"] == "test_logout" + assert tc["properties"] == {} + + def test_testcase_skipped_without_properties_returns_empty_dict(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # First suite, fourth testcase (test_session_timeout) is skipped, no properties + tc = results[0]["testcases"][3] + assert tc["name"] == "test_session_timeout" + assert tc["result"] == "skipped" + assert tc["properties"] == {} + + def test_multiple_suites_testcase_properties(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # Second suite, first testcase has verifies + category + tc = results[1]["testcases"][0] + assert tc["name"] == "test_get_users" + assert tc["properties"]["verifies"] == "REQ_API_010,REQ_API_011,REQ_API_012" + assert tc["properties"]["category"] == "integration" + + def test_testcase_without_any_properties_element(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # Second suite, second testcase has no properties at all + tc = results[1]["testcases"][1] + assert tc["name"] == "test_create_user" + assert tc["properties"] == {} + + +class TestParserExtractsTestsuiteProperties: + """JUnitParser must extract from elements.""" + + def test_testsuite_with_properties(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # First suite has environment + build_id properties + suite = results[0] + assert suite["name"] == "acceptance_tests" + assert isinstance(suite["properties"], dict) + assert suite["properties"]["environment"] == "staging" + assert suite["properties"]["build_id"] == "build-7742" + + def test_testsuite_without_properties(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_properties_path) + results = parser.parse() + + # Second suite has no properties + suite = results[1] + assert suite["name"] == "api_tests" + assert suite["properties"] == {} + + +class TestParserBackwardCompatibility: + """Adding properties extraction must not break existing XML without properties.""" + + def test_existing_xml_still_parses(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_no_properties_path) + results = parser.parse() + + assert len(results) == 1 + assert results[0]["name"] == "unknown" + assert results[0]["tests"] == 3 + assert results[0]["properties"] == {} + + for tc in results[0]["testcases"]: + assert tc["properties"] == {} + + def test_existing_testcase_fields_unchanged(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_no_properties_path) + results = parser.parse() + + tc = results[0]["testcases"][0] + assert tc["name"] == "ASuccessfulTest" + assert tc["classname"] == "foo1" + assert tc["result"] == "passed" + + def test_existing_failure_testcase_unchanged(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_no_properties_path) + results = parser.parse() + + tc = results[0]["testcases"][2] + assert tc["name"] == "AFailingTest" + assert tc["result"] == "failure" + assert tc["text"] == " details about failure " + + +# --------------------------------------------------------------------------- +# Integration tests: Sphinx build with properties linking +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/properties_linking"}], + indirect=True, +) +class TestPropertiesLinkingIntegration: + """Full Sphinx build that uses JUnit properties for sphinx-needs linking.""" + + def test_build_succeeds(self, test_app): + app = test_app + app.build() + assert app.statuscode == 0 + + def test_html_contains_test_cases(self, test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + # Test case names from the XML should appear in the output + assert "test_login_valid" in html + assert "test_login_invalid" in html + assert "test_get_users" in html + + def test_verifies_field_rendered(self, test_app): + """The 'verifies' property should appear as a sphinx-needs field value.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + # The verifies values should be rendered somewhere in the output + assert "REQ_AUTH_001" in html + assert "REQ_AUTH_003" in html + assert "REQ_API_010" in html + + def test_links_created_from_properties(self, test_app): + """tr_property_link_types should create sphinx-needs links to requirement needs.""" + from bs4 import BeautifulSoup + + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + soup = BeautifulSoup(html, "html.parser") + + # Find links to requirement needs -- sphinx-needs renders outgoing links + # as anchor tags with the target need ID + req_links = soup.find_all("a", string=lambda s: s and s.startswith("REQ_")) + req_link_texts = [a.get_text(strip=True) for a in req_links] + + # Test cases with verifies property should link to requirement needs + assert "REQ_AUTH_001" in req_link_texts + assert "REQ_AUTH_002" in req_link_texts + assert "REQ_AUTH_003" in req_link_texts + assert "REQ_API_010" in req_link_texts + assert "REQ_API_011" in req_link_texts + assert "REQ_API_012" in req_link_texts + + def test_requirement_needs_present(self, test_app): + """Requirement needs defined in RST should be rendered.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "Authentication Login" in html + assert "API Get Users" in html + + def test_testcases_without_properties_still_render(self, test_app): + """Test cases that have no properties should render without errors.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + # test_logout has a failure but no properties + assert "test_logout" in html + # test_create_user has no properties and no failure + assert "test_create_user" in html + + def test_priority_field_rendered(self, test_app): + """Non-link properties should be surfaced as sphinx-needs fields.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + # The priority property from test_login_valid should appear + assert "high" in html + + def test_category_field_rendered(self, test_app): + """The category property from test_get_users should appear.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "integration" in html + + +# --------------------------------------------------------------------------- +# Parser: empty element (no children) +# --------------------------------------------------------------------------- + + +class TestParserHandlesEmptyProperties: + """JUnitParser must not crash on empty elements.""" + + def test_empty_testsuite_properties_element(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_empty_properties_path) + results = parser.parse() + + suite = results[0] + assert suite["name"] == "empty_props_suite" + assert suite["properties"] == {} + + def test_empty_testcase_properties_element(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_empty_properties_path) + results = parser.parse() + + tc = results[0]["testcases"][0] + assert tc["name"] == "test_with_empty_properties" + assert tc["properties"] == {} + + def test_testcase_without_properties_alongside_empty(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_empty_properties_path) + results = parser.parse() + + tc = results[0]["testcases"][1] + assert tc["name"] == "test_without_properties_element" + assert tc["properties"] == {} + + +# --------------------------------------------------------------------------- +# Integration: precise DOM assertions for property fields +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/properties_linking"}], + indirect=True, +) +class TestPropertyFieldsDomRendering: + """Verify property values are rendered as sphinx-needs fields using DOM checks.""" + + def test_priority_field_in_needs_data_span(self, test_app): + """The 'priority' property must appear inside a needs_data span.""" + from bs4 import BeautifulSoup + + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + soup = BeautifulSoup(html, "html.parser") + + priority_spans = soup.select("span.needs_priority span.needs_data") + priority_values = [s.get_text(strip=True) for s in priority_spans] + assert "high" in priority_values + + def test_category_field_in_needs_data_span(self, test_app): + """The 'category' property must appear inside a needs_data span.""" + from bs4 import BeautifulSoup + + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + soup = BeautifulSoup(html, "html.parser") + + category_spans = soup.select("span.needs_category span.needs_data") + category_values = [s.get_text(strip=True) for s in category_spans] + assert "integration" in category_values + + def test_verifies_field_in_needs_data_span(self, test_app): + """The 'verifies' property must appear inside a needs_data span.""" + from bs4 import BeautifulSoup + + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + soup = BeautifulSoup(html, "html.parser") + + verifies_spans = soup.select("span.needs_verifies span.needs_data") + verifies_values = [s.get_text(strip=True) for s in verifies_spans] + # test_login_valid has verifies="REQ_AUTH_001,REQ_AUTH_002" + assert any("REQ_AUTH_001" in v for v in verifies_values) + assert any("REQ_AUTH_002" in v for v in verifies_values) + + +# --------------------------------------------------------------------------- +# Integration: XML without any properties still builds successfully +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/basic_doc"}], + indirect=True, +) +class TestNoPropertiesStillWorks: + """Sphinx build with JUnit XML that has no must still succeed.""" + + def test_build_succeeds_without_properties(self, test_app): + app = test_app + app.build() + assert app.statuscode == 0 + + def test_testcases_rendered_without_properties(self, test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + # The existing XML fixture (xml_data.xml) has these test case names + assert "ASuccessfulTest" in html + assert "AFailingTest" in html From 20684df42323210c6c2491d4aa662fa7d4e9ee40 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 16 Jun 2026 17:33:31 +0200 Subject: [PATCH 127/159] test: strict schema must ignore unpopulated sphinx-test-reports fields (useblocks/sphinx-test-reports#137) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What TDD regression test (no production code change) for the interaction between **sphinx-test-reports (STR)** and **sphinx-needs (SN)** schema validation. STR registers many extra fields with SN via the field API — `file`, `suite`, `case`, `case_name`, `case_parameter`, `classname`, `time`, `suites`, `cases`, `passed`, `skipped`, `failed`, `errors`, `result`. These are attached to **every** need in a project. This test builds a project with both extensions enabled and a strict schema (`schemas.json` with `unevaluatedProperties: false`, i.e. *no field beyond the core id/title/type is allowed*), defines plain `req` needs that leave all STR fields unpopulated, and asserts that **no schema violation** is reported (SN's `schema_violations.json` has empty `validation_warnings`). ## Why A strict need-type schema can wrongly "fail" for needs that don't populate STR's registered fields. If STR's fields are attached with non-null defaults (e.g. `""`/`0`), every plain need carries empty STR values and a strict schema reports `Unevaluated properties are not allowed ('file', 'suite', ... were unexpected)`. ## The bug, and why this is a regression test A sphinx-needs field registered **untyped** (legacy `add_extra_option` / `needs_extra_options`, no schema) defaults to `""`, which is **not** stripped before schema validation and therefore trips `unevaluatedProperties: false`. A field registered **typed** (`add_field(..., schema=...)`) defaults to `None` and is stripped. Released STR **1.3.2** registers `file`, `suite`, `case`, `case_name`, `case_parameter` and `classname` *untyped*, so a project using strict schema validation gets false-positive `Unevaluated properties are not allowed (...)` warnings for plain needs that never set those fields. STR `master` registers every field with a typed schema (useblocks/sphinx-test-reports#133) → they default to `None` → stripped → no warning. **This test locks that behavior in** and goes red if any field regresses to a non-null default. The fix ships in 1.4.0 (1.3.2 is still affected). ## Verification - **passes** on SN 6.0.0 / 6.3.0 / 8.0.0 / 8.1.1; **skips** on SN < 6.0.0 (predates `needs_schema_definitions`). - Confirmed meaningful: temporarily making STR register its string fields with a `""` default made the test go **red** with exactly the expected `unevaluatedProperties` violation for both needs, then reverted. - Heads-up for users: the literal JSON-Schema keyword **`additionalProperties: false` is *not* accepted** by SN's schema config (it is rejected at config-validation time). SN's supported way to forbid extra fields is **`unevaluatedProperties: false`**, which is what this test uses. - Full STR test suite green locally. ## Second, independent test `test_strict_schema_allows_constrained_field_in_local_schema` (fixture `schema_strictness_status/`): the core `status` field is constrained in the local schema (`const: "open"`, `required`) and set on the need, proving strict validation also works when a field *is* evaluated by the schema. Verified red when `status` diverges from the constrained value. --- .../tests/doc_test/schema_strictness/conf.py | 28 +++++ .../doc_test/schema_strictness/index.rst | 15 +++ .../doc_test/schema_strictness/schemas.json | 13 +++ .../doc_test/schema_strictness_status/conf.py | 27 +++++ .../schema_strictness_status/index.rst | 14 +++ .../schema_strictness_status/schemas.json | 21 ++++ .../tests/test_schema_validation.py | 101 ++++++++++++++++++ 7 files changed, 219 insertions(+) create mode 100644 packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/schema_strictness/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/schema_strictness/schemas.json create mode 100644 packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/schemas.json create mode 100644 packages/sphinx-test-reports/tests/test_schema_validation.py diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py new file mode 100644 index 000000000..e005b0d02 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py @@ -0,0 +1,28 @@ +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +source_suffix = ".rst" +master_doc = "index" + +project = "test-report schema strictness" +copyright = "2024, team useblocks" +author = "team useblocks" + +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# Load a strict sphinx-needs schema that forbids any field beyond the core +# id/title/type (see schemas.json). sphinx-test-reports registers a lot of +# extra fields (file, suite, passed, ...) via the sphinx-needs field API; this +# project deliberately leaves them unpopulated to make sure they are not +# wrongly reported as "additional" fields. +needs_schema_definitions_from_json = "schemas.json" + +# -- Options for HTML output ---------------------------------------------- + +html_theme = "alabaster" diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/index.rst b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/index.rst new file mode 100644 index 000000000..7e582985d --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/index.rst @@ -0,0 +1,15 @@ +Strict schema with unpopulated sphinx-test-reports fields +========================================================= + +The needs below are plain requirements. They leave every field that +sphinx-test-reports registers with sphinx-needs (``file``, ``suite``, +``case``, ``passed``, ``failed``, ``errors`` ...) unpopulated. + +A schema that forbids additional fields (``unevaluatedProperties: false``) +must therefore *not* report any violation for them. + +.. req:: A plain requirement + :id: REQ_1 + +.. req:: Another plain requirement + :id: REQ_2 diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/schemas.json b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/schemas.json new file mode 100644 index 000000000..ba6811d65 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/schemas.json @@ -0,0 +1,13 @@ +{ + "schemas": [ + { + "id": "no-additional-fields", + "severity": "violation", + "validate": { + "local": { + "unevaluatedProperties": false + } + } + } + ] +} diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py new file mode 100644 index 000000000..8290ad306 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py @@ -0,0 +1,27 @@ +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +# -- General configuration ------------------------------------------------ + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +source_suffix = ".rst" +master_doc = "index" + +project = "test-report schema strictness (status)" +copyright = "2024, team useblocks" +author = "team useblocks" + +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# Load a strict sphinx-needs schema. Unlike the sibling ``schema_strictness`` +# fixture, this one *evaluates* a field in the local schema: ``status`` is +# constrained to a fixed value (see schemas.json). The sphinx-test-reports +# fields are still left unpopulated to confirm they remain ignored. +needs_schema_definitions_from_json = "schemas.json" + +# -- Options for HTML output ---------------------------------------------- + +html_theme = "alabaster" diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/index.rst b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/index.rst new file mode 100644 index 000000000..ecd807fa1 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/index.rst @@ -0,0 +1,14 @@ +Strict schema with a constrained field in the local schema +========================================================== + +The need below sets ``status`` to the value the schema constrains it to +(``open``), while leaving every sphinx-test-reports field unpopulated. + +A schema that evaluates ``status`` (``const: open``) and forbids any other +field (``unevaluatedProperties: false``) must accept this need: the constrained +field is set correctly and the unpopulated sphinx-test-reports fields are +ignored. + +.. req:: A requirement with a constrained status + :id: REQ_STATUS_1 + :status: open diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/schemas.json b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/schemas.json new file mode 100644 index 000000000..bd84f1cfc --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/schemas.json @@ -0,0 +1,21 @@ +{ + "schemas": [ + { + "id": "status-constrained", + "severity": "violation", + "validate": { + "local": { + "properties": { + "status": { + "const": "open" + } + }, + "required": [ + "status" + ], + "unevaluatedProperties": false + } + } + } + ] +} diff --git a/packages/sphinx-test-reports/tests/test_schema_validation.py b/packages/sphinx-test-reports/tests/test_schema_validation.py new file mode 100644 index 000000000..fec8d68c6 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_schema_validation.py @@ -0,0 +1,101 @@ +"""Regression test for sphinx-needs schema validation of sphinx-test-reports fields. + +sphinx-test-reports registers a number of extra fields (``file``, ``suite``, +``case``, ``passed``, ``failed``, ``errors`` ...) with sphinx-needs via its +field API. These fields are attached to *every* need in the project. + +When a user defines a strict sphinx-needs schema -- one that forbids any field +beyond the core ``id`` / ``title`` / ``type`` (``unevaluatedProperties: false``) +-- those registered fields must not be treated as "additional" fields for needs +that never populate them. In other words, the fields have to default to an +unset/None value so they are stripped before schema validation. + +This test builds a project with both extensions enabled and a strict schema, +and asserts that plain needs which leave the sphinx-test-reports fields +unpopulated produce no schema violation. +""" + +import json +from pathlib import Path + +import pytest +import sphinx_needs +from packaging.version import Version + +# The needs_schema_definitions / schema-validation feature was introduced in +# sphinx-needs 6.0.0; skip on older versions that do not support it. +SN_SUPPORTS_SCHEMAS = Version(sphinx_needs.__version__) >= Version("6.0.0") + + +@pytest.mark.skipif( + not SN_SUPPORTS_SCHEMAS, + reason="needs_schema_definitions requires sphinx-needs>=6.0.0", +) +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/schema_strictness"}], + indirect=True, +) +def test_strict_schema_ignores_unpopulated_test_report_fields(test_app): + app = test_app + app.build() + + assert app.statuscode == 0 + + report_file = Path(app.outdir, "schema_violations.json") + assert report_file.exists(), "sphinx-needs did not write schema_violations.json" + + report = json.loads(report_file.read_text(encoding="utf-8")) + + # Schema validation actually ran over our two needs ... + assert report.get("validated_needs_count", 0) >= 2 + + # ... and produced no violations. If sphinx-test-reports registered its + # fields with non-null defaults, REQ_1/REQ_2 would carry empty values for + # file/suite/passed/... and the strict schema would (wrongly) report + # "unevaluated properties are not allowed". + assert report["validation_warnings"] == {}, ( + "Strict schema flagged unpopulated sphinx-test-reports fields: " + f"{json.dumps(report['validation_warnings'], indent=2)}" + ) + + +@pytest.mark.skipif( + not SN_SUPPORTS_SCHEMAS, + reason="needs_schema_definitions requires sphinx-needs>=6.0.0", +) +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/schema_strictness_status"}], + indirect=True, +) +def test_strict_schema_allows_constrained_field_in_local_schema(test_app): + """Counterpart to the test above: a field that *is* part of the local schema + validates correctly while the unpopulated sphinx-test-reports fields stay + ignored. + + The schema evaluates the core ``status`` field (``const: open``, and marks + it ``required``) and forbids every other field + (``unevaluatedProperties: false``). The single need sets ``status: open`` + and leaves all sphinx-test-reports fields unpopulated, so the build must + report no violation. + """ + app = test_app + app.build() + + assert app.statuscode == 0 + + report_file = Path(app.outdir, "schema_violations.json") + assert report_file.exists(), "sphinx-needs did not write schema_violations.json" + + report = json.loads(report_file.read_text(encoding="utf-8")) + + # The need was validated ... + assert report.get("validated_needs_count", 0) >= 1 + + # ... and the constrained-and-populated 'status' field plus the stripped + # (unpopulated) sphinx-test-reports fields together produce no violation. + assert report["validation_warnings"] == {}, ( + "Strict schema with a constrained 'status' field reported violations: " + f"{json.dumps(report['validation_warnings'], indent=2)}" + ) From b2fc009c2bddcf850ae30d695a85cb96ad28bbd2 Mon Sep 17 00:00:00 2001 From: Patrick Dahlke Date: Tue, 16 Jun 2026 17:40:34 +0200 Subject: [PATCH 128/159] Handle JUnit result state in parse_testcase() (useblocks/sphinx-test-reports#134) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fixes useblocks/sphinx-test-reports#132 - `parse_testcase()` now explicitly handles the JUnit `` element, which represents unexpected exceptions or infrastructure crashes - Previously, `` test cases were silently classified as `"passed"` (false-positive verdict) - Adds CSS styling for the `tr_error` result type (orange, distinct from failure red and skip gray) - Also guards against `None` text in `` elements (consistency with the `` branch) ## Changes - **`sphinxcontrib/test_reports/junitparser.py`** — Add `elif hasattr(testcase, "error")` branch before the `else` clause - **`sphinxcontrib/test_reports/css/common.css`** — Add `tr_error` row and status badge styles - **`tests/doc_test/utils/xml_data_error.xml`** — New test fixture with all four result states - **`tests/test_junit_parser.py`** — New `test_parse_error_xml()` covering error parsing ## Test plan - [x] New `test_parse_error_xml` verifies error result, type, message, and text extraction - [x] All 31 existing tests continue to pass - [x] No changes to rendering logic needed — existing `"tr_" + result` pattern handles the new state automatically --- .../sphinxcontrib/test_reports/css/common.css | 9 +++++ .../sphinxcontrib/test_reports/junitparser.py | 10 ++++-- .../tests/doc_test/utils/xml_data_error.xml | 12 +++++++ .../tests/test_junit_parser.py | 33 +++++++++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/xml_data_error.xml diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css index 14b9cca2d..a88f5b99d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css @@ -10,6 +10,10 @@ tr.tr_skipped{ background-color: rgba(0,0,0,0.1) !important; } +tr.tr_error, div.tr_error { + background-color: rgba(255,165,0,0.2) !important; +} + td.status p { padding: 3px 5px; text-align: center; @@ -30,3 +34,8 @@ td.status p.tr_skipped{ border: 1px solid #555; color: #555; } + +td.status p.tr_error{ + border: 1px solid #cc6600; + color: #cc6600; +} diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index d326c002d..e66e417c0 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -70,8 +70,14 @@ def parse_testcase(xml_object): tc_dict["result"] = "failure" tc_dict["type"] = result.attrib.get("type", "unknown") # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs - tc_dict["text"] = result.text - tc_dict["message"] = "" + tc_dict["text"] = result.text or "" + tc_dict["message"] = result.attrib.get("message", "") + elif hasattr(testcase, "error"): + result = testcase.error + tc_dict["result"] = "error" + tc_dict["type"] = result.attrib.get("type", "unknown") + tc_dict["text"] = result.text or "" + tc_dict["message"] = result.attrib.get("message", "unknown") else: tc_dict["result"] = "passed" tc_dict["type"] = "" diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_error.xml b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_error.xml new file mode 100644 index 000000000..1475938a2 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/xml_data_error.xml @@ -0,0 +1,12 @@ + + + + some failure details + + + stack trace here + + + + + diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 57d8195da..9a6a324fe 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -16,6 +16,9 @@ ) xml_ctest_path = os.path.join(os.path.dirname(__file__), "doc_test/utils", "ctest.xml") +xml_error_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "xml_data_error.xml" +) def test_init_parser(): @@ -148,3 +151,33 @@ def test_parse_ctest_xml(): assert test_suite["testcases"][3]["result"] == "failure" assert test_suite["testcases"][4]["name"] == "skipped_test" assert test_suite["testcases"][4]["result"] == "skipped" + + +def test_parse_error_xml(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + parser = JUnitParser(xml_error_path) + test_suites = parser.parse() + + assert len(test_suites) == 1 + test_suite = test_suites[0] + + assert test_suite["name"] == "error_suite" + assert test_suite["tests"] == 4 + assert test_suite["errors"] == 1 + assert test_suite["failures"] == 1 + + assert test_suite["testcases"][0]["name"] == "ASuccessfulTest" + assert test_suite["testcases"][0]["result"] == "passed" + + assert test_suite["testcases"][1]["name"] == "AFailingTest" + assert test_suite["testcases"][1]["result"] == "failure" + + assert test_suite["testcases"][2]["name"] == "AnErrorTest" + assert test_suite["testcases"][2]["result"] == "error" + assert test_suite["testcases"][2]["type"] == "RuntimeError" + assert test_suite["testcases"][2]["message"] == "unexpected crash" + assert test_suite["testcases"][2]["text"] == "stack trace here" + + assert test_suite["testcases"][3]["name"] == "ASkippedTest" + assert test_suite["testcases"][3]["result"] == "skipped" From 5036f288034103e7cad8d9e9e7dd703c7f6e5b00 Mon Sep 17 00:00:00 2001 From: Miro Date: Tue, 16 Jun 2026 17:55:13 +0200 Subject: [PATCH 129/159] Clarify Sphinx-Needs type names in docs (useblocks/sphinx-test-reports#136) ## Summary - update filtering examples to use the Sphinx-Needs type names `testfile`, `testsuite`, and `testcase` - add a note distinguishing those type names from the hyphenated directives `test-file`, `test-suite`, and `test-case` - fix the `test-case` directive page copy/paste text so it describes `test-case` and the `testcase` type - update the `needlist` examples to compare the numeric `cases` field directly Fixes useblocks/sphinx-test-reports#131 ## Validation - `git diff --check -- docs/filter.rst docs/directives/test_file.rst docs/directives/test_suite.rst docs/directives/test_case.rst` - Read the Docs build succeeded: https://sphinx-test-reports--136.org.readthedocs.build/en/136/ - Not run locally: tests (documentation-only change) Co-authored-by: Miro <200482516+Mirochill@users.noreply.github.com> --- .../docs/directives/test_case.rst | 4 +-- .../docs/directives/test_file.rst | 2 +- .../docs/directives/test_suite.rst | 2 +- packages/sphinx-test-reports/docs/filter.rst | 32 +++++++++++-------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 0f154eb17..4c70beed3 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -10,7 +10,7 @@ Usage .. code-block:: rst - .. test-case:: My Test Suite + .. test-case:: My Test Case :file: my_test_data.xml :suite: my_tested_suite :case: my_case @@ -36,7 +36,7 @@ to specify only ``case`` or ``classname``. It depends on the loaded test-data, i or if it selects only the first found test case. The best case is to always try to specify both values, ``case`` and ``classname``. -``test-suite`` creates a need of type ``test-suite`` and adds the following options automatically: +``test-case`` creates a need of type ``testcase`` and adds the following options automatically: * **result**: Result of the test case run. E.g passed or failed. * **time**: Needed time for running the test case diff --git a/packages/sphinx-test-reports/docs/directives/test_file.rst b/packages/sphinx-test-reports/docs/directives/test_file.rst index 0ce8ea954..b3de3adca 100644 --- a/packages/sphinx-test-reports/docs/directives/test_file.rst +++ b/packages/sphinx-test-reports/docs/directives/test_file.rst @@ -28,7 +28,7 @@ The following options can be set: Must be used together with ``auto_suites``! -``test-file`` creates a need of type ``test-file`` and adds the following options automatically: +``test-file`` creates a need of type ``testfile`` and adds the following options automatically: * **suites**: Amount of found suites in test file. * **cases**: Amount of found cases in test file. diff --git a/packages/sphinx-test-reports/docs/directives/test_suite.rst b/packages/sphinx-test-reports/docs/directives/test_suite.rst index 4180f8011..4ed6e8ac5 100644 --- a/packages/sphinx-test-reports/docs/directives/test_suite.rst +++ b/packages/sphinx-test-reports/docs/directives/test_suite.rst @@ -26,7 +26,7 @@ The following options can be set: * **links**: A comma-separated list of IDs to other documented test_files / needs-objects. * **collapse**: If set to "TRUE", meta data is collapsed. Can also be set to "FALSE". -``test-suite`` creates a need of type ``test-suite`` and adds the following options automatically: +``test-suite`` creates a need of type ``testsuite`` and adds the following options automatically: * **cases**: Amount of found cases in test file. * **passed**: Amount of passed test cases. diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index 5f3a19153..06b1b6330 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -22,9 +22,9 @@ Filterable data ``Sphinx-Test-Reports`` adds the following data to a sphinx-need-configuration: * **Types** - * test-file - * test-suite - * test-case + * testfile + * testsuite + * testcase * **Options** * **file**: Test file path. @@ -40,6 +40,10 @@ Filterable data Not all options are set for all created needs. E.g. ``test-file`` doesn't include ``case``, as it is not related to a single test case. +The ``:types:`` option expects the Sphinx-Needs type names listed above. +These names do not contain hyphens. The user-facing directives still keep their +hyphenated names: ``test-file``, ``test-suite`` and ``test-case``. + The filtering possibilities are really powerful, so take a look into `Filtering needs `_ to figure out how to get most out of your test data. @@ -55,11 +59,11 @@ Use it like:: .. needtable:: - :types: test-file + :types: testfile :columns: id, file, suites, cases, passed -We set ``types`` to ``test-file`` to document needs-objects from this type only. -``Sphinx-Test-Reports`` provides also ``test-suite`` and ``test-case``. +We set ``types`` to ``testfile`` to document needs-objects from this type only. +``Sphinx-Test-Reports`` also provides the ``testsuite`` and ``testcase`` need types. With ``columns`` we can specify which data of a ``test-file`` we want to see. @@ -67,7 +71,7 @@ With ``columns`` we can specify which data of a ``test-file`` we want to see. **Example** .. needtable:: - :types: test-file + :types: testfile :columns: id, file, suites, cases, passed .. _needlist_filter: @@ -82,11 +86,11 @@ The filter possibilities are the same as for :ref:`needtable Usage:: .. needlist:: - :types: test-file - :filter: cases.isdigit() and int(cases) > 4 + :types: testfile + :filter: cases > 4 ``filter`` supports complex-filter operations by using a Python-statement. -In this case, we check that the ``cases`` value contains a number and this number must ne bigger as 4. +In this case, we check that the ``cases`` value is greater than 4. Take a look into the `Filter string section `_ @@ -96,8 +100,8 @@ of the Sphinx-Needs documentations for more details and ideas how to use it. **Example** .. needlist:: - :types: test-file - :filter: cases.isdigit() and int(cases) >= 5 + :types: testfile + :filter: cases >= 5 @@ -116,7 +120,7 @@ needflow - Flow charts of linked test data Usage:: .. needflow:: - :types: test-file, test-suite, test-case + :types: testfile, testsuite, testcase :filter: len(links) > 0 or len(links_back) > 0 The used ``:filter:`` allows needs only, if they have an outgoing or incoming link. @@ -124,5 +128,5 @@ The used ``:filter:`` allows needs only, if they have an outgoing or incoming li **Example** .. .. needflow:: - :types: test-file, test-suite, test-case + :types: testfile, testsuite, testcase :filter: (len(links) > 0 or len(links_back) > 0) and "example" not in tags and "auto" not in tags and "pytest_sphinx" not in tags From b0599bd5a7519c2bf16f99a50b69212ce1fa4ca4 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 16 Jun 2026 21:36:54 +0200 Subject: [PATCH 130/159] docs: note that numeric cases filtering requires Sphinx-Needs >= 6 (useblocks/sphinx-test-reports#139) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Follow-up to useblocks/sphinx-test-reports#136. That PR switched the filter examples to direct numeric comparisons (`cases > 4`, `cases >= 5`), which is correct for **Sphinx-Needs >= 6**: there the count fields are registered with an integer schema (`sphinxcontrib/test_reports/test_reports.py:245-250`) and the directives pass real `int` values. On Sphinx-Needs < 6 (the `else` branch at `test_reports.py:260-266`) those fields have no integer schema and are stored as strings, so `cases > 4` raises a `TypeError` during filtering — which is why the original `cases.isdigit() and int(cases) > 4` form was used. The two forms are version-specific inverses, so this is a documentation note rather than a code change. This adds a `.. note::` to `docs/filter.rst` stating that numeric filtering requires Sphinx-Needs >= 6 and pointing users on older versions to the `isdigit()` / `int()` form. ## Alternative The runtime dependency floor is still `sphinx-needs>=1.0.1` (`pyproject.toml`), while the test extra already pins `>=6`. If support for Sphinx-Needs < 6 is no longer intended, an alternative to this note would be to bump the runtime floor to `>=6` and drop the legacy `else` branch in `sphinx_needs_update()`. Happy to do that instead if preferred. ## Validation - Documentation-only change; no code paths touched. --- packages/sphinx-test-reports/docs/filter.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/sphinx-test-reports/docs/filter.rst b/packages/sphinx-test-reports/docs/filter.rst index 06b1b6330..b7e9de0a4 100644 --- a/packages/sphinx-test-reports/docs/filter.rst +++ b/packages/sphinx-test-reports/docs/filter.rst @@ -92,6 +92,14 @@ Usage:: ``filter`` supports complex-filter operations by using a Python-statement. In this case, we check that the ``cases`` value is greater than 4. +.. note:: + + Numeric comparisons such as ``cases > 4`` require Sphinx-Needs 6.0 or newer, + where the count fields (``suites``, ``cases``, ``passed``, ``skipped``, + ``failed`` and ``errors``) are stored as integers. On older Sphinx-Needs + versions these values are strings, so use + ``cases.isdigit() and int(cases) > 4`` instead. + Take a look into the `Filter string section `_ of the Sphinx-Needs documentations for more details and ideas how to use it. From da2436d33cc590e12f04e9664e063f41f445d128 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 16 Jun 2026 21:56:33 +0200 Subject: [PATCH 131/159] =?UTF-8?q?=F0=9F=9A=80=20Release=20v1.4.0=20(useb?= =?UTF-8?q?locks/sphinx-test-reports#138)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Release v1.4.0 Bumps the version (`pyproject.toml`, `docs/conf.py`, `test_reports.py`) and adds the 1.4.0 changelog for everything merged since 1.3.2. **Highlights** - Feature (useblocks/sphinx-test-reports#135): map JUnit XML `` to Sphinx-Needs fields/links. - Sphinx-Needs 8 support (useblocks/sphinx-test-reports#133): fields registered via the new `add_field` API. - Bugfix (useblocks/sphinx-test-reports#133): `file`, `suite`, `case`, `case_name`, `case_parameter` and `classname` are now registered with a typed schema → default to `None` → stripped before schema validation, fixing false-positive `Unevaluated properties are not allowed` warnings under `unevaluatedProperties: false`. Released 1.3.2 registered them untyped (default `""`), which leaked. - Bugfix (useblocks/sphinx-test-reports#134): JUnit `` test cases were misclassified as `passed`; now handled correctly in `parse_testcase()`. - Testing (useblocks/sphinx-test-reports#130, useblocks/sphinx-test-reports#137): run against Sphinx-Needs 6.3.0; regression test that a strict schema ignores unpopulated Sphinx-Test-Reports fields. - Docs (useblocks/sphinx-test-reports#136, useblocks/sphinx-test-reports#139): clarify Sphinx-Needs type names vs. the hyphenated directives; note that numeric `cases` filtering requires Sphinx-Needs >= 6. --- .../sphinx-test-reports/docs/changelog.rst | 39 +++++++++++++++++++ packages/sphinx-test-reports/docs/conf.py | 4 +- packages/sphinx-test-reports/pyproject.toml | 2 +- .../test_reports/test_reports.py | 2 +- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 09bf4e00c..12b9b2ff6 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,45 @@ Unreleased ---------- :Released: under development +.. _`release:1.4.0`: + +1.4.0 +----- +:Released: 16.06.2026 + +This release adds Sphinx-Needs 8 support and the ability to map JUnit XML +```` onto Sphinx-Needs fields and links. It also registers every +field that Sphinx-Test-Reports adds with a typed schema, so unset fields no +longer trigger false-positive ``unevaluatedProperties: false`` schema-validation +warnings, and it fixes JUnit ```` test cases being reported as passed. + +* Feature: Map JUnit XML ```` to Sphinx-Needs fields and links via + the new ``tr_property_link_types`` and ``tr_extra_options`` options. + `#135 `_ +* Improvement: Support Sphinx-Needs 8 by registering fields through the new + ``add_field`` API, falling back to ``add_extra_option`` on older versions. + `#133 `_ +* Bugfix: Register ``file``, ``suite``, ``case``, ``case_name``, + ``case_parameter`` and ``classname`` with a typed (string) schema so they + default to an unset/``None`` value and are stripped before schema validation. + Previously they were registered untyped and defaulted to ``""``, which caused + false-positive ``Unevaluated properties are not allowed`` warnings on needs + that did not set them when a schema used ``unevaluatedProperties: false``. + `#133 `_ +* Bugfix: Handle the JUnit ```` result state in ``parse_testcase()``; + ```` test cases were previously misclassified as ``passed``. + `#134 `_ +* Testing: Run the test suite against Sphinx-Needs 6.3.0. + `#130 `_ +* Testing: Add a regression test that a strict schema ignores unpopulated + Sphinx-Test-Reports fields. + `#137 `_ +* Docs: Clarify the Sphinx-Needs type names (``testfile``, ``testsuite``, + ``testcase``) versus the hyphenated directives. + `#136 `_ +* Docs: Note that numeric ``cases`` filtering requires Sphinx-Needs >= 6. + `#139 `_ + .. _`release:1.3.2`: 1.3.2 diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index c38d755a2..1404fda75 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -32,9 +32,9 @@ author = "team useblocks" # The short X.Y version -version = "1.3" +version = "1.4" # The full version, including alpha/beta/rc tags -release = "1.3.2" +release = "1.4.0" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index c7f87bb8a..aa8cd6add 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "sphinx-test-reports" -version = "1.3.2" +version = "1.4.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" license = { text = "MIT" } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 76cce61cf..ca31b68fb 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -38,7 +38,7 @@ # fmt: on -VERSION = "1.3.2" +VERSION = "1.4.0" # Field descriptions for better semantics FIELD_DESCRIPTIONS = { From 9ea922fea612418bdc46604bc1ea818da802c9c7 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Fri, 19 Jun 2026 12:44:11 +0200 Subject: [PATCH 132/159] docs: tidy the Sphinx-Needs ecosystem cards (fixes flaky linkcheck) (useblocks/sphinx-test-reports#140) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem `Docs-Linkcheck` has been flaky — it failed on ~28% of recent runs (22 of the last 80), in outage-shaped clusters unrelated to the PR under test. Root cause: the landing page's ecosystem section linked to `https://sphinx-needs.com`, which has a partial **server-side TLS fault** — some edge nodes return a TLS `internal_error` alert during the handshake, so it resolves from ~70% of GitHub runners and fails from the rest. (Reproducible with both Python `ssl` and `openssl`, while `github.com` / `readthedocs.io` / `useblocks.com` all handshake fine.) Because linkcheck is a required gate, a single bad route blocked unrelated PRs. useblocks/sphinx-test-reports#133 swapped that link to `sphinx-needs.readthedocs.io`, which stopped the flakiness but left the section cluttered: two near-identical Sphinx-Needs cards, a redundant Sphinx-Test-Reports card (linking to these very docs), and full-bleed images of wildly different sizes (the small 154×225 Sphinx-Test-Reports logo upscaled to a blurry full-card height). ## Change Rework the landing-page ecosystem section in `docs/index.rst`: - **Merge** the two Sphinx-Needs cards into one, with two buttons: - **Website @ useblocks.com** → `https://useblocks.com/open-source/sphinx-needs` — the working HTTPS redirect target of `sphinx-needs.com` - **Technical Docs** → `https://sphinx-needs.readthedocs.io/en/latest/` - **Drop** the redundant Sphinx-Test-Reports card (it pointed at the documentation it was shown in). - **Collapse** the "Sphinx-Needs Ecosystem" and "Other Sphinx extensions" sections into a single "Other Sphinx extensions" section listing the three related projects (Sphinx-Needs, Sphinx Collections, Sphinx Bazel) in one 3-up row. - **Tidy the logos**: replace the full-bleed `:img-top:` images with centered, height-capped (120px) logos in the card body — crisp, equally sized, compact. Plain `.. image::`, no theme-specific CSS, so it survives a theme change. ## Verification `https://useblocks.com/open-source/sphinx-needs` → **HTTP 200, 0 redirects, TLS 1.3** (the exact request linkcheck makes). No `sphinx-needs.com` references remain in the repo. --- Out of scope for this PR: the underlying defect is the broken TLS edge node on the useblocks-owned `sphinx-needs.com` (it also affects real visitors), and linkcheck still gates merges on third-party availability — making the job non-blocking or scheduled would be the durable fix. --- packages/sphinx-test-reports/docs/index.rst | 80 ++++++--------------- 1 file changed, 22 insertions(+), 58 deletions(-) diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index daa9dfe4e..e1dbfd07b 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -83,69 +83,36 @@ Content changelog -Sphinx-Needs Ecosystem ----------------------- -In the last years, we have created additional information and extensions, which are based on or related to Sphinx-Needs: +Other Sphinx extensions +----------------------- +In the last years, we have created several Sphinx extensions based on or related to Sphinx-Needs, to support the work of teams in (for example) the automotive industry: -.. grid:: 2 +.. grid:: 3 :gutter: 2 .. grid-item-card:: - :columns: 12 6 6 6 - :link: https://sphinx-needs.readthedocs.io/en/latest/ - :img-top: /_static/sphinx-needs-card.png + :columns: 12 6 4 4 :class-card: border - Sphinx-Needs.com - ^^^^^^^^^^^^^^^^ - The website presents the essential Sphinx-Needs functions and related extensions. - - Also, it is a good entry point to understand the benefits and get an idea about the complete ecosystem of Sphinx-Needs. - +++ - - .. button-link:: https://sphinx-needs.readthedocs.io/en/latest/ - :color: primary - :outline: + .. image:: /_static/sphinx-needs-card.png + :height: 120px :align: center - :expand: - - :octicon:`globe;1em;sd-text-primary` Sphinx-Needs.com - - .. grid-item-card:: - :columns: 12 6 6 6 - :link: https://sphinx-needs.readthedocs.io/en/latest/ - :img-top: /_static/sphinx-needs-card.png - :class-card: border Sphinx-Needs ^^^^^^^^^^^^ - Create, update, link, filter and present need objects like Requirements, Specifications, Bugs and many more. - - The base extension provides all of its functionality under the MIT license for free. + Create, update, link, filter and present need objects like Requirements, + Specifications, Bugs and many more — the free, MIT-licensed base extension. +++ - .. button-link:: https://sphinx-needs.readthedocs.io/en/latest/ + .. button-link:: https://useblocks.com/open-source/sphinx-needs :color: primary :outline: :align: center :expand: - :octicon:`book;1em;sd-text-primary` Technical Docs + :octicon:`globe;1em;sd-text-primary` Website @ useblocks.com - .. grid-item-card:: - :columns: 12 6 6 6 - :link: https://sphinx-test-reports.readthedocs.io/en/latest/ - :img-top: /_static/sphinx-test-reports-logo.png - :class-card: border - - Sphinx-Test-Reports - ^^^^^^^^^^^^^^^^^^^ - Extension to import test results from XML files as **need** objects. - - Created **need** objects can be filtered and linked to specification objects. - +++ - - .. button-link:: https://sphinx-test-reports.readthedocs.io/en/latest/ + .. button-link:: https://sphinx-needs.readthedocs.io/en/latest/ :color: primary :outline: :align: center @@ -153,21 +120,15 @@ In the last years, we have created additional information and extensions, which :octicon:`book;1em;sd-text-primary` Technical Docs - -Other Sphinx extensions -~~~~~~~~~~~~~~~~~~~~~~~ -During the use of Sphinx-Needs in popular companies’ internal projects, -we have created other Sphinx extensions to support the work of teams in the automotive industry: - -.. grid:: 2 - :gutter: 2 - .. grid-item-card:: - :columns: 12 6 6 6 + :columns: 12 6 4 4 :link: https://sphinx-collections.readthedocs.io/en/latest/ - :img-top: /_static/sphinx_collections_logo.png :class-card: border + .. image:: /_static/sphinx_collections_logo.png + :height: 120px + :align: center + Sphinx Collections ^^^^^^^^^^^^^^^^^^ Extension to collect or generate files from different sources and include them in the Sphinx source folder. @@ -184,11 +145,14 @@ we have created other Sphinx extensions to support the work of teams in the auto :octicon:`book;1em;sd-text-primary` Technical Docs .. grid-item-card:: - :columns: 12 6 6 6 + :columns: 12 6 4 4 :link: https://sphinx-bazel.readthedocs.io/en/latest/ - :img-top: /_static/sphinx_bazel_logo.png :class-card: border + .. image:: /_static/sphinx_bazel_logo.png + :height: 120px + :align: center + Sphinx Bazel ^^^^^^^^^^^^ Provides a Bazel domain in Sphinx documentation and allows the automated import of Bazel files and their documentation. From 982d0e1b9ae43edf82292d463b06a6a9d6afeacf Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 1 Sep 2026 21:19:01 +0200 Subject: [PATCH 133/159] feat: support the googletest XML dialect (useblocks/sphinx-test-reports#141) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First of a four-PR stack that makes `sphinx-test-reports` able to replace a hand-rolled test-link extension. Each PR is independently reviewable; this one is parser-only. googletest deviates from the pytest/nose JUnit flavour in ways that silently produced wrong or incomplete data: - **`status="notrun"` read as `passed`.** A disabled googletest case has no result child element, so it fell through the `skipped`/`failure`/`error` checks into `passed`. It is now `disabled`; the googletest `result="suppressed"` attribute is accepted as an equivalent signal. - **Only the first failure was kept.** googletest emits one `` per failed assertion, and `GTEST_SKIP` can fire repeatedly. All parts are now collected under a new `parts` key, each with kind, type, message and body text. - **`RecordProperty` in attribute form was invisible.** googletest wrote test-case properties as attributes before 1.8.1 (the form its official docs still show), and suite-level properties stayed attribute-only up to 1.15.x. Unknown attributes on ``/`` are now read as properties; `` children remain the modern form and win on conflict. - **`` was dropped entirely**, and `` read only its first block. Both are now collected and joined. - `timestamp`, `value_param` and `type_param` are parsed. ## Backwards compatibility The flat `type`/`text`/`message` keys still report the first part, including their historical per-kind defaults (`message` defaults to `""` for a failure and `"unknown"` for skipped/error), so existing consumers see no change. The result vocabulary keeps `failure` — it is a documented need field value and the `tr_failure` CSS class — and only gains `disabled`. Every new key defaults to `""` rather than being absent, so a consumer can emit each field unconditionally, and all of them are added to `DEFAULT_OPTIONS`; otherwise a new parsed key would reach `add_need` as an unexpected keyword argument. ## Verification 10 new tests against a googletest fixture covering the attribute matrix, plus the existing 61 — 71 passing, mypy strict and pre-commit clean, docs build clean with `-W`. --- .../sphinx-test-reports/docs/changelog.rst | 7 + .../sphinxcontrib/test_reports/config.py | 5 + .../sphinxcontrib/test_reports/junitparser.py | 206 +++++++++++++----- .../tests/doc_test/utils/gtest_data.xml | 31 +++ .../doc_test/utils/runner_error_data.xml | 21 ++ .../tests/test_junit_parser.py | 63 ++++++ .../tests/test_junit_parser_gtest.py | 137 ++++++++++++ 7 files changed, 419 insertions(+), 51 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/gtest_data.xml create mode 100644 packages/sphinx-test-reports/tests/doc_test/utils/runner_error_data.xml create mode 100644 packages/sphinx-test-reports/tests/test_junit_parser_gtest.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 12b9b2ff6..933436fe7 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,13 @@ Unreleased ---------- :Released: under development +* Feature: Support the googletest XML dialect: ``status="notrun"`` is reported + as ``disabled`` instead of ``passed``, all ````/```` parts + of a test case are kept instead of only the first, ``RecordProperty`` values + in attribute form are read (on ```` for googletest < 1.8.1 and on + ```` for suite-level properties up to 1.15.x), and ``timestamp``, + ``value_param`` and ``type_param`` are parsed. ```` is captured. + .. _`release:1.4.0`: 1.4.0 diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py index 91bf5449c..2f3411079 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py @@ -13,5 +13,10 @@ "text", "message", "system-out", + "system-err", + "parts", "properties", + "timestamp", + "value_param", + "type_param", ] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index e66e417c0..9717daf6b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -6,6 +6,116 @@ from lxml import etree, objectify +#: Attributes the JUnit/googletest dialects define themselves. Every *other* +#: attribute is a ``RecordProperty`` value in attribute form: googletest wrote +#: test-case properties as attributes before 1.8.1 (the form its official docs +#: still show), and suite-level properties stayed attribute-only up to 1.15.x. +TESTCASE_KNOWN_ATTRIBUTES = frozenset( + { + "assertions", + "classname", + "file", + "line", + "name", + "result", + "status", + "time", + "timestamp", + "type_param", + "value_param", + } +) + +TESTSUITE_KNOWN_ATTRIBUTES = frozenset( + { + "disabled", + "errors", + "failures", + "hostname", + "id", + "name", + "package", + "random_seed", + "skip", + "skipped", + "skips", + "tests", + "time", + "timestamp", + } +) + +#: ```` children carrying a result, in the precedence order used to +#: classify a case that has more than one kind of them. +RESULT_PART_KINDS = ("skipped", "failure", "error") + + +def _child_tag(child: objectify.ObjectifiedElement) -> str | None: + """Tag name of an lxml child, or ``None`` for comments and instructions.""" + tag = child.tag + return tag if isinstance(tag, str) else None + + +def _collect_properties( + xml_object: objectify.ObjectifiedElement, known_attributes: frozenset[str] +) -> dict[str, str]: + """Read ``RecordProperty`` values from both dialect forms. + + Unknown attributes are the legacy/attribute form; ```` children + are the modern form and therefore win on conflict. + """ + properties = { + name: value + for name, value in xml_object.attrib.items() + if name not in known_attributes + } + + if hasattr(xml_object, "properties") and hasattr(xml_object.properties, "property"): + for prop in xml_object.properties.property: + name = prop.attrib.get("name", "") + if name: + properties[name] = prop.attrib.get("value", "") + + return properties + + +def _collect_result_parts( + testcase: objectify.ObjectifiedElement, +) -> list[dict[str, str]]: + """Every ````/````/```` child, in document order. + + googletest emits one element per failed assertion and ``GTEST_SKIP`` can + fire repeatedly, so reading only the first part silently drops evidence. + The per-part ``type``/``message`` defaults match what the flat, historical + ``type``/``message`` keys have always reported for that kind. + """ + parts: list[dict[str, str]] = [] + for child in testcase.iterchildren(): + kind = _child_tag(child) + if kind not in RESULT_PART_KINDS: + continue + parts.append( + { + "kind": kind, + "type": child.attrib.get("type", "unknown"), + "message": child.attrib.get( + "message", "" if kind == "failure" else "unknown" + ), + "text": child.text or "", + } + ) + return parts + + +def _collect_captured_output(xml_object: objectify.ObjectifiedElement, tag: str) -> str: + """Join every ````/```` block of an element.""" + blocks = [ + child.text or "" + for child in xml_object.iterchildren() + if _child_tag(child) == tag + ] + return "\n".join(block for block in blocks if block) + class JUnitParser: def __init__(self, junit_xml, junit_xsd=None): @@ -53,53 +163,55 @@ def parse_testcase(xml_object): "line": int(testcase.attrib.get("line", -1)), "name": testcase.attrib.get("name", "unknown"), "time": float(testcase.attrib.get("time", -1)), + # googletest attributes; empty (never absent) so that consumers + # can emit every field unconditionally. + "timestamp": testcase.attrib.get("timestamp", ""), + "value_param": testcase.attrib.get("value_param", ""), + "type_param": testcase.attrib.get("type_param", ""), } - # The following data is normally a subnode (e.g. skipped/failure). - # We integrate it right into the testcase for better handling - if hasattr(testcase, "skipped"): - result = testcase.skipped - tc_dict["result"] = "skipped" - tc_dict["type"] = result.attrib.get("type", "unknown") - # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs - # result.text can be None for pytest xfail test cases - tc_dict["text"] = result.text or "" - tc_dict["message"] = result.attrib.get("message", "unknown") - elif hasattr(testcase, "failure"): - result = testcase.failure - tc_dict["result"] = "failure" - tc_dict["type"] = result.attrib.get("type", "unknown") - # tc_dict["text"] = re.sub(r"[\n\t]*", "", result.text) # Removes newlines and tabs - tc_dict["text"] = result.text or "" - tc_dict["message"] = result.attrib.get("message", "") - elif hasattr(testcase, "error"): - result = testcase.error - tc_dict["result"] = "error" - tc_dict["type"] = result.attrib.get("type", "unknown") - tc_dict["text"] = result.text or "" - tc_dict["message"] = result.attrib.get("message", "unknown") + # The result data is normally a subnode (e.g. skipped/failure). + # We integrate it right into the testcase for better handling, and + # keep *every* part -- the flat type/text/message keys below stay on + # the first one for backwards compatibility. + parts = _collect_result_parts(testcase) + tc_dict["parts"] = parts + + first_part = next( + ( + part + for kind in RESULT_PART_KINDS + for part in parts + if part["kind"] == kind + ), + None, + ) + if first_part is not None: + tc_dict["result"] = first_part["kind"] + tc_dict["type"] = first_part["type"] + # part text can be None for pytest xfail test cases + tc_dict["text"] = first_part["text"] + tc_dict["message"] = first_part["message"] else: - tc_dict["result"] = "passed" + # No result child at all, so the case either passed or never + # ran; failures, errors and skips are all handled above. + # googletest reports a disabled test as status="notrun" + # (result="suppressed"), which otherwise reads as a pass. + disabled = ( + testcase.attrib.get("status") == "notrun" + or testcase.attrib.get("result") == "suppressed" + ) + tc_dict["result"] = "disabled" if disabled else "passed" tc_dict["type"] = "" tc_dict["text"] = "" tc_dict["message"] = "" - if hasattr(testcase, "system-out"): - tc_dict["system-out"] = testcase["system-out"].text - else: - tc_dict["system-out"] = "" - - # Extract child elements as a dict - props = {} - if hasattr(testcase, "properties") and hasattr( - testcase.properties, "property" - ): - for prop in testcase.properties.property: - name = prop.attrib.get("name", "") - value = prop.attrib.get("value", "") - if name: - props[name] = value - tc_dict["properties"] = props + tc_dict["system-out"] = _collect_captured_output(testcase, "system-out") + tc_dict["system-err"] = _collect_captured_output(testcase, "system-err") + + tc_dict["properties"] = _collect_properties( + testcase, TESTCASE_KNOWN_ATTRIBUTES + ) return tc_dict @@ -130,17 +242,9 @@ def parse_testsuite(xml_object): "testsuite_nested": [], } - # Extract child elements as a dict - props = {} - if hasattr(testsuite, "properties") and hasattr( - testsuite.properties, "property" - ): - for prop in testsuite.properties.property: - name = prop.attrib.get("name", "") - value = prop.attrib.get("value", "") - if name: - props[name] = value - ts_dict["properties"] = props + ts_dict["properties"] = _collect_properties( + testsuite, TESTSUITE_KNOWN_ATTRIBUTES + ) # add nested testsuite objects to if hasattr(testsuite, "testsuite"): diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/gtest_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/gtest_data.xml new file mode 100644 index 000000000..0c6ac8daf --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/gtest_data.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/sphinx-test-reports/tests/doc_test/utils/runner_error_data.xml b/packages/sphinx-test-reports/tests/doc_test/utils/runner_error_data.xml new file mode 100644 index 000000000..0bcf5a654 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/utils/runner_error_data.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 9a6a324fe..00afcddd6 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -181,3 +181,66 @@ def test_parse_error_xml(): assert test_suite["testcases"][3]["name"] == "ASkippedTest" assert test_suite["testcases"][3]["result"] == "skipped" + + +xml_runner_error_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "runner_error_data.xml" +) + + +def _runner_error_case(name): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + suite = JUnitParser(xml_runner_error_path).parse()[0] + return next(case for case in suite["testcases"] if case["name"] == name) + + +def test_signal_killed_testcase_is_reported_as_error(): + """A crashed or signal-killed test must not read as passed. + + ```` is not a googletest construct -- the *runner* synthesizes a + report of this shape when the test binary dies without writing one (Bazel + does this from the test log on a crash or timeout). + """ + case = _runner_error_case("KilledBySigterm") + + assert case["result"] == "error" + assert case["message"] == "exited with error code 143" + assert "Received SIGTERM" in case["text"] + + +def test_error_testcase_keeps_its_source_location_and_captured_output(): + case = _runner_error_case("KilledBySigterm") + + assert case["file"] == "src/crash_test.cc" + assert case["line"] == 7 + assert case["system-err"] == "shutting down worker pool" + + +def test_all_error_parts_are_kept(): + """Only the first ```` used to be read, like failures and skips.""" + case = _runner_error_case("ReportsTwoErrors") + + assert case["result"] == "error" + assert [part["message"] for part in case["parts"]] == [ + "first error", + "second error", + ] + assert [part["kind"] for part in case["parts"]] == ["error", "error"] + + +def test_a_passing_testcase_next_to_errors_is_still_passed(): + case = _runner_error_case("Survivor") + + assert case["result"] == "passed" + assert case["parts"] == [] + + +def test_error_counts_are_taken_from_the_testsuite(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + suite = JUnitParser(xml_runner_error_path).parse()[0] + + assert suite["errors"] == 2 + assert suite["failures"] == 0 + assert suite["passed"] == 1 diff --git a/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py b/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py new file mode 100644 index 000000000..910e08176 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py @@ -0,0 +1,137 @@ +"""Tests for the googletest XML dialect (TR-C). + +googletest deviates from the pytest/nose JUnit flavour in ways that silently +produced wrong data before: + +* disabled tests are reported as ``status="notrun"`` (previously classified as + ``passed``, because no ````/```` child is present); +* a single test case may carry *several* ````/```` parts, of + which only the first one was read; +* ``RecordProperty`` values arrive as **attributes** rather than + ```` children -- on ```` for googletest < 1.8.1 (the + form the official docs still show) and on ```` for suite-level + properties up to 1.15.x; +* parameterised tests carry ``value_param``/``type_param``, and cases carry + their own ``timestamp``. +""" + +import os + +xml_gtest_path = os.path.join( + os.path.dirname(__file__), "doc_test/utils", "gtest_data.xml" +) + + +def _suites(): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + return JUnitParser(xml_gtest_path).parse() + + +def _case(suite_name, case_name): + for suite in _suites(): + if suite["name"] == suite_name: + for case in suite["testcases"]: + if case["name"] == case_name: + return case + raise AssertionError(f"case {suite_name}/{case_name} not found") + + +def test_notrun_status_is_reported_as_disabled(): + """``status="notrun"`` must not fall through to ``passed``.""" + assert _case("MathTest", "DISABLED_Division")["result"] == "disabled" + + +def test_all_failure_parts_are_kept(): + """googletest emits one ```` per assertion; keep every one.""" + case = _case("MathTest", "Subtraction") + + parts = case["parts"] + assert len(parts) == 2 + assert parts[0]["kind"] == "failure" + assert parts[0]["message"].startswith("src/math_test.cc:22") + assert "Expected equality of these values" in parts[0]["text"] + assert parts[1]["message"].startswith("src/math_test.cc:23") + assert "Actual: false" in parts[1]["text"] + + +def test_first_failure_part_stays_in_the_legacy_flat_keys(): + """``text``/``message`` keep their meaning for existing consumers.""" + case = _case("MathTest", "Subtraction") + + assert case["result"] == "failure" + assert case["message"] == case["parts"][0]["message"] + assert case["text"] == case["parts"][0]["text"] + + +def test_all_skipped_parts_are_kept(): + case = _case("ParamTest/0", "Legacy") + + assert case["result"] == "skipped" + assert [part["message"] for part in case["parts"]] == [ + "Skipped via GTEST_SKIP", + "second skip part", + ] + + +def test_system_err_is_captured(): + """``system-out`` was read, ``system-err`` was dropped entirely.""" + case = _case("MathTest", "Subtraction") + + assert case["system-out"] == "computing sums" + assert case["system-err"] == "overflow guard hit" + + +def test_testcase_attributes_are_read_as_properties(): + """The pre-1.8.1 / documented attribute form of ``RecordProperty``.""" + case = _case("ParamTest/0", "Legacy") + + assert case["properties"]["Requirement"] == "REQ_9" + assert case["properties"]["TestType"] == "interface-test" + + +def test_known_testcase_attributes_are_not_mistaken_for_properties(): + """Only *unknown* attributes are properties; the dialect's own are not.""" + case = _case("MathTest", "Addition") + + assert case["properties"] == { + "PartiallyVerifies": "REQ_1, REQ_2", + "TestType": "requirements-based", + } + + +def test_testsuite_attributes_are_read_as_properties(): + """Suite-level ``RecordProperty`` is attribute-only up to googletest 1.15.""" + suite = next(s for s in _suites() if s["name"] == "MathTest") + + assert suite["properties"]["Owner"] == "platform-team" + assert suite["properties"]["Component"] == "math" + assert "tests" not in suite["properties"] + assert "timestamp" not in suite["properties"] + + +def test_parameterised_and_timestamp_attributes_are_parsed(): + works = _case("ParamTest/0", "Works/0") + + assert works["value_param"] == "42" + assert works["type_param"] == "int" + assert _case("MathTest", "Addition")["timestamp"] == "2026-08-31T10:00:01" + + +def test_absent_optional_attributes_are_empty_not_missing(): + """Converters must be able to emit every field unconditionally.""" + case = _case("MathTest", "Subtraction") + + assert case["value_param"] == "" + assert case["type_param"] == "" + assert case["timestamp"] == "" + + +def test_a_testcase_without_any_properties_yields_an_empty_dict(): + """Known dialect attributes must not leak in as properties. + + ``Works/0`` carries ``value_param``/``type_param`` and no ```` + element, so the result has to be an empty dict rather than those two + attributes. + """ + assert _case("ParamTest/0", "Works/0")["properties"] == {} From 7b9ca303b510083eaa24bf5783acdc05eeb9f67d Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Thu, 3 Sep 2026 19:49:02 +0200 Subject: [PATCH 134/159] feat: expose the test-case source location as need fields (useblocks/sphinx-test-reports#142) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Second of four. **Stacked on useblocks/sphinx-test-reports#141** — review that one first; this PR's diff against it is small. The JUnit/googletest `` attributes `file` and `line` point at the test source. The parser read them, but they never reached `add_need`. ## The blocker, and the latent bug behind it The need field `file` already carries the path of the XML *report*. `tr_file_option` exists to rename that field — but it was only half wired: the field *registration* honoured it while all three directives kept passing a hardcoded `file=`. So setting `tr_file_option = "report_file"` did not free the name `file`; it produced a need carrying an unregistered field, and the build failed inside `add_need`. That is fixed here, which is what makes the rest possible. ## What this adds - All three directives pass the report path under the configured field name, so `tr_file_option` works end to end. - Two new options name the fields carrying the source location: `tr_source_file_option` (default `case_file`) and `tr_source_line_option` (default `case_line`). Both are registered and always emitted by the `test-case` directive. - The defaults avoid the collision. A project whose metamodel spells the source location verbatim as `file`/`line` gets there by renaming the report field instead — field names are configuration, not policy. - The parser's absent-attribute sentinels (`"unknown"`, `-1`) become empty strings, so a report without file/line yields empty fields rather than a fake location. This is the norm for pytest: its default `junit_family = xunit2` filters those attributes off `` entirely, and only `xunit1`/`legacy` emit them. - Two options resolving to the same field name previously produced a bare `TypeError` from inside a directive (`add_need` receiving one keyword twice). It is now an `InvalidConfigurationError` naming both options. `tr_file_option` was undocumented despite already existing; it is documented here alongside the two new options. ## Verification 11 new tests — two Sphinx fixture projects (default names, and renamed so the source location occupies `file`/`line`) plus unit tests for the collision check. 82 passing, mypy strict and pre-commit clean, docs build clean with `-W`. --- .../sphinx-test-reports/docs/changelog.rst | 6 + .../docs/configuration.rst | 54 ++++++ .../test_reports/directives/test_case.py | 3 +- .../test_reports/directives/test_common.py | 28 ++++ .../test_reports/directives/test_file.py | 2 +- .../test_reports/directives/test_suite.py | 2 +- .../test_reports/test_reports.py | 48 ++++++ .../tests/doc_test/source_location/conf.py | 18 ++ .../tests/doc_test/source_location/index.rst | 14 ++ .../doc_test/source_location_renamed/conf.py | 25 +++ .../source_location_renamed/index.rst | 14 ++ .../tests/test_source_location.py | 154 ++++++++++++++++++ 12 files changed, 365 insertions(+), 3 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/source_location/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/source_location/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/source_location_renamed/index.rst create mode 100644 packages/sphinx-test-reports/tests/test_source_location.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 933436fe7..09f87a031 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -13,6 +13,12 @@ Unreleased in attribute form are read (on ```` for googletest < 1.8.1 and on ```` for suite-level properties up to 1.15.x), and ``timestamp``, ``value_param`` and ``type_param`` are parsed. ```` is captured. +* Feature: The source location of a test case is available as Sphinx-Needs + fields, configurable via the new ``tr_source_file_option`` and + ``tr_source_line_option``. +* Bugfix: ``tr_file_option`` is now honoured by the directives, not only by the + field registration. Renaming the field previously produced needs carrying an + unregistered field. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index ae19e779e..da6f4690a 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -107,6 +107,60 @@ This may be needed, if a junit-xml files contains many test cases. Default: **5** +.. _tr_file_option: + +tr_file_option +-------------- + +Name of the Sphinx-Needs field that carries the path of the test-result *report* +(the file given to the directive). + +Renaming it frees the field names ``file`` and ``line`` for the *test source* +location, see :ref:`tr_source_file_option`. + +Default: **file** + +.. _tr_source_file_option: + +tr_source_file_option +--------------------- +.. versionadded:: 1.5.0 + +Name of the Sphinx-Needs field that carries the source file of a test case, +taken from the ``file`` attribute of the JUnit/googletest ```` +element. + +The default avoids a collision with :ref:`tr_file_option`. To spell the source +location verbatim as ``file`` and ``line`` -- as some metamodels require -- +rename the report field instead: + +.. code-block:: python + + tr_file_option = "report_file" + tr_source_file_option = "file" + tr_source_line_option = "line" + +Each of the three options must name a different field; otherwise the build stops +with a configuration error. + +The field is empty when the XML carries no ``file`` attribute. With pytest this +is the norm: it emits ``file``/``line`` only with ``junit_family = xunit1`` (or +``legacy``), while its default ``xunit2`` filters those attributes out. + +Default: **case_file** + +.. _tr_source_line_option: + +tr_source_line_option +--------------------- +.. versionadded:: 1.5.0 + +Name of the Sphinx-Needs field that carries the source line of a test case, +taken from the ``line`` attribute of the ```` element. +See :ref:`tr_source_file_option`. + +Default: **case_line** + .. _tr_extra_options: tr_extra_options diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index d8f2fefe6..7469d3978 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -202,7 +202,6 @@ def run(self, nested=False, suite_count=-1, case_count=-1): tags=self.test_tags, status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suite=suite["name"], case=case_full_name, case_name=case_name, @@ -211,6 +210,8 @@ def run(self, nested=False, suite_count=-1, case_count=-1): result=result, time=time_str, style=style, + **{self.report_file_field(): self.test_file_given}, + **self.source_location_fields(case), **self.extra_options, ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 9b099789b..1617c99bb 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -57,6 +57,34 @@ def __init__(self, *args, **kwargs): self.log = logging.getLogger(__name__) + def report_file_field(self): + """Need field carrying the XML report path (renameable via config). + + Renaming it is what frees ``file``/``line`` for the *test source* + location, so every directive must honour the option -- not only the + field registration. + """ + return getattr(self.app.config, "tr_file_option", "file") + + def source_location_fields(self, case): + """Need fields for the ```` file/line attributes. + + The parser reports ``"unknown"``/``-1`` when the attributes are absent, + which is the norm for pytest: its default ``junit_family = xunit2`` + filters them out. Those sentinels become empty strings, so the fields + are always present and never carry a fake location. + """ + file_field = getattr(self.app.config, "tr_source_file_option", "case_file") + line_field = getattr(self.app.config, "tr_source_line_option", "case_line") + + source_file = case.get("file", "unknown") + source_line = case.get("line", -1) + + return { + file_field: "" if source_file in ("unknown", None) else str(source_file), + line_field: "" if source_line in (-1, None) else str(source_line), + } + def collect_extra_options(self): """Collect any extra options and their values that were specified in the directive""" tr_extra_options = getattr(self.app.config, "tr_extra_options", []) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py index 38741acbc..b3c0b3ef7 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py @@ -78,13 +78,13 @@ def run(self): tags=self.test_tags, status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suites=suites, cases=cases, passed=passed, skipped=skipped, failed=failed, errors=errors, + **{self.report_file_field(): self.test_file_given}, **self.extra_options, ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index d2882d14f..396fa3473 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -104,13 +104,13 @@ def run(self, nested=False, count=-1): tags=self.test_tags, status=self.test_status, collapse=self.collapse, - file=self.test_file_given, suite=suite["name"], cases=cases, passed=passed, skipped=skipped, failed=failed, errors=errors, + **{self.report_file_field(): self.test_file_given}, **self.extra_options, ) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index ca31b68fb..228e08d0d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -28,6 +28,7 @@ TestSuiteDirective, ) from sphinxcontrib.test_reports.environment import install_styles_static_files +from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError from sphinxcontrib.test_reports.functions import tr_link sphinx_version = sphinx.__version__ @@ -99,7 +100,14 @@ def setup(app: Sphinx): * test_report """ + # Name of the need field carrying the path of the XML *report*. app.add_config_value("tr_file_option", "file", "html") + # Names of the need fields carrying the *test source* location taken from + # the file/line attributes. Defaults avoid the collision with + # tr_file_option above; set both to "file"/"line" (and tr_file_option to + # something else) to match a metamodel that spells them verbatim. + app.add_config_value("tr_source_file_option", "case_file", "html") + app.add_config_value("tr_source_line_option", "case_line", "html") log = logging.getLogger(__name__) log.info("Setting up sphinx-test-reports extension") @@ -224,11 +232,39 @@ def tr_preparation(app, *args): app.add_directive(app.config.tr_case[0], TestCaseDirective) +def check_field_name_collisions(config) -> None: + """Reject configurations where two field options name the same need field. + + The report path and the test-source location are separate fields; if two + options resolve to one name, ``add_need`` receives the same keyword twice + and fails with a bare ``TypeError`` from inside a directive. + """ + options = { + "tr_file_option": getattr(config, "tr_file_option", "file"), + "tr_source_file_option": getattr(config, "tr_source_file_option", "case_file"), + "tr_source_line_option": getattr(config, "tr_source_line_option", "case_line"), + } + + for name, value in options.items(): + clashing = [ + other + for other, other_value in options.items() + if other != name and other_value == value + ] + if clashing: + raise InvalidConfigurationError( + f"{name} and {', '.join(sorted(clashing))} are all set to " + f"'{value}'; each must name a different need field." + ) + + def sphinx_needs_update(app: Sphinx, config: Config) -> None: """ sphinx-needs configuration """ + check_field_name_collisions(config) + needs_version = Version(sphinx_needs.__version__) use_schema = needs_version >= Version("6.0.0") @@ -236,6 +272,16 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: _register_field( app, getattr(config, "tr_file_option", "file"), schema={"type": "string"} ) + _register_field( + app, + getattr(config, "tr_source_file_option", "case_file"), + schema={"type": "string"}, + ) + _register_field( + app, + getattr(config, "tr_source_line_option", "case_line"), + schema={"type": "string"}, + ) _register_field(app, "suite", schema={"type": "string"}) _register_field(app, "case", schema={"type": "string"}) _register_field(app, "case_name", schema={"type": "string"}) @@ -251,6 +297,8 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: _register_field(app, "result", schema={"type": "string"}) else: _register_field(app, getattr(config, "tr_file_option", "file")) + _register_field(app, getattr(config, "tr_source_file_option", "case_file")) + _register_field(app, getattr(config, "tr_source_line_option", "case_line")) _register_field(app, "suite") _register_field(app, "case") _register_field(app, "case_name") diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py b/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py new file mode 100644 index 000000000..227a99fde --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py @@ -0,0 +1,18 @@ +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +source_suffix = ".rst" +master_doc = "index" + +project = "source-location-test" +copyright = "2026, test" +author = "test" +version = "1.0" +release = "1.0" +language = "en" +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +html_theme = "alabaster" diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location/index.rst b/packages/sphinx-test-reports/tests/doc_test/source_location/index.rst new file mode 100644 index 000000000..6c688e60b --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/source_location/index.rst @@ -0,0 +1,14 @@ +Source Location Test +==================== + +.. test-file:: GTest Report + :id: SRCLOC_TF_1 + :file: ../utils/gtest_data.xml + :auto_suites: + :auto_cases: + +.. test-file:: Pytest Report Without Line Attributes + :id: SRCLOC_TF_2 + :file: ../utils/pytest_data.xml + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py new file mode 100644 index 000000000..f3d3b2396 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py @@ -0,0 +1,25 @@ +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +source_suffix = ".rst" +master_doc = "index" + +project = "source-location-renamed-test" +copyright = "2026, test" +author = "test" +version = "1.0" +release = "1.0" +language = "en" +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +html_theme = "alabaster" + +# Free up "file"/"line" for the *source* location by renaming the field that +# carries the XML report path (the S-CORE metamodel spells the source location +# verbatim as file/line). +tr_file_option = "report_file" +tr_source_file_option = "file" +tr_source_line_option = "line" diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/index.rst b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/index.rst new file mode 100644 index 000000000..60d6abe40 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/index.rst @@ -0,0 +1,14 @@ +Source Location Renamed Test +============================ + +.. test-file:: GTest Report + :id: SRCLOCR_TF_1 + :file: ../utils/gtest_data.xml + :auto_suites: + :auto_cases: + +.. test-file:: Pytest Report Without Line Attributes + :id: SRCLOCR_TF_2 + :file: ../utils/pytest_data.xml + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/test_source_location.py b/packages/sphinx-test-reports/tests/test_source_location.py new file mode 100644 index 000000000..1450d616f --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_source_location.py @@ -0,0 +1,154 @@ +"""Tests for the test-case source location as need fields (TR-D). + +The JUnit/googletest ```` attributes ``file`` and ``line`` point at +the *test source*. They were parsed but never reached ``add_need``, because the +need field ``file`` already carries the path of the XML *report* -- and +``tr_file_option``, which exists to rename that field, was only half wired: the +registration honoured it while the directives kept passing ``file=``. +""" + +from pathlib import Path + +import pytest + + +def _field_values(html, field): + """All rendered values of a sphinx-needs meta field.""" + from bs4 import BeautifulSoup + + soup = BeautifulSoup(html, "html.parser") + return [ + span.get_text(strip=True) + for span in soup.select(f"span.needs_{field} span.needs_data") + ] + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/source_location"}], + indirect=True, +) +class TestSourceLocationDefaultFieldNames: + """Out of the box the source location lands on ``case_file``/``case_line``.""" + + def test_build_succeeds(self, test_app): + app = test_app + app.build() + assert app.statuscode == 0 + + def test_source_file_is_a_need_field(self, test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "src/math_test.cc" in _field_values(html, "case_file") + + def test_source_line_is_a_need_field(self, test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "12" in _field_values(html, "case_line") + + def test_report_path_stays_on_the_file_field(self, test_app): + """The existing meaning of ``file`` is unchanged by default.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert any( + value.endswith("gtest_data.xml") for value in _field_values(html, "file") + ) + + def test_missing_line_attribute_renders_empty_not_the_sentinel(self, test_app): + """pytest's default junit_family drops file/line; -1 must not leak.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "-1" not in _field_values(html, "case_line") + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/source_location_renamed"}], + indirect=True, +) +class TestSourceLocationRenamedFieldNames: + """``tr_file_option`` frees ``file``/``line`` for the source location.""" + + def test_build_succeeds(self, test_app): + app = test_app + app.build() + assert app.statuscode == 0 + + def test_source_location_uses_the_configured_names(self, test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "src/math_test.cc" in _field_values(html, "file") + assert "12" in _field_values(html, "line") + + def test_report_path_moved_to_the_renamed_field(self, test_app): + """The half-wired rename: directives must honour tr_file_option too.""" + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert any( + value.endswith("gtest_data.xml") + for value in _field_values(html, "report_file") + ) + + +class TestFieldNameCollisionIsRejected: + """Two options resolving to one field name must fail loudly, not crash. + + Without the check, ``add_need`` is called with the same keyword twice and + raises a bare ``TypeError`` from deep inside a directive. + """ + + class _Config: + def __init__(self, **values): + self.__dict__.update(values) + + def test_report_and_source_file_sharing_a_name_is_an_error(self): + from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError + from sphinxcontrib.test_reports.test_reports import check_field_name_collisions + + config = self._Config( + tr_file_option="file", + tr_source_file_option="file", + tr_source_line_option="line", + ) + + with pytest.raises(InvalidConfigurationError) as exc: + check_field_name_collisions(config) + + assert "tr_file_option" in str(exc.value) + assert "tr_source_file_option" in str(exc.value) + + def test_source_file_and_source_line_sharing_a_name_is_an_error(self): + from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError + from sphinxcontrib.test_reports.test_reports import check_field_name_collisions + + config = self._Config( + tr_file_option="report_file", + tr_source_file_option="location", + tr_source_line_option="location", + ) + + with pytest.raises(InvalidConfigurationError): + check_field_name_collisions(config) + + def test_distinct_names_are_accepted(self): + from sphinxcontrib.test_reports.test_reports import check_field_name_collisions + + config = self._Config( + tr_file_option="report_file", + tr_source_file_option="file", + tr_source_line_option="line", + ) + + assert check_field_name_collisions(config) is None From 2dd3214d797dbe49ee45acc8277f82b50064ef11 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Fri, 4 Sep 2026 22:10:47 +0200 Subject: [PATCH 135/159] feat: opt-in deterministic test-case need IDs (useblocks/sphinx-test-reports#143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Third of four. **Stacked on useblocks/sphinx-test-reports#142.** ## The problem The default auto-ID hashes *(type, title, content)*, and a test case's content carries its failure text. So the need ID of a test case **changes when the test starts failing differently**. Anything holding a reference breaks: build caches, a link authored from a test specification to its expected result, and every diff of an exported needs.json. ## The scheme A new Sphinx-free module derives the ID from where the test *is*: ``` {type}__{Classname__Casename}_{shorthash(file + name)} ``` with five lowercase base32 letters of sha256. Sphinx-free on purpose — the same identity has to be derivable from a converter CLI and a build action, not only from the directives. Enabled with `tr_deterministic_case_ids = True`; **off by default**, because turning it on changes IDs. Both ID-producing paths honour it — the `test-case` directive's own fallback and the parent-scoped ID that `:auto_cases:` generates — while an explicitly authored `:id:` always wins. Suite IDs are unaffected. ## Two things that bite on adoption, both documented - **The IDs are lowercase**, which the sphinx-needs default `needs_id_regex` (`^[A-Z0-9_]{5,}`) rejects for local needs. It has to be relaxed, e.g. to `^[A-Za-z0-9_-]{6,}`. External needs skip the check entirely, which is why a generator producing external needs never hits this. - **googletest parameterised suites put `/` into class and case names** (`ParamTest/0`), which is neither a legal need ID nor a usable HTML anchor. The readable part of the ID is reduced to `[A-Za-z0-9_]`, while the digest is taken over the raw name — so IDs stay byte-identical to the scheme's wherever the name is already ID-safe, and are valid where it would otherwise produce an unusable one. ## Verification 22 new tests: unit tests pinning the hash, display name and ID format against literal expected values, plus a Sphinx fixture project asserting the five expected IDs render and that the previous parent-scoped case fragment is gone. 104 passing, mypy strict and pre-commit clean, docs build clean with `-W`. --- .../sphinx-test-reports/docs/changelog.rst | 3 + .../docs/configuration.rst | 31 +++++ .../test_reports/directives/test_case.py | 7 ++ .../test_reports/directives/test_common.py | 13 ++ .../test_reports/directives/test_suite.py | 20 ++-- .../sphinxcontrib/test_reports/identity.py | 71 +++++++++++ .../test_reports/test_reports.py | 4 + .../tests/doc_test/deterministic_ids/conf.py | 25 ++++ .../doc_test/deterministic_ids/index.rst | 8 ++ .../tests/test_deterministic_ids.py | 69 +++++++++++ .../tests/test_identity.py | 113 ++++++++++++++++++ 11 files changed, 356 insertions(+), 8 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/deterministic_ids/index.rst create mode 100644 packages/sphinx-test-reports/tests/test_deterministic_ids.py create mode 100644 packages/sphinx-test-reports/tests/test_identity.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 09f87a031..a74826fcc 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -19,6 +19,9 @@ Unreleased * Bugfix: ``tr_file_option`` is now honoured by the directives, not only by the field registration. Renaming the field previously produced needs carrying an unregistered field. +* Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from + the source location instead of the need content, so an ID no longer changes + when a test starts failing differently. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index da6f4690a..85417b9b6 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -161,6 +161,37 @@ See :ref:`tr_source_file_option`. Default: **case_line** +.. _tr_deterministic_case_ids: + +tr_deterministic_case_ids +------------------------- +.. versionadded:: 1.5.0 + +Derive test-case IDs from the source location and the case name instead of +hashing the need's type, title and content. + +The default ID includes the need content, which carries the failure text -- so +the ID of a test case changes when the test starts failing differently. That +breaks anything holding a reference to it: build caches, a link authored from a +test specification to its expected result, and diffs of an exported needs.json. + +With this option enabled, IDs have the form +``{type}__{Classname__Casename}_{hash}``, where the hash is derived from the +source file and the case name. Both ID-producing paths honour it: the +``test-case`` directive and the IDs generated by ``:auto_cases:``. An explicitly +authored ``:id:`` always wins. Test-suite IDs are unaffected. + +Two notes when enabling it: + +* The IDs are lowercase, which the Sphinx-Needs default ``needs_id_regex`` + (``^[A-Z0-9_]{5,}``) rejects for local needs. Relax it, for example to + ``^[A-Za-z0-9_-]{6,}``. +* googletest parameterised suites put ``/`` into class and case names. The + readable part of the ID is reduced to ``[A-Za-z0-9_]`` so it stays a legal ID + and HTML anchor. + +Default: **False** + .. _tr_extra_options: tr_extra_options diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 7469d3978..9bdfa5ffd 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -99,6 +99,13 @@ def run(self, nested=False, suite_count=-1, case_count=-1): f"and testsuite {suite_name}" ) + # A deterministic ID must come from the located case, which is only + # known here. An explicitly authored :id: always wins. + if "id" not in self.options: + deterministic_id = self.deterministic_case_id_for(case) + if deterministic_id is not None: + self.test_id = deterministic_id + result = case["result"] content = self.test_content if case["text"] is not None and len(case["text"]) > 0: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py index 1617c99bb..6f90936a5 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py @@ -15,6 +15,7 @@ SphinxError, TestReportFileNotSetError, ) +from sphinxcontrib.test_reports.identity import deterministic_case_id from sphinxcontrib.test_reports.jsonparser import JsonParser from sphinxcontrib.test_reports.junitparser import JUnitParser @@ -85,6 +86,18 @@ def source_location_fields(self, case): line_field: "" if source_line in (-1, None) else str(source_line), } + def deterministic_case_id_for(self, case): + """Deterministic ID for ``case``, or ``None`` if the option is off.""" + if not getattr(self.app.config, "tr_deterministic_case_ids", False): + return None + + return deterministic_case_id( + classname=case.get("classname", ""), + name=case.get("name", ""), + file=case.get("file", ""), + prefix=self.app.config.tr_case[1], + ) + def collect_extra_options(self): """Collect any extra options and their values that were specified in the directive""" tr_extra_options = getattr(self.app.config, "tr_extra_options", []) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py index 396fa3473..79640735e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py @@ -163,15 +163,19 @@ def run(self, nested=False, count=-1): case_count = 0 for case in suite["testcases"]: - case_id = self.test_id - case_id += ( - "_" - + hashlib.sha1( - case["classname"].encode("UTF-8") + case["name"].encode("UTF-8") + case_id = self.deterministic_case_id_for(case) + if case_id is None: + # Default: a hash fragment scoped to the parent suite. + case_id = self.test_id + case_id += ( + "_" + + hashlib.sha1( + case["classname"].encode("UTF-8") + + case["name"].encode("UTF-8") + ) + .hexdigest() + .upper()[: self.app.config.tr_case_id_length] ) - .hexdigest() - .upper()[: self.app.config.tr_case_id_length] - ) if case_id not in self.case_ids: self.case_ids.append(case_id) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py new file mode 100644 index 000000000..cac3f8f44 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py @@ -0,0 +1,71 @@ +"""Deterministic identities for test-case needs. + +Sphinx-free by design: the same identities must be derivable from a build +action, a converter CLI and the Sphinx directives, so nothing here may import +Sphinx or sphinx-needs. + +The scheme is byte-compatible with the one S-CORE's ``score_source_code_linker`` +produces, so a project can adopt sphinx-test-reports without any of its +test-case need IDs moving. +""" + +import base64 +import hashlib +import re + +#: Stand-in for a missing source file, so a case without a ``file`` attribute +#: still gets a stable identity instead of an unstable or empty one. +PLACEHOLDER_FILE = "" + +#: Value the JUnit parser reports for an attribute that is absent. +UNKNOWN = "unknown" + +#: Characters a need ID may consist of. googletest parameterised suites put +#: ``/`` into both the class and the case name, which is neither a legal need ID +#: (sphinx-needs validates IDs against ``needs_id_regex``) nor a usable HTML +#: anchor. +_UNSAFE_ID_CHARS = re.compile(r"[^A-Za-z0-9_]") + + +def short_hash(value: str, length: int = 5) -> str: + """Stable short digest of ``value``: lowercase base32 letters of sha256.""" + digest = hashlib.sha256(value.encode()).digest() + base32 = base64.b32encode(digest).decode("utf-8").rstrip("=") + letters_only = "".join(character for character in base32 if character.isalpha()) + return letters_only[:length].lower() + + +def case_display_name(classname: str, name: str) -> str: + """Human-readable case name: ``Classname__Casename``. + + Only the last dot-separated segment of the class name is used, matching how + both googletest and pytest report a fully qualified class path. + """ + if not classname or classname == UNKNOWN: + return name + return f"{classname.split('.')[-1]}__{name}" + + +def deterministic_case_id( + *, + classname: str, + name: str, + file: str, + prefix: str = "testcase", + hash_length: int = 5, +) -> str: + """ID derived from *where the test is*, never from what it reported. + + Deriving it from the source location and the case name -- and not from the + need's content, as the default auto-ID does -- keeps the ID stable when a + test starts failing differently, which is what build caches and + pre-authored links to a test case depend on. + + The digest is taken over the *raw* display name so it matches S-CORE's + value exactly; only the readable part of the ID is sanitised. + """ + display_name = case_display_name(classname, name) + source_file = PLACEHOLDER_FILE if not file or file == UNKNOWN else file + digest = short_hash(source_file + display_name, length=hash_length) + safe_name = _UNSAFE_ID_CHARS.sub("_", display_name) + return f"{prefix}__{safe_name}_{digest}" diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 228e08d0d..224ed81de 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -108,6 +108,10 @@ def setup(app: Sphinx): # something else) to match a metamodel that spells them verbatim. app.add_config_value("tr_source_file_option", "case_file", "html") app.add_config_value("tr_source_line_option", "case_line", "html") + # Derive test-case IDs from the source location and case name instead of + # hashing (type, title, content) -- the latter moves the ID when a test + # starts failing differently. Off by default: enabling it changes IDs. + app.add_config_value("tr_deterministic_case_ids", False, "html") log = logging.getLogger(__name__) log.info("Setting up sphinx-test-reports extension") diff --git a/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py new file mode 100644 index 000000000..05de723c3 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py @@ -0,0 +1,25 @@ +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +source_suffix = ".rst" +master_doc = "index" + +project = "deterministic-ids-test" +copyright = "2026, test" +author = "test" +version = "1.0" +release = "1.0" +language = "en" +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +html_theme = "alabaster" + +# Opt in to source-derived, SCORE-compatible test-case IDs. +tr_deterministic_case_ids = True + +# The scheme produces lowercase IDs, which the sphinx-needs default +# ("^[A-Z0-9_]{5,}") rejects. This is the value S-CORE itself uses. +needs_id_regex = "^[A-Za-z0-9_-]{6,}" diff --git a/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/index.rst b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/index.rst new file mode 100644 index 000000000..67c6b3f5c --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/index.rst @@ -0,0 +1,8 @@ +Deterministic IDs Test +====================== + +.. test-file:: GTest Report + :id: DETID_TF_1 + :file: ../utils/gtest_data.xml + :auto_suites: + :auto_cases: diff --git a/packages/sphinx-test-reports/tests/test_deterministic_ids.py b/packages/sphinx-test-reports/tests/test_deterministic_ids.py new file mode 100644 index 000000000..eac2f8312 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_deterministic_ids.py @@ -0,0 +1,69 @@ +"""Sphinx-level tests for the opt-in deterministic test-case IDs (TR-G). + +Both ID-producing paths must honour the scheme: the ``test-case`` directive's +own fallback ID, and the parent-scoped ID that ``:auto_cases:`` generates. +Expected values come from tests/test_identity.py, which pins them against +S-CORE's implementation. +""" + +import hashlib +from pathlib import Path + +import pytest + +EXPECTED_IDS = [ + "testcase__MathTest__Addition_hcuyy", + "testcase__MathTest__Subtraction_srmht", + "testcase__MathTest__DISABLED_Division_jnyzp", + "testcase__ParamTest_0__Works_0_ugfea", + "testcase__ParamTest_0__Legacy_owuvz", +] + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/deterministic_ids"}], + indirect=True, +) +class TestDeterministicIdsEnabled: + def test_build_succeeds(self, test_app): + app = test_app + app.build() + assert app.statuscode == 0 + + @pytest.mark.parametrize("need_id", EXPECTED_IDS) + def test_auto_cases_use_the_deterministic_id(self, test_app, need_id): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert need_id in html + + def test_the_parent_scoped_case_id_is_replaced_not_added(self, test_app): + """The old scheme hashed sha1(classname + name) under the suite ID. + + Suite IDs stay parent-scoped -- TR-G is about *case* identity -- so this + asserts on the case fragment specifically. + """ + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + old_case_fragment = ( + hashlib.sha1(b"MathTest" + b"Addition").hexdigest().upper()[:5] + ) + assert f"_{old_case_fragment}" not in html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/source_location"}], + indirect=True, +) +class TestDeterministicIdsDisabledByDefault: + def test_ids_are_unchanged_without_the_option(self, test_app): + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text(encoding="utf-8") + + assert "testcase__MathTest__Addition_hcuyy" not in html diff --git a/packages/sphinx-test-reports/tests/test_identity.py b/packages/sphinx-test-reports/tests/test_identity.py new file mode 100644 index 000000000..45d355118 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_identity.py @@ -0,0 +1,113 @@ +"""Tests for deterministic test-case need IDs (TR-G). + +The default auto-ID hashes *(type, title, content)*, and the content of a test +case carries its failure text -- so a need's ID changes when a test starts +failing differently. That breaks anything holding a reference to it: build +caches, pre-authored links from a test specification, and diffs of an exported +needs.json. + +The opt-in scheme here is byte-compatible with the ID scheme S-CORE's +``score_source_code_linker`` produces (``testcase__{name}_{shorthash}`` with +five lowercase base32 letters of ``sha256(file + name)``), so a project can +migrate to sphinx-test-reports without any of its need IDs moving. + +The expected values below were computed with S-CORE's own implementation +(``score_source_code_linker/xml_parser.py::short_hash``). +""" + +import pytest + +from sphinxcontrib.test_reports.identity import ( + PLACEHOLDER_FILE, + case_display_name, + deterministic_case_id, + short_hash, +) + + +class TestShortHash: + def test_matches_the_score_implementation(self): + assert short_hash("src/math_test.ccMathTest__Addition") == "hcuyy" + + def test_is_lowercase_letters_only(self): + digest = short_hash("anything at all") + + assert digest.isalpha() + assert digest.islower() + + def test_length_is_configurable(self): + assert len(short_hash("value", length=8)) == 8 + + def test_differs_for_different_input(self): + assert short_hash("a") != short_hash("b") + + +class TestCaseDisplayName: + def test_joins_the_last_classname_segment_with_the_case_name(self): + assert case_display_name("tests.test_cli", "test_help") == "test_cli__test_help" + + def test_without_a_classname_it_is_the_case_name(self): + assert case_display_name("", "Standalone") == "Standalone" + + def test_unknown_classname_is_treated_as_absent(self): + """The parser reports "unknown" when the attribute is missing.""" + assert case_display_name("unknown", "Standalone") == "Standalone" + + +class TestDeterministicCaseId: + def test_is_score_compatible(self): + assert ( + deterministic_case_id( + classname="MathTest", name="Addition", file="src/math_test.cc" + ) + == "testcase__MathTest__Addition_hcuyy" + ) + + def test_absent_file_uses_the_placeholder(self): + assert ( + deterministic_case_id(classname="", name="Standalone", file="") + == "testcase__Standalone_qwnmf" + ) + assert PLACEHOLDER_FILE == "" + + def test_result_details_do_not_take_part_in_the_identity(self): + """The whole point: a differently failing test keeps its ID.""" + first = deterministic_case_id( + classname="MathTest", name="Addition", file="src/math_test.cc" + ) + second = deterministic_case_id( + classname="MathTest", name="Addition", file="src/math_test.cc" + ) + + assert first == second + + def test_moving_the_source_file_changes_the_id(self): + moved = deterministic_case_id( + classname="MathTest", name="Addition", file="src/moved_test.cc" + ) + + assert moved != "testcase__MathTest__Addition_hcuyy" + + def test_prefix_is_configurable(self): + assert deterministic_case_id( + classname="MathTest", name="Addition", file="src/math_test.cc", prefix="tc" + ).startswith("tc__MathTest__Addition_") + + @pytest.mark.parametrize( + ("classname", "name", "expected_id"), + [ + # googletest parameterised suites put "/" in both names; a need ID + # must stay within [A-Za-z0-9_] to be a legal ID and HTML anchor. + ("ParamTest/0", "Works/0", "testcase__ParamTest_0__Works_0_ugfea"), + ("ParamTest/0", "Legacy", "testcase__ParamTest_0__Legacy_owuvz"), + ], + ) + def test_names_are_sanitised_but_the_hash_uses_the_raw_name( + self, classname, name, expected_id + ): + assert ( + deterministic_case_id( + classname=classname, name=name, file="src/param_test.cc" + ) + == expected_id + ) From 6e594a5a678d42837734c2a9998f8005044562a9 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Fri, 4 Sep 2026 23:39:44 +0200 Subject: [PATCH 136/159] feat: Sphinx-free test-XML to needs.json converter CLI `test-reports convert FILE... --output needs.json` converts test-result XML into schema-conform needs.json outside Sphinx, as a cacheable build action: - no Sphinx import anywhere in the CLI chain (asserted by a test) - byte-stable output: sorted keys, fixed indent, no wall clock - deterministic case IDs, source location and synthesized source URLs - XML properties become need fields; --link-property promotes them to link fields - schema test skips on sphinx-needs versions without check_needs_data --- .../sphinx-test-reports/docs/changelog.rst | 4 + packages/sphinx-test-reports/docs/cli.rst | 124 ++++++ packages/sphinx-test-reports/docs/index.rst | 1 + packages/sphinx-test-reports/pyproject.toml | 6 + .../sphinxcontrib/test_reports/__init__.py | 18 +- .../sphinxcontrib/test_reports/cli.py | 184 ++++++++ .../test_reports/needs_export.py | 236 +++++++++++ .../sphinxcontrib/test_reports/remote.py | 66 +++ .../test_reports/test_reports.py | 2 +- .../tests/test_cli_convert.py | 400 ++++++++++++++++++ 10 files changed, 1038 insertions(+), 3 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/cli.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py create mode 100644 packages/sphinx-test-reports/tests/test_cli_convert.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index a74826fcc..13726a274 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -22,6 +22,10 @@ Unreleased * Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from the source location instead of the need content, so an ID no longer changes when a test starts failing differently. +* Feature: New ``test-reports convert`` command line interface, converting + test-result XML into a ``needs.json`` without running Sphinx, so the + conversion can run as a cacheable build action and the documentation build + only imports the result. See :ref:`cli`. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/docs/cli.rst b/packages/sphinx-test-reports/docs/cli.rst new file mode 100644 index 000000000..a7720bc47 --- /dev/null +++ b/packages/sphinx-test-reports/docs/cli.rst @@ -0,0 +1,124 @@ +.. _cli: + +Command line interface +====================== +.. versionadded:: 1.5.0 + +``Sphinx-Test-Reports`` ships a ``test-reports`` command that converts +test-result XML into a ``needs.json`` **without running Sphinx**. + +Why this exists: parsing test results inside a documentation build couples the +two, so results cannot be converted without building docs, the conversion cannot +be cached by a build system, and the data is unavailable to anything else. The +CLI splits the computation out; the documentation build only imports the result. + +The command imports no Sphinx code at all, so it can run as a build action in an +environment that has no documentation toolchain installed. + +Converting a report +------------------- + +.. code-block:: bash + + test-reports convert bazel-testlogs/my_target/test.xml --output needs.json + +Several reports can be converted into one file -- a build system typically +passes them as a file list: + +.. code-block:: bash + + test-reports convert report_a.xml report_b.xml --output needs.json + +Each test case becomes one need, with the source location under the ``file`` and +``line`` fields, the result under ``result``, a one-line ``result_text``, and the +full failure evidence (every ````/```` part plus captured +output) in the need content. + +Consuming the result +-------------------- + +The output is a schema-conform ``needs.json``, so it can be imported as local +needs: + +.. code-block:: rst + + .. needimport:: needs.json + +or mounted as external needs via ``needs_external_needs`` in ``conf.py``. + +Every need carries the synthesized source URL twice: as ``external_url``, which +Sphinx-Needs uses when rendering a link to an external need, and as a plain +``remote_url`` field, so needs imported as *local* needs keep a clickable link +through a ``needs_string_links`` entry. + +Linking test cases to requirements +---------------------------------- + +XML ```` become need fields under their own names. To turn one into a +link field instead, map it -- the value is split on commas: + +.. code-block:: bash + + test-reports convert test.xml --output needs.json \ + --link-property PartiallyVerifies=partially_verifies \ + --link-property FullyVerifies=fully_verifies + +Mapped link fields are written even when a case has no such property, so a schema +can require them. + +Source links +------------ + +Source URLs need both a repository and a commit; they are refused separately, +because half the metadata cannot produce a URL: + +.. code-block:: bash + + test-reports convert test.xml --output needs.json \ + --remote-url git@github.com:org/repo.git \ + --commit "$(git rev-parse HEAD)" + +Git remotes are accepted in ``scp`` form and normalised. Without this metadata -- +as in a hermetic sandbox -- the URL fields stay empty rather than carrying a +placeholder that looks real and then 404s. + +Forges that lay out blob URLs differently are handled with ``--url-pattern``, +which accepts the placeholders ``{base}``, ``{commit}``, ``{file}`` and +``{line}``: + +.. code-block:: bash + + test-reports convert test.xml --output needs.json \ + --remote-url https://gitlab.com/org/repo --commit abc123 \ + --url-pattern "{base}/-/blob/{commit}/{file}#L{line}" + +Reproducible output +------------------- + +The written file is byte-stable: keys are sorted and no timestamp is recorded. +Converting the same report twice produces identical bytes, so the output works as +a cached build-action output and as diffable evidence. + +Missing source locations +------------------------ + +If no test case in a report carries a ``line`` attribute, the command says so on +stderr. The usual cause is pytest's default ``junit_family = xunit2``, which +filters ``file`` and ``line`` off ````; ``xunit1`` (or ``legacy``) +emits them. + +All options +----------- + +.. code-block:: text + + test-reports convert FILE [FILE ...] --output PATH + [--project NAME] [--version KEY] + [--need-type TYPE] [--tags TAGS] + [--link-property PROPERTY=LINK_FIELD] + [--remote-url URL] [--commit COMMITISH] + [--url-pattern PATTERN] + +``--project`` and ``--version`` fill the ``needs.json`` envelope; +``--need-type`` (default ``testcase``) sets the need type and the ID prefix; +``--tags`` is a comma-separated list applied to every created need. diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index e1dbfd07b..884dd97dc 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -75,6 +75,7 @@ Content install directives/index configuration + cli parsers filter functions diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index aa8cd6add..2ae62cd52 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -49,6 +49,9 @@ docs = [ [dependency-groups] dev = ["pre-commit~=3.0", "nox>=2025.2.9", "mypy>=1.16.0"] +[project.scripts] +test-reports = "sphinxcontrib.test_reports.cli:main" + [tool.flit.module] name = "sphinxcontrib.test_reports" @@ -88,6 +91,9 @@ show_error_codes = true exclude = [ "^sphinxcontrib/test_reports/__init__\\.py$", "^sphinxcontrib/test_reports/config\\.py$", + # argparse.Namespace attributes are Any by construction, which + # disallow_any_expr rejects; needs a typed settings object first. + "^sphinxcontrib/test_reports/cli\\.py$", "^sphinxcontrib/test_reports/directives/__init__\\.py$", "^sphinxcontrib/test_reports/directives/test_case\\.py$", "^sphinxcontrib/test_reports/directives/test_common\\.py$", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index a307f576d..5c3777c0d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -1,4 +1,18 @@ -# from sphinxcontrib.test_reports.needs.dyn_functions import Results4Needs -from sphinxcontrib.test_reports.test_reports import setup +"""Sphinx-Test-Reports. + +``setup`` is resolved lazily (PEP 562) so that importing a submodule of this +package does not import Sphinx. The converter CLI and the modules it uses must +stay usable as a build action, without the documentation toolchain installed; +Sphinx still finds ``setup`` through normal attribute access when it loads this +package as an extension. +""" __all__ = ["setup"] + + +def __getattr__(name: str) -> object: + if name == "setup": + from sphinxcontrib.test_reports.test_reports import setup + + return setup + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py new file mode 100644 index 000000000..4c39c1bfd --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py @@ -0,0 +1,184 @@ +"""``test-reports`` command line interface. + +Converts test-result XML into needs.json *outside* Sphinx, so a build system can +schedule and cache the conversion and the documentation build only imports the +result. Nothing in the import chain of this module may import Sphinx; the test +suite asserts that. +""" + +import argparse +import json +import sys +from pathlib import Path + +from sphinxcontrib.test_reports.junitparser import JUnitParser +from sphinxcontrib.test_reports.needs_export import DEFAULT_VERSION, build_needs_file +from sphinxcontrib.test_reports.remote import DEFAULT_URL_PATTERN, normalise_remote_url + + +def _build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="test-reports", + description="Convert test-result XML into sphinx-needs data.", + ) + subcommands = parser.add_subparsers(dest="command", required=True) + + convert = subcommands.add_parser( + "convert", + help="Convert one or more test-result XML files into needs.json.", + description=( + "Convert one or more test-result XML files into a needs.json that " + "can be consumed with needimport or needs_external_needs." + ), + ) + convert.add_argument( + "files", + nargs="+", + metavar="FILE", + help="Test-result XML files (a build system passes these as a file list).", + ) + convert.add_argument( + "--output", + "-o", + required=True, + metavar="PATH", + help="Where to write the needs.json.", + ) + convert.add_argument( + "--project", + default="", + help="Project name recorded in the needs.json envelope.", + ) + convert.add_argument( + "--version", + default=DEFAULT_VERSION, + help=f"Version key in the envelope (default: {DEFAULT_VERSION}).", + ) + convert.add_argument( + "--need-type", + default="testcase", + help="Need type for each test case (default: testcase).", + ) + convert.add_argument( + "--tags", + default="", + help="Comma-separated tags applied to every created need.", + ) + convert.add_argument( + "--link-property", + action="append", + default=[], + metavar="PROPERTY=LINK_FIELD", + help=( + "Promote an XML property to a link field, comma-splitting its value " + "(repeatable), e.g. PartiallyVerifies=partially_verifies." + ), + ) + convert.add_argument( + "--remote-url", + default="", + help="Repository URL used to synthesize source links; git remotes are accepted.", + ) + convert.add_argument( + "--commit", + default="", + help="Commit-ish the reports were produced from.", + ) + convert.add_argument( + "--url-pattern", + default=DEFAULT_URL_PATTERN, + help=f"Source-URL template (default: {DEFAULT_URL_PATTERN}).", + ) + return parser + + +def _parse_link_properties(values: list[str]) -> dict[str, str]: + mapping = {} + for value in values: + property_name, separator, link_field = value.partition("=") + if not separator or not property_name.strip() or not link_field.strip(): + raise ValueError( + f"--link-property expects PROPERTY=LINK_FIELD, got {value!r}" + ) + mapping[property_name.strip()] = link_field.strip() + return mapping + + +def _warn_about_absent_source_lines(path: Path, suites: list) -> None: + """Report the most common cause of a missing source location. + + pytest emits ``file``/``line`` as ```` attributes only under + ``junit_family = xunit1`` (or ``legacy``); its default ``xunit2`` filters + them out, which silently costs the source location of every case. + """ + cases = [case for suite in suites for case in suite.get("testcases", [])] + if cases and all(case.get("line", -1) == -1 for case in cases): + print( + f"warning: {path}: no carries a 'line' attribute, so no " + "source location could be recorded. pytest emits file/line only " + "with junit_family = xunit1 (or legacy); its default xunit2 drops " + "them.", + file=sys.stderr, + ) + + +def _convert(arguments: argparse.Namespace) -> int: + try: + link_properties = _parse_link_properties(list(arguments.link_property)) + except ValueError as error: + print(f"error: {error}", file=sys.stderr) + return 2 + + if bool(arguments.remote_url) != bool(arguments.commit): + print( + "error: --remote-url and --commit must be given together; without " + "both, no source URL can be synthesized.", + file=sys.stderr, + ) + return 2 + + suites: list = [] + for name in arguments.files: + path = Path(name) + if not path.is_file(): + print(f"error: no such file: {path}", file=sys.stderr) + return 1 + try: + parsed = JUnitParser(str(path)).parse() + except Exception as error: # noqa: BLE001 - report, never traceback + print(f"error: {path}: {error}", file=sys.stderr) + return 1 + _warn_about_absent_source_lines(path, parsed) + suites.extend(parsed) + + payload = build_needs_file( + suites, + project=arguments.project, + version=arguments.version, + need_type=arguments.need_type, + tags=[tag.strip() for tag in arguments.tags.split(",") if tag.strip()], + link_properties=link_properties, + base_url=normalise_remote_url(arguments.remote_url), + commit=arguments.commit, + url_pattern=arguments.url_pattern, + ) + + output = Path(arguments.output) + output.parent.mkdir(parents=True, exist_ok=True) + # Sorted keys and a fixed indent keep the output byte-stable across runs. + output.write_text( + json.dumps(payload, indent=2, sort_keys=True) + "\n", encoding="utf-8" + ) + return 0 + + +def main(argv: "list[str] | None" = None) -> int: + """Entry point. Returns a process exit code instead of raising.""" + arguments = _build_parser().parse_args(argv) + if arguments.command == "convert": + return _convert(arguments) + return 2 # pragma: no cover - argparse rejects unknown commands + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py new file mode 100644 index 000000000..91d83d565 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py @@ -0,0 +1,236 @@ +"""Turn parsed test reports into a needs.json payload. + +Sphinx-free: the conversion runs as a build action, and the documentation build +only imports the result. + +Two rules shape the output: + +* **Every field is always present.** Absent XML attributes become empty values + rather than missing keys, so a schema can simply require a field and a + consumer never has to distinguish "unset" from "absent". +* **Nothing depends on the wall clock or on dict ordering**, so the file is a + cacheable build artifact and a diffable piece of evidence. +""" + +import re +from typing import Iterable, Iterator, Mapping, Sequence, Union + +from sphinxcontrib.test_reports.identity import ( + UNKNOWN, + case_display_name, + deterministic_case_id, +) +from sphinxcontrib.test_reports.remote import DEFAULT_URL_PATTERN, source_url + +#: A need field value as it appears in needs.json. +FieldValue = Union[str, list[str]] +NeedItem = dict[str, FieldValue] + +#: Version key used when the caller does not supply one. needs.json requires a +#: ``current_version``, but a converted report has no baseline history. +DEFAULT_VERSION = "1.0" + +_ANSI = re.compile(r"\x1b\[[0-9;]*[A-Za-z]") +_WHITESPACE = re.compile(r"\s+") + +#: The parser keeps the historical spelling ``failure`` -- it is a documented +#: need field value and a CSS class. Exported data has no such obligation and +#: uses the migration-target vocabulary (passed|failed|error|skipped|disabled), +#: which is also what S-CORE's metamodel spells. +RESULT_NAMES = {"failure": "failed"} + + +def flatten_message(message: str) -> str: + """One-line, ANSI-free rendering of a failure message. + + Used for ``result_text``, which exists to be readable in tables and + reports; the untruncated detail stays in the need content. + """ + return _WHITESPACE.sub(" ", _ANSI.sub("", message)).strip() + + +def _contains(haystack: str, needle: str) -> bool: + """Whitespace-insensitive containment, for de-duplicating failure text.""" + return _WHITESPACE.sub(" ", needle).strip() in _WHITESPACE.sub(" ", haystack) + + +def _literal_block(title: str, body: str) -> str: + """An RST literal block, indented so the need content stays valid.""" + indented = "\n".join(f" {line.lstrip()}" for line in body.split("\n")) + return f"\n**{title}**::\n\n{indented}\n" + + +def build_content(case: Mapping[str, object]) -> str: + """Need content carrying the complete failure evidence. + + googletest reports one ```` per failed assertion, each with its own + message and body, plus captured output -- keeping only the first of them + loses exactly the detail a reader needs. + """ + sections: list[str] = [] + + parts = _result_parts(case) + for index, part in enumerate(parts, start=1): + kind = str(part.get("kind", "result")).capitalize() + label = f"{kind} {index}" if len(parts) > 1 else kind + message = str(part.get("message", "")) + text = str(part.get("text", "")) + # googletest repeats the body in the message attribute; a second copy + # is noise, so the message is only shown when it adds something. + if message and not _contains(text, message): + sections.append(_literal_block(f"{label} message", message)) + if text: + sections.append(_literal_block(label, text)) + + for key, title in (("system-out", "System-out"), ("system-err", "System-err")): + captured = str(case.get(key, "")) + if captured: + sections.append(_literal_block(title, captured)) + + return "".join(sections) + + +def _result_parts(case: Mapping[str, object]) -> list[Mapping[str, object]]: + """The case's result parts, as a typed view over the parser's output.""" + raw = case.get("parts") + if not isinstance(raw, list): + return [] + return [part for part in raw if isinstance(part, Mapping)] + + +def _first_message(case: Mapping[str, object]) -> str: + for part in _result_parts(case): + message = str(part.get("message", "")) + if message and message != UNKNOWN: + return flatten_message(message) + return "" + + +def _optional(value: object, absent: object) -> str: + """String form of an attribute, empty when the parser reported it absent.""" + return "" if value is None or value == absent else str(value) + + +def _mappings(value: object) -> list[Mapping[str, object]]: + """Typed view over a list of dicts coming from the parser.""" + if not isinstance(value, list): + return [] + return [item for item in value if isinstance(item, Mapping)] + + +def _iter_cases( + suites: Iterable[Mapping[str, object]], +) -> Iterator[tuple[str, Mapping[str, object]]]: + """Yield ``(suite_name, case)`` pairs, descending into nested suites.""" + for suite in suites: + name = str(suite.get("name", "")) + for case in _mappings(suite.get("testcases")): + yield name, case + yield from _iter_cases(_mappings(suite.get("testsuite_nested"))) + + +def build_need( + suite_name: str, + case: Mapping[str, object], + *, + need_type: str = "testcase", + tags: Sequence[str] = (), + link_properties: Mapping[str, str] | None = None, + base_url: str = "", + commit: str = "", + url_pattern: str = DEFAULT_URL_PATTERN, +) -> NeedItem: + """One test case as a need item.""" + link_properties = link_properties or {} + + classname = _optional(case.get("classname"), UNKNOWN) + name = _optional(case.get("name"), UNKNOWN) + source_file = _optional(case.get("file"), UNKNOWN) + source_line = _optional(case.get("line"), -1) + time = _optional(case.get("time"), -1) + + url = source_url(base_url, commit, source_file, source_line, url_pattern) + + need: NeedItem = { + "id": deterministic_case_id( + classname=classname, name=name, file=source_file, prefix=need_type + ), + "type": need_type, + "title": case_display_name(classname, name), + "content": build_content(case), + "tags": list(tags), + "name": name, + "classname": classname, + "suite": suite_name, + "file": source_file, + "line": source_line, + "time": time, + "result": RESULT_NAMES.get( + str(case.get("result", "")), str(case.get("result", "")) + ), + "result_text": _first_message(case), + # The same URL twice on purpose: external_url drives the external-needs + # rendering, while a plain field stays usable for needs imported as + # local needs (via a needs_string_links entry). + "external_url": url, + "remote_url": url, + } + + properties = case.get("properties") or {} + if not isinstance(properties, Mapping): + properties = {} + + # Link fields are emitted even when empty, so a schema can require them. + for property_name, link_field in link_properties.items(): + raw = str(properties.get(property_name, "")) + need[link_field] = [item.strip() for item in raw.split(",") if item.strip()] + + for property_name, value in properties.items(): + if property_name in link_properties or property_name in need: + continue + need[property_name] = str(value) + + return need + + +def build_needs_file( + suites: Iterable[Mapping[str, object]], + *, + project: str = "", + version: str = DEFAULT_VERSION, + need_type: str = "testcase", + tags: Sequence[str] = (), + link_properties: Mapping[str, str] | None = None, + base_url: str = "", + commit: str = "", + url_pattern: str = DEFAULT_URL_PATTERN, +) -> dict[str, object]: + """The complete needs.json payload for a set of parsed reports. + + No ``created`` key is written: a wall clock inside a cacheable build output + would change the file on every run. + """ + needs: dict[str, NeedItem] = {} + for suite_name, case in _iter_cases(suites): + need = build_need( + suite_name, + case, + need_type=need_type, + tags=tags, + link_properties=link_properties, + base_url=base_url, + commit=commit, + url_pattern=url_pattern, + ) + needs[str(need["id"])] = need + + return { + "project": project, + "current_version": version, + "versions": { + version: { + "needs": needs, + "needs_amount": len(needs), + } + }, + } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py new file mode 100644 index 000000000..0458a4b28 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py @@ -0,0 +1,66 @@ +"""Web URLs for test sources. + +Sphinx-free, like every module the converter CLI depends on. + +Only the small amount of URL handling the converter actually needs lives here: +normalising a git remote into a browsable base, and formatting a line-anchored +source URL. sphinx-codelinks carries a fuller implementation (giturlparse-based, +covering more forges); when the two extensions are consolidated the machinery +should be shared rather than duplicated -- which is why this stays deliberately +minimal instead of growing a second forge matrix. +""" + +import re + +#: GitHub and GitHub-compatible forges. GitLab needs ``{base}/-/blob/...``. +DEFAULT_URL_PATTERN = "{base}/blob/{commit}/{file}#L{line}" + +#: ``git@host:org/repo.git`` and ``ssh://git@host/org/repo.git``. +_SCP_STYLE = re.compile( + r"^(?:ssh://)?(?:[^@/]+@)?(?P[^:/]+)[:/](?P.+?)(?:\.git)?/?$" +) + + +def normalise_remote_url(remote_url: str) -> str: + """Turn a git remote into a browsable ``https`` base URL. + + An already-browsable URL is returned unchanged apart from a trailing + ``.git``/``/``; anything unrecognised is passed through, so an explicitly + configured base is never mangled. + """ + url = remote_url.strip() + if not url: + return "" + + if url.startswith(("http://", "https://")): + stripped = url.rstrip("/") + return stripped.removesuffix(".git") + + match = _SCP_STYLE.match(url) + if match is None: + return url.rstrip("/") + + host = match.group("host") + path = match.group("path") + return f"https://{host}/{path}" + + +def source_url( + base_url: str, + commit: str, + file: str, + line: str, + pattern: str = DEFAULT_URL_PATTERN, +) -> str: + """Line-anchored URL of a test source, or ``""`` without repo metadata. + + A hermetic build has no git remote, so the absence of metadata must yield an + empty field rather than a placeholder URL that looks real and 404s. + When the line is unknown the anchor is dropped instead of pointing at a + fabricated line. + """ + if not base_url or not commit or not file: + return "" + + effective_pattern = pattern if line else pattern.split("#")[0] + return effective_pattern.format(base=base_url, commit=commit, file=file, line=line) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 224ed81de..df94f19ef 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -92,7 +92,7 @@ def _register_field(app, name, schema=None): log.debug(f"Field '{name}' already registered, skipping") -def setup(app: Sphinx): +def setup(app: Sphinx) -> dict[str, str | bool]: """ Setup following directives: * test_results diff --git a/packages/sphinx-test-reports/tests/test_cli_convert.py b/packages/sphinx-test-reports/tests/test_cli_convert.py new file mode 100644 index 000000000..67d482b74 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_cli_convert.py @@ -0,0 +1,400 @@ +"""Tests for the Sphinx-free ``test-reports convert`` CLI (TR-A). + +This is the keystone of the build-system story: a test-XML to needs.json +conversion that runs as a build action *outside* Sphinx, so the docs build only +imports the result. Two properties are load-bearing and therefore tested +explicitly rather than assumed: + +* the CLI must not import Sphinx -- otherwise a Bazel action pulls the whole + documentation toolchain into the test-result conversion; +* the output must be byte-stable, because it is a cached build artifact and + qualification evidence. +""" + +import json +import subprocess +import sys +from pathlib import Path + +import pytest + +UTILS = Path(__file__).parent / "doc_test" / "utils" +GTEST_XML = UTILS / "gtest_data.xml" +PYTEST_XML = UTILS / "pytest_data.xml" + + +def _convert(tmp_path, *args, xml=GTEST_XML): + """Run the converter and return (exit_code, parsed output or None).""" + from sphinxcontrib.test_reports.cli import main + + output = tmp_path / "needs.json" + code = main(["convert", str(xml), "--output", str(output), *args]) + data = json.loads(output.read_text(encoding="utf-8")) if output.exists() else None + return code, data + + +def _needs(data): + version = data["current_version"] + return data["versions"][version]["needs"] + + +class TestNoSphinxImport: + """The converter has to be usable without the documentation toolchain.""" + + def test_importing_the_cli_does_not_import_sphinx(self): + script = ( + "import sys;" + "import sphinxcontrib.test_reports.cli;" + "leaked = sorted(m for m in sys.modules" + " if m == 'sphinx' or m.startswith(('sphinx.', 'sphinx_needs')));" + "print(','.join(leaked))" + ) + result = subprocess.run( + [sys.executable, "-c", script], + capture_output=True, + text=True, + check=True, + ) + + assert result.stdout.strip() == "" + + +class TestEnvelope: + def test_output_passes_the_sphinx_needs_schema(self, tmp_path): + """The output must validate against sphinx-needs' own needs.json schema.""" + needsfile = pytest.importorskip("sphinx_needs.needsfile") + if not hasattr(needsfile, "check_needs_data"): + # Older sphinx-needs releases do not ship the schema check; the + # envelope contract itself is version-independent, so skip rather + # than pin the whole suite to the newest sphinx-needs. + pytest.skip("sphinx-needs has no check_needs_data") + + code, data = _convert(tmp_path) + + assert code == 0 + assert needsfile.check_needs_data(data).schema == [] + + def test_envelope_carries_project_and_current_version(self, tmp_path): + _, data = _convert(tmp_path, "--project", "Score Docs-as-Code") + + assert data["project"] == "Score Docs-as-Code" + assert data["current_version"] in data["versions"] + + def test_needs_amount_matches_the_number_of_cases(self, tmp_path): + _, data = _convert(tmp_path) + + version = data["versions"][data["current_version"]] + assert version["needs_amount"] == len(version["needs"]) == 5 + + def test_no_timestamp_is_written(self, tmp_path): + """A wall clock would defeat action caching and evidence diffs.""" + _, data = _convert(tmp_path) + + assert "created" not in data + assert "created" not in data["versions"][data["current_version"]] + + def test_output_is_byte_stable_across_runs(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + first = tmp_path / "first.json" + second = tmp_path / "second.json" + for output in (first, second): + assert main(["convert", str(GTEST_XML), "--output", str(output)]) == 0 + + assert first.read_bytes() == second.read_bytes() + + +class TestNeedContent: + def test_ids_match_the_deterministic_scheme(self, tmp_path): + from sphinxcontrib.test_reports.identity import deterministic_case_id + + _, data = _convert(tmp_path) + + expected = deterministic_case_id( + classname="MathTest", name="Addition", file="src/math_test.cc" + ) + assert expected in _needs(data) + + def test_source_location_is_emitted_verbatim(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["file"] == "src/math_test.cc" + assert need["line"] == "12" + + def test_type_and_title_are_score_shaped(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["type"] == "testcase" + assert need["title"] == "MathTest__Addition" + + def test_result_vocabulary_includes_disabled(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__DISABLED_Division_jnyzp"] + assert need["result"] == "disabled" + + def test_content_keeps_every_failure_part(self, tmp_path): + """R2: the debug output has to survive the conversion.""" + _, data = _convert(tmp_path) + + content = _needs(data)["testcase__MathTest__Subtraction_srmht"]["content"] + assert "Expected equality of these values" in content + assert "Actual: false" in content + assert "overflow guard hit" in content + + def test_result_text_is_the_first_failure_message(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Subtraction_srmht"] + assert need["result_text"].startswith("src/math_test.cc:22") + assert "\n" not in need["result_text"] + + def test_properties_become_fields(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["TestType"] == "requirements-based" + + def test_tags_are_configurable(self, tmp_path): + _, data = _convert(tmp_path, "--tags", "TEST") + + assert _needs(data)["testcase__MathTest__Addition_hcuyy"]["tags"] == ["TEST"] + + +class TestLinkProperties: + def test_a_property_can_be_promoted_to_a_link_field(self, tmp_path): + _, data = _convert( + tmp_path, "--link-property", "PartiallyVerifies=partially_verifies" + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["partially_verifies"] == ["REQ_1", "REQ_2"] + assert "PartiallyVerifies" not in need + + def test_link_fields_are_always_present_even_when_empty(self, tmp_path): + """A converter must emit its fields unconditionally, so schemas can require them.""" + _, data = _convert( + tmp_path, "--link-property", "PartiallyVerifies=partially_verifies" + ) + + need = _needs(data)["testcase__MathTest__DISABLED_Division_jnyzp"] + assert need["partially_verifies"] == [] + + def test_malformed_link_property_is_rejected(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + code = main( + [ + "convert", + str(GTEST_XML), + "--output", + str(tmp_path / "out.json"), + "--link-property", + "NoEqualsSign", + ] + ) + + assert code != 0 + + +class TestRemoteUrls: + def test_external_url_and_remote_url_are_synthesized(self, tmp_path): + _, data = _convert( + tmp_path, + "--remote-url", + "https://github.com/org/repo", + "--commit", + "abc123", + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + expected = "https://github.com/org/repo/blob/abc123/src/math_test.cc#L12" + assert need["external_url"] == expected + assert need["remote_url"] == expected + + def test_scp_style_remote_is_normalised(self, tmp_path): + _, data = _convert( + tmp_path, + "--remote-url", + "git@github.com:org/repo.git", + "--commit", + "abc123", + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"].startswith("https://github.com/org/repo/blob/abc123/") + + def test_url_pattern_is_configurable(self, tmp_path): + _, data = _convert( + tmp_path, + "--remote-url", + "https://gitlab.com/org/repo", + "--commit", + "abc123", + "--url-pattern", + "{base}/-/blob/{commit}/{file}#L{line}", + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"] == ( + "https://gitlab.com/org/repo/-/blob/abc123/src/math_test.cc#L12" + ) + + def test_without_repo_metadata_the_url_fields_are_empty(self, tmp_path): + """A hermetic sandbox has no git remote; that must not drop the need.""" + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"] == "" + assert need["external_url"] == "" + + +class TestMultipleInputs: + def test_several_reports_are_merged_into_one_file(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + output = tmp_path / "needs.json" + code = main( + ["convert", str(GTEST_XML), str(PYTEST_XML), "--output", str(output)] + ) + data = json.loads(output.read_text(encoding="utf-8")) + + assert code == 0 + assert len(_needs(data)) > 5 + + def test_a_missing_input_file_exits_nonzero(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + code = main( + [ + "convert", + str(tmp_path / "nope.xml"), + "--output", + str(tmp_path / "out.json"), + ] + ) + + assert code != 0 + + +class TestDiagnostics: + def test_absent_line_attributes_warn_about_junit_family(self, tmp_path, capsys): + """pytest's default junit_family drops file/line; say so, don't guess.""" + from sphinxcontrib.test_reports.cli import main + + main( + [ + "convert", + str(PYTEST_XML), + "--output", + str(tmp_path / "out.json"), + ] + ) + + assert "junit_family" in capsys.readouterr().err + + def test_reports_with_line_attributes_do_not_warn(self, tmp_path, capsys): + from sphinxcontrib.test_reports.cli import main + + main(["convert", str(GTEST_XML), "--output", str(tmp_path / "out.json")]) + + assert "junit_family" not in capsys.readouterr().err + + +def test_the_cli_is_runnable_as_a_module(): + result = subprocess.run( + [sys.executable, "-m", "sphinxcontrib.test_reports.cli", "convert", "--help"], + capture_output=True, + text=True, + ) + + assert result.returncode == 0 + assert "--output" in result.stdout + + +def test_console_script_is_installed(): + """The name that goes into a BUILD file has to be a real entry point.""" + script = Path(sys.executable).parent / "test-reports" + if not script.exists(): + pytest.skip("package not installed into this environment") + + result = subprocess.run( + [str(script), "convert", "--help"], capture_output=True, text=True + ) + + assert result.returncode == 0 + assert "--output" in result.stdout + + +@pytest.mark.parametrize("flag", ["--remote-url", "--commit"]) +def test_url_synthesis_needs_both_parts(tmp_path, flag): + """Half the metadata cannot produce a URL; fail loudly instead of guessing.""" + from sphinxcontrib.test_reports.cli import main + + code = main( + [ + "convert", + str(GTEST_XML), + "--output", + str(tmp_path / "out.json"), + flag, + "value", + ] + ) + + assert code != 0 + + +class TestResultVocabulary: + """The export uses the migration-target vocabulary, not the parser's. + + The parser reports ``failure`` and must keep doing so -- it is a documented + need field value and a CSS class (``tr_failure``). The exported needs.json + is a new surface with no such obligation, and its consumers' metamodels + (S-CORE's included) spell it ``failed``. + """ + + def test_failure_is_exported_as_failed(self, tmp_path): + _, data = _convert(tmp_path) + + assert ( + _needs(data)["testcase__MathTest__Subtraction_srmht"]["result"] == "failed" + ) + + @pytest.mark.parametrize( + ("need_id", "expected"), + [ + ("testcase__MathTest__Addition_hcuyy", "passed"), + ("testcase__MathTest__DISABLED_Division_jnyzp", "disabled"), + ("testcase__ParamTest_0__Legacy_owuvz", "skipped"), + ], + ) + def test_other_results_are_unchanged(self, tmp_path, need_id, expected): + _, data = _convert(tmp_path) + + assert _needs(data)[need_id]["result"] == expected + + +class TestContentIsNotDuplicated: + """googletest repeats the failure text in the message attribute. + + Emitting both verbatim shows the same stack trace twice in the rendered + need; the message block is only worth its space when it says something the + body does not. + """ + + def test_a_message_contained_in_the_body_is_not_repeated(self, tmp_path): + _, data = _convert(tmp_path) + + content = _needs(data)["testcase__MathTest__Subtraction_srmht"]["content"] + assert content.count("Expected equality of these values") == 1 + assert "message" not in content + + def test_a_message_absent_from_the_body_is_kept(self, tmp_path): + _, data = _convert(tmp_path) + + content = _needs(data)["testcase__ParamTest_0__Legacy_owuvz"]["content"] + assert "Skipped via GTEST_SKIP" in content + assert "not applicable on this platform" in content From b489e18bbd2ee366d0f2f5b7fd2e77c17f296e37 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Sat, 5 Sep 2026 13:27:34 +0200 Subject: [PATCH 137/159] Revert "feat: Sphinx-free test-XML to needs.json converter CLI" (useblocks/sphinx-test-reports#146) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts 6e594a5 (useblocks/sphinx-test-reports#144). useblocks/sphinx-test-reports#144 was merged ahead of the declarative-configuration work unintentionally. The merge itself was not the problem — the ordering was. The intended stack is: 1. **this revert** — take the CLI back off `master` 2. **useblocks/sphinx-test-reports#145, reshaped to config-only** — the `[test_reports]` section of `ubproject.toml` and the Sphinx bridge, with no CLI surface 3. **a new CLI PR** — the converter rebased on top, reading its conversion settings from the declarative config from the start, instead of shipping flags first and growing `--config` afterwards ## What this removes The five files useblocks/sphinx-test-reports#144 added — `sphinxcontrib/test_reports/cli.py`, `needs_export.py`, `remote.py`, `docs/cli.rst` and `tests/test_cli_convert.py` — plus the `test-reports` console script, the `cli` toctree entry and the `cli.py` mypy exclude. It also takes back the PEP 562 lazy `setup` resolution in `__init__.py`, which existed so the CLI could import package submodules without pulling in Sphinx. It has no consumer without the CLI and returns with it. ## What is unaffected Nothing on the Sphinx side depends on the reverted files. `identity.py` came from useblocks/sphinx-test-reports#143, not useblocks/sphinx-test-reports#144, so `directives/test_common.py` and the deterministic-ID feature are untouched. 110 tests pass on this branch. The work is not lost: it is preserved locally on `str-needs-json-cli` at 35f26dc and comes back as step 3. --- .../sphinx-test-reports/docs/changelog.rst | 4 - packages/sphinx-test-reports/docs/cli.rst | 124 ------ packages/sphinx-test-reports/docs/index.rst | 1 - packages/sphinx-test-reports/pyproject.toml | 6 - .../sphinxcontrib/test_reports/__init__.py | 18 +- .../sphinxcontrib/test_reports/cli.py | 184 -------- .../test_reports/needs_export.py | 236 ----------- .../sphinxcontrib/test_reports/remote.py | 66 --- .../test_reports/test_reports.py | 2 +- .../tests/test_cli_convert.py | 400 ------------------ 10 files changed, 3 insertions(+), 1038 deletions(-) delete mode 100644 packages/sphinx-test-reports/docs/cli.rst delete mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py delete mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py delete mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py delete mode 100644 packages/sphinx-test-reports/tests/test_cli_convert.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 13726a274..a74826fcc 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -22,10 +22,6 @@ Unreleased * Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from the source location instead of the need content, so an ID no longer changes when a test starts failing differently. -* Feature: New ``test-reports convert`` command line interface, converting - test-result XML into a ``needs.json`` without running Sphinx, so the - conversion can run as a cacheable build action and the documentation build - only imports the result. See :ref:`cli`. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/docs/cli.rst b/packages/sphinx-test-reports/docs/cli.rst deleted file mode 100644 index a7720bc47..000000000 --- a/packages/sphinx-test-reports/docs/cli.rst +++ /dev/null @@ -1,124 +0,0 @@ -.. _cli: - -Command line interface -====================== -.. versionadded:: 1.5.0 - -``Sphinx-Test-Reports`` ships a ``test-reports`` command that converts -test-result XML into a ``needs.json`` **without running Sphinx**. - -Why this exists: parsing test results inside a documentation build couples the -two, so results cannot be converted without building docs, the conversion cannot -be cached by a build system, and the data is unavailable to anything else. The -CLI splits the computation out; the documentation build only imports the result. - -The command imports no Sphinx code at all, so it can run as a build action in an -environment that has no documentation toolchain installed. - -Converting a report -------------------- - -.. code-block:: bash - - test-reports convert bazel-testlogs/my_target/test.xml --output needs.json - -Several reports can be converted into one file -- a build system typically -passes them as a file list: - -.. code-block:: bash - - test-reports convert report_a.xml report_b.xml --output needs.json - -Each test case becomes one need, with the source location under the ``file`` and -``line`` fields, the result under ``result``, a one-line ``result_text``, and the -full failure evidence (every ````/```` part plus captured -output) in the need content. - -Consuming the result --------------------- - -The output is a schema-conform ``needs.json``, so it can be imported as local -needs: - -.. code-block:: rst - - .. needimport:: needs.json - -or mounted as external needs via ``needs_external_needs`` in ``conf.py``. - -Every need carries the synthesized source URL twice: as ``external_url``, which -Sphinx-Needs uses when rendering a link to an external need, and as a plain -``remote_url`` field, so needs imported as *local* needs keep a clickable link -through a ``needs_string_links`` entry. - -Linking test cases to requirements ----------------------------------- - -XML ```` become need fields under their own names. To turn one into a -link field instead, map it -- the value is split on commas: - -.. code-block:: bash - - test-reports convert test.xml --output needs.json \ - --link-property PartiallyVerifies=partially_verifies \ - --link-property FullyVerifies=fully_verifies - -Mapped link fields are written even when a case has no such property, so a schema -can require them. - -Source links ------------- - -Source URLs need both a repository and a commit; they are refused separately, -because half the metadata cannot produce a URL: - -.. code-block:: bash - - test-reports convert test.xml --output needs.json \ - --remote-url git@github.com:org/repo.git \ - --commit "$(git rev-parse HEAD)" - -Git remotes are accepted in ``scp`` form and normalised. Without this metadata -- -as in a hermetic sandbox -- the URL fields stay empty rather than carrying a -placeholder that looks real and then 404s. - -Forges that lay out blob URLs differently are handled with ``--url-pattern``, -which accepts the placeholders ``{base}``, ``{commit}``, ``{file}`` and -``{line}``: - -.. code-block:: bash - - test-reports convert test.xml --output needs.json \ - --remote-url https://gitlab.com/org/repo --commit abc123 \ - --url-pattern "{base}/-/blob/{commit}/{file}#L{line}" - -Reproducible output -------------------- - -The written file is byte-stable: keys are sorted and no timestamp is recorded. -Converting the same report twice produces identical bytes, so the output works as -a cached build-action output and as diffable evidence. - -Missing source locations ------------------------- - -If no test case in a report carries a ``line`` attribute, the command says so on -stderr. The usual cause is pytest's default ``junit_family = xunit2``, which -filters ``file`` and ``line`` off ````; ``xunit1`` (or ``legacy``) -emits them. - -All options ------------ - -.. code-block:: text - - test-reports convert FILE [FILE ...] --output PATH - [--project NAME] [--version KEY] - [--need-type TYPE] [--tags TAGS] - [--link-property PROPERTY=LINK_FIELD] - [--remote-url URL] [--commit COMMITISH] - [--url-pattern PATTERN] - -``--project`` and ``--version`` fill the ``needs.json`` envelope; -``--need-type`` (default ``testcase``) sets the need type and the ID prefix; -``--tags`` is a comma-separated list applied to every created need. diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 884dd97dc..e1dbfd07b 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -75,7 +75,6 @@ Content install directives/index configuration - cli parsers filter functions diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 2ae62cd52..aa8cd6add 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -49,9 +49,6 @@ docs = [ [dependency-groups] dev = ["pre-commit~=3.0", "nox>=2025.2.9", "mypy>=1.16.0"] -[project.scripts] -test-reports = "sphinxcontrib.test_reports.cli:main" - [tool.flit.module] name = "sphinxcontrib.test_reports" @@ -91,9 +88,6 @@ show_error_codes = true exclude = [ "^sphinxcontrib/test_reports/__init__\\.py$", "^sphinxcontrib/test_reports/config\\.py$", - # argparse.Namespace attributes are Any by construction, which - # disallow_any_expr rejects; needs a typed settings object first. - "^sphinxcontrib/test_reports/cli\\.py$", "^sphinxcontrib/test_reports/directives/__init__\\.py$", "^sphinxcontrib/test_reports/directives/test_case\\.py$", "^sphinxcontrib/test_reports/directives/test_common\\.py$", diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index 5c3777c0d..a307f576d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -1,18 +1,4 @@ -"""Sphinx-Test-Reports. - -``setup`` is resolved lazily (PEP 562) so that importing a submodule of this -package does not import Sphinx. The converter CLI and the modules it uses must -stay usable as a build action, without the documentation toolchain installed; -Sphinx still finds ``setup`` through normal attribute access when it loads this -package as an extension. -""" +# from sphinxcontrib.test_reports.needs.dyn_functions import Results4Needs +from sphinxcontrib.test_reports.test_reports import setup __all__ = ["setup"] - - -def __getattr__(name: str) -> object: - if name == "setup": - from sphinxcontrib.test_reports.test_reports import setup - - return setup - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py deleted file mode 100644 index 4c39c1bfd..000000000 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py +++ /dev/null @@ -1,184 +0,0 @@ -"""``test-reports`` command line interface. - -Converts test-result XML into needs.json *outside* Sphinx, so a build system can -schedule and cache the conversion and the documentation build only imports the -result. Nothing in the import chain of this module may import Sphinx; the test -suite asserts that. -""" - -import argparse -import json -import sys -from pathlib import Path - -from sphinxcontrib.test_reports.junitparser import JUnitParser -from sphinxcontrib.test_reports.needs_export import DEFAULT_VERSION, build_needs_file -from sphinxcontrib.test_reports.remote import DEFAULT_URL_PATTERN, normalise_remote_url - - -def _build_parser() -> argparse.ArgumentParser: - parser = argparse.ArgumentParser( - prog="test-reports", - description="Convert test-result XML into sphinx-needs data.", - ) - subcommands = parser.add_subparsers(dest="command", required=True) - - convert = subcommands.add_parser( - "convert", - help="Convert one or more test-result XML files into needs.json.", - description=( - "Convert one or more test-result XML files into a needs.json that " - "can be consumed with needimport or needs_external_needs." - ), - ) - convert.add_argument( - "files", - nargs="+", - metavar="FILE", - help="Test-result XML files (a build system passes these as a file list).", - ) - convert.add_argument( - "--output", - "-o", - required=True, - metavar="PATH", - help="Where to write the needs.json.", - ) - convert.add_argument( - "--project", - default="", - help="Project name recorded in the needs.json envelope.", - ) - convert.add_argument( - "--version", - default=DEFAULT_VERSION, - help=f"Version key in the envelope (default: {DEFAULT_VERSION}).", - ) - convert.add_argument( - "--need-type", - default="testcase", - help="Need type for each test case (default: testcase).", - ) - convert.add_argument( - "--tags", - default="", - help="Comma-separated tags applied to every created need.", - ) - convert.add_argument( - "--link-property", - action="append", - default=[], - metavar="PROPERTY=LINK_FIELD", - help=( - "Promote an XML property to a link field, comma-splitting its value " - "(repeatable), e.g. PartiallyVerifies=partially_verifies." - ), - ) - convert.add_argument( - "--remote-url", - default="", - help="Repository URL used to synthesize source links; git remotes are accepted.", - ) - convert.add_argument( - "--commit", - default="", - help="Commit-ish the reports were produced from.", - ) - convert.add_argument( - "--url-pattern", - default=DEFAULT_URL_PATTERN, - help=f"Source-URL template (default: {DEFAULT_URL_PATTERN}).", - ) - return parser - - -def _parse_link_properties(values: list[str]) -> dict[str, str]: - mapping = {} - for value in values: - property_name, separator, link_field = value.partition("=") - if not separator or not property_name.strip() or not link_field.strip(): - raise ValueError( - f"--link-property expects PROPERTY=LINK_FIELD, got {value!r}" - ) - mapping[property_name.strip()] = link_field.strip() - return mapping - - -def _warn_about_absent_source_lines(path: Path, suites: list) -> None: - """Report the most common cause of a missing source location. - - pytest emits ``file``/``line`` as ```` attributes only under - ``junit_family = xunit1`` (or ``legacy``); its default ``xunit2`` filters - them out, which silently costs the source location of every case. - """ - cases = [case for suite in suites for case in suite.get("testcases", [])] - if cases and all(case.get("line", -1) == -1 for case in cases): - print( - f"warning: {path}: no carries a 'line' attribute, so no " - "source location could be recorded. pytest emits file/line only " - "with junit_family = xunit1 (or legacy); its default xunit2 drops " - "them.", - file=sys.stderr, - ) - - -def _convert(arguments: argparse.Namespace) -> int: - try: - link_properties = _parse_link_properties(list(arguments.link_property)) - except ValueError as error: - print(f"error: {error}", file=sys.stderr) - return 2 - - if bool(arguments.remote_url) != bool(arguments.commit): - print( - "error: --remote-url and --commit must be given together; without " - "both, no source URL can be synthesized.", - file=sys.stderr, - ) - return 2 - - suites: list = [] - for name in arguments.files: - path = Path(name) - if not path.is_file(): - print(f"error: no such file: {path}", file=sys.stderr) - return 1 - try: - parsed = JUnitParser(str(path)).parse() - except Exception as error: # noqa: BLE001 - report, never traceback - print(f"error: {path}: {error}", file=sys.stderr) - return 1 - _warn_about_absent_source_lines(path, parsed) - suites.extend(parsed) - - payload = build_needs_file( - suites, - project=arguments.project, - version=arguments.version, - need_type=arguments.need_type, - tags=[tag.strip() for tag in arguments.tags.split(",") if tag.strip()], - link_properties=link_properties, - base_url=normalise_remote_url(arguments.remote_url), - commit=arguments.commit, - url_pattern=arguments.url_pattern, - ) - - output = Path(arguments.output) - output.parent.mkdir(parents=True, exist_ok=True) - # Sorted keys and a fixed indent keep the output byte-stable across runs. - output.write_text( - json.dumps(payload, indent=2, sort_keys=True) + "\n", encoding="utf-8" - ) - return 0 - - -def main(argv: "list[str] | None" = None) -> int: - """Entry point. Returns a process exit code instead of raising.""" - arguments = _build_parser().parse_args(argv) - if arguments.command == "convert": - return _convert(arguments) - return 2 # pragma: no cover - argparse rejects unknown commands - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py deleted file mode 100644 index 91d83d565..000000000 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py +++ /dev/null @@ -1,236 +0,0 @@ -"""Turn parsed test reports into a needs.json payload. - -Sphinx-free: the conversion runs as a build action, and the documentation build -only imports the result. - -Two rules shape the output: - -* **Every field is always present.** Absent XML attributes become empty values - rather than missing keys, so a schema can simply require a field and a - consumer never has to distinguish "unset" from "absent". -* **Nothing depends on the wall clock or on dict ordering**, so the file is a - cacheable build artifact and a diffable piece of evidence. -""" - -import re -from typing import Iterable, Iterator, Mapping, Sequence, Union - -from sphinxcontrib.test_reports.identity import ( - UNKNOWN, - case_display_name, - deterministic_case_id, -) -from sphinxcontrib.test_reports.remote import DEFAULT_URL_PATTERN, source_url - -#: A need field value as it appears in needs.json. -FieldValue = Union[str, list[str]] -NeedItem = dict[str, FieldValue] - -#: Version key used when the caller does not supply one. needs.json requires a -#: ``current_version``, but a converted report has no baseline history. -DEFAULT_VERSION = "1.0" - -_ANSI = re.compile(r"\x1b\[[0-9;]*[A-Za-z]") -_WHITESPACE = re.compile(r"\s+") - -#: The parser keeps the historical spelling ``failure`` -- it is a documented -#: need field value and a CSS class. Exported data has no such obligation and -#: uses the migration-target vocabulary (passed|failed|error|skipped|disabled), -#: which is also what S-CORE's metamodel spells. -RESULT_NAMES = {"failure": "failed"} - - -def flatten_message(message: str) -> str: - """One-line, ANSI-free rendering of a failure message. - - Used for ``result_text``, which exists to be readable in tables and - reports; the untruncated detail stays in the need content. - """ - return _WHITESPACE.sub(" ", _ANSI.sub("", message)).strip() - - -def _contains(haystack: str, needle: str) -> bool: - """Whitespace-insensitive containment, for de-duplicating failure text.""" - return _WHITESPACE.sub(" ", needle).strip() in _WHITESPACE.sub(" ", haystack) - - -def _literal_block(title: str, body: str) -> str: - """An RST literal block, indented so the need content stays valid.""" - indented = "\n".join(f" {line.lstrip()}" for line in body.split("\n")) - return f"\n**{title}**::\n\n{indented}\n" - - -def build_content(case: Mapping[str, object]) -> str: - """Need content carrying the complete failure evidence. - - googletest reports one ```` per failed assertion, each with its own - message and body, plus captured output -- keeping only the first of them - loses exactly the detail a reader needs. - """ - sections: list[str] = [] - - parts = _result_parts(case) - for index, part in enumerate(parts, start=1): - kind = str(part.get("kind", "result")).capitalize() - label = f"{kind} {index}" if len(parts) > 1 else kind - message = str(part.get("message", "")) - text = str(part.get("text", "")) - # googletest repeats the body in the message attribute; a second copy - # is noise, so the message is only shown when it adds something. - if message and not _contains(text, message): - sections.append(_literal_block(f"{label} message", message)) - if text: - sections.append(_literal_block(label, text)) - - for key, title in (("system-out", "System-out"), ("system-err", "System-err")): - captured = str(case.get(key, "")) - if captured: - sections.append(_literal_block(title, captured)) - - return "".join(sections) - - -def _result_parts(case: Mapping[str, object]) -> list[Mapping[str, object]]: - """The case's result parts, as a typed view over the parser's output.""" - raw = case.get("parts") - if not isinstance(raw, list): - return [] - return [part for part in raw if isinstance(part, Mapping)] - - -def _first_message(case: Mapping[str, object]) -> str: - for part in _result_parts(case): - message = str(part.get("message", "")) - if message and message != UNKNOWN: - return flatten_message(message) - return "" - - -def _optional(value: object, absent: object) -> str: - """String form of an attribute, empty when the parser reported it absent.""" - return "" if value is None or value == absent else str(value) - - -def _mappings(value: object) -> list[Mapping[str, object]]: - """Typed view over a list of dicts coming from the parser.""" - if not isinstance(value, list): - return [] - return [item for item in value if isinstance(item, Mapping)] - - -def _iter_cases( - suites: Iterable[Mapping[str, object]], -) -> Iterator[tuple[str, Mapping[str, object]]]: - """Yield ``(suite_name, case)`` pairs, descending into nested suites.""" - for suite in suites: - name = str(suite.get("name", "")) - for case in _mappings(suite.get("testcases")): - yield name, case - yield from _iter_cases(_mappings(suite.get("testsuite_nested"))) - - -def build_need( - suite_name: str, - case: Mapping[str, object], - *, - need_type: str = "testcase", - tags: Sequence[str] = (), - link_properties: Mapping[str, str] | None = None, - base_url: str = "", - commit: str = "", - url_pattern: str = DEFAULT_URL_PATTERN, -) -> NeedItem: - """One test case as a need item.""" - link_properties = link_properties or {} - - classname = _optional(case.get("classname"), UNKNOWN) - name = _optional(case.get("name"), UNKNOWN) - source_file = _optional(case.get("file"), UNKNOWN) - source_line = _optional(case.get("line"), -1) - time = _optional(case.get("time"), -1) - - url = source_url(base_url, commit, source_file, source_line, url_pattern) - - need: NeedItem = { - "id": deterministic_case_id( - classname=classname, name=name, file=source_file, prefix=need_type - ), - "type": need_type, - "title": case_display_name(classname, name), - "content": build_content(case), - "tags": list(tags), - "name": name, - "classname": classname, - "suite": suite_name, - "file": source_file, - "line": source_line, - "time": time, - "result": RESULT_NAMES.get( - str(case.get("result", "")), str(case.get("result", "")) - ), - "result_text": _first_message(case), - # The same URL twice on purpose: external_url drives the external-needs - # rendering, while a plain field stays usable for needs imported as - # local needs (via a needs_string_links entry). - "external_url": url, - "remote_url": url, - } - - properties = case.get("properties") or {} - if not isinstance(properties, Mapping): - properties = {} - - # Link fields are emitted even when empty, so a schema can require them. - for property_name, link_field in link_properties.items(): - raw = str(properties.get(property_name, "")) - need[link_field] = [item.strip() for item in raw.split(",") if item.strip()] - - for property_name, value in properties.items(): - if property_name in link_properties or property_name in need: - continue - need[property_name] = str(value) - - return need - - -def build_needs_file( - suites: Iterable[Mapping[str, object]], - *, - project: str = "", - version: str = DEFAULT_VERSION, - need_type: str = "testcase", - tags: Sequence[str] = (), - link_properties: Mapping[str, str] | None = None, - base_url: str = "", - commit: str = "", - url_pattern: str = DEFAULT_URL_PATTERN, -) -> dict[str, object]: - """The complete needs.json payload for a set of parsed reports. - - No ``created`` key is written: a wall clock inside a cacheable build output - would change the file on every run. - """ - needs: dict[str, NeedItem] = {} - for suite_name, case in _iter_cases(suites): - need = build_need( - suite_name, - case, - need_type=need_type, - tags=tags, - link_properties=link_properties, - base_url=base_url, - commit=commit, - url_pattern=url_pattern, - ) - needs[str(need["id"])] = need - - return { - "project": project, - "current_version": version, - "versions": { - version: { - "needs": needs, - "needs_amount": len(needs), - } - }, - } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py deleted file mode 100644 index 0458a4b28..000000000 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py +++ /dev/null @@ -1,66 +0,0 @@ -"""Web URLs for test sources. - -Sphinx-free, like every module the converter CLI depends on. - -Only the small amount of URL handling the converter actually needs lives here: -normalising a git remote into a browsable base, and formatting a line-anchored -source URL. sphinx-codelinks carries a fuller implementation (giturlparse-based, -covering more forges); when the two extensions are consolidated the machinery -should be shared rather than duplicated -- which is why this stays deliberately -minimal instead of growing a second forge matrix. -""" - -import re - -#: GitHub and GitHub-compatible forges. GitLab needs ``{base}/-/blob/...``. -DEFAULT_URL_PATTERN = "{base}/blob/{commit}/{file}#L{line}" - -#: ``git@host:org/repo.git`` and ``ssh://git@host/org/repo.git``. -_SCP_STYLE = re.compile( - r"^(?:ssh://)?(?:[^@/]+@)?(?P[^:/]+)[:/](?P.+?)(?:\.git)?/?$" -) - - -def normalise_remote_url(remote_url: str) -> str: - """Turn a git remote into a browsable ``https`` base URL. - - An already-browsable URL is returned unchanged apart from a trailing - ``.git``/``/``; anything unrecognised is passed through, so an explicitly - configured base is never mangled. - """ - url = remote_url.strip() - if not url: - return "" - - if url.startswith(("http://", "https://")): - stripped = url.rstrip("/") - return stripped.removesuffix(".git") - - match = _SCP_STYLE.match(url) - if match is None: - return url.rstrip("/") - - host = match.group("host") - path = match.group("path") - return f"https://{host}/{path}" - - -def source_url( - base_url: str, - commit: str, - file: str, - line: str, - pattern: str = DEFAULT_URL_PATTERN, -) -> str: - """Line-anchored URL of a test source, or ``""`` without repo metadata. - - A hermetic build has no git remote, so the absence of metadata must yield an - empty field rather than a placeholder URL that looks real and 404s. - When the line is unknown the anchor is dropped instead of pointing at a - fabricated line. - """ - if not base_url or not commit or not file: - return "" - - effective_pattern = pattern if line else pattern.split("#")[0] - return effective_pattern.format(base=base_url, commit=commit, file=file, line=line) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index df94f19ef..224ed81de 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -92,7 +92,7 @@ def _register_field(app, name, schema=None): log.debug(f"Field '{name}' already registered, skipping") -def setup(app: Sphinx) -> dict[str, str | bool]: +def setup(app: Sphinx): """ Setup following directives: * test_results diff --git a/packages/sphinx-test-reports/tests/test_cli_convert.py b/packages/sphinx-test-reports/tests/test_cli_convert.py deleted file mode 100644 index 67d482b74..000000000 --- a/packages/sphinx-test-reports/tests/test_cli_convert.py +++ /dev/null @@ -1,400 +0,0 @@ -"""Tests for the Sphinx-free ``test-reports convert`` CLI (TR-A). - -This is the keystone of the build-system story: a test-XML to needs.json -conversion that runs as a build action *outside* Sphinx, so the docs build only -imports the result. Two properties are load-bearing and therefore tested -explicitly rather than assumed: - -* the CLI must not import Sphinx -- otherwise a Bazel action pulls the whole - documentation toolchain into the test-result conversion; -* the output must be byte-stable, because it is a cached build artifact and - qualification evidence. -""" - -import json -import subprocess -import sys -from pathlib import Path - -import pytest - -UTILS = Path(__file__).parent / "doc_test" / "utils" -GTEST_XML = UTILS / "gtest_data.xml" -PYTEST_XML = UTILS / "pytest_data.xml" - - -def _convert(tmp_path, *args, xml=GTEST_XML): - """Run the converter and return (exit_code, parsed output or None).""" - from sphinxcontrib.test_reports.cli import main - - output = tmp_path / "needs.json" - code = main(["convert", str(xml), "--output", str(output), *args]) - data = json.loads(output.read_text(encoding="utf-8")) if output.exists() else None - return code, data - - -def _needs(data): - version = data["current_version"] - return data["versions"][version]["needs"] - - -class TestNoSphinxImport: - """The converter has to be usable without the documentation toolchain.""" - - def test_importing_the_cli_does_not_import_sphinx(self): - script = ( - "import sys;" - "import sphinxcontrib.test_reports.cli;" - "leaked = sorted(m for m in sys.modules" - " if m == 'sphinx' or m.startswith(('sphinx.', 'sphinx_needs')));" - "print(','.join(leaked))" - ) - result = subprocess.run( - [sys.executable, "-c", script], - capture_output=True, - text=True, - check=True, - ) - - assert result.stdout.strip() == "" - - -class TestEnvelope: - def test_output_passes_the_sphinx_needs_schema(self, tmp_path): - """The output must validate against sphinx-needs' own needs.json schema.""" - needsfile = pytest.importorskip("sphinx_needs.needsfile") - if not hasattr(needsfile, "check_needs_data"): - # Older sphinx-needs releases do not ship the schema check; the - # envelope contract itself is version-independent, so skip rather - # than pin the whole suite to the newest sphinx-needs. - pytest.skip("sphinx-needs has no check_needs_data") - - code, data = _convert(tmp_path) - - assert code == 0 - assert needsfile.check_needs_data(data).schema == [] - - def test_envelope_carries_project_and_current_version(self, tmp_path): - _, data = _convert(tmp_path, "--project", "Score Docs-as-Code") - - assert data["project"] == "Score Docs-as-Code" - assert data["current_version"] in data["versions"] - - def test_needs_amount_matches_the_number_of_cases(self, tmp_path): - _, data = _convert(tmp_path) - - version = data["versions"][data["current_version"]] - assert version["needs_amount"] == len(version["needs"]) == 5 - - def test_no_timestamp_is_written(self, tmp_path): - """A wall clock would defeat action caching and evidence diffs.""" - _, data = _convert(tmp_path) - - assert "created" not in data - assert "created" not in data["versions"][data["current_version"]] - - def test_output_is_byte_stable_across_runs(self, tmp_path): - from sphinxcontrib.test_reports.cli import main - - first = tmp_path / "first.json" - second = tmp_path / "second.json" - for output in (first, second): - assert main(["convert", str(GTEST_XML), "--output", str(output)]) == 0 - - assert first.read_bytes() == second.read_bytes() - - -class TestNeedContent: - def test_ids_match_the_deterministic_scheme(self, tmp_path): - from sphinxcontrib.test_reports.identity import deterministic_case_id - - _, data = _convert(tmp_path) - - expected = deterministic_case_id( - classname="MathTest", name="Addition", file="src/math_test.cc" - ) - assert expected in _needs(data) - - def test_source_location_is_emitted_verbatim(self, tmp_path): - _, data = _convert(tmp_path) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["file"] == "src/math_test.cc" - assert need["line"] == "12" - - def test_type_and_title_are_score_shaped(self, tmp_path): - _, data = _convert(tmp_path) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["type"] == "testcase" - assert need["title"] == "MathTest__Addition" - - def test_result_vocabulary_includes_disabled(self, tmp_path): - _, data = _convert(tmp_path) - - need = _needs(data)["testcase__MathTest__DISABLED_Division_jnyzp"] - assert need["result"] == "disabled" - - def test_content_keeps_every_failure_part(self, tmp_path): - """R2: the debug output has to survive the conversion.""" - _, data = _convert(tmp_path) - - content = _needs(data)["testcase__MathTest__Subtraction_srmht"]["content"] - assert "Expected equality of these values" in content - assert "Actual: false" in content - assert "overflow guard hit" in content - - def test_result_text_is_the_first_failure_message(self, tmp_path): - _, data = _convert(tmp_path) - - need = _needs(data)["testcase__MathTest__Subtraction_srmht"] - assert need["result_text"].startswith("src/math_test.cc:22") - assert "\n" not in need["result_text"] - - def test_properties_become_fields(self, tmp_path): - _, data = _convert(tmp_path) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["TestType"] == "requirements-based" - - def test_tags_are_configurable(self, tmp_path): - _, data = _convert(tmp_path, "--tags", "TEST") - - assert _needs(data)["testcase__MathTest__Addition_hcuyy"]["tags"] == ["TEST"] - - -class TestLinkProperties: - def test_a_property_can_be_promoted_to_a_link_field(self, tmp_path): - _, data = _convert( - tmp_path, "--link-property", "PartiallyVerifies=partially_verifies" - ) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["partially_verifies"] == ["REQ_1", "REQ_2"] - assert "PartiallyVerifies" not in need - - def test_link_fields_are_always_present_even_when_empty(self, tmp_path): - """A converter must emit its fields unconditionally, so schemas can require them.""" - _, data = _convert( - tmp_path, "--link-property", "PartiallyVerifies=partially_verifies" - ) - - need = _needs(data)["testcase__MathTest__DISABLED_Division_jnyzp"] - assert need["partially_verifies"] == [] - - def test_malformed_link_property_is_rejected(self, tmp_path): - from sphinxcontrib.test_reports.cli import main - - code = main( - [ - "convert", - str(GTEST_XML), - "--output", - str(tmp_path / "out.json"), - "--link-property", - "NoEqualsSign", - ] - ) - - assert code != 0 - - -class TestRemoteUrls: - def test_external_url_and_remote_url_are_synthesized(self, tmp_path): - _, data = _convert( - tmp_path, - "--remote-url", - "https://github.com/org/repo", - "--commit", - "abc123", - ) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - expected = "https://github.com/org/repo/blob/abc123/src/math_test.cc#L12" - assert need["external_url"] == expected - assert need["remote_url"] == expected - - def test_scp_style_remote_is_normalised(self, tmp_path): - _, data = _convert( - tmp_path, - "--remote-url", - "git@github.com:org/repo.git", - "--commit", - "abc123", - ) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["remote_url"].startswith("https://github.com/org/repo/blob/abc123/") - - def test_url_pattern_is_configurable(self, tmp_path): - _, data = _convert( - tmp_path, - "--remote-url", - "https://gitlab.com/org/repo", - "--commit", - "abc123", - "--url-pattern", - "{base}/-/blob/{commit}/{file}#L{line}", - ) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["remote_url"] == ( - "https://gitlab.com/org/repo/-/blob/abc123/src/math_test.cc#L12" - ) - - def test_without_repo_metadata_the_url_fields_are_empty(self, tmp_path): - """A hermetic sandbox has no git remote; that must not drop the need.""" - _, data = _convert(tmp_path) - - need = _needs(data)["testcase__MathTest__Addition_hcuyy"] - assert need["remote_url"] == "" - assert need["external_url"] == "" - - -class TestMultipleInputs: - def test_several_reports_are_merged_into_one_file(self, tmp_path): - from sphinxcontrib.test_reports.cli import main - - output = tmp_path / "needs.json" - code = main( - ["convert", str(GTEST_XML), str(PYTEST_XML), "--output", str(output)] - ) - data = json.loads(output.read_text(encoding="utf-8")) - - assert code == 0 - assert len(_needs(data)) > 5 - - def test_a_missing_input_file_exits_nonzero(self, tmp_path): - from sphinxcontrib.test_reports.cli import main - - code = main( - [ - "convert", - str(tmp_path / "nope.xml"), - "--output", - str(tmp_path / "out.json"), - ] - ) - - assert code != 0 - - -class TestDiagnostics: - def test_absent_line_attributes_warn_about_junit_family(self, tmp_path, capsys): - """pytest's default junit_family drops file/line; say so, don't guess.""" - from sphinxcontrib.test_reports.cli import main - - main( - [ - "convert", - str(PYTEST_XML), - "--output", - str(tmp_path / "out.json"), - ] - ) - - assert "junit_family" in capsys.readouterr().err - - def test_reports_with_line_attributes_do_not_warn(self, tmp_path, capsys): - from sphinxcontrib.test_reports.cli import main - - main(["convert", str(GTEST_XML), "--output", str(tmp_path / "out.json")]) - - assert "junit_family" not in capsys.readouterr().err - - -def test_the_cli_is_runnable_as_a_module(): - result = subprocess.run( - [sys.executable, "-m", "sphinxcontrib.test_reports.cli", "convert", "--help"], - capture_output=True, - text=True, - ) - - assert result.returncode == 0 - assert "--output" in result.stdout - - -def test_console_script_is_installed(): - """The name that goes into a BUILD file has to be a real entry point.""" - script = Path(sys.executable).parent / "test-reports" - if not script.exists(): - pytest.skip("package not installed into this environment") - - result = subprocess.run( - [str(script), "convert", "--help"], capture_output=True, text=True - ) - - assert result.returncode == 0 - assert "--output" in result.stdout - - -@pytest.mark.parametrize("flag", ["--remote-url", "--commit"]) -def test_url_synthesis_needs_both_parts(tmp_path, flag): - """Half the metadata cannot produce a URL; fail loudly instead of guessing.""" - from sphinxcontrib.test_reports.cli import main - - code = main( - [ - "convert", - str(GTEST_XML), - "--output", - str(tmp_path / "out.json"), - flag, - "value", - ] - ) - - assert code != 0 - - -class TestResultVocabulary: - """The export uses the migration-target vocabulary, not the parser's. - - The parser reports ``failure`` and must keep doing so -- it is a documented - need field value and a CSS class (``tr_failure``). The exported needs.json - is a new surface with no such obligation, and its consumers' metamodels - (S-CORE's included) spell it ``failed``. - """ - - def test_failure_is_exported_as_failed(self, tmp_path): - _, data = _convert(tmp_path) - - assert ( - _needs(data)["testcase__MathTest__Subtraction_srmht"]["result"] == "failed" - ) - - @pytest.mark.parametrize( - ("need_id", "expected"), - [ - ("testcase__MathTest__Addition_hcuyy", "passed"), - ("testcase__MathTest__DISABLED_Division_jnyzp", "disabled"), - ("testcase__ParamTest_0__Legacy_owuvz", "skipped"), - ], - ) - def test_other_results_are_unchanged(self, tmp_path, need_id, expected): - _, data = _convert(tmp_path) - - assert _needs(data)[need_id]["result"] == expected - - -class TestContentIsNotDuplicated: - """googletest repeats the failure text in the message attribute. - - Emitting both verbatim shows the same stack trace twice in the rendered - need; the message block is only worth its space when it says something the - body does not. - """ - - def test_a_message_contained_in_the_body_is_not_repeated(self, tmp_path): - _, data = _convert(tmp_path) - - content = _needs(data)["testcase__MathTest__Subtraction_srmht"]["content"] - assert content.count("Expected equality of these values") == 1 - assert "message" not in content - - def test_a_message_absent_from_the_body_is_kept(self, tmp_path): - _, data = _convert(tmp_path) - - content = _needs(data)["testcase__ParamTest_0__Legacy_owuvz"]["content"] - assert "Skipped via GTEST_SKIP" in content - assert "not applicable on this platform" in content From f090dd39008c06bb92e57b307e34625a1be8410d Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Mon, 7 Sep 2026 08:38:27 +0200 Subject: [PATCH 138/159] build: require Python 3.11 (useblocks/sphinx-test-reports#147) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Python 3.10 reached the end of upstream support. The floor matters beyond housekeeping: `tomllib` landed in 3.11, so a 3.10 floor means carrying `tomli` as a dependency purely for older interpreters. Split out of useblocks/sphinx-test-reports#145, which needs a stdlib TOML parser, so the version bump can be reviewed and merged on its own. ## Changes - `requires-python` `>=3.10` → `>=3.11` - `noxfile.py` and the CI test matrix run 3.11/3.12 - the `3.9` and `3.10` classifiers go (3.9 was already stale — `requires-python` has excluded it for some time) - the `pre-commit` and `linkcheck` jobs pinned Python 3.9 purely to drive nox; they move to 3.12, since 3.9 is two releases past end of life and the sessions they start pick their own interpreter anyway No source change — nothing in the package uses a 3.11 feature yet. 110 tests pass. For reference, the sibling repos are already ahead of this: sphinx-codelinks and sphinx-mounts both require `>=3.12`. --- packages/sphinx-test-reports/.github/workflows/ci.yaml | 6 +++--- packages/sphinx-test-reports/docs/changelog.rst | 3 +++ packages/sphinx-test-reports/noxfile.py | 2 +- packages/sphinx-test-reports/pyproject.toml | 4 +--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index aa15fc7c2..c30e657bf 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -7,7 +7,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ["3.10", "3.12"] # No "3.10", as nose seem to have problems with it + python-version: ["3.11", "3.12"] sphinx-version: ["5.0", "8.1.3"] sphinx_needs-version: ["2.1", "4.2", "5.1", "6.3.0", "8.0.0"] steps: @@ -30,7 +30,7 @@ jobs: - name: Set Up Python uses: actions/setup-python@v2 with: - python-version: "3.9" + python-version: "3.12" - name: Install Nox Dependencies run: | python -m pip install poetry nox nox-poetry @@ -61,7 +61,7 @@ jobs: - name: Set Up Python uses: actions/setup-python@v2 with: - python-version: "3.9" + python-version: "3.12" - name: Install Nox Dependencies run: | python -m pip install poetry nox nox-poetry diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index a74826fcc..b11ce07c3 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -22,6 +22,9 @@ Unreleased * Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from the source location instead of the need content, so an ID no longer changes when a test starts failing differently. +* Support: Python 3.10 is no longer supported. It reached the end of upstream + support, and dropping it lets the package read TOML with ``tomllib`` from the + standard library instead of carrying a backport. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index ed49cbb4c..980a256ef 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -1,7 +1,7 @@ import nox from nox import session -PYTHON_VERSIONS = ["3.10", "3.12"] +PYTHON_VERSIONS = ["3.11", "3.12"] SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.0", "6.3.0", "8.0.0"] diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index aa8cd6add..77e2ca16a 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -17,14 +17,12 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Documentation", ] keywords = ["sphinx", "documentation", "test-reports"] -requires-python = ">=3.10" +requires-python = ">=3.11" dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1", "packaging>=20.0"] [project.optional-dependencies] From 99e21bf8ce79c97880e4acffe1106c55b5a51d42 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Mon, 7 Sep 2026 11:32:45 +0200 Subject: [PATCH 139/159] build: require sphinx-needs 6.0.1 and Sphinx 7.4 (useblocks/sphinx-test-reports#150) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follows useblocks/sphinx-test-reports#147 (Python 3.11, merged). Split out so the version floors can be reviewed on their own;the declarative-config, plugin and converter PRs are rebased onto it and lose their remaining compatibility branches. ## Why The package now requires Python 3.11. sphinx-needs raised its own floor to ​3.10 with ​6.0 (#1468 dropped 3.9) and requires Sphinx 7.4 from that release on. The versions this package still carried compatibility branches for — sphinx-needs 2.x to ​5.x, Sphinx below ​6.1 — are ones it no longer shares an interpreter range with in practice,and​ ​6.x is where field registration with a schema begins, which is what the extension relies on. The exact floor is **6.0.1**:that is the first release whose `add_extra_option` takes `schema=` (sphinx-needs #1527). On 6.0.0 the call raised `TypeError`, which `_register_field` swallowed under a catch-all meant for "already registered" — so no field was registered and every directive failed with `InvalidNeedException`. The first CI run of this PR caught exactly that on the 6.0.0 cells. ## Changes - `sphinx-needs>=6.0.1` and `sphinx>=7.4` (the floor sphinx-needs 6 implies anyway) - nox and CI matrices: sphinx-needs 6.0.1 /​ ​6.3.0 /​ ​7.0.0 /​ ​8.0.0 × Sphinx ​7.4.7 /​ ​8.1.3 (the Sphinx 5.0 cells could not have installed sphinx-needs 6) - `sphinx_needs_update` registers fields with a schema unconditionally;the no-schema branch is gone - `_register_field` catches only `NeedsApiConfigWarning` (a duplicate registration) instead of every exception,and no longer inspects `add_extra_option`'s signature - the Sphinx version switches around `logging`, `status_iterator` and the test fixtures' path type are gone - the `needs_schema_definitions` tests no longer skip - the test fixtures' confs now switch to `needs_fields` at sphinx-needs 7.0.0 instead of 8..0.0:7.0.0 is where `needs_fields` was introduced and `needs_extra_options` deprecated (sphinx-needs #1611), so on ​7.x the old option emits a `[needs.deprecated]` warning, which `test_test_file_needs_extra_options_no_warning` caught. Schema-based registration works since ​6.0.1, so this only changes the 7.x path — no behaviour change for ​6.x or​ ​ 8.x. No behaviour change for any supported version. 110 tests pass on each of: sphinx-needs ​6.​0.1 / Sphinx ​7.4.7,​ ​7.0.0 / Sphinx ​7.4.7,and​ ​7.0.0 / Sphinx ​8.1.3;also verified on ​8.5.0 / Sphinx ​9.1. --- .../.github/workflows/ci.yaml | 4 +- .../sphinx-test-reports/docs/changelog.rst | 4 + packages/sphinx-test-reports/docs/conf.py | 2 +- packages/sphinx-test-reports/noxfile.py | 4 +- packages/sphinx-test-reports/pyproject.toml | 2 +- .../test_reports/directives/test_env.py | 10 +- .../sphinxcontrib/test_reports/environment.py | 14 +- .../test_reports/test_reports.py | 126 +++++++----------- .../sphinx-test-reports/tests/conftest.py | 12 +- .../tests/doc_test/basic_doc/conf.py | 2 +- .../doc_test/doc_test_ctest_file/conf.py | 2 +- .../tests/doc_test/doc_test_file/conf.py | 2 +- .../tests/doc_test/json_parser_custom/conf.py | 2 +- .../doc_test/many_testsuites_doc/conf.py | 2 +- .../tests/doc_test/needs_linking/conf.py | 2 +- .../tests/doc_test/properties_linking/conf.py | 2 +- .../tests/doc_test/testsuites_doc/conf.py | 2 +- .../tests/test_schema_validation.py | 14 -- 18 files changed, 68 insertions(+), 140 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index c30e657bf..5dd5fd5f9 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -8,8 +8,8 @@ jobs: matrix: os: [ubuntu-latest] python-version: ["3.11", "3.12"] - sphinx-version: ["5.0", "8.1.3"] - sphinx_needs-version: ["2.1", "4.2", "5.1", "6.3.0", "8.0.0"] + sphinx-version: ["7.4.7", "8.1.3"] + sphinx_needs-version: ["6.0.1", "6.3.0", "7.0.0", "8.0.0"] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index b11ce07c3..bacf7ef0a 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -25,6 +25,10 @@ Unreleased * Support: Python 3.10 is no longer supported. It reached the end of upstream support, and dropping it lets the package read TOML with ``tomllib`` from the standard library instead of carrying a backport. +* Support: sphinx-needs 6.0.1 and Sphinx 7.4 are the oldest supported versions. + 6.0.1 is the first release whose ``add_extra_option`` takes a schema, which + this extension registers its fields with; sphinx-needs 6 itself requires + Sphinx 7.4. The compatibility branches for older releases are gone. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 1404fda75..f52a790f8 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -70,7 +70,7 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates", "ub_theme/templates"] -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = { "more_info": {"nullable": True}, } diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 980a256ef..62a2cac1f 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -2,8 +2,8 @@ from nox import session PYTHON_VERSIONS = ["3.11", "3.12"] -SPHINX_VERSIONS = ["5.0", "7.2.5", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["2.1", "4.2", "5.1", "6.0.0", "6.3.0", "8.0.0"] +SPHINX_VERSIONS = ["7.4.7", "8.1.3"] +SPHINX_NEEDS_VERSIONS = ["6.0.1", "6.3.0", "7.0.0", "8.0.0"] def run_tests(session, sphinx, sphinx_needs): diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 77e2ca16a..eeb411a96 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ ] keywords = ["sphinx", "documentation", "test-reports"] requires-python = ">=3.11" -dependencies = ["sphinx>4.0", "lxml", "sphinx-needs>=1.0.1", "packaging>=20.0"] +dependencies = ["sphinx>=7.4", "lxml", "sphinx-needs>=6.0.1", "packaging>=20.0"] [project.optional-dependencies] test = [ diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py index a3901deff..611f00d3c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py @@ -2,18 +2,10 @@ import json import os -import sphinx from docutils import nodes from docutils.parsers.rst import Directive, directives -from packaging.version import Version +from sphinx.util import logging -sphinx_version = sphinx.__version__ -if Version(sphinx_version) >= Version("1.6"): - from sphinx.util import logging -else: - import logging - - logging.basicConfig() logger = logging.getLogger(__name__) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py index 772498b52..c5aa8a797 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py @@ -1,18 +1,10 @@ import os -import sphinx -from packaging.version import Version from sphinx.application import Sphinx from sphinx.util.console import brown # type: ignore[import-not-found] +from sphinx.util.display import status_iterator from sphinx.util.osutil import copyfile, ensuredir -sphinx_version = sphinx.__version__ -if Version(sphinx_version) >= Version("1.6"): - if Version(sphinx_version) >= Version("6.1"): - from sphinx.util.display import status_iterator - else: - from sphinx.util import status_iterator # noqa: F401 # Sphinx 1.5 - STATICS_DIR_NAME = "_static" @@ -84,10 +76,6 @@ def install_styles_static_files(app, env): # Be sure no "old" css layout is already set safe_remove_file("sphinx-test-reports/common.css", app) - if Version(sphinx_version) < Version("1.6"): - global status_iterator - status_iterator = app.status_iterator - for source_file_path in status_iterator( iterable=files_to_copy, summary=brown( diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 224ed81de..e406102db 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,16 +1,14 @@ # fmt: off -import inspect import os -import sphinx -import sphinx_needs from docutils.parsers.rst import directives -from packaging.version import Version from sphinx.application import Sphinx from sphinx.config import Config +from sphinx.util import logging # from docutils import nodes from sphinx_needs.api import add_dynamic_function, add_need_type +from sphinx_needs.exceptions import NeedsApiConfigWarning from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective @@ -31,12 +29,6 @@ from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError from sphinxcontrib.test_reports.functions import tr_link -sphinx_version = sphinx.__version__ -if Version(sphinx_version) >= Version("1.6"): - from sphinx.util import logging -else: - import logging - # fmt: on VERSION = "1.4.0" @@ -60,36 +52,34 @@ } try: + # sphinx-needs >= 8.5: fields are registered through add_field. from sphinx_needs.api import add_field as _add_field def _register_field(app, name, schema=None): description = FIELD_DESCRIPTIONS.get(name, name) try: _add_field(name, description, schema=schema) - except Exception: - # Field already registered (e.g. via needs_fields or needs_extra_options - # in conf.py). Skip to avoid duplicate registration errors. - log = logging.getLogger(__name__) - log.debug(f"Field '{name}' already registered, skipping") + except NeedsApiConfigWarning: + # Already registered, e.g. via needs_fields or needs_extra_options + # in conf.py. Anything else is a real error and must surface. + logging.getLogger(__name__).debug( + f"Field '{name}' already registered, skipping" + ) except ImportError: from sphinx_needs.api import add_extra_option as _add_extra_option - _add_extra_option_supports_description = ( - "description" in inspect.signature(_add_extra_option).parameters - ) - def _register_field(app, name, schema=None): - kwargs = {} - if _add_extra_option_supports_description: - kwargs["description"] = FIELD_DESCRIPTIONS.get(name, name) - if schema is not None: - kwargs["schema"] = schema + # add_extra_option takes description and schema from sphinx-needs + # 6.0.1 on, which is the package's floor. try: - _add_extra_option(app, name, **kwargs) - except Exception: - log = logging.getLogger(__name__) - log.debug(f"Field '{name}' already registered, skipping") + _add_extra_option( + app, name, description=FIELD_DESCRIPTIONS.get(name, name), schema=schema + ) + except NeedsApiConfigWarning: + logging.getLogger(__name__).debug( + f"Field '{name}' already registered, skipping" + ) def setup(app: Sphinx): @@ -269,53 +259,34 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: check_field_name_collisions(config) - needs_version = Version(sphinx_needs.__version__) - use_schema = needs_version >= Version("6.0.0") - - if use_schema: - _register_field( - app, getattr(config, "tr_file_option", "file"), schema={"type": "string"} - ) - _register_field( - app, - getattr(config, "tr_source_file_option", "case_file"), - schema={"type": "string"}, - ) - _register_field( - app, - getattr(config, "tr_source_line_option", "case_line"), - schema={"type": "string"}, - ) - _register_field(app, "suite", schema={"type": "string"}) - _register_field(app, "case", schema={"type": "string"}) - _register_field(app, "case_name", schema={"type": "string"}) - _register_field(app, "case_parameter", schema={"type": "string"}) - _register_field(app, "classname", schema={"type": "string"}) - _register_field(app, "time", schema={"type": "string"}) - _register_field(app, "suites", schema={"type": "integer"}) - _register_field(app, "cases", schema={"type": "integer"}) - _register_field(app, "passed", schema={"type": "integer"}) - _register_field(app, "skipped", schema={"type": "integer"}) - _register_field(app, "failed", schema={"type": "integer"}) - _register_field(app, "errors", schema={"type": "integer"}) - _register_field(app, "result", schema={"type": "string"}) - else: - _register_field(app, getattr(config, "tr_file_option", "file")) - _register_field(app, getattr(config, "tr_source_file_option", "case_file")) - _register_field(app, getattr(config, "tr_source_line_option", "case_line")) - _register_field(app, "suite") - _register_field(app, "case") - _register_field(app, "case_name") - _register_field(app, "case_parameter") - _register_field(app, "classname") - _register_field(app, "time") - _register_field(app, "suites") - _register_field(app, "cases") - _register_field(app, "passed") - _register_field(app, "skipped") - _register_field(app, "failed") - _register_field(app, "errors") - _register_field(app, "result") + # sphinx-needs >= 6 registers fields with a schema; there is no older + # branch to keep, the package requires that version. + _register_field( + app, getattr(config, "tr_file_option", "file"), schema={"type": "string"} + ) + _register_field( + app, + getattr(config, "tr_source_file_option", "case_file"), + schema={"type": "string"}, + ) + _register_field( + app, + getattr(config, "tr_source_line_option", "case_line"), + schema={"type": "string"}, + ) + _register_field(app, "suite", schema={"type": "string"}) + _register_field(app, "case", schema={"type": "string"}) + _register_field(app, "case_name", schema={"type": "string"}) + _register_field(app, "case_parameter", schema={"type": "string"}) + _register_field(app, "classname", schema={"type": "string"}) + _register_field(app, "time", schema={"type": "string"}) + _register_field(app, "suites", schema={"type": "integer"}) + _register_field(app, "cases", schema={"type": "integer"}) + _register_field(app, "passed", schema={"type": "integer"}) + _register_field(app, "skipped", schema={"type": "integer"}) + _register_field(app, "failed", schema={"type": "integer"}) + _register_field(app, "errors", schema={"type": "integer"}) + _register_field(app, "result", schema={"type": "string"}) # Extra dynamic functions # For details about usage read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function @@ -325,10 +296,7 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # extracted from JUnit XML are accepted by sphinx-needs tr_extra_options = getattr(config, "tr_extra_options", []) for option_name in tr_extra_options: - if use_schema: - _register_field(app, option_name, schema={"type": "string"}) - else: - _register_field(app, option_name) + _register_field(app, option_name, schema={"type": "string"}) # Extra need types # For details about usage read diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index b102cadde..f0b76826d 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -5,12 +5,6 @@ from tempfile import mkdtemp import pytest -from packaging.version import Version -from sphinx import __version__ as sphinx_version - -if Version(sphinx_version) < Version("7.2"): - from sphinx.testing.path import path - pytest_plugins = "sphinx.testing.fixtures" @@ -19,11 +13,7 @@ def copy_srcdir_to_tmpdir(srcdir, tmp): srcdir = Path(__file__).parent.absolute() / srcdir tmproot = tmp / Path(srcdir).name shutil.copytree(srcdir, tmproot) - return ( - tmproot - if Version(sphinx_version) >= Version("7.2") - else path(tmproot.absolute()) - ) + return tmproot @pytest.fixture(scope="function") diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index f178b2d9a..6d45cbbf0 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -72,7 +72,7 @@ # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = {"more_info": {"nullable": True}} else: needs_extra_options = ["more_info"] diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py index 7d58f6bd0..e087bb9da 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py @@ -78,7 +78,7 @@ # The master toctree document. master_doc = "index" -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = { "asil": {"nullable": True}, "uses_secure": {"nullable": True}, diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py index e858a3436..a9751465f 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py @@ -78,7 +78,7 @@ # The master toctree document. master_doc = "index" -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = { "asil": {"nullable": True}, "uses_secure": {"nullable": True}, diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py index 7dc64c444..d803798e4 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py @@ -35,7 +35,7 @@ extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = {"priority": {"nullable": True}} else: needs_extra_options = ["priority"] diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py index 9c86fd9cd..c6881826d 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py @@ -40,7 +40,7 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = {"more_info": {"nullable": True}} else: needs_extra_options = ["more_info"] diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py index b256d83be..b3a0edfe6 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py @@ -78,7 +78,7 @@ # The master toctree document. master_doc = "index" -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = { "asil": {"nullable": True}, "uses_secure": {"nullable": True}, diff --git a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py index b3d3dd3f3..1d4a0038d 100644 --- a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py @@ -31,7 +31,7 @@ html_theme = "alabaster" # Register "verifies" as both a sphinx-needs field and a tr_extra_option -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = { "verifies": {"nullable": True}, "priority": {"nullable": True}, diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py index d362ae2a2..59a318cc9 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py @@ -37,7 +37,7 @@ # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] -if Version(sphinx_needs.__version__) >= Version("8.0.0"): +if Version(sphinx_needs.__version__) >= Version("7.0.0"): needs_fields = {"more_info": {"nullable": True}} else: needs_extra_options = ["more_info"] diff --git a/packages/sphinx-test-reports/tests/test_schema_validation.py b/packages/sphinx-test-reports/tests/test_schema_validation.py index fec8d68c6..4777ae00c 100644 --- a/packages/sphinx-test-reports/tests/test_schema_validation.py +++ b/packages/sphinx-test-reports/tests/test_schema_validation.py @@ -19,18 +19,8 @@ from pathlib import Path import pytest -import sphinx_needs -from packaging.version import Version -# The needs_schema_definitions / schema-validation feature was introduced in -# sphinx-needs 6.0.0; skip on older versions that do not support it. -SN_SUPPORTS_SCHEMAS = Version(sphinx_needs.__version__) >= Version("6.0.0") - -@pytest.mark.skipif( - not SN_SUPPORTS_SCHEMAS, - reason="needs_schema_definitions requires sphinx-needs>=6.0.0", -) @pytest.mark.parametrize( "test_app", [{"buildername": "html", "srcdir": "doc_test/schema_strictness"}], @@ -60,10 +50,6 @@ def test_strict_schema_ignores_unpopulated_test_report_fields(test_app): ) -@pytest.mark.skipif( - not SN_SUPPORTS_SCHEMAS, - reason="needs_schema_definitions requires sphinx-needs>=6.0.0", -) @pytest.mark.parametrize( "test_app", [{"buildername": "html", "srcdir": "doc_test/schema_strictness_status"}], From 03d0279c9533be877312c041565d254491d9e900 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Mon, 7 Sep 2026 20:33:15 +0200 Subject: [PATCH 140/159] feat(config): declarative [test_reports] section in ubproject.toml (useblocks/sphinx-test-reports#145) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stacked on useblocks/sphinx-test-reports#150 (sphinx-needs 6.0.1 / Sphinx 7.4 floor) and, through it, on the Python 3.11 floor of useblocks/sphinx-test-reports#147 — reading the section needs `tomllib`. Describe the project once, in the `[test_reports]` section of `ubproject.toml` — the declarative file sphinx-needs, sphinx-codelinks, sphinx-mounts and ubCode already read — instead of restating it in `conf.py`. **Rescoped.** This PR previously also carried the `test-reports convert` CLI integration and the conversion settings themselves. useblocks/sphinx-test-reports#144 has been reverted (useblocks/sphinx-test-reports#146) so the declarative configuration lands first; the converter returns as a follow-up PR stacked on this one, bringing its own settings under `[test_reports.build.needs]` and reading them from the start rather than shipping flags and growing `--config` afterwards. What is left here is exactly what the Sphinx extension consumes. ## What - New Sphinx-free module `projectconfig.py` parses, validates and normalises the section. It imports no Sphinx, and neither does the package `__init__` it runs through: `setup` is resolved lazily (PEP 562), so a build action can read the section without the documentation toolchain installed. The section describes the *project*, not this extension. - **Bridge**: a `config-inited` handler at `priority=100` applies the Sphinx-facing keys to their `tr_*` config values, ahead of the handlers that read them. Precedence is **`-D` > `ubproject.toml` > `conf.py` > built-in default** — the file is the source of truth for the project, the command line stays the per-invocation escape hatch. Both are announced in the log (`Applied … from …`, `Kept the -D value of …`). - **New confval `tr_config_from_toml`** (default `ubproject.toml`; `None` disables, and `NoneType` is an accepted type so the documented opt-out does not trip Sphinx's own confval check). With the default name the file is searched for upwards from the `confdir` to the repository root — the directory holding `.git`, and nothing else bounds the search: a `pyproject.toml` on the way up marks a distribution, not the project, so `docs/pyproject.toml` beside `conf.py` and a uv-workspace member (`packages//docs/conf.py` with one `ubproject.toml` at the monorepo root) both find the file. A fruitless search says where it ended (`sphinx-build -v`). An explicitly named file is used as-is and warns if missing (`test_reports.missing_config`). - **Spellings**: `file`/`suite`/`case` accept both the positional `conf.py` list and a named table (`directive`/`type`/`name`/`prefix`/`color`/`style`). Relative `rootdir`/`report_template` anchor at the TOML file's directory; the loader joins without resolving, so the form of the path it is handed (Sphinx's already-resolved `confdir`, a converter's working directory) is kept as is. - **Error policy**: a *known* key with the wrong type is an error — that is the typo class this validation exists for — and table *values* are checked, not just the outer table, including the values inside a `file`/`suite`/`case` table. An *unknown* key is warned about and ignored (suppressible via `test_reports.unknown_key`): the file is shared with tools on independent release cadences, so a key this version does not model must not take a build down. Same posture sphinx-mounts documents for `[[source.mounts]]`. - **Foreign sub-table**: `[test_reports.build]` — and only that one — is recognised and passed through untouched. It holds the settings of the `test-reports build` command line, one sub-table per artifact it produces (`[test_reports.build.needs]` for turning test reports into a `needs.json` outside Sphinx), none of which this extension does, so it must draw neither an unknown-key warning nor a `tr_*` value. Any other sub-table is an unknown key like any other. The converter PR defines and validates the contents of `build.needs`. - `tr_rootdir` declares `types=(str, os.PathLike)`: its default is Sphinx's `confdir`, a `_StrPath`, so a plain string — the only thing TOML or a string literal in `conf.py` can supply — used to fail Sphinx's confval type check and take a `-W` build down. Pre-existing, but the documented example newly advertised it. ## Notes - The section is spelled `test_reports`, matching every other section of `ubproject.schema.json` (`build_tags`, `format_rst`, `needs_json`, …) and leaving the existing `[reports]` — report *templates* — unambiguous. ## Tests 54 tests in `tests/test_project_config.py`: loader validation, normalisation and path anchoring; upward discovery, its repository-root boundary and the layouts a `pyproject.toml` must not end (`docs/pyproject.toml`, workspace member); the foreign-sub-table passthrough; real Sphinx builds asserting the precedence chain (`-D` beats TOML, TOML beats `conf.py`), the warning paths, where a fruitless search ended, and that the documented example — read from `configuration.rst` verbatim — applies without a warning; and that `projectconfig` imports in a process where Sphinx is blocked. ## Review Reviewed in https://github.com/useblocks/sphinx-test-reports/pull/145#issuecomment-5551256944, addressed in https://github.com/useblocks/sphinx-test-reports/pull/145#issuecomment-5551355689. The CLI-side fixes from that round move with the converter to its own PR. Second round: https://github.com/useblocks/sphinx-test-reports/pull/145#pullrequestreview-5126626676 — the three fixes, the text corrections and both unconfirmed claims are addressed in 809bd9a; the discovery-rule question across packages stays open for the monorepo. Two findings from the first review move with the conversion settings and are re-applied in the converter PR: the `need_type` / `case.type` agreement check (both name the need type of a test case, so they must not disagree), and the `link_properties` value-type validation. --- .../sphinx-test-reports/docs/changelog.rst | 7 + .../docs/configuration.rst | 112 +++ .../sphinxcontrib/test_reports/__init__.py | 37 +- .../test_reports/projectconfig.py | 467 ++++++++++++ .../test_reports/test_reports.py | 129 +++- .../tests/doc_test/ubproject_toml/conf.py | 23 + .../tests/doc_test/ubproject_toml/index.rst | 9 + .../doc_test/ubproject_toml/ubproject.toml | 24 + .../tests/test_project_config.py | 720 ++++++++++++++++++ 9 files changed, 1524 insertions(+), 4 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/ubproject_toml/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/ubproject_toml/ubproject.toml create mode 100644 packages/sphinx-test-reports/tests/test_project_config.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index bacf7ef0a..485646159 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -22,6 +22,13 @@ Unreleased * Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from the source location instead of the need content, so an ID no longer changes when a test starts failing differently. +* Feature: Declarative configuration in the ``[test_reports]`` section of + ``ubproject.toml``, the file shared with the other useblocks tooling, so a + project is described once instead of being restated in ``conf.py``. The file + is searched for upwards from the ``confdir``, stopping at the repository + root; + the new ``tr_config_from_toml`` names or disables it. Precedence is ``-D`` > + ``ubproject.toml`` > ``conf.py`` > default. See :ref:`tr_config_from_toml`. * Support: Python 3.10 is no longer supported. It reached the end of upstream support, and dropping it lets the package read TOML with ``tomllib`` from the standard library instead of carrying a backport. diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 85417b9b6..e7ee67298 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -1,5 +1,7 @@ :hide-navigation: +.. _configuration: + Configuration ============= The following options can be set inside the ``conf.py`` file of your Sphinx project. @@ -7,6 +9,8 @@ The following options can be set inside the ``conf.py`` file of your Sphinx proj .. contents:: :local: +.. _tr_rootdir: + tr_rootdir ---------- ``tr_rootdir`` takes a path, which is used as *root dir* for all provided file paths in other directives. @@ -71,6 +75,8 @@ By default ``tr_case`` is set to:: Please read :ref:`tr_file` for more details. +.. _tr_report_template: + tr_report_template ------------------ @@ -401,3 +407,109 @@ An example of a JSON file, which supports the below configuration, can be seen i } } } + +Declarative configuration (ubproject.toml) +------------------------------------------ +.. versionadded:: 1.5.0 + +All of the above can also be configured declaratively, in the +``[test_reports]`` section of your project's ``ubproject.toml`` -- the same +shared file other useblocks tooling (sphinx-needs, sphinx-codelinks, +sphinx-mounts, ubCode) reads. It describes the project once, so every tool +acting on it works from the same settings instead of each restating them. + +.. code-block:: toml + + [test_reports] + file_option = "report_file" + source_file_option = "file" + source_line_option = "line" + deterministic_case_ids = true + extra_options = ["more_info", "priority"] + property_link_types = { request = "req" } + # Base directory the directives look their report files up under -- not an + # output directory. Relative to this file, see Paths below. + rootdir = "docs" + + # Need types: named tables (recommended) ... + [test_reports.case] + directive = "test-case" + type = "testcase" + name = "Test-Case" + prefix = "TC_" + color = "#999999" + style = "rectangle" + + # ... or the positional list spelling of conf.py: + # case = ["test-case", "testcase", "Test-Case", "TC_", "#999999", "rectangle"] + +**Keys.** Every key is named like its ``tr_*`` config value without the prefix +(``file_option`` configures ``tr_file_option``, and so on). A key carrying the +wrong type is an error -- that is the typo class this validation exists to +catch. An *unknown* key is reported as a warning and ignored: the file is +shared with tools on independent release cadences, so a key this version does +not model must not take your build down. + +One sub-table belongs to another tool and is left alone: ``[test_reports.build]`` +holds the settings of the ``test-reports build`` command line, one sub-table per +artifact it produces -- ``[test_reports.build.needs]`` for turning test reports +into a ``needs.json`` outside Sphinx -- none of which this extension does. Any +other sub-table is treated like any other unknown key -- reported and ignored. + +**Warnings.** The two warnings this feature emits carry a type, so either can +be silenced through Sphinx's ``suppress_warnings`` in a project that builds +with ``-W``: ``test_reports.unknown_key`` for the unknown-key report above, and +``test_reports.missing_config`` for an explicitly named file that does not +exist (see :ref:`tr_config_from_toml`). A known key with the wrong type is an +error, not a warning, and cannot be suppressed. + +**Precedence.** ``-D`` on the ``sphinx-build`` command line beats the TOML +file, which beats ``conf.py``, which beats the built-in default. The +declarative file is the source of truth for the project; the command line stays +the per-invocation escape hatch. + +**Paths.** ``rootdir`` (:ref:`tr_rootdir`) is the directory the relative report +paths in the directives are resolved against -- with ``rootdir = "docs"``, +``.. test-file:: reports/pytest.xml`` reads ``docs/reports/pytest.xml``. It is +an input location, not an output directory: nothing is written there. +``report_template`` (:ref:`tr_report_template`) names a custom template file. +Relative values of both are resolved against the directory containing the TOML +file (not against ``conf.py`` or the working directory), so both consumers +resolve them identically and the file stays self-describing when moved as a +unit. + +**Deterministic IDs.** A build that imports a ``needs.json`` carrying +deterministic case IDs, next to locally created test-case needs, must set +``deterministic_case_ids = true`` so both ID schemes agree. + +.. _tr_config_from_toml: + +tr_config_from_toml +~~~~~~~~~~~~~~~~~~~ +.. versionadded:: 1.5.0 + +Name of the declarative configuration file whose ``[test_reports]`` section is +applied to the ``tr_*`` values above. Defaults to ``ubproject.toml``. + +With the default name, the file is searched for in your ``confdir`` and its +parent directories, up to the repository root (the directory holding ``.git``). +That is what lets the canonical layout work -- the shared ``ubproject.toml`` at +the repository root, ``conf.py`` in ``docs/`` -- and lets a tool started +anywhere below the root find exactly the same file by searching upward in the +same way. Only the repository root bounds the search: a ``pyproject.toml`` on +the way up does not, so a ``docs/`` directory with its own ``pyproject.toml`` +and the documentation of a workspace member in a monorepo +(``packages//docs/conf.py``) both find the file at the root. A missing +default file is not an error; ``sphinx-build -v`` reports where the search +ended. + +Set to any other value to name a file explicitly; it is resolved against the +``confdir``, is not searched for, and a warning of type +``test_reports.missing_config`` is emitted if it does not exist -- the build +then runs on the ``conf.py`` configuration. Set to ``None`` to switch +declarative configuration off entirely. + +.. code-block:: python + + tr_config_from_toml = "../ubproject.toml" # explicit path + tr_config_from_toml = None # disable diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index a307f576d..3e1fd759c 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -1,4 +1,37 @@ -# from sphinxcontrib.test_reports.needs.dyn_functions import Results4Needs -from sphinxcontrib.test_reports.test_reports import setup +"""Sphinx-Test-Reports. + +``setup`` is resolved lazily (PEP 562) so that importing a submodule of this +package does not import Sphinx: :mod:`sphinxcontrib.test_reports.projectconfig` +is read by consumers that are not a documentation build, in environments where +the documentation toolchain is not installed, and every import of it runs this +file first. Sphinx still finds ``setup`` through normal attribute access when it +loads this package as an extension. +""" __all__ = ["setup"] + + +def __getattr__(name: str) -> object: + if name == "setup": + try: + from sphinxcontrib.test_reports.test_reports import setup + except ImportError as error: + # Sphinx wraps an ImportError from importing the *package* in a + # clean "Could not import extension" message, but fetches `setup` + # with getattr(), which only tolerates AttributeError. Resolving + # lazily would let a missing sphinx-needs escape as a raw + # traceback, so the message Sphinx would have produced is raised + # here instead -- when Sphinx is there to receive it. The wrapped + # exception goes in the second argument only: ExtensionError.__str__ + # renders it as "(exception: ...)", so spelling it out in the + # message too would print it twice. + try: + from sphinx.errors import ExtensionError + except ImportError: + raise error from None + raise ExtensionError( + f"Could not import extension {__name__}", error + ) from error + + return setup + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py new file mode 100644 index 000000000..e1fadc42d --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py @@ -0,0 +1,467 @@ +"""Declarative project configuration for sphinx-test-reports. + +Reads the ``[test_reports]`` section of a project's ``ubproject.toml`` -- the +declarative file shared with the other useblocks tooling (sphinx-needs, +sphinx-codelinks, sphinx-mounts, ubCode) -- so that a project is described once +instead of being restated in every tool that acts on it. + +**Nothing in this module may import Sphinx.** The section describes the project, +not this extension, and a report-to-``needs.json`` converter has to be able to +read it as a build action without the documentation toolchain installed. + +The keys are the Sphinx-facing configuration (:data:`BRIDGE_KEYS`), spelled +like the ``tr_*`` config values without the prefix. One sub-table belongs to +another consumer: ``[test_reports.build]`` holds what the ``test-reports +build`` command line produces -- ``[test_reports.build.needs]`` for its +``needs.json`` -- which this reader passes through without interpreting it +(:data:`FOREIGN_TABLES`). Any other sub-table is an unknown key like any +other. + +**Error policy.** A known key carrying the wrong type is fatal: that is the +typo class this validation exists to catch, and letting it through would +silently change what gets produced. An *unknown* key is only reported. The +file is shared with tools on independent release cadences, so a key this +reader does not model is routine rather than a mistake -- and aborting on it +would take down every build of the project on every older sphinx-test-reports, +including builds the key would not have changed. This is the same posture +sphinx-mounts takes for ``[[source.mounts]]``. +""" + +import tomllib +from pathlib import Path +from typing import Callable, Mapping, NoReturn, Sequence + +#: Default file the configuration is read from. Looked up by walking up from +#: the ``confdir`` (Sphinx) or the working directory (a converter); see +#: :func:`find_project_config`. ``ubproject.toml`` is the convention shared +#: with other useblocks tooling so a single declarative file describes the +#: project to every downstream consumer -- Sphinx, ubCode, a converter -- +#: without +#: any of them having to execute Python. +DEFAULT_TOML_FILENAME = "ubproject.toml" + +#: The section this extension owns inside the shared file. Spelled +#: ``snake_case`` like every other section of ``ubproject.schema.json`` +#: (``build_tags``, ``format_rst``, ``needs_json``, ``rst_lint``, ...); note +#: that ``[reports]`` is already taken, and means report *templates*. +SECTION = "test_reports" + +#: Directory entries that end the upward search of :func:`find_project_config`. +#: A directory carrying one is the repository root, and nothing above it belongs +#: to the project, so a consumer never adopts the configuration of an unrelated +#: parent. ``pyproject.toml`` is deliberately *not* a marker: it marks a Python +#: distribution, not the project. A ``docs/`` directory with its own +#: ``pyproject.toml`` beside ``conf.py``, or a workspace member in a monorepo +#: (``packages//pyproject.toml`` with the docs below it), sits *inside* +#: the project whose shared file is at the repository root, and a marker there +#: would end the search before it reached the file -- silently. It does bound +#: the walk where there is no repository at all, see :data:`_DIST_MARKERS`. +#: ``ubproject.toml`` itself is not listed -- finding it is the success case, +#: checked first in every directory. +_ROOT_MARKERS = (".git",) + +#: Directory entries that end the search when *no* :data:`_ROOT_MARKERS` marker +#: exists anywhere above the starting directory. A tree outside any repository +#: -- an unpacked sdist, a CI artefact directory, an exported docs tree -- has +#: nothing to bound the walk, so it would reach the filesystem root and adopt +#: the configuration of whatever unrelated directory happens to sit above it. +#: The distribution root is the outermost thing that still belongs to such a +#: tree. It bounds the search only as a fallback, never inside a repository: +#: there, a ``pyproject.toml`` on the way up is a workspace member or a +#: ``docs/`` dependency set, and must not end the search. +_DIST_MARKERS = ("pyproject.toml",) + +#: Section keys bridged onto their ``tr_*`` Sphinx config values. +BRIDGE_KEYS = ( + "file", + "suite", + "case", + "file_option", + "source_file_option", + "source_line_option", + "rootdir", + "report_template", + "suite_id_length", + "case_id_length", + "import_encoding", + "extra_options", + "property_link_types", + "json_mapping", + "deterministic_case_ids", +) + +#: Keys holding a path. Relative values are anchored against the directory +#: containing the TOML file, not against ``confdir`` or the process working +#: directory: the file is self-describing, and moving it as a unit keeps its +#: relative paths meaningful. It also makes every consumer resolve a +#: relative path identically. +PATH_KEYS = ("rootdir", "report_template") + +#: The keys whose need-type setting accepts both the positional ``conf.py`` +#: list and a named table; :func:`_normalise_type_entry` reduces both to the +#: list form. ``None`` in :data:`_KEY_TYPES` marks exactly these. +_DUAL_SPELLING_KEYS = ("file", "suite", "case") + +#: Sub-tables of the section that belong to another consumer. They are +#: recognised so they do not draw an unknown-key warning, and deliberately not +#: interpreted: ``build`` holds the settings of the ``test-reports build`` +#: command line, one sub-table per artifact it produces (``build.needs`` for a +#: ``needs.json``), and this extension produces none of them. +FOREIGN_TABLES = ("build",) + +#: Expected Python type per key. ``bool`` must be checked *before* ``int`` +#: (bool is an int subclass). ``None`` marks the dual-spelling keys, which are +#: normalised separately; path keys are validated as ``str`` and anchored +#: afterwards. +_KEY_TYPES: dict[str, type[object] | None] = { + "file": None, + "suite": None, + "case": None, + "file_option": str, + "source_file_option": str, + "source_line_option": str, + "rootdir": str, + "report_template": str, + "suite_id_length": int, + "case_id_length": int, + "import_encoding": str, + "extra_options": list, + "property_link_types": dict, + "json_mapping": dict, + "deterministic_case_ids": bool, + "build": dict, +} + +#: Required type of the *values* inside a table-valued key. Without this a +#: table passes validation on its outer shape alone, and a mistake such as +#: ``property_link_types = { request = ["req"] }`` reaches the directives, +#: which fail with a bare ``TypeError`` on an unhashable field name. +#: ``None`` means the nested shape is free-form -- ``json_mapping`` mirrors an +#: arbitrary parser mapping -- so only the outer table is checked. +_DICT_VALUE_TYPES: dict[str, type[object] | None] = { + "property_link_types": str, + "json_mapping": None, + "build": None, +} + +#: Field order of the positional ``tr_file``-style lists, and the table keys +#: that spell the same thing readably. +_TYPE_ENTRY_FIELDS = ("directive", "type", "name", "prefix", "color", "style") + +#: ``tomllib.TOMLDecodeError`` bound through an annotation: the attribute +#: expression itself is typed loosely enough to trip the strict ``Any`` bans, +#: and an ``except`` clause has no annotation of its own to absorb it. +_TOML_DECODE_ERROR: type[Exception] = tomllib.TOMLDecodeError + + +class TomlConfigError(Exception): + """Raised when the declarative config cannot be parsed or is malformed. + + Deliberately *not* a ``SphinxError``: this module must stay importable + without Sphinx. The Sphinx-side bridge re-raises it as an + ``InvalidConfigurationError`` to abort the build; a non-Sphinx consumer + reports it and exits non-zero. + """ + + +def find_project_config( + start: Path, + filename: str = DEFAULT_TOML_FILENAME, + report: Callable[[str], None] | None = None, +) -> Path | None: + """Search *start* and its parents for *filename*. + + The declarative file conventionally sits at the repository root while its + consumers run from below it -- ``conf.py`` in ``docs/``, a build action + from wherever CI invoked it -- so anchoring strictly at the caller's own + directory would leave the shared file unread by one of them, silently. + + The walk ends at the first directory holding *filename*, or at the project + boundary when that does not hold the file either: nothing above the + boundary belongs to the project, so a consumer never adopts the + configuration of an unrelated parent. The boundary is the repository root + (:data:`_ROOT_MARKERS`), or -- outside any repository only -- the + distribution root (:data:`_DIST_MARKERS`); see both for why a + ``pyproject.toml`` bounds the one case and not the other. + + :param start: Directory to start from. Made absolute -- without resolving + symlinks -- so that a relative path has parents to walk. + :param report: Called with one message when the search ends without the + file, naming the directory whose marker ended it. Callers pass their + own logger so this module stays Sphinx-free; ``None`` discards it. A + missing file is not necessarily a problem -- most projects have none + -- but a fruitless search must not be silent, or a misplaced file + cannot be diagnosed. + :return: The file, or ``None`` when the search reached the project boundary + or the filesystem root without finding one. + """ + start = start.absolute() + directories = (start, *start.parents) + boundary, described = _boundary(directories) + for directory in directories: + candidate = directory / filename + if candidate.is_file(): + return candidate + if directory == boundary: + break + if report is not None: + report(f"no {filename} in {start} or its parents up to {described}") + return None + + +def _boundary(directories: tuple[Path, ...]) -> tuple[Path | None, str]: + """The directory the upward search must not walk past, and its description. + + A repository root anywhere above the start wins: inside a repository the + only thing that bounds the project is the repository itself. Only when + there is none does the distribution root bound the walk -- which is what + keeps a tree outside any repository from reaching the filesystem root. + """ + for markers, label in ( + (_ROOT_MARKERS, "repository"), + (_DIST_MARKERS, "distribution"), + ): + for directory in directories: + marker = _marker(directory, markers) + if marker is not None: + return directory, f"the {label} root {directory} (holding {marker})" + return None, "the filesystem root" + + +def _marker(directory: Path, markers: tuple[str, ...]) -> str | None: + """The entry of *markers* that *directory* holds, if any.""" + for marker in markers: + if (directory / marker).exists(): + return marker + return None + + +def load_project_config( + path: Path, warn: Callable[[str], None] | None = None +) -> dict[str, object] | None: + """Read and normalise the ``[test_reports]`` section of a TOML file. + + :param path: Absolute path to the TOML file (``ubproject.toml`` or whatever + the caller resolved). + :param warn: Called with a message for every non-fatal problem -- today, + an unknown key. Callers pass their own logger so this module stays + Sphinx-free; ``None`` discards the reports. + :return: The normalised section as a plain dict; ``None`` when the file + does not exist (an absence is not an error -- callers decide whether + that is fine, e.g. neither consumer minds a missing *default* file but + both complain about an explicitly given one). An existing file without + the section yields ``{}``. + :raises TomlConfigError: If the file cannot be read, is not valid TOML, the + section has the wrong shape, or a known key has the wrong type. + """ + if not path.is_file(): + return None + data = _read_toml(path) + + section = data.get(SECTION) + if section is None: + return {} + if not isinstance(section, dict): + msg = f"{path}: [{SECTION}] must be a table, got {type(section).__name__}" + raise TomlConfigError(msg) + + return _normalise_section(section, path, warn) + + +def _read_toml(path: Path) -> dict[str, object]: + """Parse *path*, reporting every read failure as a ``TomlConfigError``. + + ``is_file()`` succeeding does not mean the open will: the file may be + unreadable, or replaced between the check and the open. Both consumers + handle ``TomlConfigError`` and neither handles a bare ``OSError``, so an + unwrapped one surfaces as a traceback instead of a configuration error. + """ + try: + with path.open("rb") as handle: + # tomllib is typed ``-> dict[str, Any]``; everything downstream of + # here is ``object`` so the strict Any bans hold for the rest of + # the module. + data: dict[str, object] = tomllib.load(handle) + except _TOML_DECODE_ERROR as error: + msg = f"{path}: invalid TOML: {error}" + raise TomlConfigError(msg) from error + except OSError as error: + msg = f"{path}: cannot be read: {error}" + raise TomlConfigError(msg) from error + return data + + +def _normalise_section( + section: Mapping[str, object], path: Path, warn: Callable[[str], None] | None +) -> dict[str, object]: + """Validate every key and return a normalised copy of *section*. + + Normalisation: relative paths become absolute (anchored at the TOML file's + directory), the ``file``/``suite``/``case`` need-type settings accept both + the positional-list spelling of ``conf.py`` and a named table. + + Unknown keys are reported through *warn* and dropped -- see the module + docstring for why they are not fatal. + """ + unknown = sorted(set(section) - set(_KEY_TYPES)) + if unknown and warn is not None: + warn( + f"{path}: ignoring unknown key(s) in [{SECTION}]: " + f"{', '.join(unknown)}. Supported keys: " + f"{', '.join(sorted(_KEY_TYPES))}" + ) + + normalised: dict[str, object] = {} + for key, value in section.items(): + if key in unknown: + continue + expected = _KEY_TYPES[key] + # bool first: bool is an int subclass, and for int keys a TOML + # ``true`` must be rejected, not silently accepted. + if expected is int and isinstance(value, bool): + _wrong_type(key, value, expected, path) + if expected is not None and not isinstance(value, expected): + _wrong_type(key, value, expected, path) + if key in FOREIGN_TABLES: + normalised[key] = value + elif key in _DUAL_SPELLING_KEYS: + normalised[key] = _normalise_type_entry(key, value, path) + else: + if expected is list: + _check_list_items(key, value, path) + elif expected is dict: + _check_table_values(key, value, path) + normalised[key] = value + + return _anchor_paths(normalised, path.parent) + + +def _check_list_items(key: str, value: object, path: Path) -> None: + """Every element of an array-valued key must be a string.""" + if not isinstance(value, Sequence): + return + for item in value: + if not isinstance(item, str): + _wrong_type(key, value, list, path) + + +def _check_table_values(key: str, value: object, path: Path) -> None: + """Every value of a table-valued key must have the declared type. + + Skipped for keys whose nested shape is free-form (:data:`_DICT_VALUE_TYPES` + maps them to ``None``). + """ + expected = _DICT_VALUE_TYPES.get(key) + if expected is None or not isinstance(value, Mapping): + return + for name, item in value.items(): + if not isinstance(item, expected): + msg = ( + f"{path}: [{SECTION}] {key}.{name} must be " + f"{_type_label(expected)}, got {type(item).__name__}: {item!r}" + ) + raise TomlConfigError(msg) + + +def _wrong_type( + key: str, value: object, expected: type[object] | None, path: Path +) -> NoReturn: + msg = ( + f"{path}: [{SECTION}] {key} must be " + f"{_type_label(expected)}, got {type(value).__name__}: {value!r}" + ) + raise TomlConfigError(msg) + + +def _type_label(expected: type[object] | None) -> str: + if expected is None: + return "a 6-element array or a table" + if expected is int: + return "an integer" + if expected is bool: + return "a boolean" + if expected is str: + return "a string" + if expected is list: + return "an array of strings" + if expected is dict: + return "a table" + return expected.__name__ + + +def _normalise_type_entry(key: str, value: object, path: Path) -> list[str]: + """The ``file``/``suite``/``case`` settings in one of two spellings. + + Positional (exactly what ``conf.py`` accepts):: + + file = ["test-file", "testfile", "Test-File", "TF_", "#ffffff", "node"] + + Named -- the recommended TOML spelling, since six bare strings in a row + cannot be told apart:: + + [test_reports.file] + directive = "test-file" + type = "testfile" + name = "Test-File" + prefix = "TF_" + color = "#ffffff" + style = "node" + """ + if isinstance(value, list): + entry = [item for item in value if isinstance(item, str)] + if len(entry) != len(_TYPE_ENTRY_FIELDS) or len(entry) != len(value): + msg = ( + f"{path}: [{SECTION}] {key} as an array must hold exactly " + f"{len(_TYPE_ENTRY_FIELDS)} strings " + f"({'/'.join(_TYPE_ENTRY_FIELDS)}), got {value!r}" + ) + raise TomlConfigError(msg) + return entry + + if isinstance(value, Mapping): + table: dict[str, object] = {str(name): item for name, item in value.items()} + missing = [field for field in _TYPE_ENTRY_FIELDS if field not in table] + unknown = sorted(set(table) - set(_TYPE_ENTRY_FIELDS)) + wrong = sorted( + field + for field in _TYPE_ENTRY_FIELDS + if field in table and not isinstance(table[field], str) + ) + problems = [] + if missing: + problems.append(f"missing {', '.join(missing)}") + if unknown: + problems.append(f"unknown {', '.join(unknown)}") + if wrong: + problems.append(f"non-string {', '.join(wrong)}") + if problems: + msg = ( + f"{path}: [{SECTION}] [{SECTION}.{key}]: " + f"{'; '.join(problems)}. Expected the keys " + f"{'/'.join(_TYPE_ENTRY_FIELDS)}." + ) + raise TomlConfigError(msg) + return [str(table[field]) for field in _TYPE_ENTRY_FIELDS] + + msg = ( + f"{path}: [{SECTION}] {key} must be a 6-element array or a table, " + f"got {type(value).__name__}" + ) + raise TomlConfigError(msg) + + +def _anchor_paths(section: dict[str, object], base: Path) -> dict[str, object]: + """Anchor :data:`PATH_KEYS` at *base* (the TOML file's directory). + + Joined, deliberately not ``resolve()``d: *base* is already absolute, and + this module does not touch the filesystem to second-guess the form of the + path it was handed. Whether symlinks in it are collapsed is the consumer's + decision -- Sphinx resolves its ``confdir`` before the bridge ever runs, a + converter may pass its working directory as is -- and the loader must not + make that decision behind their back. + """ + for key in PATH_KEYS: + value = section.get(key) + if isinstance(value, str) and not Path(value).is_absolute(): + section[key] = str(base / value) + return section diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index e406102db..54eded26e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -1,5 +1,6 @@ # fmt: off import os +from pathlib import Path from docutils.parsers.rst import directives from sphinx.application import Sphinx @@ -28,6 +29,14 @@ from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError from sphinxcontrib.test_reports.functions import tr_link +from sphinxcontrib.test_reports.projectconfig import ( + BRIDGE_KEYS, + DEFAULT_TOML_FILENAME, + SECTION, + TomlConfigError, + find_project_config, + load_project_config, +) # fmt: on @@ -82,7 +91,7 @@ def _register_field(app, name, schema=None): ) -def setup(app: Sphinx): +def setup(app: Sphinx) -> dict[str, object]: """ Setup following directives: * test_results @@ -101,13 +110,34 @@ def setup(app: Sphinx): # Derive test-case IDs from the source location and case name instead of # hashing (type, title, content) -- the latter moves the ID when a test # starts failing differently. Off by default: enabling it changes IDs. + # Required (not just recommended) when the build consumes a needs.json + # produced by `test-reports build needs`, which always writes + # deterministic IDs. app.add_config_value("tr_deterministic_case_ids", False, "html") + # Declarative configuration: the [test_reports] section of this file + # overrides the tr_* config values above at config-inited. The default is + # searched for upwards from the confdir to the repository root; an explicit + # value is resolved against the confdir and warns if it does not exist (the + # build then runs on the conf.py configuration). None disables TOML reading + # entirely -- which is why NoneType has to be an accepted type here, or + # Sphinx's own check_confval_types warns about the documented way to switch + # it off. + app.add_config_value( + "tr_config_from_toml", + DEFAULT_TOML_FILENAME, + "env", + types=(str, type(None)), + ) log = logging.getLogger(__name__) log.info("Setting up sphinx-test-reports extension") # configurations - app.add_config_value("tr_rootdir", app.confdir, "html") + # The default is Sphinx's confdir, a _StrPath. Without explicit types, a + # plain string -- the only thing TOML or a string literal in conf.py can + # supply -- fails Sphinx's check_confval_types ("has type 'str', defaults + # to '_StrPath'") and takes a -W build down. Every consumer accepts both. + app.add_config_value("tr_rootdir", app.confdir, "html", types=(str, os.PathLike)) app.add_config_value( "tr_file", ["test-file", "testfile", "Test-File", "TF_", "#ffffff", "node"], @@ -180,6 +210,12 @@ def setup(app: Sphinx): # events app.connect("env-updated", install_styles_static_files) + # The TOML bridge must run BEFORE tr_preparation and sphinx_needs_update, + # which read the values it writes. Spelled as an explicit priority rather + # than relying on registration order, so reordering these lines cannot + # silently break it. (Sphinx's own check_confval_types sits at 800, so it + # still validates what the bridge wrote.) + app.connect("config-inited", load_toml_config, priority=100) app.connect("config-inited", tr_preparation) app.connect("config-inited", sphinx_needs_update) @@ -209,6 +245,95 @@ def register_tr_extra_options(app): ) +def _command_line_overrides(config: Config) -> set[str]: + """Config value names given on the command line with ``-D``. + + Sphinx materialises those overrides *before* ``config-inited`` is emitted, + so a plain ``setattr`` here would silently win over them. The mapping is + spelled ``_overrides`` on newer Sphinx and ``overrides`` before that. + """ + overrides = getattr(config, "_overrides", None) + if overrides is None: + overrides = getattr(config, "overrides", None) + return set(overrides or ()) + + +def load_toml_config(app: Sphinx, config: Config) -> None: + """Apply the ``[test_reports]`` section of the declarative config file. + + Connected at a priority ahead of every other ``config-inited`` handler of + this extension, so the bridged values are in place when the directives and + the sphinx-needs registration read them. + + Precedence is ``-D`` > TOML > ``conf.py`` > built-in default, mirroring the + CLI's flag > TOML > default. The file is the declarative source of truth + and conf.py the fallback, but ``-D`` stays the per-invocation escape hatch: + a key given there is left alone, because Sphinx has already applied it by + the time this runs. + + Only :data:`BRIDGE_KEYS` reach the config values; the conversion-only keys + (``project``, ``version``, ...) belong to the CLI and are skipped here. + """ + setting = config.tr_config_from_toml + if setting is None: + return + + log = logging.getLogger(__name__) + confdir = Path(app.confdir) + if setting == DEFAULT_TOML_FILENAME: + # The shared file conventionally sits at the project root while conf.py + # sits in docs/, so search upwards -- anchoring at the confdir alone + # would leave the root file unread by the build while the CLI, started + # at the root, reads it. + # A fruitless search is not a warning -- most projects have no file + # -- but it says where it ended (visible with -v), so a misplaced file + # does not fail silently. + path = find_project_config(confdir, setting, report=log.verbose) + if path is None: + return + else: + path = Path(confdir, setting) + if not path.is_file(): + log.warning( + f"tr_config_from_toml points at {path}, which does not exist; " + f"building with the conf.py configuration instead.", + type="test_reports", + subtype="missing_config", + ) + return + + def warn(message: str) -> None: + log.warning(message, type="test_reports", subtype="unknown_key") + + try: + section = load_project_config(path, warn) + except TomlConfigError as error: + raise InvalidConfigurationError(str(error)) from error + + if not section: + return + + overridden = _command_line_overrides(config) + applied = [] + skipped = [] + for key in BRIDGE_KEYS: + if key not in section: + continue + name = f"tr_{key}" + if name in overridden: + skipped.append(name) + continue + setattr(config, name, section[key]) + applied.append(key) + if applied: + log.info(f"Applied {', '.join(sorted(applied))} from {path}") + if skipped: + log.info( + f"Kept the -D value of {', '.join(sorted(skipped))} over " + f"[{SECTION}] in {path}" + ) + + def tr_preparation(app, *args): """ Prepares needed vars in the app context. diff --git a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py new file mode 100644 index 000000000..b547363ef --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py @@ -0,0 +1,23 @@ +import os +import sys + +sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) + +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +source_suffix = ".rst" +master_doc = "index" + +project = "ubproject-toml-test" +copyright = "2026, test" +author = "test" +version = "1.0" +release = "1.0" +language = "en" +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +html_theme = "alabaster" + +# Deliberately clashes with the ubproject.toml value: the declarative file is +# the source of truth, so file_option must end up as "report_file", not +# "confpy_report_file". See tests/test_project_config.py. +tr_file_option = "confpy_report_file" diff --git a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/index.rst b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/index.rst new file mode 100644 index 000000000..eb8165458 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/index.rst @@ -0,0 +1,9 @@ +Ubproject Toml Test +=================== + +.. test-file:: GTest Report + :id: UBTOML_TF_1 + :file: ../utils/gtest_data.xml + :auto_suites: + :auto_cases: + :more_info: accepted because tr_extra_options came from ubproject.toml diff --git a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/ubproject.toml b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/ubproject.toml new file mode 100644 index 000000000..b6dafced1 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/ubproject.toml @@ -0,0 +1,24 @@ +"$schema" = "https://ubcode.useblocks.com/ubproject.schema.json" + +[project] +# Read by ubCode, ignored by sphinx-test-reports. +name = "ubproject-toml-test" +version = "1.0" + +[test_reports] +# Same effect as doc_test/source_location_renamed's conf.py, but declarative: +# free up "file"/"line" for the *source* location by renaming the field that +# carries the XML report path. +file_option = "report_file" +source_file_option = "file" +source_line_option = "line" +extra_options = ["more_info"] + +[test_reports.case] +# The named-table spelling of the positional tr_case list in conf.py. +directive = "test-case" +type = "testcase" +name = "Test-Case" +prefix = "TC_" +color = "#999999" +style = "rectangle" diff --git a/packages/sphinx-test-reports/tests/test_project_config.py b/packages/sphinx-test-reports/tests/test_project_config.py new file mode 100644 index 000000000..2f3b1e5a9 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_project_config.py @@ -0,0 +1,720 @@ +"""Tests for the declarative configuration (``ubproject.toml``, ``[test_reports]``). + +The loader validates and normalises the section, and the Sphinx build bridges +its keys onto the ``tr_*`` config values. Both must agree on which file +describes a project, or the build is configured by something other than what +the project declares. +""" + +import os +import subprocess +import sys +from io import StringIO +from pathlib import Path +from shutil import copytree + +import pytest + +from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError +from sphinxcontrib.test_reports.projectconfig import ( + BRIDGE_KEYS, + DEFAULT_TOML_FILENAME, + FOREIGN_TABLES, + SECTION, + TomlConfigError, + find_project_config, + load_project_config, +) + + +def _write(tmp_path, toml_source, name=DEFAULT_TOML_FILENAME): + config = tmp_path / name + config.write_text(toml_source, encoding="utf-8") + return config + + +class TestLoader: + """The Sphinx-free loader: parsing, normalising, anchoring, rejecting.""" + + def test_missing_file_is_none(self, tmp_path): + assert load_project_config(tmp_path / DEFAULT_TOML_FILENAME) is None + + def test_missing_section_is_empty(self, tmp_path): + _write(tmp_path, '[project]\nname = "x"\n') + assert load_project_config(tmp_path / DEFAULT_TOML_FILENAME) == {} + + def test_full_section_round_trips(self, tmp_path): + _write( + tmp_path, + """ + [test_reports] + file_option = "report_file" + source_file_option = "file" + import_encoding = "latin1" + deterministic_case_ids = true + suite_id_length = 4 + extra_options = ["more_info"] + property_link_types = { request = "req" } + """, + ) + config = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + assert config["file_option"] == "report_file" + assert config["source_file_option"] == "file" + assert config["import_encoding"] == "latin1" + assert config["deterministic_case_ids"] is True + assert config["suite_id_length"] == 4 + assert config["extra_options"] == ["more_info"] + assert config["property_link_types"] == {"request": "req"} + + def test_foreign_sub_table_is_kept_without_a_warning(self, tmp_path): + # [test_reports.build] belongs to the command line. This reader must + # neither complain about it nor apply it to a tr_* value -- the section + # describes the project, not just this extension. + _write( + tmp_path, + """ + [test_reports] + file_option = "report_file" + + [test_reports.build.needs] + project = "demo" + need_type = "check" + """, + ) + reported = [] + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME, reported.append) + assert reported == [] + assert section["build"] == {"needs": {"project": "demo", "need_type": "check"}} + assert not set(FOREIGN_TABLES) & set(BRIDGE_KEYS) + + def test_unknown_key_is_reported_but_not_fatal(self, tmp_path): + # ubproject.toml is shared with tools on independent release cadences, + # so a key this reader does not model must not take the build down -- + # but a typo has to be visible, and the key must not be passed on. + _write(tmp_path, "[test_reports]\ndeterministic_id = true\n") + reported = [] + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME, reported.append) + assert section == {} + assert len(reported) == 1 + assert "deterministic_id" in reported[0] + assert "deterministic_case_ids" in reported[0] # supported keys listed + + def test_unknown_key_needs_no_reporter(self, tmp_path): + _write(tmp_path, "[test_reports]\nnope = 1\nfile_option = 'f'\n") + assert load_project_config(tmp_path / DEFAULT_TOML_FILENAME) == { + "file_option": "f" + } + + @pytest.mark.parametrize( + ("key", "value"), + [ + ("property_link_types", '{ request = ["req"] }'), + ("property_link_types", "{ request = 3 }"), + ], + ) + def test_table_values_are_type_checked(self, tmp_path, key, value): + # Without this the value reaches the directives, which fail with a bare + # TypeError on an unhashable field name instead of a config error. + _write(tmp_path, f"[test_reports]\n{key} = {value}\n") + with pytest.raises(TomlConfigError, match=key): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_json_mapping_nesting_stays_free_form(self, tmp_path): + # It mirrors an arbitrary parser mapping, so only the outer table is + # checked -- validating deeper would reject valid configurations. + _write( + tmp_path, + "[test_reports.json_mapping.json_config.testsuite]\nname = 1\n", + ) + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + assert section["json_mapping"] == {"json_config": {"testsuite": {"name": 1}}} + + @pytest.mark.skipif( + hasattr(os, "geteuid") and os.geteuid() == 0, + reason="root reads unreadable files", + ) + def test_unreadable_file_is_a_config_error(self, tmp_path): + # is_file() succeeding does not mean the open will; an unwrapped + # OSError would surface as a traceback instead of a config error. + config = _write(tmp_path, "[test_reports]\nfile_option = 'f'\n") + config.chmod(0o000) + try: + with pytest.raises(TomlConfigError, match="cannot be read"): + load_project_config(config) + finally: + config.chmod(0o644) + + @pytest.mark.parametrize( + ("key", "value"), + [ + ("file_option", "42"), + ("suite_id_length", '"four"'), # string for int + ("suite_id_length", "true"), # bool must not pass for int + ("deterministic_case_ids", '"yes"'), # string for bool + ("extra_options", '"more_info"'), # a bare string is not an array + ("property_link_types", '["a"]'), + ], + ) + def test_wrong_types_are_rejected(self, tmp_path, key, value): + _write(tmp_path, f"[test_reports]\n{key} = {value}\n") + with pytest.raises(TomlConfigError, match=key): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_invalid_toml_is_rejected(self, tmp_path): + _write(tmp_path, "[test-reports\n") + with pytest.raises(TomlConfigError, match="invalid TOML"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_section_must_be_a_table(self, tmp_path): + _write(tmp_path, "test_reports = 5\n") + with pytest.raises(TomlConfigError, match="must be a table"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_need_type_positional_list_still_works(self, tmp_path): + # The conf.py spelling, so existing projects can copy their lists over + # verbatim. + _write( + tmp_path, + '[test_reports]\ncase = ["test-case", "testcase", "Test-Case", "TC_", "#999999", "rectangle"]\n', + ) + config = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + assert config["case"] == [ + "test-case", + "testcase", + "Test-Case", + "TC_", + "#999999", + "rectangle", + ] + + def test_need_type_named_table(self, tmp_path): + # Six bare strings cannot be told apart; the table spelling names them. + _write( + tmp_path, + """ + [test_reports.case] + directive = "test-case" + type = "testcase" + name = "Test-Case" + prefix = "TC_" + color = "#999999" + style = "rectangle" + """, + ) + config = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + assert config["case"] == [ + "test-case", + "testcase", + "Test-Case", + "TC_", + "#999999", + "rectangle", + ] + + def test_need_type_table_rejects_partial_and_unknown(self, tmp_path): + _write(tmp_path, '[test_reports.case]\ndirective = "test-case"\n') + with pytest.raises(TomlConfigError, match="missing"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + _write( + tmp_path, + """ + [test_reports.case] + directive = "test-case" + type = "testcase" + name = "Test-Case" + prefix = "TC_" + color = "#999999" + style = "rectangle" + typo = true + """, + ) + with pytest.raises(TomlConfigError, match="unknown typo"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + @pytest.mark.parametrize( + ("toml_source", "problem"), + [ + # A non-string value inside the named table. Without the check the + # value is silently stringified and reaches sphinx-needs. + ( + """ + [test_reports.case] + directive = "test-case" + type = "testcase" + name = "Test-Case" + prefix = "TC_" + color = 999999 + style = "rectangle" + """, + "non-string color", + ), + # A non-string element of the positional list. + ( + '[test_reports]\ncase = ["test-case", "testcase", "Test-Case", "TC_", 999999, "rectangle"]\n', + "exactly 6 strings", + ), + # Too few elements. + ('[test_reports]\ncase = ["test-case", "testcase"]\n', "exactly 6 strings"), + ], + ) + def test_need_type_values_must_be_strings(self, tmp_path, toml_source, problem): + _write(tmp_path, toml_source) + with pytest.raises(TomlConfigError, match=problem): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_relative_paths_anchor_to_the_toml_directory(self, tmp_path): + # The file is self-describing: moving it as a unit keeps its relative + # paths meaningful, and both consumers resolve them identically. + subdir = tmp_path / "config" + subdir.mkdir() + _write( + subdir, + '[test_reports]\nrootdir = "docs"\nreport_template = "templates/report.txt"\n', + name=subdir / DEFAULT_TOML_FILENAME, + ) + config = load_project_config(subdir / DEFAULT_TOML_FILENAME) + assert config["rootdir"] == str(subdir / "docs") + assert config["report_template"] == str(subdir / "templates" / "report.txt") + + def test_absolute_paths_stay_untouched(self, tmp_path): + _write(tmp_path, f'[test_reports]\nrootdir = "{tmp_path}"\n') + config = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + assert config["rootdir"] == str(tmp_path) + + +class TestSphinxBridge: + """The build reads the same section and honours the same precedence.""" + + @pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/ubproject_toml"}], + indirect=True, + ) + def test_build_succeeds(self, test_app): + test_app.build() + assert test_app.statuscode == 0 + + @pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/ubproject_toml"}], + indirect=True, + ) + def test_toml_beats_conf_py(self, test_app): + """conf.py names one field, ubproject.toml another; TOML must win.""" + test_app.build() + html = Path(test_app.outdir, "index.html").read_text(encoding="utf-8") + # file_option = "report_file" (TOML) won over "confpy_report_file". + assert "needs_report_file" in html + # The report path lands on the renamed field, the source location on + # file/line -- the rename took effect end to end. + assert "gtest_data.xml" in html + + @pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/ubproject_toml"}], + indirect=True, + ) + def test_extra_options_from_toml_are_accepted(self, test_app): + """:more_info: is only valid because tr_extra_options came from TOML.""" + test_app.build() + html = Path(test_app.outdir, "index.html").read_text(encoding="utf-8") + assert "accepted because tr_extra_options came from ubproject.toml" in html + + def test_bridge_rejects_a_broken_section(self, tmp_path): + """A malformed section aborts the build as a configuration error. + + The bridge runs on ``config-inited``, so the error surfaces while the + application is set up -- before any document is read. + """ + copytree(Path(__file__).parent / "doc_test" / "basic_doc", tmp_path / "docs") + _write(tmp_path / "docs", "[test_reports]\nsuite_id_length = 'four'\n") + + from sphinx.application import Sphinx + + docs = tmp_path / "docs" + with pytest.raises(InvalidConfigurationError, match="suite_id_length"): + Sphinx( + srcdir=docs, + confdir=docs, + outdir=docs / "_build" / "html", + doctreedir=docs / "_build" / "doctrees", + buildername="html", + freshenv=True, + ) + + +class TestDiscovery: + """The upward search that lets both consumers find the same file. + + The search is bounded by the repository root -- the directory holding + ``.git``: a ``pyproject.toml`` on the way up marks a Python distribution, + not the project, and must not end the search. Outside any repository there + is no such root, so the distribution root bounds it instead -- otherwise + the walk reaches the filesystem root and adopts a stranger's file. + """ + + def test_finds_the_file_in_the_starting_directory(self, tmp_path): + config = _write(tmp_path, "[test_reports]\n") + assert find_project_config(tmp_path) == config + + def test_walks_up_to_the_repository_root(self, tmp_path): + (tmp_path / ".git").mkdir() + config = _write(tmp_path, "[test_reports]\n") + deep = tmp_path / "docs" / "source" + deep.mkdir(parents=True) + assert find_project_config(deep) == config + + def test_a_pyproject_toml_beside_conf_py_does_not_end_the_search(self, tmp_path): + # docs/ carrying its own pyproject.toml (its own dependency set) still + # belongs to the project whose shared file sits at the repository root. + (tmp_path / ".git").mkdir() + config = _write(tmp_path, "[test_reports]\n") + docs = tmp_path / "docs" + docs.mkdir() + (docs / "pyproject.toml").write_text("", encoding="utf-8") + assert find_project_config(docs) == config + + def test_walks_past_a_workspace_member_pyproject_toml(self, tmp_path): + # A uv-workspace member: packages//pyproject.toml with the docs + # below it, and one ubproject.toml at the repository root describing + # the whole monorepo. + (tmp_path / ".git").mkdir() + config = _write(tmp_path, "[test_reports]\n") + member = tmp_path / "packages" / "dist" + docs = member / "docs" + docs.mkdir(parents=True) + (member / "pyproject.toml").write_text("", encoding="utf-8") + assert find_project_config(docs) == config + + def test_stops_at_a_nested_repository_without_the_file(self, tmp_path): + # A checkout nested inside another repository (a vendored tree, a + # submodule) must not adopt the outer repository's configuration. + _write(tmp_path, "[test_reports]\n") + inner = tmp_path / "vendor" / "inner" + docs = inner / "docs" + docs.mkdir(parents=True) + (inner / ".git").write_text("gitdir: elsewhere\n", encoding="utf-8") + assert find_project_config(docs) is None + + def test_stops_at_the_distribution_root_without_a_repository(self, tmp_path): + # An unpacked sdist, a CI artefact directory, an exported docs tree: + # no .git anywhere, so nothing above would end the walk and a + # stranger's file further up would be adopted. The distribution root + # bounds the search instead, so it is not. + _write(tmp_path, "[test_reports]\n") # a stranger's, two levels up + dist = tmp_path / "downloads" / "sphinx-test-reports-1.4.0" + docs = dist / "docs" + docs.mkdir(parents=True) + (dist / "pyproject.toml").write_text("", encoding="utf-8") + assert find_project_config(docs) is None + + def test_the_file_at_the_distribution_root_is_still_found(self, tmp_path): + # The distribution root bounds the search without hiding a file that + # sits on it: an sdist shipping its own ubproject.toml is configured + # by it. + dist = tmp_path / "sphinx-test-reports-1.4.0" + docs = dist / "docs" + docs.mkdir(parents=True) + (dist / "pyproject.toml").write_text("", encoding="utf-8") + config = _write(dist, "[test_reports]\n") + assert find_project_config(docs) == config + + def test_a_repository_marker_outranks_a_distribution_root(self, tmp_path): + # The distribution root is only the fallback boundary. Inside a + # repository the walk still passes a pyproject.toml on the way up -- + # the workspace-member layout above depends on it. + (tmp_path / ".git").mkdir() + config = _write(tmp_path, "[test_reports]\n") + member = tmp_path / "packages" / "dist" + docs = member / "docs" + docs.mkdir(parents=True) + (member / "pyproject.toml").write_text("", encoding="utf-8") + assert find_project_config(docs) == config + + def test_a_fruitless_search_reports_the_distribution_root(self, tmp_path): + dist = tmp_path / "sphinx-test-reports-1.4.0" + docs = dist / "docs" + docs.mkdir(parents=True) + (dist / "pyproject.toml").write_text("", encoding="utf-8") + reported = [] + assert find_project_config(docs, report=reported.append) is None + assert len(reported) == 1 + assert f"distribution root {dist}" in reported[0] + assert "pyproject.toml" in reported[0] + + def test_the_file_wins_over_the_marker_in_one_directory(self, tmp_path): + # The root marker only ends a *fruitless* step; a repository root + # holding the file is the canonical layout and must be found. + config = _write(tmp_path, "[test_reports]\n") + (tmp_path / ".git").mkdir() + assert find_project_config(tmp_path) == config + + def test_missing_file_is_none(self, tmp_path): + (tmp_path / ".git").mkdir() + assert find_project_config(tmp_path) is None + + def test_a_fruitless_search_reports_where_it_ended(self, tmp_path): + # "Not found" must not be silent: the report names the directory whose + # marker ended the search, so a misplaced file can be diagnosed. + (tmp_path / ".git").mkdir() + docs = tmp_path / "docs" + docs.mkdir() + reported = [] + assert find_project_config(docs, report=reported.append) is None + assert len(reported) == 1 + assert str(docs) in reported[0] + assert f"repository root {tmp_path}" in reported[0] + assert ".git" in reported[0] + + def test_a_successful_search_reports_nothing(self, tmp_path): + (tmp_path / ".git").mkdir() + _write(tmp_path, "[test_reports]\n") + reported = [] + find_project_config(tmp_path / "docs", report=reported.append) + assert reported == [] + + def test_a_relative_start_is_searched_from_the_working_directory( + self, tmp_path, monkeypatch + ): + # A converter started with a relative path must still see the parents. + (tmp_path / ".git").mkdir() + config = _write(tmp_path, "[test_reports]\n") + docs = tmp_path / "docs" + docs.mkdir() + monkeypatch.chdir(docs) + assert find_project_config(Path(".")) == config + + +class TestPathAnchoring: + """Relative paths anchor at the TOML file's directory, as given.""" + + def test_anchoring_does_not_resolve_the_given_directory(self, tmp_path): + # The loader leaves the form of the directory it was handed alone -- a + # symlinked path stays symlinked. Whether to resolve it is the + # consumer's call (Sphinx resolves its confdir before the bridge runs), + # not something the loader decides behind its back. + real = tmp_path / "real" + real.mkdir() + link = tmp_path / "link" + link.symlink_to(real, target_is_directory=True) + config = _write(link, "[test_reports]\nrootdir = 'reports'\n") + section = load_project_config(config) + assert section["rootdir"] == str(link / "reports") + + +def _build(srcdir, **kwargs): + """Set up a Sphinx application, returning it with its warning output. + + Pass ``status=StringIO()`` (and ``verbosity=1``) to capture the + informational output as well; it is discarded by default. + """ + from sphinx.application import Sphinx + + kwargs.setdefault("status", None) + warnings = StringIO() + app = Sphinx( + srcdir=srcdir, + confdir=srcdir, + outdir=srcdir / "_build" / "html", + doctreedir=srcdir / "_build" / "doctrees", + buildername="html", + freshenv=True, + warning=warnings, + **kwargs, + ) + return app, warnings.getvalue() + + +def _basic_doc(tmp_path, toml=None, conf_extra=""): + docs = tmp_path / "docs" + copytree(Path(__file__).parent / "doc_test" / "basic_doc", docs) + # Bound the upward search so the outcome cannot depend on the sandbox. + (tmp_path / ".git").mkdir() + if toml is not None: + _write(docs, toml) + if conf_extra: + with (docs / "conf.py").open("a", encoding="utf-8") as handle: + handle.write("\n" + conf_extra + "\n") + return docs + + +class TestBridgePrecedence: + """``-D`` > TOML > conf.py, and the diagnostics for a file that is missing.""" + + def test_command_line_override_beats_toml(self, tmp_path): + # -D is the per-invocation escape hatch. Sphinx applies it before + # config-inited, so the bridge has to leave those keys alone. + docs = _basic_doc(tmp_path, "[test_reports]\nfile_option = 'from_toml'\n") + app, _ = _build(docs, confoverrides={"tr_file_option": "from_command_line"}) + assert app.config.tr_file_option == "from_command_line" + + def test_toml_beats_conf_py_without_an_override(self, tmp_path): + docs = _basic_doc( + tmp_path, + "[test_reports]\nfile_option = 'from_toml'\n", + conf_extra="tr_file_option = 'from_conf_py'", + ) + app, _ = _build(docs) + assert app.config.tr_file_option == "from_toml" + + def test_disabling_toml_reading_is_not_a_type_warning(self, tmp_path): + # The documented opt-out must not trip Sphinx's own confval check -- + # a project building with -W would fail on it. + docs = _basic_doc( + tmp_path, + "[test_reports]\nfile_option = 'from_toml'\n", + conf_extra="tr_config_from_toml = None", + ) + app, warnings = _build(docs) + assert "tr_config_from_toml" not in warnings + assert app.config.tr_file_option == "file" + + def test_missing_explicit_config_warns(self, tmp_path): + docs = _basic_doc(tmp_path, conf_extra="tr_config_from_toml = 'nope.toml'") + _, warnings = _build(docs) + assert "does not exist" in warnings + + def test_missing_default_config_is_silent(self, tmp_path): + docs = _basic_doc(tmp_path) + _, warnings = _build(docs) + assert "ubproject.toml" not in warnings + + def test_unknown_key_warns_but_builds(self, tmp_path): + docs = _basic_doc( + tmp_path, "[test_reports]\nfile_option = 'ok'\nno_such_key = 1\n" + ) + app, warnings = _build(docs) + assert "no_such_key" in warnings + assert app.config.tr_file_option == "ok" + + def test_walks_up_from_the_confdir(self, tmp_path): + # ubproject.toml at the repo root, conf.py in docs/ -- the layout the + # shared file exists for. + docs = _basic_doc(tmp_path) + _write(tmp_path, "[test_reports]\nfile_option = 'from_the_root'\n") + app, _ = _build(docs) + assert app.config.tr_file_option == "from_the_root" + + def test_walks_past_a_pyproject_toml_beside_conf_py(self, tmp_path): + # The docs directory being a distribution of its own does not make it + # the project root; the shared file above it must still be found. + docs = _basic_doc(tmp_path) + (docs / "pyproject.toml").write_text("", encoding="utf-8") + _write(tmp_path, "[test_reports]\nfile_option = 'from_the_root'\n") + app, _ = _build(docs) + assert app.config.tr_file_option == "from_the_root" + + def test_a_fruitless_search_says_where_it_ended(self, tmp_path): + # Not an error and not a warning -- most projects have no file -- but + # visible with -v, so a misplaced file can be diagnosed. + docs = _basic_doc(tmp_path) + status = StringIO() + _build(docs, status=status, verbosity=1) + assert f"repository root {tmp_path}" in status.getvalue() + + +def _documented_toml_example(): + """The ``[test_reports]`` example of ``docs/configuration.rst``, verbatim. + + Read from the docs rather than copied, so the test fails when the example + and the code drift apart -- the example is what a project copies. + """ + text = (Path(__file__).parents[1] / "docs" / "configuration.rst").read_text( + encoding="utf-8" + ) + section = text[text.index("Declarative configuration (ubproject.toml)") :] + directive = ".. code-block:: toml\n" + body = section[section.index(directive) + len(directive) :].splitlines() + block = [] + for line in body[1:]: # skip the blank line after the directive + if line and not line.startswith(" "): + break + block.append(line[3:]) + return "\n".join(block) + "\n" + + +class TestConfvalTypes: + """The bridged values must pass Sphinx's own confval type check. + + ``check_confval_types`` runs at ``config-inited`` after the bridge and + compares each value's type with its default's. ``tr_rootdir`` defaults to + Sphinx's ``confdir`` -- a ``_StrPath`` -- so a plain string, the only thing + TOML (or a string literal in ``conf.py``) can supply, drew a warning, and a + project building with ``-W`` failed on the documented example. + """ + + def test_rootdir_from_toml_is_not_a_type_warning(self, tmp_path): + docs = _basic_doc(tmp_path) + _write(tmp_path, '[test_reports]\nrootdir = "docs"\n') + app, warnings = _build(docs) + assert "tr_rootdir" not in warnings + assert app.config.tr_rootdir == str(tmp_path / "docs") + + def test_rootdir_as_a_string_in_conf_py_is_not_a_type_warning(self, tmp_path): + docs = _basic_doc(tmp_path, conf_extra='tr_rootdir = "."') + _, warnings = _build(docs) + assert "tr_rootdir" not in warnings + + def test_the_documented_example_applies_without_warnings(self, tmp_path): + docs = _basic_doc(tmp_path) + _write(tmp_path, _documented_toml_example()) + app, warnings = _build(docs) + own = [ + line + for line in warnings.splitlines() + if "tr_" in line or "ubproject" in line or f"[{SECTION}]" in line + ] + assert own == [] + assert app.config.tr_file_option == "report_file" + assert app.config.tr_rootdir == str(tmp_path / "docs") + assert app.config.tr_case[0] == "test-case" + + +class TestSphinxFree: + """A consumer without the documentation toolchain can read the section.""" + + def test_projectconfig_imports_without_sphinx(self): + # Importing the module runs the package __init__, so the package must + # not import Sphinx eagerly either -- or a build action that turns + # reports into a needs.json dies with ModuleNotFoundError wherever + # Sphinx is not installed. Checked in a subprocess: this process has + # Sphinx imported already. + code = ( + "import sys\n" + "sys.modules['sphinx'] = None\n" # any `import sphinx...` now fails + "import sphinxcontrib.test_reports.projectconfig\n" + ) + result = subprocess.run( + [sys.executable, "-c", code], capture_output=True, text=True + ) + assert result.returncode == 0, result.stderr + + def test_a_missing_sphinx_needs_is_an_extension_error(self): + # The lazy `setup` owns the message Sphinx would have produced for a + # broken extension import, because Sphinx fetches `setup` with + # getattr() and would otherwise show a raw traceback. Sphinx renders + # the wrapped exception itself, so the message must not carry it a + # second time. Checked in a subprocess: sphinx_needs is importable + # here. + code = ( + "import sys\n" + "sys.modules['sphinx_needs'] = None\n" # `from sphinx_needs...` fails + "import sphinxcontrib.test_reports as pkg\n" + "from sphinx.errors import ExtensionError\n" + "try:\n" + " pkg.setup\n" + "except ExtensionError as error:\n" + " print(error)\n" + "else:\n" + " raise AssertionError('no ExtensionError')\n" + ) + result = subprocess.run( + [sys.executable, "-c", code], capture_output=True, text=True + ) + assert result.returncode == 0, result.stderr + message = result.stdout.strip() + assert message.startswith( + "Could not import extension sphinxcontrib.test_reports" + ) + assert message.count("(exception:") == 1 + assert "sphinx_needs" in message From 6c97b01addfcc04109b79516d17e7e37886587cb Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Tue, 8 Sep 2026 22:20:38 +0200 Subject: [PATCH 141/159] build: drop dead `packaging` runtime dependency (useblocks/sphinx-test-reports#154) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes useblocks/sphinx-test-reports#152. Follow-up from @chrisjsewell's [review of useblocks/sphinx-test-reports#150](https://github.com/useblocks/sphinx-test-reports/pull/150#pullrequestreview-5130337244). ## What `packaging` was declared as a runtime dependency, but PR useblocks/sphinx-test-reports#150 removed the last import of it under `sphinxcontrib/`. It is still genuinely used outside the package, so it moves to the extras that cover those consumers rather than being deleted outright: | Consumer | Installed via | Extra it now lives in | | --- | --- | --- | | `docs/conf.py` | RTD (`.readthedocs.yaml`) and the `linkcheck` nox session | `docs` | | 9 × `tests/doc_test/*/conf.py` | the `tests` nox session | `test` | All of them use it for the same thing — the `Version(sphinx_needs.__version__) >= Version("7.0.0")` config gate. The `>=20.0` floor is dropped rather than carried over: `packaging.version.Version` predates it by years, Sphinx already pins a much higher floor, and the surrounding extras entries only carry bounds where one actually matters. ## Verification - `grep -r packaging sphinxcontrib/` → no matches (the issue's stated criterion). - AST scan over all 18 modules under `sphinxcontrib/` for `import packaging` / `from packaging …` → **zero** hits, so this is not a grep artifact. - Installed metadata after the change lists `packaging` only as `packaging ; extra == "docs"` and `packaging ; extra == "test"` — no longer a runtime requirement. - `pytest -n auto tests/` → **169 passed**, unchanged from baseline (Python 3.12, Sphinx 8.1.3, sphinx-needs 8.0.0, from a fresh `.[test]` install). - `sphinx -b html docs docs/_build/html` from a fresh `.[docs]` install → `build succeeded.`, no warnings. - `pre-commit run --all-files` → all 7 hooks pass, `taplo-format` included. - `uv sync --group dev && uv run mypy` → `Success: no issues found in 6 source files`. No lockfile in the repo, so nothing to regenerate. --- packages/sphinx-test-reports/pyproject.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index eeb411a96..c84a75f61 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -23,12 +23,13 @@ classifiers = [ ] keywords = ["sphinx", "documentation", "test-reports"] requires-python = ">=3.11" -dependencies = ["sphinx>=7.4", "lxml", "sphinx-needs>=6.0.1", "packaging>=20.0"] +dependencies = ["sphinx>=7.4", "lxml", "sphinx-needs>=6.0.1"] [project.optional-dependencies] test = [ "beautifulsoup4", "nox>=2025.2.9", + "packaging", "pytest-xdist", "pytest>=7.0", "pytest-cov", @@ -36,6 +37,7 @@ test = [ "sphinxcontrib-plantuml", ] docs = [ + "packaging", "pillow", "sphinx-design", "sphinx-immaterial", From e1d0a91e4a06eb84aaf937efa2ceaa2b2e6a8fbf Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Wed, 9 Sep 2026 17:40:22 +0200 Subject: [PATCH 142/159] ci: test against sphinx-needs 8.5.0 (useblocks/sphinx-test-reports#158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes useblocks/sphinx-test-reports#153. ## What Adds `8.5.0` as a fifth `sphinx_needs-version` cell to the CI matrix and to the `SPHINX_NEEDS_VERSIONS` list in `noxfile.py` that mirrors it. Four new jobs (python 3.11/3.12 × sphinx 7.4.7/8.1.3), taking the `tests` matrix from 16 to 20. ## Why — and a correction to the issue's premise The issue asks for this on the grounds that the `add_field` registration branch in `sphinx_needs_update()` is reachable only from sphinx-needs ≥ 8.5 and therefore untested. **That premise does not hold.** Checking the API across the matrix range: | sphinx-needs | `sphinx_needs.api.add_field` | |---|---| | 6.0.1 | absent | | 6.3.0 | absent | | 7.0.0 | **present** | | 8.0.0 | present | | 8.5.0 | present | `add_field` was introduced in **7.0.0**, alongside `needs_fields` and the deprecation of `needs_extra_options` — the same 7.0.0 change the [PR useblocks/sphinx-test-reports#150 review](https://github.com/useblocks/sphinx-test-reports/pull/150#pullrequestreview-5130337244) identified as the correct threshold for the test fixtures' switch. The existing 7.0.0 and 8.0.0 cells were already exercising that branch; the `# sphinx-needs >= 8.5` comment above the import said otherwise and is the likely source of the mix-up. This PR corrects it to `>= 7.0`. The cell is still worth adding, for a different reason: the matrix topped out at 8.0.0, while 8.5.0 is the current release and the one a fresh `pip install sphinx-test-reports` resolves to today. That version was untested. It now is. ## Changes - `.github/workflows/ci.yaml`, `noxfile.py`: add `8.5.0` to the sphinx-needs matrix - `sphinxcontrib/test_reports/test_reports.py`: correct the `>= 8.5` comment to `>= 7.0` (comment only, no behaviour change) - `docs/changelog.rst`: `Testing:` entry under Unreleased ## Verification All four new cells run locally against sphinx-needs 8.5.0: ``` [py3.11 sphinx=7.4.7 sn=8.5.0] -> 169 passed [py3.11 sphinx=8.1.3 sn=8.5.0] -> 169 passed [py3.12 sphinx=7.4.7 sn=8.5.0] -> 169 passed [py3.12 sphinx=8.1.3 sn=8.5.0] -> 169 passed ``` `pre-commit run --all-files` and `mypy` are clean. CI on this PR is the real check. 8.5.0 fits the rest of the matrix without constraint changes: it requires `python >=3.10` and `sphinx >=7.4,<10`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) --- packages/sphinx-test-reports/.github/workflows/ci.yaml | 2 +- packages/sphinx-test-reports/docs/changelog.rst | 3 +++ packages/sphinx-test-reports/noxfile.py | 2 +- .../sphinxcontrib/test_reports/test_reports.py | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 5dd5fd5f9..73ef1592b 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: os: [ubuntu-latest] python-version: ["3.11", "3.12"] sphinx-version: ["7.4.7", "8.1.3"] - sphinx_needs-version: ["6.0.1", "6.3.0", "7.0.0", "8.0.0"] + sphinx_needs-version: ["6.0.1", "6.3.0", "7.0.0", "8.0.0", "8.5.0"] steps: - uses: actions/checkout@v2 - name: Set Up Python ${{ matrix.python-version }} diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 485646159..f20d13736 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -36,6 +36,9 @@ Unreleased 6.0.1 is the first release whose ``add_extra_option`` takes a schema, which this extension registers its fields with; sphinx-needs 6 itself requires Sphinx 7.4. The compatibility branches for older releases are gone. +* Testing: Run the test suite against sphinx-needs 8.5.0. The matrix + previously topped out at 8.0.0, so the release a fresh install resolves to + was untested. .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index 62a2cac1f..fc4854389 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -3,7 +3,7 @@ PYTHON_VERSIONS = ["3.11", "3.12"] SPHINX_VERSIONS = ["7.4.7", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["6.0.1", "6.3.0", "7.0.0", "8.0.0"] +SPHINX_NEEDS_VERSIONS = ["6.0.1", "6.3.0", "7.0.0", "8.0.0", "8.5.0"] def run_tests(session, sphinx, sphinx_needs): diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 54eded26e..33f7f21b3 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -61,7 +61,7 @@ } try: - # sphinx-needs >= 8.5: fields are registered through add_field. + # sphinx-needs >= 7.0: fields are registered through add_field. from sphinx_needs.api import add_field as _add_field def _register_field(app, name, schema=None): From 785066c27db55abbb32daa0d49c32b51195fccaf Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Thu, 10 Sep 2026 08:36:39 +0200 Subject: [PATCH 143/159] =?UTF-8?q?feat(cli):=20`test-reports=20build=20ne?= =?UTF-8?q?eds`=20=E2=80=94=20Sphinx-free=20test-XML=20to=20needs.json,=20?= =?UTF-8?q?configured=20from=20[test=5Freports.build.needs]=20(useblocks/s?= =?UTF-8?q?phinx-test-reports#148)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sphinx-test-reports/docs/changelog.rst | 24 + packages/sphinx-test-reports/docs/cli.rst | 284 +++++++ .../docs/configuration.rst | 27 +- packages/sphinx-test-reports/docs/index.rst | 1 + packages/sphinx-test-reports/pyproject.toml | 31 +- .../sphinxcontrib/test_reports/cli.py | 580 ++++++++++++++ .../test_reports/directives/test_case.py | 14 +- .../sphinxcontrib/test_reports/fields.py | 201 +++++ .../sphinxcontrib/test_reports/identity.py | 22 + .../test_reports/needs_export.py | 366 +++++++++ .../test_reports/projectconfig.py | 297 ++++++- .../sphinxcontrib/test_reports/remote.py | 149 ++++ .../test_reports/test_reports.py | 148 ++-- .../tests/test_cli_config.py | 531 +++++++++++++ .../tests/test_cli_convert.py | 741 ++++++++++++++++++ .../tests/test_identity.py | 33 + .../tests/test_needs_export.py | 381 +++++++++ .../tests/test_project_config.py | 205 ++++- .../tests/test_source_location.py | 18 + 19 files changed, 3929 insertions(+), 124 deletions(-) create mode 100644 packages/sphinx-test-reports/docs/cli.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py create mode 100644 packages/sphinx-test-reports/tests/test_cli_config.py create mode 100644 packages/sphinx-test-reports/tests/test_cli_convert.py create mode 100644 packages/sphinx-test-reports/tests/test_needs_export.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index f20d13736..ee3c8409b 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -29,6 +29,30 @@ Unreleased root; the new ``tr_config_from_toml`` names or disables it. Precedence is ``-D`` > ``ubproject.toml`` > ``conf.py`` > default. See :ref:`tr_config_from_toml`. +* Feature: New ``test-reports build needs`` command line interface, converting + test-result XML into a ``needs.json`` without running Sphinx, so the + conversion can run as a cacheable build action and the documentation build + only imports the result. Its settings come from the ``[test_reports.build.needs]`` + table of ``ubproject.toml``, with flags for per-invocation overrides. See + :ref:`cli`. +* Feature: The produced ``needs.json`` declares every field it uses in a + ``needs_schema``, as Sphinx-Needs does for the files a build writes, so a + consumer can read the type of a field from the artifact instead of from a + Sphinx build with the extension loaded. The declarations and the fields the + extension registers come from one table, so the two cannot drift apart. +* Bugfix: ``tr_file_option``, ``tr_source_file_option`` and + ``tr_source_line_option`` may no longer name a fixed field such as ``case`` + or ``result``, in ``conf.py`` or in the declarative file. The build + previously stopped with a bare ``TypeError`` from inside a directive. +* Support: ``result_text`` and ``remote_url`` are registered as need fields by + the extension, so a ``needs.json`` the ``build needs`` command produced + imports without dropping them. A project that registered ``remote_url`` + itself keeps its own registration. +* Known: Sphinx 9 renders a configuration error raised from the declarative + file -- a wrong type, a rename onto a fixed field, a disagreeing need type + -- as its crash report rather than as a one-line message; the message is in + the report. A typo in ``[test_reports.build.needs]`` is reported the same + way. * Support: Python 3.10 is no longer supported. It reached the end of upstream support, and dropping it lets the package read TOML with ``tomllib`` from the standard library instead of carrying a backport. diff --git a/packages/sphinx-test-reports/docs/cli.rst b/packages/sphinx-test-reports/docs/cli.rst new file mode 100644 index 000000000..dc0182b2b --- /dev/null +++ b/packages/sphinx-test-reports/docs/cli.rst @@ -0,0 +1,284 @@ +.. _cli: + +Command line interface +====================== +.. versionadded:: 1.5.0 + +``Sphinx-Test-Reports`` ships a ``test-reports`` command that converts +test-result XML into a ``needs.json`` **without running Sphinx**. + +Why this exists: parsing test results inside a documentation build couples the +two, so results cannot be converted without building docs, the conversion cannot +be cached by a build system, and the data is unavailable to anything else. The +CLI splits the computation out; the documentation build only imports the result. + +The command imports no Sphinx code at all, so it can run as a build action in an +environment that has no documentation toolchain installed. + +Converting a report +------------------- + +.. code-block:: bash + + test-reports build needs bazel-testlogs/my_target/test.xml --output needs.json + +Several reports can be converted into one file -- a build system typically +passes them as a file list: + +.. code-block:: bash + + test-reports build needs report_a.xml report_b.xml --output needs.json + +Every test case must be unique across the given reports. A case's ID is derived +from where the test is, so the same case twice -- typically the same report +given twice -- would collapse into one need; the command refuses that with an +error naming the affected IDs rather than writing a valid-looking file that has +lost evidence. + +Each test case becomes one need shaped exactly like the need the build's +``test-case`` directive creates for it: titled with the case name; ``suite``, +``case``, ``case_name``, ``case_parameter``, ``classname``, ``result`` (spelled +as the build spells it -- ``passed``, ``failure``, ``error``, ``skipped``, +``disabled`` -- so one filter matches imported and local cases alike) and +``time``; the report path under ``file``; the test's source location under +``case_file`` and ``case_line``; a one-line ``result_text``; and the full +failure evidence (every ````/```` part plus captured output) +in the need content. + +The three renameable fields carry the names the build's ``tr_file_option``, +``tr_source_file_option`` and ``tr_source_line_option`` select -- the converter +reads them from the same ``[test_reports]`` section (:ref:`tr_config_from_toml`), +so a project that spells its source location ``file``/``line`` gets a +``needs.json`` that says so too. That section is the only place it can read +them from: a rename made in ``conf.py`` alone is invisible to the converter, +which then writes the default names -- ``needimport`` drops ``case_file`` and +``case_line`` as unknown keys, and the report path lands in ``file``, the field +such a project defines as the *source* file. Renames belong in +``ubproject.toml``. None of the three may take the name of a fixed field +(``case``, ``result``, ...); both consumers refuse such a configuration, since +the field would be written twice. + +Every field is declared in the file, under ``versions..needs_schema``, +the way Sphinx-Needs declares the fields of the ``needs.json`` a build writes: +its JSON type, a description, and whether it is a core field, a registered +field or a link field. Configured ``extra_options`` and mapped link fields are +declared whether or not a case populated them -- the block describes the +format, not the one report at hand. So a consumer that never runs Sphinx (a +schema check, a metamodel validator) can read the type of every field from the +artifact: + +.. code-block:: json + + "time": { + "type": ["string", "null"], + "description": "Test execution time, in seconds", + "field_type": "extra", + "default": null + } + +The declarations and the fields the extension registers with Sphinx-Needs come +from one table, so a field cannot be typed one way in the file and another way +in the build. ``time`` is declared a string because that is what the build's +``test-case`` directive writes; turning it into a number is +`#156 `__. + +Consuming the result +-------------------- + +The output is a schema-conform ``needs.json``, so it can be imported as local +needs: + +.. code-block:: rst + + .. needimport:: needs.json + +or mounted as external needs via ``needs_external_needs`` in ``conf.py``. + +Importing needs sphinx-needs 4 or newer: older versions read the need text +from a ``description`` key, the converter writes ``content`` like every version +since. Two things a build has to allow for. The IDs are lowercase +(``testcase__MathTest__Addition_hcuyy``), the scheme S-CORE's tooling uses, and +sphinx-needs' default ``needs_id_regex`` accepts capitals only -- widen it, e.g. +``needs_id_regex = "^[A-Za-z0-9_]{5,}"``, or every import is refused (see also +``tr_deterministic_case_ids`` in :ref:`configuration`). And a link field +created with ``--link-property`` has to exist as a link type (``needs_links``; +``needs_extra_links`` before sphinx-needs 6.3), as for any need. The plain +fields the converter adds +beyond the directive's (``result_text``, ``remote_url``) are registered by the +extension, so ``needimport`` keeps them. + +Every need carries the synthesized source URL twice: as ``external_url``, which +Sphinx-Needs uses when rendering a link to an external need, and as a plain +``remote_url`` field, so needs imported as *local* needs keep a clickable link +through a ``needs_string_links`` entry. + +Linking test cases to requirements +---------------------------------- + +An XML ```` becomes a need field under its own name when it is listed +in the ``extra_options`` of the ``[test_reports]`` section -- the same list that +makes the build register the field and accept it, so an import never has to drop +it as an unknown key -- or given with ``--extra-option NAME``. Properties named +by neither are left out, and the command says which, once. A listed property is +written for every case -- ``null`` where a case has no such property, as the +build leaves a field a directive did not set -- so a schema can require it. +``--extra-option`` adds to the section's list rather than replacing it +(``--no-config`` leaves the file out); a name that list does not contain is +reported, because the build registers exactly the listed fields and +``needimport`` drops every other one. To turn a property into a link field +instead, map it -- the value is split on commas: + +.. code-block:: bash + + test-reports build needs test.xml --output needs.json \ + --link-property PartiallyVerifies=partially_verifies \ + --link-property FullyVerifies=fully_verifies + +Mapped link fields are written even when a case has no such property, so a schema +can require them. A test run that names its link properties +``PartiallyVerifies`` and ``FullyVerifies`` is configured as + +.. code-block:: toml + + [test_reports.build.needs] + link_properties = { PartiallyVerifies = "partially_verifies", FullyVerifies = "fully_verifies" } + +and lists ``TestType`` and ``DerivationTechnique`` in ``extra_options``. + +A property whose name is already taken by a built-in field (``result``, +``file``, ``time``, ...) or by a mapped link field is not exported: the built-in +value wins, and the command says so on stderr, once. Rename the property, or map +it to a link field, to get it into the need. + +Source links +------------ + +Source URLs need both a repository and a commit; they are refused separately, +because half the metadata cannot produce a URL: + +.. code-block:: bash + + test-reports build needs test.xml --output needs.json \ + --remote-url git@github.com:org/repo.git \ + --commit "$(git rev-parse HEAD)" + +Git remotes are accepted in ``scp`` form and normalised, and credentials are +stripped -- ``https://gitlab-ci-token:TOKEN@gitlab.example/org/repo.git`` is +what GitLab's ``CI_REPOSITORY_URL`` looks like, and the base is written into +every need. Without this metadata -- as in a hermetic sandbox -- the URL fields +stay empty rather than carrying a placeholder that looks real and then 404s. + +Forges that lay out blob URLs differently are handled with ``--url-pattern``, +which accepts the placeholders ``{base}``, ``{commit}``, ``{file}`` and +``{line}``: + +.. code-block:: bash + + test-reports build needs test.xml --output needs.json \ + --remote-url https://gitlab.com/org/repo --commit abc123 \ + --url-pattern "{base}/-/blob/{commit}/{file}#L{line}" + +The template is checked before any report is read: an unknown placeholder, an +attribute lookup such as ``{base.x}`` or an unbalanced brace is a configuration +error naming the problem, not a traceback on the first case that happens to +carry a file. + +.. _cli-declarative: + +Declarative configuration +------------------------- + +None of the settings above has to be spelled as a flag. The command reads the +``[test_reports.build.needs]`` table of ``ubproject.toml`` -- the same declarative +file the documentation build reads (see :ref:`tr_config_from_toml`), so the two +consumers of a project never work from different descriptions of it. By default +the file is searched for in the working directory and its parents, stopping at +the repository root (the directory holding ``.git``) or, outside a repository, +at the directory holding ``pyproject.toml``. An absent default file is not an +error. A found one is named on stderr: it may sit directories above the +invocation, and the output depends on it. + +.. code-block:: toml + + [test_reports.build.needs] + project = "My Project" + version = "2.0" + need_type = "testcase" + tags = ["ci", "unit"] + link_properties = { PartiallyVerifies = "partially_verifies" } + remote_url = "https://github.com/org/repo" + url_pattern = "{base}/blob/{commit}/{file}#L{line}" + +.. code-block:: bash + + test-reports build needs bazel-testlogs/my_target/test.xml --output needs.json \ + --commit "$(git rev-parse HEAD)" + +**Precedence** is flag > table > built-in default. A flag given alongside the +file overrides that key -- the natural home for per-invocation values such as +the commit a CI job is converting for. ``--link-property``, given at all, +replaces the whole ``link_properties`` table. ``--config PATH`` reads a +different file (used as-is, not searched for, and it must exist); +``--no-config`` ignores declarative configuration entirely, so the output +depends only on the arguments given. A run without a file is quiet by default +-- most projects have none -- but ``-v`` says where the search ended and why, +so a misplaced file can be placed right, and names a ``--config`` file; the +Sphinx build says the same at ``sphinx-build -v``. + +**Validation** follows the file's own policy: a known key with the wrong type +stops the conversion with an error, an unknown key is reported on stderr and +ignored. The whole ``[test_reports]`` section is validated, not only the +``build.needs`` table, so the converter refuses exactly the files the build +would refuse. + +``need_type`` and the ``type`` of the build's ``case`` entry both name the need +type of a test case, so they must agree: a ``needs.json`` written with one type +is neither registered nor cross-linked by a build configured with the other. The +rule holds for the *merged* value -- a ``--need-type`` flag, or the built-in +default, disagreeing with the file's ``case`` is refused just like a +disagreeing ``need_type`` in the file. + +Reproducible output +------------------- + +The written file is byte-stable: keys are sorted and no timestamp is recorded. +Converting the same report twice produces identical bytes, so the output works as +a cached build-action output and as diffable evidence. + +Empty reports +------------- + +A report without a single test case adds no needs, and the command says so on +stderr. A file that is not a test report at all -- a ``pom.xml``, a +``coverage.xml`` given by mistake -- parses as one empty suite, so a valid, +empty ``needs.json`` with exit code 0 would otherwise be the silent outcome of +exactly the mistake a cached build action needs to hear about. + +Missing source locations +------------------------ + +If no test case in a report carries a ``line`` attribute, the command says so on +stderr. The usual cause is pytest's default ``junit_family = xunit2``, which +filters ``file`` and ``line`` off ````; ``xunit1`` (or ``legacy``) +emits them -- and only through the ``record_xml_attribute`` fixture, which a +stock run never calls. A test run therefore has to set ``junit_family`` and +write the attributes itself for the source location to reach the needs. + +All options +----------- + +.. code-block:: text + + test-reports build needs FILE [FILE ...] --output PATH + [--config PATH | --no-config] [-v] + [--project NAME] [--version KEY] + [--need-type TYPE] [--tags TAGS] + [--extra-option NAME] [--link-property PROPERTY=LINK_FIELD] + [--remote-url URL] [--commit COMMITISH] + [--url-pattern PATTERN] + +``--project`` and ``--version`` fill the ``needs.json`` envelope; +``--need-type`` (default ``testcase``) sets the need type and the ID prefix; +``--tags`` is a comma-separated list applied to every created need. Every one +of these can also come from ``[test_reports.build.needs]`` in ``ubproject.toml``; +a flag wins. diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index e7ee67298..9b3381091 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -146,8 +146,11 @@ rename the report field instead: tr_source_file_option = "file" tr_source_line_option = "line" -Each of the three options must name a different field; otherwise the build stops -with a configuration error. +Each of the three options must name a field of its own -- not one of the other +two, and not a fixed field such as ``case`` or ``result`` -- or the build stops +with a configuration error. For the :ref:`build needs command ` to write +the renamed fields as well, put the renames in ``ubproject.toml`` +(:ref:`tr_config_from_toml`): it cannot see ``conf.py``. The field is empty when the XML carries no ``file`` attribute. With pytest this is the norm: it emits ``file``/``line`` only with ``junit_family = xunit1`` (or @@ -444,17 +447,25 @@ acting on it works from the same settings instead of each restating them. # case = ["test-case", "testcase", "Test-Case", "TC_", "#999999", "rectangle"] **Keys.** Every key is named like its ``tr_*`` config value without the prefix -(``file_option`` configures ``tr_file_option``, and so on). A key carrying the +(``file_option`` configures ``tr_file_option``, and so on). The build applies +them all; the :ref:`build needs command ` reads the three field-name keys +(``file_option``, ``source_file_option``, ``source_line_option``) and +``extra_options`` as well, so the needs it writes have the shape of the needs +the build creates and carry exactly the fields the build accepts -- and it +refuses a file whose path fields share a name or take a fixed field's, as the +build does. A key carrying the wrong type is an error -- that is the typo class this validation exists to catch. An *unknown* key is reported as a warning and ignored: the file is shared with tools on independent release cadences, so a key this version does not model must not take your build down. -One sub-table belongs to another tool and is left alone: ``[test_reports.build]`` -holds the settings of the ``test-reports build`` command line, one sub-table per -artifact it produces -- ``[test_reports.build.needs]`` for turning test reports -into a ``needs.json`` outside Sphinx -- none of which this extension does. Any -other sub-table is treated like any other unknown key -- reported and ignored. +The ``[test_reports.build.needs]`` sub-table holds the settings of the +:ref:`build needs command `. The build validates it along with +the rest of the section -- so a typo is caught whichever consumer reads the file +first -- but never applies it to a ``tr_*`` value. One rule spans both: +``need_type`` in that table and the ``type`` of ``case`` name the same need +type, and a file setting them to different values is rejected. Any other sub-table is an unknown key like any other -- +reported and ignored. **Warnings.** The two warnings this feature emits carry a type, so either can be silenced through Sphinx's ``suppress_warnings`` in a project that builds diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index e1dbfd07b..884dd97dc 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -75,6 +75,7 @@ Content install directives/index configuration + cli parsers filter functions diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index c84a75f61..3f06b3cb8 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -47,7 +47,17 @@ docs = [ ] [dependency-groups] -dev = ["pre-commit~=3.0", "nox>=2025.2.9", "mypy>=1.16.0"] +dev = [ + "pre-commit~=3.0", + "nox>=2025.2.9", + "mypy>=1.16.0", + # Stubs for docutils, which ships none: without them every directive + # option spec is untyped and `test_reports.py` cannot be checked. + "types-docutils>=0.21", +] + +[project.scripts] +test-reports = "sphinxcontrib.test_reports.cli:main" [tool.flit.module] name = "sphinxcontrib.test_reports" @@ -84,7 +94,7 @@ extend-select = [ packages = ["sphinxcontrib.test_reports"] strict = true show_error_codes = true -# TODO: reactivate below files and fix issues in future PRs +# TODO: reactivate below files and fix issues in future PRs (#114) exclude = [ "^sphinxcontrib/test_reports/__init__\\.py$", "^sphinxcontrib/test_reports/config\\.py$", @@ -101,7 +111,6 @@ exclude = [ "^sphinxcontrib/test_reports/functions", "^sphinxcontrib/test_reports/jsonparser\\.py$", "^sphinxcontrib/test_reports/junitparser\\.py$", - "^sphinxcontrib/test_reports/test_reports\\.py$", ] # Disallow dynamic typing disallow_any_unimported = true @@ -132,3 +141,19 @@ disallow_untyped_defs = true # # Config file # warn_unused_configs = true + +# The two modules that talk to something untyped by construction: +# `test_reports.py` to the sphinx-needs API (which ships no py.typed) and to +# `tr_*` config values read off the Sphinx config with `getattr`; `cli.py` to +# `argparse.Namespace`, whose attributes are `Any`. Nearly every expression in +# them is therefore `Any`, which `disallow_any_expr` cannot accept and no +# amount of local annotation fixes. The flag also has no counterpart in `ty`, +# which the sphinx-needs workspace uses, so relaxing it here costs nothing +# there. Every other strict check still applies -- annotations and real type +# errors are caught, which the `exclude` entries this replaces prevented. +[[tool.mypy.overrides]] +module = [ + "sphinxcontrib.test_reports.test_reports", + "sphinxcontrib.test_reports.cli", +] +disallow_any_expr = false diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py new file mode 100644 index 000000000..8c014d0c2 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py @@ -0,0 +1,580 @@ +"""``test-reports`` command line interface. + +``test-reports build needs`` turns test-result XML into needs.json *outside* Sphinx, so a build system can +schedule and cache the conversion and the documentation build only imports the +result. Nothing in the import chain of this module may import Sphinx; the test +suite asserts that. + +The conversion settings come from three places, highest precedence first: a +command-line flag, the ``[test_reports.build.needs]`` table of the project's +``ubproject.toml``, the built-in default. The file is the declarative +description of the project that the Sphinx build reads too, so the two +consumers cannot drift apart; the flags stay for per-invocation values such as +the commit a CI job is converting for. +""" + +import argparse +import json +import sys +from pathlib import Path +from typing import Mapping, Sequence + +from sphinxcontrib.test_reports.junitparser import JUnitParser +from sphinxcontrib.test_reports.needs_export import ( + DEFAULT_VERSION, + Report, + build_needs_file, + iter_cases, + optional, +) +from sphinxcontrib.test_reports.projectconfig import ( + CONVERSION_KEYS, + DEFAULT_NEED_TYPE, + DEFAULT_TOML_FILENAME, + NEEDS_TABLE_PATH, + SECTION, + TomlConfigError, + case_need_type, + field_names, + find_project_config, + load_project_config, + needs_settings, +) +from sphinxcontrib.test_reports.remote import ( + DEFAULT_URL_PATTERN, + check_url_pattern, + normalise_remote_url, +) + +#: How the table is spelled in help texts and diagnostics. +TABLE = f"[{NEEDS_TABLE_PATH}]" + + +def _warn(message: str) -> None: + print(f"warning: {message}", file=sys.stderr) + + +# The conversion settings are resolved key by key in a loop (see +# `_resolve_settings`), which a TypedDict cannot express, so the mapping stays +# `dict[str, object]`. These two state at the point of use the type +# `_NEEDS_KEY_TYPES` already enforces when the file is read. +def _text(value: object) -> str: + """A setting the validation pins to a string.""" + return value if isinstance(value, str) else "" + + +def _texts(value: object) -> "list[str]": + """A setting the validation pins to a list of strings.""" + return [str(item) for item in value] if isinstance(value, list) else [] + + +def _build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="test-reports", + description="Convert test-result XML into sphinx-needs data.", + ) + subcommands = parser.add_subparsers(dest="command", required=True) + + # `build `, as ubCode spells it (`ubc build needs`): the command + # names what gets produced, and leaves room for further artifacts. + build = subcommands.add_parser( + "build", + help="Build an artifact from test-result XML.", + description="Build an artifact from one or more test-result XML files.", + ) + artifacts = build.add_subparsers(dest="artifact", required=True) + needs = artifacts.add_parser( + "needs", + help="Build a needs.json from one or more test-result XML files.", + description=( + "Build a needs.json from one or more test-result XML files, ready " + "to be consumed with needimport or needs_external_needs. Settings " + f"default to the {TABLE} table of {DEFAULT_TOML_FILENAME}; a flag " + "overrides the file's value for that key." + ), + ) + needs.add_argument( + "files", + nargs="+", + metavar="FILE", + help="Test-result XML files (a build system passes these as a file list).", + ) + needs.add_argument( + "--output", + "-o", + required=True, + metavar="PATH", + help="Where to write the needs.json.", + ) + # Every setting the TOML file can supply defaults to None here and is + # resolved in _resolve_settings: a given flag beats the file, which beats + # the built-in default. None is safe because each key resolves to a + # concrete value there. + needs.add_argument( + "--project", + default=None, + help="Project name recorded in the needs.json envelope (default: empty).", + ) + needs.add_argument( + "--version", + default=None, + help=f"Version key in the envelope (default: {DEFAULT_VERSION}).", + ) + needs.add_argument( + "--need-type", + default=None, + help=( + f"Need type for each test case (default: {DEFAULT_NEED_TYPE}). Must " + f"agree with the type of case in [{SECTION}] when a config file " + "applies." + ), + ) + needs.add_argument( + "--tags", + default=None, + help="Comma-separated tags applied to every created need.", + ) + needs.add_argument( + "--link-property", + action="append", + default=None, + metavar="PROPERTY=LINK_FIELD", + help=( + "Promote an XML property to a link field, comma-splitting its value " + "(repeatable), e.g. PartiallyVerifies=partially_verifies. Given at " + "all, it replaces the file's link_properties table." + ), + ) + needs.add_argument( + # Named after `tr_extra_options`, which the flag defaults from. + # sphinx-needs has since renamed `needs_extra_options` to + # `needs_fields`; realigning this extension's vocabulary is issue #157. + "--extra-option", + action="append", + default=None, + metavar="NAME", + help=( + "Export the XML property NAME as a need field (repeatable), in " + f"addition to the extra_options of [{SECTION}] -- the same list that " + "makes the build accept the field. A NAME that list lacks is " + "reported. Properties named by neither are reported and left out." + ), + ) + needs.add_argument( + "--remote-url", + default=None, + help="Repository URL used to synthesize source links; git remotes are accepted.", + ) + needs.add_argument( + "--commit", + default=None, + help="Commit-ish the reports were produced from.", + ) + needs.add_argument( + "--url-pattern", + default=None, + help=f"Source-URL template (default: {DEFAULT_URL_PATTERN}).", + ) + needs.add_argument( + "-v", + "--verbose", + action="store_true", + help=( + "Say on stderr where the search for the declarative config file " + "ended when it found none, and name a --config file. Off by " + "default: most runs have no file and should stay quiet, but a " + "misplaced one must be diagnosable. A file the search did find is " + "always named -- it may sit directories above, and the output " + "depends on it." + ), + ) + config_source = needs.add_mutually_exclusive_group() + config_source.add_argument( + "--config", + default=None, + metavar="PATH", + help=( + f"Declarative config file to read the {TABLE} table from. By " + f"default {DEFAULT_TOML_FILENAME} is searched for in the working " + "directory and its parents, up to the project root; an explicitly " + "given path is used as-is and must exist." + ), + ) + config_source.add_argument( + "--no-config", + action="store_true", + help=( + "Ignore the declarative config file entirely, so the output " + "depends only on the arguments given here." + ), + ) + return parser + + +def _parse_link_properties(values: object) -> dict[str, str]: + """Normalise the link-property mapping from any input spelling. + + Flags provide ``PROPERTY=LINK_FIELD`` strings; the TOML file provides a + ``PROPERTY = "LINK_FIELD"`` table; neither given is ``None``. Both spellings + must yield non-empty keys and values -- a silently dropped mapping would + send link fields into needs.json as plain fields instead. This is the only + place the mapping is normalised, so the two spellings cannot drift. + + The parameter is ``object`` because the value arrives from a flag or from + the TOML file; this function is where its shape is established. + """ + if values is None: + return {} + if isinstance(values, dict): + mapping = {} + for property_name, link_field in values.items(): + if not str(property_name).strip() or not str(link_field).strip(): + raise ValueError( + f'link_properties expects PROPERTY = "LINK_FIELD", got ' + f"{property_name!r} = {link_field!r}" + ) + mapping[str(property_name).strip()] = str(link_field).strip() + return mapping + + if not isinstance(values, list): + raise ValueError( + f'link_properties expects a PROPERTY = "LINK_FIELD" table, got {values!r}' + ) + + mapping = {} + for value in values: + property_name, separator, link_field = str(value).partition("=") + if not separator or not property_name.strip() or not link_field.strip(): + raise ValueError( + f"--link-property expects PROPERTY=LINK_FIELD, got {value!r}" + ) + mapping[property_name.strip()] = link_field.strip() + return mapping + + +def _warn_about_absent_source_lines( + path: Path, suites: Sequence[Mapping[str, object]] +) -> None: + """Report the most common cause of a missing source location. + + pytest emits ``file``/``line`` as ```` attributes only under + ``junit_family = xunit1`` (or ``legacy``); its default ``xunit2`` filters + them out, which silently costs the source location of every case. + """ + # Walk the report the way the export does: the parser files the cases of + # a suite with nested elements under testsuite_nested only, so + # looking at the top-level testcases alone goes quiet on nested reports. + cases = [case for _suite_name, case in iter_cases(suites)] + if cases and all(optional(case.get("line"), -1) == "" for case in cases): + print( + f"warning: {path}: no carries a 'line' attribute, so no " + "source location could be recorded. pytest emits file/line only " + "with junit_family = xunit1 (or legacy); its default xunit2 drops " + "them.", + file=sys.stderr, + ) + + +def _warn_about_empty_report( + path: Path, suites: Sequence[Mapping[str, object]] +) -> None: + """A report without a single test case contributes nothing -- say so. + + A file that is not a test report at all (a ``pom.xml``, a ``coverage.xml``) + parses as one empty suite, and a genuine report may have had every case + filtered out. Either way the artifact ends up with fewer needs than the + caller expects, and for a cached build output "0 needs" is the one outcome + that must never be silent. + """ + if not any(True for _ in iter_cases(suites)): + _warn( + f"{path}: no test cases found, so it adds no needs. A file that is " + f"not a test report parses as an empty one." + ) + + +def _load_section( + arguments: argparse.Namespace, +) -> "tuple[dict[str, object], Path | None, str | None]": + """Load the ``[test_reports]`` section, honouring ``--config``/``--no-config``. + + Returns ``(section, path, error_message)``. ``section`` is ``{}`` and + ``path`` ``None`` when no file applies: an absent *default* file is not an + error, an explicitly given path that cannot be read is. + + The whole section is loaded, not only the converter's table: validation + covers the file as the build sees it, and the build's ``case`` entry is + needed to check the need type against. + + The default file is searched for upwards from the working directory, since + it conventionally sits at the project root while the converter runs from + wherever CI invoked it. That is also where the Sphinx side looks, so both + consumers read the same file. A file the search finds is always named on + stderr: it may sit directories above the invocation, and the bytes written + depend on it, so a cached artifact has to be traceable to the file that + shaped it -- the Sphinx bridge logs the same at INFO on every build. With + ``--verbose`` a fruitless search also reports where it ended, and an + explicitly given file is named too. + """ + if arguments.no_config: + return {}, None, None + + def verbose(message: str) -> None: + if arguments.verbose: + print(message, file=sys.stderr) + + if arguments.config is not None: + path = Path(arguments.config) + if not path.is_file(): + return {}, None, f"error: no such config file: {path}" + verbose(f"reading [{SECTION}] from {path}") + else: + found = find_project_config(Path.cwd(), report=verbose) + if found is None: + return {}, None, None + path = found + print(f"reading [{SECTION}] from {path}", file=sys.stderr) + + try: + section = load_project_config(path, _warn) or {} + except TomlConfigError as error: + return {}, path, f"error: {error}" + return section, path, None + + +#: Built-in value of every conversion setting, used when neither a flag nor +#: the TOML file supplies one. Keyed by :data:`CONVERSION_KEYS`, and checked +#: against it at import time, so a key cannot be added to the table without +#: also being given a default here. +_DEFAULTS: "dict[str, object]" = { + "project": "", + "version": DEFAULT_VERSION, + "need_type": DEFAULT_NEED_TYPE, + "tags": "", + "link_properties": None, + "remote_url": "", + "commit": "", + "url_pattern": DEFAULT_URL_PATTERN, +} +if set(_DEFAULTS) != set(CONVERSION_KEYS): # pragma: no cover - import-time guard + raise RuntimeError("every [test_reports.build.needs] key needs a built-in default") + +#: argparse destination per conversion key, where it differs from the key. +#: Only the repeatable ``--link-property`` flag does. +_DESTS = {"link_properties": "link_property"} + +#: Command-line spelling of a conversion key, for diagnostics. +_FLAGS = {key: "--" + key.replace("_", "-") for key in CONVERSION_KEYS} +_FLAGS["link_properties"] = "--link-property" + + +def _resolve_settings( + arguments: argparse.Namespace, table: "dict[str, object]" +) -> "tuple[dict[str, object], dict[str, str]]": + """Merge the conversion settings: flag > TOML table > built-in default. + + Flags default to ``None``, so ``None`` means "not given"; every key resolves + to a concrete value here. Also returns, per key, where the value came from, + because a diagnostic has to name the flag or the TOML key the user actually + wrote. + """ + resolved: "dict[str, object]" = {} + sources: "dict[str, str]" = {} + for key in CONVERSION_KEYS: + flag = getattr(arguments, _DESTS.get(key, key)) + if flag is not None: + resolved[key], sources[key] = flag, "flag" + elif key in table: + resolved[key], sources[key] = table[key], "toml" + else: + resolved[key], sources[key] = _DEFAULTS[key], "default" + + tags = resolved["tags"] + if isinstance(tags, str): # comma-separated, from the flag + resolved["tags"] = [tag.strip() for tag in tags.split(",") if tag.strip()] + else: # array from the TOML file, or the key is absent + resolved["tags"] = _texts(tags) + + return resolved, sources + + +def _spell(key: str, sources: "dict[str, str]") -> str: + """The key as the user wrote it: the flag, the TOML key, or the default.""" + source = sources.get(key) + if source == "toml": + return key + if source == "default": + return f"the default {key}" + return _FLAGS[key] + + +def _pair_requirement(sources: "dict[str, str]", path: "Path | None") -> str: + """Name the remote-url/commit pair the way the user actually spelled it. + + Either half can come from the TOML file, so naming only the flags would + point at options that appear nowhere in the invocation. + """ + # The half that is missing is named by the flag that would supply it -- + # that is the actionable spelling -- and the half that was given by however + # the user gave it. + names = [ + key if sources.get(key) == "toml" else _FLAGS[key] + for key in ("remote_url", "commit") + ] + requirement = f"{names[0]} and {names[1]}" + if "toml" in (sources.get("remote_url"), sources.get("commit")): + requirement += f" (the bare names are {TABLE} keys in {path})" + return requirement + + +def _extra_options( + arguments: argparse.Namespace, + section: "dict[str, object]", + config_path: "Path | None", +) -> "list[str]": + """Properties exported as fields: the section's ``extra_options`` plus the flag's. + + The flag adds to the file's list rather than replacing it: a repeatable + flag reads as additive, and ``--no-config`` is the way to leave the file + out. A flag name the section's list does not contain is exported all the + same -- the flag may stand in for a build configured elsewhere -- but + reported: the build registers exactly the section's list, so an import of + the produced file drops every other field as an unknown key. + """ + configured = _texts(section.get("extra_options", [])) + if arguments.extra_option is None: + return configured + added = [str(name) for name in arguments.extra_option] + names = list(dict.fromkeys([*configured, *added], True)) + unlisted = [name for name in names if name not in configured] + if unlisted and config_path is not None: + _warn( + f"--extra-option {', '.join(unlisted)}: not in the extra_options of " + f"[{SECTION}] in {config_path}. The build registers only the fields " + f"listed there, so a needimport of the produced file drops these; " + f"list them in the file." + ) + return names + + +def _build_needs(arguments: argparse.Namespace) -> int: + section, config_path, error = _load_section(arguments) + if error: + print(error, file=sys.stderr) + return 2 + + settings, sources = _resolve_settings( + arguments, dict(needs_settings(section) or {}) + ) + + # The loader already rejects a file whose build.needs.need_type disagrees + # with case's type. A --need-type flag (or the built-in default) is not in + # the file, so the merged value has to be checked here as well, or the + # converter writes needs of a type the build does not register. As in the + # loader, a side that is not set is compared at its default: a file that + # leaves case alone configures the build with the default type. Without a + # file the rule has nothing to hold against, and the output depends on + # the arguments alone. + if config_path is not None: + case_type = case_need_type(section) + if settings["need_type"] != (case_type or DEFAULT_NEED_TYPE): + build_side = ( + f"[{SECTION}] case's type is {case_type!r}" + if case_type is not None + else f"[{SECTION}] does not set case, so the build's test-case " + f"type is the default {DEFAULT_NEED_TYPE!r}," + ) + print( + f"error: {_spell('need_type', sources)} is " + f"{settings['need_type']!r} but {build_side} in {config_path}. " + f"Both name the need type of a test case -- need_type for this " + f"converter, case for the Sphinx build -- so they must agree.", + file=sys.stderr, + ) + return 2 + + try: + link_properties = _parse_link_properties(settings["link_properties"]) + except ValueError as error: + print(f"error: {error}", file=sys.stderr) + return 2 + + problem = check_url_pattern(str(settings["url_pattern"])) + if problem is not None: + # Checked before any report is read: str.format would otherwise fail + # on the first case that carries a file, as a traceback. + print( + f"error: {_spell('url_pattern', sources)} {settings['url_pattern']!r}: " + f"{problem}", + file=sys.stderr, + ) + return 2 + + if bool(settings["remote_url"]) != bool(settings["commit"]): + print( + f"error: {_pair_requirement(sources, config_path)} must be given " + f"together; without both, no source URL can be synthesized.", + file=sys.stderr, + ) + return 2 + + reports: "list[Report]" = [] + for name in arguments.files: + path = Path(name) + if not path.is_file(): + print(f"error: no such file: {path}", file=sys.stderr) + return 1 + try: + # The parser is not typed yet (#114), so both calls are + # untyped to mypy; nothing to fix from this side. + parsed = JUnitParser(str(path)).parse() # type: ignore[no-untyped-call] + except Exception as error: # noqa: BLE001 - report, never traceback + print(f"error: {path}: {error}", file=sys.stderr) + return 1 + _warn_about_empty_report(path, parsed) + _warn_about_absent_source_lines(path, parsed) + # The path as given, like the build records the path given to its + # directives; it is a label for the report, not something resolved. + reports.append((str(path), parsed)) + + try: + payload = build_needs_file( + reports, + project=_text(settings["project"]), + version=_text(settings["version"]), + need_type=_text(settings["need_type"]), + tags=_texts(settings["tags"]), + link_properties=link_properties, + base_url=normalise_remote_url(_text(settings["remote_url"])), + commit=_text(settings["commit"]), + url_pattern=_text(settings["url_pattern"]), + # The renameable field names and the accepted extra fields come + # from the same section the build reads, so an imported need has + # the shape of a local one. + fields=field_names(section), + extra_options=_extra_options(arguments, section, config_path), + warn=_warn, + ) + except ValueError as error: # duplicate test cases across the inputs + print(f"error: {error}", file=sys.stderr) + return 2 + + output = Path(arguments.output) + output.parent.mkdir(parents=True, exist_ok=True) + # Sorted keys and a fixed indent keep the output byte-stable across runs. + output.write_text( + json.dumps(payload, indent=2, sort_keys=True) + "\n", encoding="utf-8" + ) + return 0 + + +def main(argv: "list[str] | None" = None) -> int: + """Entry point. Returns a process exit code instead of raising.""" + arguments = _build_parser().parse_args(argv) + if arguments.command == "build" and arguments.artifact == "needs": + return _build_needs(arguments) + return 2 # pragma: no cover - argparse rejects unknown commands + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py index 9bdfa5ffd..c88cb779b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py @@ -6,6 +6,7 @@ from sphinxcontrib.test_reports.config import DEFAULT_OPTIONS from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOptionError +from sphinxcontrib.test_reports.identity import split_case_name class TestCase(nodes.General, nodes.Element): @@ -154,18 +155,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): # If time is already a string or None, keep it as is style = "tr_" + case["result"] - import re - - groups = re.match(r"^(?P[^\[]+)($|\[(?P.*)?\])", case["name"]) - try: - case_name = groups["name"] - case_parameter = groups["param"] - except TypeError: - case_name = case_full_name - case_parameter = "" - - if case_parameter is None: - case_parameter = "" + case_name, case_parameter = split_case_name(case["name"]) # Flatten JUnit into top-level case keys so that # the extra-data loop below picks them up as sphinx-needs fields. diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py new file mode 100644 index 000000000..b1fa447dc --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py @@ -0,0 +1,201 @@ +"""The need fields this package declares, and their JSON schema. + +One table for the two writers. The extension registers these fields with +sphinx-needs at ``config-inited`` so the directives may set them; the +converter writes the same declarations into the ``needs_schema`` of the +``needs.json`` it produces, so the file says what the type of each of its +fields is. A consumer of that file -- a schema check, a metamodel validator, +S-CORE's tooling -- learns the types from the file instead of having to load +this extension into a Sphinx build. + +**Nothing in this module may import Sphinx.** The converter runs as a build +action, without the documentation toolchain installed. + +The declarations are the *format*, not a description of one report: a field is +declared whether or not the cases at hand happen to populate it, the way +sphinx-needs declares every registered field. +""" + +from typing import Iterable, Mapping + +#: ``name -> (JSON type, description)`` for every field declared under a fixed +#: name. The build registers all of them, on test-file, test-suite and +#: test-case needs alike; the converter writes test-case needs and therefore +#: declares :data:`CASE_FIELDS`. +FIELDS: dict[str, tuple[str, str]] = { + "suite": ("string", "Test suite name"), + "case": ("string", "Test case name"), + # pytest spells a parameterised case ``name[param]``; the two halves are + # split apart so a filter can address either. + "case_name": ("string", "Test case name without its parameter"), + "case_parameter": ( + "string", + "Parameter of a parameterised test case ('a-b' for pytest's test_x[a-b])", + ), + "classname": ("string", "Test class name"), + # A string, not a number, because that is what the directives have always + # written and what a filter, a needtable and a schema in the field consume. + # Turning it into a number is issue #156: it has to change here, in both + # writers and in every consuming filter at once. + "time": ("string", "Test execution time, in seconds"), + "result": ("string", "Test result status"), + "result_text": ("string", "One-line rendering of the first failure message"), + "remote_url": ("string", "URL of the test's source in the remote repository"), + "suites": ("integer", "Number of test suites"), + "cases": ("integer", "Number of test cases"), + "passed": ("integer", "Number of passed tests"), + "skipped": ("integer", "Number of skipped tests"), + "failed": ("integer", "Number of failed tests"), + "errors": ("integer", "Number of test errors"), +} + +#: ``role -> (JSON type, description)`` for the fields whose *name* the +#: configuration chooses; the roles are the keys of +#: :data:`~sphinxcontrib.test_reports.projectconfig.DEFAULT_FIELD_NAMES`. +#: Keying them by role rather than by name is what lets the description follow +#: a renamed field. +RENAMEABLE_FIELDS: dict[str, tuple[str, str]] = { + "file_option": ("string", "Test file name"), + "source_file_option": ("string", "Path of the test's source file"), + "source_line_option": ("string", "Line of the test in its source file"), +} + +#: The fixed-name fields of a test-case need, in the order they are declared. +#: The counts belong to test-file and test-suite needs, which the converter +#: does not write -- declaring them would promise fields the file never has. +CASE_FIELDS: tuple[str, ...] = ( + "suite", + "case", + "case_name", + "case_parameter", + "classname", + "time", + "result", + "result_text", + "remote_url", +) + +#: Declaration of the core need fields the converter writes, as sphinx-needs +#: declares them itself (``NeedsCoreFields``). Copied rather than imported: +#: this module may not import Sphinx. The wording is informational -- what has +#: to agree between the two writers is the type, and +#: ``TestImportIntoABuild.test_the_declared_types_match_the_extension_s`` +#: checks that it does. +CORE_FIELDS: dict[str, dict[str, object]] = { + "id": {"type": "string", "description": "ID of the data."}, + "type": {"type": "string", "description": "Type of the need.", "default": ""}, + "title": {"type": "string", "description": "Title of the need."}, + "content": { + "type": "string", + "description": "The main content of the need.", + "default": "", + }, + "tags": { + "type": "array", + "items": {"type": "string"}, + "description": "List of tags.", + "default": [], + }, + "external_url": { + "type": ["string", "null"], + "description": "URL of the need, if it is an external need.", + "default": None, + }, +} + +#: Names a renameable field may not be given: the fixed-name fields of this +#: package and the core fields every need has. Both writers set those on the +#: same need, so a rename onto one of them makes the directives pass one +#: keyword twice -- ``add_need`` fails with "multiple values for keyword +#: argument" -- and the converter write one value over the other. ``status``, +#: ``links``, ``collapse`` and ``style`` are core fields the directives set +#: without the converter declaring them. +RESERVED_NAMES: frozenset[str] = ( + frozenset(FIELDS) + | frozenset(CORE_FIELDS) + | frozenset({"status", "links", "collapse", "style"}) +) + +#: JSON schema draft the block declares itself against, as sphinx-needs does. +SCHEMA_DIALECT = "http://json-schema.org/draft-07/schema#" + + +def declaration(name: str, role: str | None = None) -> tuple[str, str]: + """The JSON type and description of one field, as ``(type, description)``. + + A renameable field is looked up by its *role*, so that its description + survives the rename; every other field by its name. A name the table does + not know -- an entry of the configured extra options -- is a string field + described by its own name. + + This is the lookup the extension registers its fields with and the one + :func:`case_needs_schema` declares them with, so the two cannot disagree. + """ + if role is not None: + return RENAMEABLE_FIELDS[role] + return FIELDS.get(name, ("string", name)) + + +def extra_field(type_: str, description: str) -> dict[str, object]: + """Declaration of one registered field, as sphinx-needs writes it. + + Registered fields are nullable and default to null, so a need that does + not populate one carries no value for it rather than an empty one -- which + is what keeps a strict sphinx-needs schema strict (see + ``tests/test_schema_validation.py``). + """ + return { + "type": [type_, "null"], + "description": description, + "field_type": "extra", + "default": None, + } + + +def link_field(description: str = "Link field") -> dict[str, object]: + """Declaration of one link field: a list of need IDs, empty by default.""" + return { + "type": "array", + "items": {"type": "string"}, + "description": description, + "field_type": "links", + "default": [], + } + + +def case_needs_schema( + names: Mapping[str, str], + *, + extra_options: Iterable[str] = (), + link_fields: Iterable[str] = (), +) -> dict[str, object]: + """The ``needs_schema`` of a ``needs.json`` holding test-case needs. + + *names* maps the roles of :data:`RENAMEABLE_FIELDS` to the field names the + configuration selected. *extra_options* are the XML properties exported + under their own names, which the build registers as string options. + *link_fields* are the fields mapped XML properties become; a mapping onto + the name of a built-in field replaces its declaration, because the value + written replaces the built-in value too. + """ + properties: dict[str, object] = { + name: dict(declaration) | {"field_type": "core"} + for name, declaration in CORE_FIELDS.items() + } + for role in RENAMEABLE_FIELDS: + properties[names[role]] = extra_field(*declaration(names[role], role)) + for name in CASE_FIELDS: + properties[name] = extra_field(*declaration(name)) + for name in extra_options: + # Declared a string because that is what the converter writes for an + # exported property, whatever the name. A property named like a + # built-in field is not exported at all (the built-in value wins, see + # ``build_need``), so `setdefault` leaves the built-in declaration. + properties.setdefault(name, extra_field("string", str(name))) + for name in link_fields: + properties[name] = link_field() + return { + "$schema": SCHEMA_DIALECT, + "type": "object", + "properties": properties, + } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py index cac3f8f44..6fbf38523 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py @@ -35,6 +35,28 @@ def short_hash(value: str, length: int = 5) -> str: return letters_only[:length].lower() +#: ``name[param]`` as pytest spells a parameterised case, and nothing else: +#: anchored at both ends, so a name that merely contains a bracket -- an +#: unclosed one, or text after the closing one -- is kept whole rather than +#: cut at the bracket. The parameter is greedy, so brackets inside it survive. +_PARAMETERISED = re.compile(r"^(?P[^\[]+)(?:\[(?P.*)\])?$") + + +def split_case_name(name: str) -> tuple[str, str]: + """``("test_x", "a-b")`` for ``"test_x[a-b]"``, ``("test_x", "")`` for + ``"test_x"``: the name is always there, the parameter only when pytest + spelled one. + + One definition for the build's directives and the converter, so an + imported need and a locally created one for the same case agree on + ``case_name`` and ``case_parameter``. + """ + match = _PARAMETERISED.match(name) + if match is None: + return name, "" + return match.group("name"), match.group("param") or "" + + def case_display_name(classname: str, name: str) -> str: """Human-readable case name: ``Classname__Casename``. diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py new file mode 100644 index 000000000..53c0dfcc6 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py @@ -0,0 +1,366 @@ +"""Turn parsed test reports into a needs.json payload. + +Sphinx-free: the conversion runs as a build action, and the documentation build +only imports the result. + +Three rules shape the output: + +* **Every field is always present.** Absent XML attributes become empty values + rather than missing keys, and an exported property a case does not carry is + ``null`` -- the value the build leaves in a registered field a directive did + not set -- so a schema can simply require a field and a consumer never has + to distinguish "unset" from "absent". +* **Every field is declared in the file**, in the ``needs_schema`` sphinx-needs + also writes into the files it produces itself, so the type of a field is + readable from the artifact instead of only from a Sphinx build with this + extension loaded. The declarations come from + :mod:`sphinxcontrib.test_reports.fields`, the same table the extension + registers its fields from. +* **Nothing depends on the wall clock or on dict ordering**, so the file is a + cacheable build artifact and a diffable piece of evidence. +""" + +import re +import textwrap +from typing import Callable, Iterable, Iterator, Mapping, Sequence, Union + +from sphinxcontrib.test_reports.fields import case_needs_schema +from sphinxcontrib.test_reports.identity import ( + UNKNOWN, + deterministic_case_id, + split_case_name, +) +from sphinxcontrib.test_reports.projectconfig import DEFAULT_FIELD_NAMES +from sphinxcontrib.test_reports.remote import DEFAULT_URL_PATTERN, source_url + +#: A need field value as it appears in needs.json. ``None`` is the value of an +#: exported property the case does not carry, as the build leaves it. +FieldValue = Union[str, list[str], None] +NeedItem = dict[str, FieldValue] + +#: A parsed report: the path it was read from, and its top-level suites. The +#: path is what the build's ``test-file``/``test-case`` directives record as +#: the report-path field, so it travels with the suites. +Report = tuple[str, Sequence[Mapping[str, object]]] + +#: Version key used when the caller does not supply one. needs.json requires a +#: ``current_version``, but a converted report has no baseline history. +DEFAULT_VERSION = "1.0" + +_ANSI = re.compile(r"\x1b\[[0-9;]*[A-Za-z]") +_WHITESPACE = re.compile(r"\s+") + + +def flatten_message(message: str) -> str: + """One-line, ANSI-free rendering of a failure message. + + Used for ``result_text``, which exists to be readable in tables and + reports; the untruncated detail stays in the need content. + """ + return _WHITESPACE.sub(" ", _ANSI.sub("", message)).strip() + + +def _contains(haystack: str, needle: str) -> bool: + """Whitespace-insensitive containment, for de-duplicating failure text.""" + return _WHITESPACE.sub(" ", needle).strip() in _WHITESPACE.sub(" ", haystack) + + +def _literal_block(title: str, body: str) -> str: + """An RST literal block, indented so the need content stays valid. + + The body is dedented as a whole, not line by line: XML pretty-printing adds + a common indentation that has to go, but a traceback or an assertion diff + is only readable if its *relative* indentation survives. + """ + lines = textwrap.dedent(body).strip("\n").split("\n") + indented = "\n".join( + f" {line.rstrip()}" if line.strip() else "" for line in lines + ) + return f"\n**{title}**::\n\n{indented}\n" + + +def build_content(case: Mapping[str, object]) -> str: + """Need content carrying the complete failure evidence. + + googletest reports one ```` per failed assertion, each with its own + message and body, plus captured output -- keeping only the first of them + loses exactly the detail a reader needs. + """ + sections: list[str] = [] + + parts = _result_parts(case) + for index, part in enumerate(parts, start=1): + kind = str(part.get("kind", "result")).capitalize() + label = f"{kind} {index}" if len(parts) > 1 else kind + message = str(part.get("message", "")) + text = str(part.get("text", "")) + # googletest repeats the body in the message attribute; a second copy + # is noise, so the message is only shown when it adds something. + if message and not _contains(text, message): + sections.append(_literal_block(f"{label} message", message)) + if text: + sections.append(_literal_block(label, text)) + + for key, title in (("system-out", "System-out"), ("system-err", "System-err")): + captured = str(case.get(key, "")) + if captured: + sections.append(_literal_block(title, captured)) + + return "".join(sections) + + +def _result_parts(case: Mapping[str, object]) -> list[Mapping[str, object]]: + """The case's result parts, as a typed view over the parser's output.""" + raw = case.get("parts") + if not isinstance(raw, list): + return [] + return [part for part in raw if isinstance(part, Mapping)] + + +def _first_message(case: Mapping[str, object]) -> str: + for part in _result_parts(case): + message = str(part.get("message", "")) + if message and message != UNKNOWN: + return flatten_message(message) + return "" + + +def optional(value: object, absent: object) -> str: + """String form of an attribute, empty when the parser reported it absent.""" + return "" if value is None or value == absent else str(value) + + +def _mappings(value: object) -> list[Mapping[str, object]]: + """Typed view over a list of dicts coming from the parser.""" + if not isinstance(value, list): + return [] + return [item for item in value if isinstance(item, Mapping)] + + +def iter_cases( + suites: Iterable[Mapping[str, object]], +) -> Iterator[tuple[str, Mapping[str, object]]]: + """Yield ``(suite_name, case)`` pairs, descending into nested suites. + + The parser files the cases of a suite that contains nested ```` + elements under ``testsuite_nested`` only, so anything that wants to see + every case of a report has to walk this way -- the export does, and so must + every diagnostic about the report's cases, or it goes quiet on exactly the + nested reports Ant and Maven produce. + """ + for suite in suites: + name = str(suite.get("name", "")) + for case in _mappings(suite.get("testcases")): + yield name, case + yield from iter_cases(_mappings(suite.get("testsuite_nested"))) + + +def build_need( + report_path: str, + suite_name: str, + case: Mapping[str, object], + *, + need_type: str = "testcase", + tags: Sequence[str] = (), + link_properties: Mapping[str, str] | None = None, + base_url: str = "", + commit: str = "", + url_pattern: str = DEFAULT_URL_PATTERN, + fields: Mapping[str, str] | None = None, + extra_options: Sequence[str] = (), + collisions: set[str] | None = None, +) -> NeedItem: + """One test case as a need item, shaped like the build's ``test-case``. + + The field names are those of the directives -- ``suite``/``case``/ + ``case_name``/``case_parameter``/``classname``/``result``/``time`` plus the + renameable report-path and source-location fields in *fields* (see + :data:`DEFAULT_FIELD_NAMES`) -- and so are the values: the title is the + case name and ``result`` keeps the parser's spelling (``failure``, which is + also a documented field value and the ``tr_failure`` CSS class), so that a + need imported from the produced ``needs.json`` and one created locally from + the same report are indistinguishable to a schema, a filter or a + ``needtable``. + + XML properties become fields under their own names only when listed in + *extra_options* -- the same list that makes the build register them as need + options and accept them -- so an import never has to drop them as unknown + keys. Every listed name is written, ``None`` when the case has no such + property, so the field is there to be required. A property mapped by + *link_properties* becomes a link field regardless. Everything else is left + out; :func:`build_needs_file` reports what was left out, once. + + A listed property whose name is already taken by a built-in or link field + cannot become a field: the built-in value wins -- silently overwriting + ``result`` or the report path would be worse -- but silently dropping the + property is not acceptable either, so its name is added to *collisions* + when the case carries it, for the caller to report once. + """ + link_properties = link_properties or {} + names = {**DEFAULT_FIELD_NAMES, **(fields or {})} + exported = list(dict.fromkeys(extra_options, True)) # deduplicated, in order + + classname = optional(case.get("classname"), UNKNOWN) + name = optional(case.get("name"), UNKNOWN) + case_name, case_parameter = split_case_name(name) + source_file = optional(case.get("file"), UNKNOWN) + source_line = optional(case.get("line"), -1) + time = optional(case.get("time"), -1) + + url = source_url(base_url, commit, source_file, source_line, url_pattern) + content = build_content(case) + + need: NeedItem = { + "id": deterministic_case_id( + classname=classname, name=name, file=source_file, prefix=need_type + ), + "type": need_type, + "title": name, + # ``content``, as sphinx-needs >= 4 writes and reads it. Older versions + # read the need text from ``description`` only, and current ones flag a + # file carrying both -- so importing a converted file needs >= 4. + "content": content, + "tags": list(tags), + "suite": suite_name, + "case": name, + "case_name": case_name, + "case_parameter": case_parameter, + "classname": classname, + names["file_option"]: report_path, + names["source_file_option"]: source_file, + names["source_line_option"]: source_line, + "time": time, + "result": str(case.get("result", "")), + "result_text": _first_message(case), + # The same URL twice on purpose: external_url drives the external-needs + # rendering, while a plain field stays usable for needs imported as + # local needs (via a needs_string_links entry). + "external_url": url, + "remote_url": url, + } + + properties = case.get("properties") or {} + if not isinstance(properties, Mapping): + properties = {} + + # Link fields are emitted even when empty, so a schema can require them. + for property_name, link_field in link_properties.items(): + raw = str(properties.get(property_name, "")) + need[link_field] = [item.strip() for item in raw.split(",") if item.strip()] + + # Exported properties are emitted for every case too; absent, the field is + # null, as the build leaves a registered field a directive did not set. + for property_name in exported: + if property_name in link_properties: + continue # the link field carries it + if property_name in need: + if property_name in properties and collisions is not None: + collisions.add(property_name) + continue + value = properties.get(property_name) + need[property_name] = None if value is None else str(value) + + return need + + +def build_needs_file( + reports: Iterable[Report], + *, + project: str = "", + version: str = DEFAULT_VERSION, + need_type: str = "testcase", + tags: Sequence[str] = (), + link_properties: Mapping[str, str] | None = None, + base_url: str = "", + commit: str = "", + url_pattern: str = DEFAULT_URL_PATTERN, + fields: Mapping[str, str] | None = None, + extra_options: Sequence[str] = (), + warn: Callable[[str], None] | None = None, +) -> dict[str, object]: + """The complete needs.json payload for a set of parsed reports. + + No ``created`` key is written: a wall clock inside a cacheable build output + would change the file on every run. + + Properties that are neither in *extra_options* nor mapped by + *link_properties* are not exported (see :func:`build_need`); their names are + reported through *warn* once, with the key to add them to, so the omission + is a decision the user can see rather than a silent one. So are, once, the + names of listed properties that a built-in or link field already owns. + + :raises ValueError: If a test case occurs more than once across *reports*. + Its ID is derived from where the test is, so a repeat means the same + case was reported twice -- typically the same report given twice. A + needs.json cannot hold two needs with one ID, and keeping either one + silently would lose evidence, so the caller has to sort out its inputs. + """ + needs: dict[str, NeedItem] = {} + duplicates: set[str] = set() + left_out: set[str] = set() + collisions: set[str] = set() + known = set(extra_options) | set(link_properties or {}) + for report_path, suites in reports: + for suite_name, case in iter_cases(suites): + properties = case.get("properties") + if isinstance(properties, Mapping): + left_out.update(str(name) for name in properties if name not in known) + need = build_need( + report_path, + suite_name, + case, + need_type=need_type, + tags=tags, + link_properties=link_properties, + base_url=base_url, + commit=commit, + url_pattern=url_pattern, + fields=fields, + extra_options=extra_options, + collisions=collisions, + ) + need_id = str(need["id"]) + if need_id in needs: + duplicates.add(need_id) + needs[need_id] = need + if duplicates: + listed = ", ".join(sorted(duplicates)) + raise ValueError( + f"{len(duplicates)} test case(s) occur more than once across the given " + f"reports and would collapse into one need each: {listed}. Every case " + f"must be unique; if the same report was given twice, give it once." + ) + if left_out and warn is not None: + warn( + f"properties not exported: {', '.join(sorted(left_out))}. Only " + f"properties listed in extra_options become need fields (the build " + f"accepts exactly those); list them there, or map them to a link " + f"field with link_properties." + ) + if collisions and warn is not None: + warn( + f"properties not exported, their names are taken by built-in or " + f"link fields: {', '.join(sorted(collisions))}. The built-in value " + f"wins; rename the property, or map it to a link field with " + f"link_properties." + ) + + return { + "project": project, + "current_version": version, + "versions": { + version: { + "needs": needs, + "needs_amount": len(needs), + # The type of every field the file uses, as sphinx-needs + # declares the fields of the files it writes itself. Without + # it the types are knowable only by loading the extension into + # a Sphinx build, which a consumer of the artifact does not do. + "needs_schema": case_needs_schema( + {**DEFAULT_FIELD_NAMES, **(fields or {})}, + extra_options=extra_options, + link_fields=(link_properties or {}).values(), + ), + } + }, + } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py index e1fadc42d..8f085f52d 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py @@ -6,16 +6,23 @@ instead of being restated in every tool that acts on it. **Nothing in this module may import Sphinx.** The section describes the project, -not this extension, and a report-to-``needs.json`` converter has to be able to -read it as a build action without the documentation toolchain installed. +not this extension, and the ``test-reports build needs`` command reads it as a +build action without the documentation toolchain installed. -The keys are the Sphinx-facing configuration (:data:`BRIDGE_KEYS`), spelled -like the ``tr_*`` config values without the prefix. One sub-table belongs to -another consumer: ``[test_reports.build]`` holds what the ``test-reports -build`` command line produces -- ``[test_reports.build.needs]`` for its -``needs.json`` -- which this reader passes through without interpreting it -(:data:`FOREIGN_TABLES`). Any other sub-table is an unknown key like any -other. +Keys fall into two groups: + +* the Sphinx-facing configuration (:data:`BRIDGE_KEYS`), spelled like the + ``tr_*`` config values without the prefix, which the extension applies at + ``config-inited``. The converter reads the three field-name keys among them + (:data:`FIELD_NAME_KEYS`) and ``extra_options``, so the needs it writes have + the shape of the needs the build creates and carry exactly the fields the + build accepts; +* the ``[test_reports.build.needs]`` sub-table (:data:`CONVERSION_KEYS`): how test + reports are turned into a ``needs.json``. The Sphinx bridge never applies it + to a ``tr_*`` value, but the build validates it like every other key, so a + typo is caught by whichever consumer reads the file first. + +Any other sub-table is an unknown key like any other. **Error policy.** A known key carrying the wrong type is fatal: that is the typo class this validation exists to catch, and letting it through would @@ -31,6 +38,8 @@ from pathlib import Path from typing import Callable, Mapping, NoReturn, Sequence +from sphinxcontrib.test_reports.fields import RESERVED_NAMES + #: Default file the configuration is read from. Looked up by walking up from #: the ``confdir`` (Sphinx) or the working directory (a converter); see #: :func:`find_project_config`. ``ubproject.toml`` is the convention shared @@ -102,12 +111,63 @@ #: list form. ``None`` in :data:`_KEY_TYPES` marks exactly these. _DUAL_SPELLING_KEYS = ("file", "suite", "case") -#: Sub-tables of the section that belong to another consumer. They are -#: recognised so they do not draw an unknown-key warning, and deliberately not -#: interpreted: ``build`` holds the settings of the ``test-reports build`` -#: command line, one sub-table per artifact it produces (``build.needs`` for a -#: ``needs.json``), and this extension produces none of them. -FOREIGN_TABLES = ("build",) +#: The sub-table holding what the ``test-reports build`` command line +#: produces, one table per artifact and named after it, as ubCode spells +#: ``ubc build needs``. Not a bridge key: the build never maps any of it onto +#: a ``tr_*`` value. It is validated like everything else, so that the build +#: rejects the same typos the command line would -- one file, one verdict. +BUILD_TABLE = "build" + +#: The artifact ``test-reports build needs`` produces, and its table under +#: :data:`BUILD_TABLE`. +NEEDS_TABLE = "needs" + +#: How the table is spelled in diagnostics. +NEEDS_TABLE_PATH = f"{SECTION}.{BUILD_TABLE}.{NEEDS_TABLE}" + +#: Keys of ``[test_reports.build.needs]``, in the order the command documents +#: them. The CLI's flag merge iterates this, so a key cannot be added here +#: without the CLI being taught a default for it. +CONVERSION_KEYS = ( + "project", + "version", + "need_type", + "tags", + "link_properties", + "remote_url", + "commit", + "url_pattern", +) + +#: The three renameable need fields and their default names -- the field +#: carrying the XML *report* path, and the two carrying the test's *source* +#: location. The build registers these names (``tr_file_option``, +#: ``tr_source_file_option``, ``tr_source_line_option``) and the converter +#: writes them, so an imported need and a locally created one have the same +#: shape. Both sides take the defaults from here. +FIELD_NAME_KEYS = ("file_option", "source_file_option", "source_line_option") +DEFAULT_FIELD_NAMES: dict[str, str] = { + "file_option": "file", + "source_file_option": "case_file", + "source_line_option": "case_line", +} + +#: Need type of a test case when neither consumer is told otherwise: the +#: converter's ``need_type`` default and the ``type`` of the build's default +#: ``case`` entry. Both defaults live here so they cannot drift apart. +DEFAULT_NEED_TYPE = "testcase" + +#: Expected Python type per ``[test_reports.build.needs]`` key. +_NEEDS_KEY_TYPES: dict[str, type[object]] = { + "project": str, + "version": str, + "need_type": str, + "tags": list, + "link_properties": dict, + "remote_url": str, + "commit": str, + "url_pattern": str, +} #: Expected Python type per key. ``bool`` must be checked *before* ``int`` #: (bool is an int subclass). ``None`` marks the dual-spelling keys, which are @@ -141,13 +201,17 @@ _DICT_VALUE_TYPES: dict[str, type[object] | None] = { "property_link_types": str, "json_mapping": None, - "build": None, + "link_properties": str, } #: Field order of the positional ``tr_file``-style lists, and the table keys #: that spell the same thing readably. _TYPE_ENTRY_FIELDS = ("directive", "type", "name", "prefix", "color", "style") +#: Index of ``type`` within :data:`_TYPE_ENTRY_FIELDS`, i.e. of the need type +#: inside a normalised entry. +_TYPE_FIELD_INDEX = _TYPE_ENTRY_FIELDS.index("type") + #: ``tomllib.TOMLDecodeError`` bound through an annotation: the attribute #: expression itself is typed loosely enough to trip the strict ``Any`` bans, #: and an ``except`` clause has no annotation of its own to absorb it. @@ -322,8 +386,8 @@ def _normalise_section( _wrong_type(key, value, expected, path) if expected is not None and not isinstance(value, expected): _wrong_type(key, value, expected, path) - if key in FOREIGN_TABLES: - normalised[key] = value + if key == BUILD_TABLE: + normalised[key] = _normalise_build_table(value, path, warn) elif key in _DUAL_SPELLING_KEYS: normalised[key] = _normalise_type_entry(key, value, path) else: @@ -333,9 +397,183 @@ def _normalise_section( _check_table_values(key, value, path) normalised[key] = value + _check_need_type_agreement(normalised, path) + _check_field_name_collisions(normalised, path) return _anchor_paths(normalised, path.parent) +def field_names(section: Mapping[str, object]) -> dict[str, str]: + """The report-path and source-location field names the section selects. + + Keys are :data:`FIELD_NAME_KEYS`; a key the section does not set falls + back to :data:`DEFAULT_FIELD_NAMES`, which is also the build's default. + """ + names = dict(DEFAULT_FIELD_NAMES) + for key in FIELD_NAME_KEYS: + value = section.get(key) + if isinstance(value, str) and value: + names[key] = value + return names + + +def _check_field_name_collisions(section: Mapping[str, object], path: Path) -> None: + """The report-path and source-location fields must have names of their own. + + Two options naming one field, or one of them naming a fixed field such as + ``case`` or ``result``, would make ``add_need`` receive the same keyword + twice (a bare ``TypeError`` inside a directive) and the converter write one + value over the other. The build checks its ``conf.py`` values the same way; + this covers the declarative spelling for both consumers. + """ + names = field_names(section) + seen: dict[str, str] = {} + for key, name in names.items(): + if name in RESERVED_NAMES: + msg = ( + f"{path}: [{SECTION}] {key} = {name!r}: {name!r} is a field every " + f"test-case need has already; the report path and the source " + f"location must live in fields of their own" + ) + raise TomlConfigError(msg) + if name in seen: + msg = ( + f"{path}: [{SECTION}] {seen[name]} and {key} both name the need " + f"field {name!r}; the report path and the source location must " + f"live in different fields" + ) + raise TomlConfigError(msg) + seen[name] = key + + +def _normalise_build_table( + value: object, path: Path, warn: Callable[[str], None] | None +) -> dict[str, object]: + """Validate ``[test_reports.build]``: one known sub-table per artifact. + + Only ``needs`` is modelled today. An unknown sub-table is reported and + dropped like an unknown key anywhere else -- the command line may grow + artifacts this version does not know, and a file naming one must not take + a build down. + """ + if not isinstance(value, Mapping): + return {} + table: dict[str, object] = {str(name): item for name, item in value.items()} + unknown = sorted(set(table) - {NEEDS_TABLE}) + if unknown and warn is not None: + warn( + f"{path}: ignoring unknown key(s) in [{SECTION}.{BUILD_TABLE}]: " + f"{', '.join(unknown)}. Supported keys: {NEEDS_TABLE}" + ) + normalised: dict[str, object] = {} + if NEEDS_TABLE in table: + artifact = table[NEEDS_TABLE] + if not isinstance(artifact, dict): + _wrong_type(f"{BUILD_TABLE}.{NEEDS_TABLE}", artifact, dict, path) + normalised[NEEDS_TABLE] = _normalise_needs_table(artifact, path, warn) + return normalised + + +def _normalise_needs_table( + value: object, path: Path, warn: Callable[[str], None] | None +) -> dict[str, object]: + """Validate ``[test_reports.build.needs]`` under the section's own policy. + + Same rules as the section: a known key with the wrong type is fatal, an + unknown key is reported and dropped, table values are checked. The caller + has already established that *value* is a table. + """ + if not isinstance(value, Mapping): + return {} + table: dict[str, object] = {str(name): item for name, item in value.items()} + unknown = sorted(set(table) - set(_NEEDS_KEY_TYPES)) + if unknown and warn is not None: + warn( + f"{path}: ignoring unknown key(s) in [{NEEDS_TABLE_PATH}]: " + f"{', '.join(unknown)}. Supported keys: " + f"{', '.join(CONVERSION_KEYS)}" + ) + normalised: dict[str, object] = {} + for key, item in table.items(): + if key in unknown: + continue + label = f"{BUILD_TABLE}.{NEEDS_TABLE}.{key}" + expected = _NEEDS_KEY_TYPES[key] + if not isinstance(item, expected): + _wrong_type(label, item, expected, path) + if expected is list: + _check_list_items(label, item, path) + elif expected is dict: + _check_table_values(key, item, path, label) + if key == "link_properties": + _check_link_properties(item, path) + normalised[key] = item + return normalised + + +def _check_link_properties(value: object, path: Path) -> None: + """Every ``PROPERTY = "LINK_FIELD"`` pair must have two non-empty names. + + Checked here rather than only in the converter, so the build and the + converter give one verdict on the file: a silently dropped pair would send + a link field into ``needs.json`` as a plain field instead. + """ + if not isinstance(value, Mapping): + return + for name, field in value.items(): + if not str(name).strip() or not (isinstance(field, str) and field.strip()): + msg = ( + f"{path}: [{NEEDS_TABLE_PATH}] link_properties expects " + f'PROPERTY = "LINK_FIELD" with both names non-empty, got ' + f"{name!r} = {field!r}" + ) + raise TomlConfigError(msg) + + +def needs_settings(section: Mapping[str, object]) -> Mapping[str, object] | None: + """The ``[test_reports.build.needs]`` table, or ``None`` when unset. + + The one place that knows how the table is nested, so a consumer never + spells the path itself. + """ + build = section.get(BUILD_TABLE) + if not isinstance(build, Mapping): + return None + needs = build.get(NEEDS_TABLE) + return needs if isinstance(needs, Mapping) else None + + +def _check_need_type_agreement(section: Mapping[str, object], path: Path) -> None: + """``build.needs.need_type`` and ``case``'s type name the same need type. + + They are separate keys with separate consumers -- the converter derives the + need type and the deterministic-ID prefix from ``need_type``, the Sphinx + build from ``case``'s ``type`` -- and both default to + :data:`DEFAULT_NEED_TYPE`. Letting them disagree produces exactly the + divergence this file exists to prevent: a ``needs.json`` full of needs the + build neither registers nor cross-links. + + A side that is not set is compared at its default, not skipped: a + customised ``case`` next to a ``build.needs`` table without ``need_type`` + is a disagreement too. The check only applies when that table exists -- a + project that only builds documentation may name its case type freely. + """ + needs = needs_settings(section) + if needs is None: + return + need_type: object = needs.get("need_type", DEFAULT_NEED_TYPE) + case_type = case_need_type(section) or DEFAULT_NEED_TYPE + if case_type != need_type: + msg = ( + f"{path}: [{NEEDS_TABLE_PATH}] need_type is {need_type!r} but " + f"[{SECTION}] case's type is {case_type!r} (each defaulting to " + f"{DEFAULT_NEED_TYPE!r} when not set). Both name the need type of a " + f"test case -- need_type for `build needs`, case for the Sphinx " + f"build -- so they must agree, or the produced needs.json and the " + f"build describe different need types." + ) + raise TomlConfigError(msg) + + def _check_list_items(key: str, value: object, path: Path) -> None: """Every element of an array-valued key must be a string.""" if not isinstance(value, Sequence): @@ -345,11 +583,14 @@ def _check_list_items(key: str, value: object, path: Path) -> None: _wrong_type(key, value, list, path) -def _check_table_values(key: str, value: object, path: Path) -> None: +def _check_table_values( + key: str, value: object, path: Path, label: str | None = None +) -> None: """Every value of a table-valued key must have the declared type. Skipped for keys whose nested shape is free-form (:data:`_DICT_VALUE_TYPES` - maps them to ``None``). + maps them to ``None``). *label* is how the key is spelled in messages when + it sits in a sub-table. """ expected = _DICT_VALUE_TYPES.get(key) if expected is None or not isinstance(value, Mapping): @@ -357,12 +598,26 @@ def _check_table_values(key: str, value: object, path: Path) -> None: for name, item in value.items(): if not isinstance(item, expected): msg = ( - f"{path}: [{SECTION}] {key}.{name} must be " + f"{path}: [{SECTION}] {label or key}.{name} must be " f"{_type_label(expected)}, got {type(item).__name__}: {item!r}" ) raise TomlConfigError(msg) +def case_need_type(section: Mapping[str, object]) -> str | None: + """The need type the build gives test cases, if the section sets ``case``. + + Shared by the loader's own agreement check and by the converter, which has + to re-check after merging command-line flags: a ``--need-type`` given on + the command line is not in the file and so escapes the loader. + """ + case = section.get("case") + if not isinstance(case, Sequence): + return None + value: object = case[_TYPE_FIELD_INDEX] + return value if isinstance(value, str) else None + + def _wrong_type( key: str, value: object, expected: type[object] | None, path: Path ) -> NoReturn: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py new file mode 100644 index 000000000..89d765484 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py @@ -0,0 +1,149 @@ +"""Web URLs for test sources. + +Sphinx-free, like every module the converter CLI depends on. + +Only the small amount of URL handling the converter actually needs lives here: +normalising a git remote into a browsable base, and formatting a line-anchored +source URL. sphinx-codelinks carries a fuller implementation (giturlparse-based, +covering more forges); when the two extensions are consolidated the machinery +should be shared rather than duplicated -- which is why this stays deliberately +minimal instead of growing a second forge matrix. +""" + +import re +import string +from urllib.parse import urlsplit, urlunsplit + +#: GitHub and GitHub-compatible forges. GitLab needs ``{base}/-/blob/...``. +DEFAULT_URL_PATTERN = "{base}/blob/{commit}/{file}#L{line}" + +#: The part after ``scheme://`` of an ``ssh://`` or ``git://`` remote: +#: ``[user@]host[:port]/org/repo[.git]``. The port belongs to the transport +#: endpoint, not to the web UI, so it must not survive into the browsable base +#: -- and must not be mistaken for the first path segment. +_SCHEME_REMOTE = re.compile( + r"^(?:[^@/]+@)?(?P[^:/]+)(?::\d+)?/(?P.+?)(?:\.git)?/?$" +) + +#: ``git@host:org/repo.git`` and bare ``host/org/repo``. +_SCP_STYLE = re.compile(r"^(?:[^@/]+@)?(?P[^:/]+)[:/](?P.+?)(?:\.git)?/?$") + +#: ``C:\repo`` or ``C:/repo`` -- a Windows path, which the scp-style pattern +#: would otherwise read as ``host:path`` with the drive letter for a host. +_WINDOWS_DRIVE = re.compile(r"^[A-Za-z]:[\\/]") + +#: Placeholders a URL pattern may use, with representative values for checking +#: a pattern before any need is built. +_PATTERN_FIELDS = {"base": "https://h/r", "commit": "c", "file": "f", "line": "1"} + + +def normalise_remote_url(remote_url: str) -> str: + """Turn a git remote into a browsable ``https`` base URL. + + An already-browsable URL is returned unchanged apart from a trailing + ``.git``/``/`` and any credentials; ``ssh://`` and ``git://`` remotes and + scp-style ``git@host:path`` become ``https://host/path``. Anything + unrecognised -- an unknown scheme, a local path, a shape none of the + patterns match -- is passed through, so an explicitly configured base is + never mangled. + + Credentials never survive. ``https://gitlab-ci-token:TOKEN@host/repo`` is + what GitLab's ``CI_REPOSITORY_URL`` looks like, the natural value to pass; + the base ends up in every need of a cached artifact and, once imported, in + published HTML. + """ + url = remote_url.strip() + if not url: + return "" + + scheme, separator, rest = url.partition("://") + if separator: + if scheme in ("http", "https"): + return _without_userinfo(url).rstrip("/").removesuffix(".git") + if scheme in ("ssh", "git"): + match = _SCHEME_REMOTE.match(rest) + if match is not None: + return f"https://{match.group('host')}/{match.group('path')}" + return url.rstrip("/") + + if _WINDOWS_DRIVE.match(url): + return url + match = _SCP_STYLE.match(url) + if match is None: + return url.rstrip("/") + return f"https://{match.group('host')}/{match.group('path')}" + + +def _without_userinfo(url: str) -> str: + """*url* without the ``user:password@`` part of its authority, if any.""" + parts = urlsplit(url) + if "@" not in parts.netloc: + return url + host = parts.netloc.rpartition("@")[2] + return urlunsplit((parts.scheme, host, parts.path, parts.query, parts.fragment)) + + +def check_url_pattern(pattern: str) -> str | None: + """Why *pattern* cannot be used as a source-URL template, or ``None``. + + ``str.format`` only fails when a URL is actually built -- that is, on the + first case that carries a file -- and it fails with a traceback. Checking + the template up front turns a typo in a flag or in ``ubproject.toml`` into + a configuration error at the start of the run. + + The placeholders are enumerated rather than tried: ``str.format`` accepts + ``{base.__class__}`` or ``{base[0]}`` -- an attribute or index lookup on + the substituted value -- which is not a URL template, and which fails as + an ``AttributeError`` no ``KeyError`` handler sees. + """ + allowed = ", ".join(f"{{{name}}}" for name in _PATTERN_FIELDS) + try: + fields = [ + field + for _literal, field, _spec, _conversion in string.Formatter().parse(pattern) + if field is not None + ] + except ValueError as error: + return f"malformed template ({error}); braces must be balanced and named" + for field in fields: + if not field or field.isdigit(): + return ( + f"malformed template (positional placeholder {{{field}}}); " + f"braces must be balanced and named" + ) + if field not in _PATTERN_FIELDS: + return f"unknown placeholder {{{field}}}; the placeholders are {allowed}" + try: + # The names are known to be fine; this catches a format spec + # str.format rejects, such as ``{line:zz}``. + pattern.format(**_PATTERN_FIELDS) + except ValueError as error: + return f"malformed template ({error}); braces must be balanced and named" + return None + + +def source_url( + base_url: str, + commit: str, + file: str, + line: str, + pattern: str = DEFAULT_URL_PATTERN, +) -> str: + """Line-anchored URL of a test source, or ``""`` without repo metadata. + + A hermetic build has no git remote, so the absence of metadata must yield an + empty field rather than a placeholder URL that looks real and 404s. + When the line is unknown the anchor is dropped instead of pointing at a + fabricated line. + """ + if not base_url or not commit or not file: + return "" + + if not line: + # Drop the fragment only when the anchor lives there. A pattern that + # carries the line elsewhere keeps its shape and gets an empty value, + # instead of losing whatever else followed the ``#``. + head, hash_sign, fragment = pattern.partition("#") + if hash_sign and "{line}" in fragment: + pattern = head + return pattern.format(base=base_url, commit=commit, file=file, line=line) diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 33f7f21b3..756a7a687 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -8,8 +8,15 @@ from sphinx.util import logging # from docutils import nodes -from sphinx_needs.api import add_dynamic_function, add_need_type -from sphinx_needs.exceptions import NeedsApiConfigWarning +# sphinx-needs ships no py.typed marker and no stubs exist, so every import +# from it is untyped to mypy. Nothing to fix on this side. +from sphinx_needs.api import ( # type: ignore[import-untyped] + add_dynamic_function, + add_need_type, +) +from sphinx_needs.exceptions import ( # type: ignore[import-untyped] + NeedsApiConfigWarning, +) from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective @@ -28,9 +35,16 @@ ) from sphinxcontrib.test_reports.environment import install_styles_static_files from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError +from sphinxcontrib.test_reports.fields import ( + FIELDS, + RENAMEABLE_FIELDS, + RESERVED_NAMES, + declaration, +) from sphinxcontrib.test_reports.functions import tr_link from sphinxcontrib.test_reports.projectconfig import ( BRIDGE_KEYS, + DEFAULT_FIELD_NAMES, DEFAULT_TOML_FILENAME, SECTION, TomlConfigError, @@ -42,32 +56,14 @@ VERSION = "1.4.0" -# Field descriptions for better semantics -FIELD_DESCRIPTIONS = { - "file": "Test file name", - "suite": "Test suite name", - "case": "Test case name", - "case_name": "Test case display name", - "case_parameter": "Test case parameter", - "classname": "Test class name", - "time": "Test execution time", - "suites": "Number of test suites", - "cases": "Number of test cases", - "passed": "Number of passed tests", - "skipped": "Number of skipped tests", - "failed": "Number of failed tests", - "errors": "Number of test errors", - "result": "Test result status", -} - try: # sphinx-needs >= 7.0: fields are registered through add_field. from sphinx_needs.api import add_field as _add_field - def _register_field(app, name, schema=None): - description = FIELD_DESCRIPTIONS.get(name, name) + def _register_field(app: Sphinx, name: str, role: str | None = None) -> None: + type_, description = declaration(name, role) try: - _add_field(name, description, schema=schema) + _add_field(name, description, schema={"type": type_}) except NeedsApiConfigWarning: # Already registered, e.g. via needs_fields or needs_extra_options # in conf.py. Anything else is a real error and must surface. @@ -78,12 +74,13 @@ def _register_field(app, name, schema=None): except ImportError: from sphinx_needs.api import add_extra_option as _add_extra_option - def _register_field(app, name, schema=None): + def _register_field(app: Sphinx, name: str, role: str | None = None) -> None: # add_extra_option takes description and schema from sphinx-needs # 6.0.1 on, which is the package's floor. + type_, description = declaration(name, role) try: _add_extra_option( - app, name, description=FIELD_DESCRIPTIONS.get(name, name), schema=schema + app, name, description=description, schema={"type": type_} ) except NeedsApiConfigWarning: logging.getLogger(__name__).debug( @@ -100,19 +97,22 @@ def setup(app: Sphinx) -> dict[str, object]: """ # Name of the need field carrying the path of the XML *report*. - app.add_config_value("tr_file_option", "file", "html") + app.add_config_value("tr_file_option", DEFAULT_FIELD_NAMES["file_option"], "html") # Names of the need fields carrying the *test source* location taken from # the file/line attributes. Defaults avoid the collision with # tr_file_option above; set both to "file"/"line" (and tr_file_option to # something else) to match a metamodel that spells them verbatim. - app.add_config_value("tr_source_file_option", "case_file", "html") - app.add_config_value("tr_source_line_option", "case_line", "html") + app.add_config_value( + "tr_source_file_option", DEFAULT_FIELD_NAMES["source_file_option"], "html" + ) + app.add_config_value( + "tr_source_line_option", DEFAULT_FIELD_NAMES["source_line_option"], "html" + ) # Derive test-case IDs from the source location and case name instead of # hashing (type, title, content) -- the latter moves the ID when a test # starts failing differently. Off by default: enabling it changes IDs. # Required (not just recommended) when the build consumes a needs.json - # produced by `test-reports build needs`, which always writes - # deterministic IDs. + # produced by `test-reports build needs`, which always writes them. app.add_config_value("tr_deterministic_case_ids", False, "html") # Declarative configuration: the [test_reports] section of this file # overrides the tr_* config values above at config-inited. The default is @@ -228,7 +228,7 @@ def setup(app: Sphinx) -> dict[str, object]: } -def register_tr_extra_options(app): +def register_tr_extra_options(app: Sphinx) -> None: """Register extra options with directives.""" log = logging.getLogger(__name__) @@ -237,12 +237,16 @@ def register_tr_extra_options(app): if tr_extra_options: for direc in [TestSuiteDirective, TestFileDirective, TestCaseDirective]: + # docutils types `option_spec` as optional on the directive base + # class. All three define one, so this keeps mutating the existing + # mapping; the assignment only matters in the case the type allows + # for and the classes do not produce. + spec = direc.option_spec or {} for option_name in tr_extra_options: - direc.option_spec[option_name] = directives.unchanged + spec[option_name] = directives.unchanged log.debug(f"Registered {option_name} with {direc}") - log.debug( - f"{direc}.option_spec now has keys: {list(direc.option_spec.keys())}" - ) + log.debug(f"{direc}.option_spec now has keys: {list(spec.keys())}") + direc.option_spec = spec def _command_line_overrides(config: Config) -> set[str]: @@ -334,29 +338,35 @@ def warn(message: str) -> None: ) -def tr_preparation(app, *args): +def tr_preparation(app: Sphinx, *args: object) -> None: """ Prepares needed vars in the app context. """ - if not hasattr(app, "tr_types"): - app.tr_types = {} + # `tr_types` is attached to the application object, which has no such + # attribute as far as a type checker is concerned -- the directives read it + # back the same way (see `test_common.py`). One narrow ignore for the + # attachment; the rest of the function works on a typed mapping. + types: dict[str, list[str]] = getattr(app, "tr_types", None) or {} + app.tr_types = types # type: ignore[attr-defined] # Collects the configured test-report node types - app.tr_types[app.config.tr_file[0]] = app.config.tr_file[1:] - app.tr_types[app.config.tr_suite[0]] = app.config.tr_suite[1:] - app.tr_types[app.config.tr_case[0]] = app.config.tr_case[1:] + types[app.config.tr_file[0]] = app.config.tr_file[1:] + types[app.config.tr_suite[0]] = app.config.tr_suite[1:] + types[app.config.tr_case[0]] = app.config.tr_case[1:] app.add_directive(app.config.tr_file[0], TestFileDirective) app.add_directive(app.config.tr_suite[0], TestSuiteDirective) app.add_directive(app.config.tr_case[0], TestCaseDirective) -def check_field_name_collisions(config) -> None: - """Reject configurations where two field options name the same need field. +def check_field_name_collisions(config: Config) -> None: + """Reject configurations where a field option names a field already taken. The report path and the test-source location are separate fields; if two - options resolve to one name, ``add_need`` receives the same keyword twice - and fails with a bare ``TypeError`` from inside a directive. + options resolve to one name, or one of them to a fixed field such as + ``case`` or ``result``, ``add_need`` receives the same keyword twice and + fails with a bare ``TypeError`` from inside a directive. The loader makes + the same check for the declarative file; this covers ``conf.py``. """ options = { "tr_file_option": getattr(config, "tr_file_option", "file"), @@ -365,6 +375,11 @@ def check_field_name_collisions(config) -> None: } for name, value in options.items(): + if value in RESERVED_NAMES: + raise InvalidConfigurationError( + f"{name} is set to '{value}', a field every test-case need has " + f"already; it must name a field of its own." + ) clashing = [ other for other, other_value in options.items() @@ -386,32 +401,21 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # sphinx-needs >= 6 registers fields with a schema; there is no older # branch to keep, the package requires that version. - _register_field( - app, getattr(config, "tr_file_option", "file"), schema={"type": "string"} - ) - _register_field( - app, - getattr(config, "tr_source_file_option", "case_file"), - schema={"type": "string"}, - ) - _register_field( - app, - getattr(config, "tr_source_line_option", "case_line"), - schema={"type": "string"}, - ) - _register_field(app, "suite", schema={"type": "string"}) - _register_field(app, "case", schema={"type": "string"}) - _register_field(app, "case_name", schema={"type": "string"}) - _register_field(app, "case_parameter", schema={"type": "string"}) - _register_field(app, "classname", schema={"type": "string"}) - _register_field(app, "time", schema={"type": "string"}) - _register_field(app, "suites", schema={"type": "integer"}) - _register_field(app, "cases", schema={"type": "integer"}) - _register_field(app, "passed", schema={"type": "integer"}) - _register_field(app, "skipped", schema={"type": "integer"}) - _register_field(app, "failed", schema={"type": "integer"}) - _register_field(app, "errors", schema={"type": "integer"}) - _register_field(app, "result", schema={"type": "string"}) + # + # Type and description of every field come from the shared table in + # `fields`, which the converter writes into the `needs_schema` of the + # needs.json it produces -- a field registered here and the same field + # declared there cannot say different things. `result_text` and + # `remote_url` are written by the converter only, and registered here so + # that a needs.json it produced imports without sphinx-needs dropping them + # as unknown keys. + # The renameable fields are registered under the name their `tr_*` value + # selects -- spelled like the role with the prefix, as every bridged key is. + for role in RENAMEABLE_FIELDS: + name = getattr(config, f"tr_{role}", DEFAULT_FIELD_NAMES[role]) + _register_field(app, name, role=role) + for name in FIELDS: + _register_field(app, name) # Extra dynamic functions # For details about usage read # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function @@ -421,7 +425,7 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: # extracted from JUnit XML are accepted by sphinx-needs tr_extra_options = getattr(config, "tr_extra_options", []) for option_name in tr_extra_options: - _register_field(app, option_name, schema={"type": "string"}) + _register_field(app, option_name) # Extra need types # For details about usage read diff --git a/packages/sphinx-test-reports/tests/test_cli_config.py b/packages/sphinx-test-reports/tests/test_cli_config.py new file mode 100644 index 000000000..2da79f781 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_cli_config.py @@ -0,0 +1,531 @@ +"""``build needs`` reads ``[test_reports.build.needs]`` from ``ubproject.toml``. + +Precedence is flag > TOML table > built-in default, and the file is found the +way the Sphinx build finds it -- searched for upwards to the project root -- so +the two consumers of one project never read different descriptions of it. +""" + +import json +import os +from pathlib import Path + +import pytest + +from sphinxcontrib.test_reports.cli import _DEFAULTS, main +from sphinxcontrib.test_reports.projectconfig import ( + CONVERSION_KEYS, + DEFAULT_TOML_FILENAME, +) + +UTILS = Path(__file__).parent / "doc_test" / "utils" +PYTEST_XML = str(UTILS / "pytest_data.xml") +GTEST_XML = str(UTILS / "gtest_data.xml") # carries elements + + +def _write(directory, toml_source, name=DEFAULT_TOML_FILENAME): + config = directory / name + config.write_text(toml_source, encoding="utf-8") + return config + + +def run_convert( + tmp_path, arguments, toml=None, config_name=None, subdir=None, xml=PYTEST_XML +): + """Run ``build needs`` from *tmp_path* (or a subdirectory) and parse the output. + + A project-root marker bounds the upward search, so the outcome never depends + on what happens to sit above the temporary directory. + """ + (tmp_path / ".git").mkdir(exist_ok=True) # bounds the upward search + if toml is not None: + _write(tmp_path, toml, name=config_name or DEFAULT_TOML_FILENAME) + workdir = tmp_path + if subdir is not None: + workdir = tmp_path / subdir + workdir.mkdir(parents=True, exist_ok=True) + previous = os.getcwd() + os.chdir(workdir) + try: + code = main(["build", "needs", xml, "-o", "needs.json", *arguments]) + finally: + os.chdir(previous) + payload = {} + output = workdir / "needs.json" + if output.is_file(): + payload = json.loads(output.read_text(encoding="utf-8")) + return code, payload + + +def _first_need(payload): + return next(iter(payload["versions"][payload["current_version"]]["needs"].values())) + + +class TestPrecedence: + """Flag > TOML > built-in default.""" + + def test_table_provides_the_conversion_settings(self, tmp_path): + code, payload = run_convert( + tmp_path, + [], + toml=""" + [test_reports.build.needs] + project = "My Project" + version = "2.0" + tags = ["ci", "unit"] + link_properties = { PartiallyVerifies = "partially_verifies" } + """, + ) + assert code == 0 + assert payload["project"] == "My Project" + assert payload["current_version"] == "2.0" + need = _first_need(payload) + assert need["tags"] == ["ci", "unit"] + assert need["partially_verifies"] == [] + + def test_flag_overrides_the_table(self, tmp_path): + code, payload = run_convert( + tmp_path, + ["--version", "9.9"], + toml="[test_reports.build.needs]\nversion = '2.0'\n", + ) + assert code == 0 + assert payload["current_version"] == "9.9" + + def test_table_overrides_the_builtin_default(self, tmp_path): + # A need type other than the default has to be the build's too -- so + # the file also names it as the case type. + code, payload = run_convert( + tmp_path, + [], + toml="[test_reports.build.needs]\nneed_type = 'check'\n" + """ + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + assert code == 0 + assert _first_need(payload)["type"] == "check" + + def test_no_file_uses_the_defaults(self, tmp_path): + code, payload = run_convert(tmp_path, []) + assert code == 0 + assert payload["project"] == "" + assert payload["current_version"] == "1.0" + + def test_an_explicit_empty_flag_beats_the_table(self, tmp_path): + # "" is a value, not "not given": the flag clears the file's tags. + code, payload = run_convert( + tmp_path, ["--tags", ""], toml="[test_reports.build.needs]\ntags = ['x']\n" + ) + assert code == 0 + assert _first_need(payload)["tags"] == [] + + def test_link_property_flag_replaces_the_table(self, tmp_path): + code, payload = run_convert( + tmp_path, + ["--link-property", "Verifies=verifies"], + toml='[test_reports.build.needs]\nlink_properties = { Other = "other_field" }\n', + ) + assert code == 0 + need = _first_need(payload) + assert "verifies" in need + assert "other_field" not in need + + def test_field_names_from_the_section_shape_the_output(self, tmp_path): + # The same file configures the build. Its field-name keys are read on + # purpose -- the output has to have the shape of the build's needs -- + # while its other bridge keys are none of the converter's business. + code, payload = run_convert( + tmp_path, + [], + toml=""" + [test_reports] + file_option = "report_file" + source_file_option = "file" + source_line_option = "line" + extra_options = ["more_info"] + + [test_reports.build.needs] + project = "p" + """, + ) + assert code == 0 + assert payload["project"] == "p" + need = _first_need(payload) + assert need["report_file"].endswith("pytest_data.xml") + assert "file" in need and "line" in need + assert "case_file" not in need + # Listed, so the field is there -- null, as no case carries it. + assert need["more_info"] is None + + +class TestFileLookup: + """Where the file comes from, and what happens when it does not.""" + + def test_walks_up_to_the_project_root(self, tmp_path): + # The canonical layout: ubproject.toml at the root, the converter run + # from a build directory below it. + code, payload = run_convert( + tmp_path, + [], + toml='[test_reports.build.needs]\nproject = "from the root"\n', + subdir="build/testlogs", + ) + assert code == 0 + assert payload["project"] == "from the root" + + def test_explicit_config_by_path(self, tmp_path): + code, payload = run_convert( + tmp_path, + ["--config", "staging.toml"], + toml='[test_reports.build.needs]\nproject = "staged"\n', + config_name="staging.toml", + ) + assert code == 0 + assert payload["project"] == "staged" + + def test_explicit_missing_config_is_an_error(self, tmp_path, capsys): + code, _ = run_convert(tmp_path, ["--config", "other.toml"]) + assert code == 2 + assert "other.toml" in capsys.readouterr().err + + def test_no_config_ignores_the_file(self, tmp_path): + code, payload = run_convert( + tmp_path, + ["--no-config"], + toml='[test_reports.build.needs]\nproject = "from toml"\n', + ) + assert code == 0 + assert payload["project"] == "" + + def test_config_and_no_config_are_mutually_exclusive(self): + with pytest.raises(SystemExit): + main( + [ + "build", + "needs", + PYTEST_XML, + "-o", + "n.json", + "--no-config", + "--config", + "x", + ] + ) + + +class TestVerbosity: + """A config-less run is quiet, a discovered file is named, ``-v`` says more. + + The file the search adopts may sit directories above the invocation and it + shapes the bytes written, so it is named on every run, as the build logs it + at INFO. ``-v`` adds where a fruitless search ended, so a misplaced file can + be placed right, and names a file given with ``--config``. + """ + + def test_a_discovered_file_is_named_without_verbose(self, tmp_path, capsys): + code, _ = run_convert( + tmp_path, + [], + toml='[test_reports.build.needs]\nproject = "p"\n', + subdir="build/testlogs", + ) + assert code == 0 + err = capsys.readouterr().err + assert "reading [test_reports] from" in err + assert str(tmp_path / DEFAULT_TOML_FILENAME) in err + + def test_an_explicit_config_file_is_named_only_with_verbose(self, tmp_path, capsys): + # The user typed the path; repeating it is noise unless asked for. + toml = '[test_reports.build.needs]\nproject = "p"\n' + code, _ = run_convert( + tmp_path, + ["--config", "staging.toml"], + toml=toml, + config_name="staging.toml", + ) + assert code == 0 + assert "reading [test_reports]" not in capsys.readouterr().err + code, _ = run_convert( + tmp_path, + ["--config", "staging.toml", "-v"], + toml=toml, + config_name="staging.toml", + ) + assert code == 0 + assert "reading [test_reports] from staging.toml" in capsys.readouterr().err + + def test_a_configless_run_is_quiet_by_default(self, tmp_path, capsys): + # Nothing about the search on stderr -- other diagnostics (here the + # fixture's missing source lines) are not what is under test. + code, _ = run_convert(tmp_path, []) + assert code == 0 + err = capsys.readouterr().err + assert DEFAULT_TOML_FILENAME not in err + assert "repository root" not in err + + def test_verbose_reports_where_the_search_ended(self, tmp_path, capsys): + # The same message the loader gives the Sphinx bridge at -v: the + # directory whose marker ended the search, so a misplaced file can be + # placed right. + code, _ = run_convert(tmp_path, ["-v"], subdir="build/testlogs") + assert code == 0 + err = capsys.readouterr().err + assert f"no {DEFAULT_TOML_FILENAME} in" in err + assert "repository root" in err and str(tmp_path) in err + + def test_verbose_names_the_file_used(self, tmp_path, capsys): + code, _ = run_convert( + tmp_path, ["--verbose"], toml='[test_reports.build.needs]\nproject = "p"\n' + ) + assert code == 0 + err = capsys.readouterr().err + assert "reading [test_reports] from" in err + assert DEFAULT_TOML_FILENAME in err + + +class TestDiagnostics: + """Errors name what the user wrote, and warnings do not stop the run.""" + + def test_wrong_type_in_the_table_is_an_error(self, tmp_path, capsys): + code, _ = run_convert( + tmp_path, [], toml="[test_reports.build.needs]\ntags = 'ci'\n" + ) + assert code == 2 + assert "build.needs.tags" in capsys.readouterr().err + + def test_wrong_type_elsewhere_in_the_section_is_an_error_too( + self, tmp_path, capsys + ): + # One file, one verdict: the converter rejects what the build rejects, + # even for a key it does not itself use. + code, _ = run_convert( + tmp_path, [], toml="[test_reports]\nsuite_id_length = 'four'\n" + ) + assert code == 2 + assert "suite_id_length" in capsys.readouterr().err + + def test_unknown_key_in_the_table_warns_but_converts(self, tmp_path, capsys): + code, payload = run_convert( + tmp_path, + [], + toml='[test_reports.build.needs]\nproject = "p"\nno_such_key = 1\n', + ) + assert code == 0 + assert payload["project"] == "p" + err = capsys.readouterr().err + assert "no_such_key" in err + assert "[test_reports.build.needs]" in err + + def test_half_remote_pair_from_the_table_names_the_table(self, tmp_path, capsys): + # The value came from the file, so naming only the flags would point at + # options that appear nowhere in the invocation. + code, _ = run_convert( + tmp_path, + [], + toml='[test_reports.build.needs]\nremote_url = "https://gh.com/o/r"\n', + ) + assert code == 2 + message = capsys.readouterr().err + assert "remote_url and --commit" in message + assert "[test_reports.build.needs]" in message + assert DEFAULT_TOML_FILENAME in message + + def test_half_remote_pair_from_flags_names_the_flags(self, tmp_path, capsys): + code, _ = run_convert(tmp_path, ["--commit", "abc"]) + assert code == 2 + message = capsys.readouterr().err + assert "--remote-url and --commit" in message + assert "[test_reports.build.needs]" not in message + + def test_need_type_disagreeing_with_the_case_type_is_an_error( + self, tmp_path, capsys + ): + # The build takes its need type from case.type; a needs.json written + # with another type would neither register nor cross-link there. + code, _ = run_convert( + tmp_path, + [], + toml=""" + [test_reports.build.needs] + need_type = "testcase" + + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + assert code == 2 + assert "need_type" in capsys.readouterr().err + + def test_malformed_link_property_value_is_an_error(self, tmp_path, capsys): + code, _ = run_convert( + tmp_path, + [], + toml='[test_reports.build.needs]\nlink_properties = { Verifies = ["v"] }\n', + ) + assert code == 2 + assert "link_properties" in capsys.readouterr().err + + def test_need_type_flag_disagreeing_with_the_case_type_is_an_error( + self, tmp_path, capsys + ): + # The loader only sees the file. A flag is not in the file, so the + # merged value has to be checked again, or the flag bypasses the rule. + code, _ = run_convert( + tmp_path, + ["--need-type", "testcase"], + toml=""" + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + assert code == 2 + message = capsys.readouterr().err + assert "--need-type is 'testcase'" in message + assert "'check'" in message + + def test_the_default_need_type_disagreeing_with_the_case_type_is_an_error( + self, tmp_path, capsys + ): + code, _ = run_convert( + tmp_path, + [], + toml=""" + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + assert code == 2 + assert "the default need_type is 'testcase'" in capsys.readouterr().err + + def test_need_type_flag_without_a_case_entry_is_checked_against_the_default( + self, tmp_path, capsys + ): + # A side that is not set is compared at its default, as in the loader: + # a file that leaves case alone configures the build with 'testcase', + # so a flag asking for anything else writes needs the build drops. + code, payload = run_convert( + tmp_path, ["--need-type", "check"], toml="[test_reports]\n" + ) + assert code == 2 + assert payload == {} + message = capsys.readouterr().err + assert "--need-type is 'check'" in message + assert "does not set case" in message + assert "'testcase'" in message + + def test_need_type_flag_without_a_config_file_is_free(self, tmp_path): + # Without a file there is nothing to hold the flag against; the output + # depends on the arguments alone, as with --no-config. + code, payload = run_convert(tmp_path, ["--need-type", "check"]) + assert code == 0 + assert _first_need(payload)["type"] == "check" + code, payload = run_convert( + tmp_path, + ["--no-config", "--need-type", "check"], + toml="[test_reports]\n", + ) + assert code == 0 + assert _first_need(payload)["type"] == "check" + + def test_a_matching_need_type_flag_is_fine(self, tmp_path): + code, payload = run_convert( + tmp_path, + ["--need-type", "check"], + toml=""" + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + assert code == 0 + assert _first_need(payload)["type"] == "check" + + +class TestExtraOptionFlag: + """The flag adds to the section's list; a name the list lacks is reported. + + A repeatable flag reads as additive, so it is one -- ``--no-config`` is the + way to leave the file's list out. The build registers exactly the section's + ``extra_options`` as fields, so a field exported under any other name is + dropped by ``needimport`` as an unknown key -- the flag may stand in for a + build configured elsewhere, but the mismatch must not be silent. + """ + + def test_the_flag_adds_to_the_section_s_list(self, tmp_path): + code, payload = run_convert( + tmp_path, + ["--extra-option", "Requirement"], + toml='[test_reports]\nextra_options = ["TestType"]\n', + xml=GTEST_XML, + ) + assert code == 0 + needs = payload["versions"][payload["current_version"]]["needs"] + assert all( + "TestType" in need and "Requirement" in need for need in needs.values() + ) + declared = payload["versions"][payload["current_version"]]["needs_schema"] + assert {"TestType", "Requirement"} <= set(declared["properties"]) + + def test_a_name_outside_the_section_s_list_warns(self, tmp_path, capsys): + code, payload = run_convert( + tmp_path, + ["--extra-option", "Requirement"], + toml='[test_reports]\nextra_options = ["TestType"]\n', + xml=GTEST_XML, + ) + assert code == 0 + needs = payload["versions"][payload["current_version"]]["needs"] + assert all("Requirement" in need for need in needs.values()) + err = capsys.readouterr().err + assert "--extra-option Requirement" in err + assert "extra_options" in err and DEFAULT_TOML_FILENAME in err + assert "needimport" in err + + def test_a_name_from_the_section_s_list_is_quiet(self, tmp_path, capsys): + code, _ = run_convert( + tmp_path, + ["--extra-option", "TestType"], + toml='[test_reports]\nextra_options = ["TestType", "Requirement"]\n', + xml=GTEST_XML, + ) + assert code == 0 + assert "--extra-option" not in capsys.readouterr().err + + def test_without_a_config_file_there_is_nothing_to_compare_against( + self, tmp_path, capsys + ): + code, _ = run_convert( + tmp_path, ["--extra-option", "Requirement"], xml=GTEST_XML + ) + assert code == 0 + assert "--extra-option" not in capsys.readouterr().err + + +def test_every_conversion_key_has_a_builtin_default(): + # The import-time guard says the same; this keeps saying it under -O. + assert set(_DEFAULTS) == set(CONVERSION_KEYS) diff --git a/packages/sphinx-test-reports/tests/test_cli_convert.py b/packages/sphinx-test-reports/tests/test_cli_convert.py new file mode 100644 index 000000000..af77c3a19 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_cli_convert.py @@ -0,0 +1,741 @@ +"""Tests for the Sphinx-free ``test-reports build needs`` CLI (TR-A). + +This is the keystone of the build-system story: a test-XML to needs.json +conversion that runs as a build action *outside* Sphinx, so the docs build only +imports the result. Two properties are load-bearing and therefore tested +explicitly rather than assumed: + +* the CLI must not import Sphinx -- otherwise a Bazel action pulls the whole + documentation toolchain into the test-result conversion; +* the output must be byte-stable, because it is a cached build artifact and + qualification evidence. +""" + +import json +import subprocess +import sys +from pathlib import Path + +import pytest + +UTILS = Path(__file__).parent / "doc_test" / "utils" +GTEST_XML = UTILS / "gtest_data.xml" +PYTEST_XML = UTILS / "pytest_data.xml" + + +def _convert(tmp_path, *args, xml=GTEST_XML): + """Run the converter and return (exit_code, parsed output or None).""" + from sphinxcontrib.test_reports.cli import main + + output = tmp_path / "needs.json" + code = main(["build", "needs", str(xml), "--output", str(output), *args]) + data = json.loads(output.read_text(encoding="utf-8")) if output.exists() else None + return code, data + + +def _needs(data): + version = data["current_version"] + return data["versions"][version]["needs"] + + +def _field_type(declaration): + """The declared type, with the nullability the schema spells separately.""" + kind = declaration["type"] + if isinstance(kind, str): + return kind + return next(iter(set(kind) - {"null"})) + + +class TestNoSphinxImport: + """The converter has to be usable without the documentation toolchain.""" + + def test_importing_the_cli_does_not_import_sphinx(self): + script = ( + "import sys;" + "import sphinxcontrib.test_reports.cli;" + "leaked = sorted(m for m in sys.modules" + " if m == 'sphinx' or m.startswith(('sphinx.', 'sphinx_needs')));" + "print(','.join(leaked))" + ) + result = subprocess.run( + [sys.executable, "-c", script], + capture_output=True, + text=True, + check=True, + ) + + assert result.stdout.strip() == "" + + +class TestEnvelope: + def test_output_passes_the_sphinx_needs_schema(self, tmp_path): + """The output must validate against sphinx-needs' own needs.json schema.""" + from sphinx_needs import needsfile + + code, data = _convert(tmp_path) + + assert code == 0 + assert needsfile.check_needs_data(data).schema == [] + + def test_envelope_carries_project_and_current_version(self, tmp_path): + _, data = _convert(tmp_path, "--project", "Score Docs-as-Code") + + assert data["project"] == "Score Docs-as-Code" + assert data["current_version"] in data["versions"] + + def test_needs_amount_matches_the_number_of_cases(self, tmp_path): + _, data = _convert(tmp_path) + + version = data["versions"][data["current_version"]] + assert version["needs_amount"] == len(version["needs"]) == 5 + + def test_every_written_field_is_declared(self, tmp_path): + """The file says what its fields are, without a Sphinx build to ask.""" + _, data = _convert(tmp_path) + + version = data["versions"][data["current_version"]] + declared = set(version["needs_schema"]["properties"]) + written = {key for need in version["needs"].values() for key in need} + + assert written - declared == set() + + def test_no_timestamp_is_written(self, tmp_path): + """A wall clock would defeat action caching and evidence diffs.""" + _, data = _convert(tmp_path) + + assert "created" not in data + assert "created" not in data["versions"][data["current_version"]] + + def test_output_is_byte_stable_across_runs(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + first = tmp_path / "first.json" + second = tmp_path / "second.json" + for output in (first, second): + assert ( + main(["build", "needs", str(GTEST_XML), "--output", str(output)]) == 0 + ) + + assert first.read_bytes() == second.read_bytes() + + +class TestNeedContent: + def test_ids_match_the_deterministic_scheme(self, tmp_path): + from sphinxcontrib.test_reports.identity import deterministic_case_id + + _, data = _convert(tmp_path) + + expected = deterministic_case_id( + classname="MathTest", name="Addition", file="src/math_test.cc" + ) + assert expected in _needs(data) + + def test_source_location_is_emitted_verbatim(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["case_file"] == "src/math_test.cc" + assert need["case_line"] == "12" + # `file` is the report path, as in a locally created test-case need. + assert need["file"] == str(GTEST_XML) + + def test_type_and_title_match_the_directive_s(self, tmp_path): + # The directive titles a case need with the case name; a needtable + # title column must not tell an imported case from a built one. + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["type"] == "testcase" + assert need["title"] == "Addition" + + def test_result_vocabulary_includes_disabled(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__DISABLED_Division_jnyzp"] + assert need["result"] == "disabled" + + def test_content_keeps_every_failure_part(self, tmp_path): + """R2: the debug output has to survive the conversion.""" + _, data = _convert(tmp_path) + + content = _needs(data)["testcase__MathTest__Subtraction_srmht"]["content"] + assert "Expected equality of these values" in content + assert "Actual: false" in content + assert "overflow guard hit" in content + + def test_result_text_is_the_first_failure_message(self, tmp_path): + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Subtraction_srmht"] + assert need["result_text"].startswith("src/math_test.cc:22") + assert "\n" not in need["result_text"] + + def test_named_properties_become_fields(self, tmp_path, capsys): + # Only properties the build would accept (extra_options, or here the + # flag standing in for it) become fields; the rest is reported once. + code, data = _convert(tmp_path, "--no-config", "--extra-option", "TestType") + assert code == 0 + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["TestType"] == "requirements-based" + assert "PartiallyVerifies" not in need + message = capsys.readouterr().err + assert "properties not exported" in message + assert "PartiallyVerifies" in message + assert "extra_options" in message + + def test_unexported_properties_are_reported_once_for_all_names( + self, tmp_path, capsys + ): + # One line naming every left-out property -- not one line per name, + # and not one per case that carries it. + code, _ = _convert(tmp_path, "--no-config") + assert code == 0 + lines = [ + line + for line in capsys.readouterr().err.splitlines() + if "properties not exported" in line + ] + assert len(lines) == 1 + assert "PartiallyVerifies" in lines[0] and "TestType" in lines[0] + + def test_an_exported_property_is_present_on_every_case(self, tmp_path): + # Null where the case has no such property, as the build leaves a + # registered field a directive did not set -- so one schema can + # require the field of imported and locally created needs alike. + _, data = _convert(tmp_path, "--no-config", "--extra-option", "TestType") + needs = _needs(data) + assert needs["testcase__MathTest__Addition_hcuyy"]["TestType"] == ( + "requirements-based" + ) + assert needs["testcase__MathTest__Subtraction_srmht"]["TestType"] is None + assert all("TestType" in need for need in needs.values()) + + def test_unnamed_properties_are_left_out_quietly_when_none_exist( + self, tmp_path, capsys + ): + code, _ = _convert(tmp_path, "--no-config", xml=PYTEST_XML) + assert code == 0 + assert "properties not exported" not in capsys.readouterr().err + + def test_tags_are_configurable(self, tmp_path): + _, data = _convert(tmp_path, "--tags", "TEST") + + assert _needs(data)["testcase__MathTest__Addition_hcuyy"]["tags"] == ["TEST"] + + +class TestLinkProperties: + def test_a_property_can_be_promoted_to_a_link_field(self, tmp_path): + _, data = _convert( + tmp_path, "--link-property", "PartiallyVerifies=partially_verifies" + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["partially_verifies"] == ["REQ_1", "REQ_2"] + assert "PartiallyVerifies" not in need + + def test_link_fields_are_always_present_even_when_empty(self, tmp_path): + """A converter must emit its fields unconditionally, so schemas can require them.""" + _, data = _convert( + tmp_path, "--link-property", "PartiallyVerifies=partially_verifies" + ) + + need = _needs(data)["testcase__MathTest__DISABLED_Division_jnyzp"] + assert need["partially_verifies"] == [] + + def test_malformed_link_property_is_rejected(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + code = main( + [ + "build", + "needs", + str(GTEST_XML), + "--output", + str(tmp_path / "out.json"), + "--link-property", + "NoEqualsSign", + ] + ) + + assert code != 0 + + +class TestRemoteUrls: + def test_external_url_and_remote_url_are_synthesized(self, tmp_path): + _, data = _convert( + tmp_path, + "--remote-url", + "https://github.com/org/repo", + "--commit", + "abc123", + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + expected = "https://github.com/org/repo/blob/abc123/src/math_test.cc#L12" + assert need["external_url"] == expected + assert need["remote_url"] == expected + + def test_scp_style_remote_is_normalised(self, tmp_path): + _, data = _convert( + tmp_path, + "--remote-url", + "git@github.com:org/repo.git", + "--commit", + "abc123", + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"].startswith("https://github.com/org/repo/blob/abc123/") + + def test_url_pattern_is_configurable(self, tmp_path): + _, data = _convert( + tmp_path, + "--remote-url", + "https://gitlab.com/org/repo", + "--commit", + "abc123", + "--url-pattern", + "{base}/-/blob/{commit}/{file}#L{line}", + ) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"] == ( + "https://gitlab.com/org/repo/-/blob/abc123/src/math_test.cc#L12" + ) + + def test_credentials_in_the_remote_url_are_not_written(self, tmp_path): + # GitLab's CI_REPOSITORY_URL embeds the job token; the base lands in + # every need of a cached artifact and, imported, in published HTML. + from sphinxcontrib.test_reports.cli import main + + output = tmp_path / "needs.json" + code = main( + [ + "build", + "needs", + str(GTEST_XML), + "--output", + str(output), + "--no-config", + "--remote-url", + "https://gitlab-ci-token:glcbt-secret@gitlab.example.com/org/repo.git", + "--commit", + "abc123", + ] + ) + assert code == 0 + text = output.read_text(encoding="utf-8") + assert "glcbt-secret" not in text and "gitlab-ci-token" not in text + need = _needs(json.loads(text))["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"] == ( + "https://gitlab.example.com/org/repo/blob/abc123/src/math_test.cc#L12" + ) + + def test_without_repo_metadata_the_url_fields_are_empty(self, tmp_path): + """A hermetic sandbox has no git remote; that must not drop the need.""" + _, data = _convert(tmp_path) + + need = _needs(data)["testcase__MathTest__Addition_hcuyy"] + assert need["remote_url"] == "" + assert need["external_url"] == "" + + +class TestUrlPatternErrors: + """A bad template is a configuration error at the start, not a traceback.""" + + def test_an_unknown_placeholder_is_an_error(self, tmp_path, capsys): + code, data = _convert( + tmp_path, + "--no-config", + "--remote-url", + "https://github.com/o/r", + "--commit", + "abc", + "--url-pattern", + "{base}/blob/{ref}/{file}#L{line}", + ) + assert code == 2 + assert data is None + message = capsys.readouterr().err + assert "--url-pattern" in message + assert "{ref}" in message + + def test_an_unbalanced_brace_is_an_error(self, tmp_path, capsys): + code, _ = _convert( + tmp_path, "--no-config", "--url-pattern", "{base/blob/{commit}/{file}" + ) + assert code == 2 + assert "malformed" in capsys.readouterr().err + + def test_an_attribute_lookup_is_an_error_not_a_traceback(self, tmp_path, capsys): + # str.format resolves {base.__class__}; only KeyError was caught. + code, data = _convert( + tmp_path, + "--no-config", + "--remote-url", + "https://github.com/o/r", + "--commit", + "abc", + "--url-pattern", + "{base.__class__}/{file}", + ) + assert code == 2 + assert data is None + message = capsys.readouterr().err + assert "unknown placeholder {base.__class__}" in message + assert "Traceback" not in message + + def test_the_pattern_is_checked_before_any_report_is_read(self, tmp_path, capsys): + # A missing report and a bad pattern: the pattern error wins, because + # the template is checked before the first file is opened. + code, data = _convert( + tmp_path, + "--no-config", + "--url-pattern", + "{base}/blob/{ref}/{file}", + xml=tmp_path / "does-not-exist.xml", + ) + assert code == 2 + assert data is None + message = capsys.readouterr().err + assert "{ref}" in message + assert "no such file" not in message + + +class TestMultipleInputs: + def test_several_reports_are_merged_into_one_file(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + output = tmp_path / "needs.json" + code = main( + ["build", "needs", str(GTEST_XML), str(PYTEST_XML), "--output", str(output)] + ) + data = json.loads(output.read_text(encoding="utf-8")) + + assert code == 0 + assert len(_needs(data)) > 5 + + def test_the_same_report_given_twice_is_refused(self, tmp_path, capsys): + # Silently collapsing the repeats would produce a valid file that has + # lost half its evidence -- the worst outcome for a cached artifact. + from sphinxcontrib.test_reports.cli import main + + output = tmp_path / "needs.json" + code = main( + [ + "build", + "needs", + str(GTEST_XML), + str(GTEST_XML), + "--no-config", + "-o", + str(output), + ] + ) + assert code == 2 + assert not output.exists() + message = capsys.readouterr().err + assert "more than once" in message + assert "testcase__" in message + + def test_a_missing_input_file_exits_nonzero(self, tmp_path): + from sphinxcontrib.test_reports.cli import main + + code = main( + [ + "build", + "needs", + str(tmp_path / "nope.xml"), + "--output", + str(tmp_path / "out.json"), + ] + ) + + assert code != 0 + + +class TestDiagnostics: + def test_absent_line_attributes_warn_about_junit_family(self, tmp_path, capsys): + """pytest's default junit_family drops file/line; say so, don't guess.""" + from sphinxcontrib.test_reports.cli import main + + main( + [ + "build", + "needs", + str(PYTEST_XML), + "--output", + str(tmp_path / "out.json"), + ] + ) + + assert "junit_family" in capsys.readouterr().err + + def test_nested_suites_get_the_hint_too(self, tmp_path, capsys): + # The parser files the cases of a nested report under testsuite_nested; + # a hint that only looked at the top level went quiet on exactly the + # Ant/Maven-shaped reports that most often lack source locations. + code, data = _convert( + tmp_path, "--no-config", xml=UTILS / "pytest_nested_example.xml" + ) + assert code == 0 + assert all(need["case_line"] == "" for need in _needs(data).values()) + assert "junit_family" in capsys.readouterr().err + + def test_reports_with_line_attributes_do_not_warn(self, tmp_path, capsys): + from sphinxcontrib.test_reports.cli import main + + main(["build", "needs", str(GTEST_XML), "--output", str(tmp_path / "out.json")]) + + assert "junit_family" not in capsys.readouterr().err + + def test_a_report_without_test_cases_warns(self, tmp_path, capsys): + # A pom.xml parses as one empty suite: a valid, empty needs.json with + # exit 0 is the one outcome a cached build action must never get + # silently. + pom = tmp_path / "pom.xml" + pom.write_text( + "4.0.0\n", encoding="utf-8" + ) + code, data = _convert(tmp_path, "--no-config", xml=pom) + assert code == 0 + assert data["versions"][data["current_version"]]["needs_amount"] == 0 + message = capsys.readouterr().err + assert "pom.xml" in message and "no test cases" in message + + def test_a_report_with_test_cases_does_not_get_the_empty_warning( + self, tmp_path, capsys + ): + code, _ = _convert(tmp_path, "--no-config") + assert code == 0 + assert "no test cases" not in capsys.readouterr().err + + +def test_the_cli_is_runnable_as_a_module(): + result = subprocess.run( + [ + sys.executable, + "-m", + "sphinxcontrib.test_reports.cli", + "build", + "needs", + "--help", + ], + capture_output=True, + text=True, + ) + + assert result.returncode == 0 + assert "--output" in result.stdout + + +def test_console_script_is_installed(): + """The name that goes into a BUILD file has to be a real entry point.""" + script = Path(sys.executable).parent / "test-reports" + if not script.exists(): + pytest.skip("package not installed into this environment") + + result = subprocess.run( + [str(script), "build", "needs", "--help"], capture_output=True, text=True + ) + + assert result.returncode == 0 + assert "--output" in result.stdout + + +@pytest.mark.parametrize("flag", ["--remote-url", "--commit"]) +def test_url_synthesis_needs_both_parts(tmp_path, flag): + """Half the metadata cannot produce a URL; fail loudly instead of guessing.""" + from sphinxcontrib.test_reports.cli import main + + code = main( + [ + "build", + "needs", + str(GTEST_XML), + "--output", + str(tmp_path / "out.json"), + flag, + "value", + ] + ) + + assert code != 0 + + +class TestResultVocabulary: + """The export uses the parser's vocabulary, which is the build's. + + ``failure`` is a documented need field value and a CSS class + (``tr_failure``), and the shipped report template filters on it. A project + that mixes imported and locally created test-case needs filters both with + one expression only if the two writers spell the result alike. + """ + + def test_failure_is_exported_as_the_build_spells_it(self, tmp_path): + _, data = _convert(tmp_path) + + assert ( + _needs(data)["testcase__MathTest__Subtraction_srmht"]["result"] == "failure" + ) + + @pytest.mark.parametrize( + ("need_id", "expected"), + [ + ("testcase__MathTest__Addition_hcuyy", "passed"), + ("testcase__MathTest__DISABLED_Division_jnyzp", "disabled"), + ("testcase__ParamTest_0__Legacy_owuvz", "skipped"), + ], + ) + def test_other_results_are_unchanged(self, tmp_path, need_id, expected): + _, data = _convert(tmp_path) + + assert _needs(data)[need_id]["result"] == expected + + +class TestContentIsNotDuplicated: + """googletest repeats the failure text in the message attribute. + + Emitting both verbatim shows the same stack trace twice in the rendered + need; the message block is only worth its space when it says something the + body does not. + """ + + def test_a_message_contained_in_the_body_is_not_repeated(self, tmp_path): + _, data = _convert(tmp_path) + + content = _needs(data)["testcase__MathTest__Subtraction_srmht"]["content"] + assert content.count("Expected equality of these values") == 1 + assert "message" not in content + + def test_a_message_absent_from_the_body_is_kept(self, tmp_path): + _, data = _convert(tmp_path) + + content = _needs(data)["testcase__ParamTest_0__Legacy_owuvz"]["content"] + assert "Skipped via GTEST_SKIP" in content + assert "not applicable on this platform" in content + + +class TestImportIntoABuild: + """The documented consumption path: ``needimport`` of the produced file. + + The converter writes needs shaped like the build's own test-case needs, so + a build with the extension has to import them without dropping fields. + """ + + def test_converted_needs_import_without_loss(self, tmp_path): + from io import StringIO + from shutil import copytree + + from sphinx.application import Sphinx + + docs = tmp_path / "docs" + copytree(Path(__file__).parent / "doc_test" / "basic_doc", docs) + (tmp_path / ".git").mkdir(exist_ok=True) # bounds the upward search + with (docs / "conf.py").open("a", encoding="utf-8") as handle: + # The IDs are lowercase; sphinx-needs' default regex is not. + handle.write('\nneeds_id_regex = "^[A-Za-z0-9_]{5,}"\n') + (docs / "index.rst").write_text( + "Imported\n========\n\n.. needimport:: needs.json\n", encoding="utf-8" + ) + # One declarative file for both consumers: the build registers these + # properties as need options, the converter exports exactly these. + config = docs / "ubproject.toml" + config.write_text( + '[test_reports]\nextra_options = ["TestType", "Requirement", "PartiallyVerifies"]\n', + encoding="utf-8", + ) + code, data = _convert(docs, "--config", str(config), xml=GTEST_XML) + assert code == 0 + + warnings = StringIO() + app = Sphinx( + srcdir=docs, + confdir=docs, + outdir=docs / "_build" / "html", + doctreedir=docs / "_build" / "doctrees", + buildername="html", + freshenv=True, + status=None, + warning=warnings, + ) + app.build() + text = warnings.getvalue() + assert "Unknown keys" not in text, text + assert "could not be imported" not in text, text + html = (docs / "_build" / "html" / "index.html").read_text(encoding="utf-8") + for need_id in _needs(data): + assert need_id in html + + def test_the_declared_types_match_the_extension_s(self, tmp_path): + """What the file declares is what the build registers. + + The extension declares its fields to sphinx-needs, the converter + declares them into the file, and an import brings the two together -- + so a field the two type differently is an import-time type error + waiting to happen. Only the type is compared: the wording of a core + field's description belongs to sphinx-needs and moves with its + version. + """ + from shutil import copytree + + from sphinx.application import Sphinx + + docs = tmp_path / "docs" + copytree(Path(__file__).parent / "doc_test" / "basic_doc", docs) + (tmp_path / ".git").mkdir(exist_ok=True) # bounds the upward search + with (docs / "conf.py").open("a", encoding="utf-8") as handle: + # The build has to write a needs.json of its own to compare with. + handle.write("\nneeds_build_json = True\n") + handle.write('needs_id_regex = "^[A-Za-z0-9_]{5,}"\n') + (docs / "index.rst").write_text( + "Imported\n========\n\n.. needimport:: needs.json\n", encoding="utf-8" + ) + config = docs / "ubproject.toml" + config.write_text( + '[test_reports]\nextra_options = ["TestType"]\n', encoding="utf-8" + ) + code, data = _convert(docs, "--config", str(config), xml=GTEST_XML) + assert code == 0 + + app = Sphinx( + srcdir=docs, + confdir=docs, + outdir=docs / "_build" / "html", + doctreedir=docs / "_build" / "doctrees", + buildername="html", + freshenv=True, + status=None, + warning=None, + ) + app.build() + built = json.loads( + (docs / "_build" / "html" / "needs.json").read_text(encoding="utf-8") + ) + registered = built["versions"][built["current_version"]].get("needs_schema") + if registered is None: + pytest.skip("this sphinx-needs does not declare its fields in needs.json") + + declared = data["versions"][data["current_version"]]["needs_schema"] + shared = set(declared["properties"]) & set(registered["properties"]) + # Guard against a vacuous comparison: these are the fields the + # converter writes beyond the core ones. + assert { + "case", + "case_file", + "case_line", + "case_name", + "case_parameter", + "classname", + "file", + "remote_url", + "result", + "result_text", + "suite", + "time", + "TestType", + } <= shared + + assert {name: _field_type(declared["properties"][name]) for name in shared} == { + name: _field_type(registered["properties"][name]) for name in shared + } diff --git a/packages/sphinx-test-reports/tests/test_identity.py b/packages/sphinx-test-reports/tests/test_identity.py index 45d355118..82f995f27 100644 --- a/packages/sphinx-test-reports/tests/test_identity.py +++ b/packages/sphinx-test-reports/tests/test_identity.py @@ -22,6 +22,7 @@ case_display_name, deterministic_case_id, short_hash, + split_case_name, ) @@ -54,6 +55,38 @@ def test_unknown_classname_is_treated_as_absent(self): assert case_display_name("unknown", "Standalone") == "Standalone" +class TestSplitCaseName: + """``name[param]`` as pytest spells it, split for both writers alike. + + The one definition the directives and the converter share; the shapes + pinned here are the ones a report can carry, so a change to the pattern + shows up as a failing test rather than as two writers disagreeing. + """ + + @pytest.mark.parametrize( + ("name", "expected"), + [ + ("test_x", ("test_x", "")), + ("test_x[a-b]", ("test_x", "a-b")), + ("tests.test_cli.test_help[1-2]", ("tests.test_cli.test_help", "1-2")), + # An empty parameter list is a parameter of "". + ("test_x[]", ("test_x", "")), + # The parameter is greedy: brackets inside it survive. + ("test_x[a[0]-b]", ("test_x", "a[0]-b")), + # googletest's parameterised spelling carries no brackets at all. + ("Works/0", ("Works/0", "")), + # Not the pytest shape: the name is kept whole, never cut at a + # bracket -- an unclosed one, text after the closing one, or a + # name that starts with one. + ("test_x[abc", ("test_x[abc", "")), + ("test_x[a]b", ("test_x[a]b", "")), + ("[only]", ("[only]", "")), + ], + ) + def test_splits_pytest_s_shape_and_only_that(self, name, expected): + assert split_case_name(name) == expected + + class TestDeterministicCaseId: def test_is_score_compatible(self): assert ( diff --git a/packages/sphinx-test-reports/tests/test_needs_export.py b/packages/sphinx-test-reports/tests/test_needs_export.py new file mode 100644 index 000000000..494522284 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_needs_export.py @@ -0,0 +1,381 @@ +"""Unit tests for the needs.json writer and the URL helpers behind it. + +The CLI tests cover the end-to-end shape; these pin down the pieces whose +failure would be silent in that shape -- evidence text mangled but present, +cases lost but the file valid, a URL that looks right and 404s. +""" + +import pytest + +from sphinxcontrib.test_reports.needs_export import ( + build_content, + build_need, + build_needs_file, +) +from sphinxcontrib.test_reports.remote import ( + check_url_pattern, + normalise_remote_url, + source_url, +) + + +def _case(name="test_x", **extra): + return {"classname": "Suite", "name": name, "file": "t.py", "line": 3, **extra} + + +class TestEvidenceText: + def test_relative_indentation_survives(self): + # A traceback is only readable with its indentation; only the common + # indentation XML pretty-printing adds may go. + text = ( + "\n" + " Traceback (most recent call last):\n" + ' File "t.py", line 3, in test_x\n' + " assert a == b\n" + " ^^^^^^\n" + " AssertionError\n" + " " + ) + content = build_content({"parts": [{"kind": "failure", "text": text}]}) + assert ' Traceback (most recent call last):\n File "t.py"' in content + assert " ^^^^^^\n AssertionError" in content + + def test_blank_lines_carry_no_trailing_whitespace(self): + content = build_content({"parts": [{"kind": "failure", "text": "a\n\nb"}]}) + assert "\n a\n\n b\n" in content + + +class TestDuplicateCases: + def test_a_case_reported_twice_is_refused(self): + # Its ID is derived from where the test is, so a repeat is the same + # case twice; collapsing them would silently lose evidence. + reports = [ + ("a.xml", [{"name": "s", "testcases": [_case(), _case("test_y")]}]), + ("b.xml", [{"name": "s", "testcases": [_case()]}]), + ] + with pytest.raises(ValueError, match="1 test case.*testcase__Suite__test_x"): + build_needs_file(reports) + + def test_distinct_cases_are_all_kept(self): + reports = [("a.xml", [{"name": "s", "testcases": [_case(), _case("test_y")]}])] + payload = build_needs_file(reports) + assert payload["versions"]["1.0"]["needs_amount"] == 2 + + +class TestPropertyCollisions: + def test_a_property_named_like_a_builtin_field_is_dropped_and_collected(self): + collisions = set() + need = build_need( + "r.xml", + "s", + _case(properties={"result": "tampered", "owner": "me"}), + extra_options=("result", "owner"), + collisions=collisions, + ) + assert need["result"] != "tampered" + assert need["owner"] == "me" + assert collisions == {"result"} + + def test_a_listed_name_no_case_carries_is_not_a_collision(self): + collisions = set() + build_need( + "r.xml", "s", _case(), extra_options=("result",), collisions=collisions + ) + assert collisions == set() + + def test_collisions_are_reported_once_per_run(self): + # Every other diagnostic fires once per run; so does this one, however + # many cases carry the property. + reported = [] + reports = [ + ( + "a.xml", + [ + { + "name": "s", + "testcases": [ + _case("t1", properties={"result": "x"}), + _case("t2", properties={"result": "y", "time": "z"}), + ], + } + ], + ), + ] + build_needs_file( + reports, extra_options=("result", "time"), warn=reported.append + ) + assert len(reported) == 1 + assert "result" in reported[0] and "time" in reported[0] + assert "taken by built-in or link fields" in reported[0] + + def test_without_a_collector_the_property_is_still_dropped(self): + # `file` is the report-path field by default, so a property of that + # name collides with it and the report path wins. + need = build_need( + "r.xml", + "s", + _case(properties={"file": "elsewhere.py"}), + extra_options=("file",), + ) + assert need["file"] == "r.xml" + + +class TestNeedShape: + def test_matches_the_build_s_test_case_need(self): + need = build_need("reports/r.xml", "suite-1", _case("test_x[a-b]")) + assert need["suite"] == "suite-1" + assert need["case"] == "test_x[a-b]" + assert need["case_name"] == "test_x" + assert need["case_parameter"] == "a-b" + assert need["classname"] == "Suite" + assert need["file"] == "reports/r.xml" + assert need["case_file"] == "t.py" + assert need["case_line"] == "3" + + def test_field_names_follow_the_section(self): + # The names the build's file_option / source_*_option select. + fields = { + "file_option": "report_file", + "source_file_option": "file", + "source_line_option": "line", + } + need = build_need("r.xml", "s", _case(), fields=fields) + assert need["report_file"] == "r.xml" + assert need["file"] == "t.py" + assert need["line"] == "3" + assert "case_file" not in need + + +class TestPropertyGate: + def test_only_named_properties_are_exported(self): + case = _case(properties={"TestType": "unit", "Owner": "me"}) + need = build_need("r.xml", "s", case, extra_options=("TestType",)) + assert need["TestType"] == "unit" + assert "Owner" not in need + + @staticmethod + def _two_cases_with_properties(): + return [ + ( + "a.xml", + [ + { + "name": "s", + "testcases": [ + _case("t1", properties={"Owner": "me", "Kind": "x"}), + _case("t2", properties={"Owner": "you"}), + ], + } + ], + ), + ] + + def test_left_out_properties_are_reported_once_for_all_names(self): + # One report naming both -- not one per name, not one per case. + reported = [] + build_needs_file(self._two_cases_with_properties(), warn=reported.append) + assert len(reported) == 1 + assert "Owner" in reported[0] and "Kind" in reported[0] + assert "extra_options" in reported[0] + + def test_exported_properties_are_not_reported(self): + reported = [] + build_needs_file( + self._two_cases_with_properties(), + extra_options=("Kind",), + warn=reported.append, + ) + assert len(reported) == 1 + assert "Owner" in reported[0] and "Kind" not in reported[0] + + def test_an_exported_property_absent_from_a_case_is_null(self): + # The field is always there, so a schema can require it; null is what + # the build leaves in a registered field a directive did not set. + need = build_need("r.xml", "s", _case(), extra_options=("TestType",)) + assert "TestType" in need + assert need["TestType"] is None + + +class TestRemoteUrls: + @pytest.mark.parametrize( + ("remote", "base"), + [ + ( + "ssh://git@gitlab.example.com:2222/org/repo.git", + "https://gitlab.example.com/org/repo", + ), + ("ssh://git@github.com/org/repo.git", "https://github.com/org/repo"), + ("git@github.com:org/repo.git", "https://github.com/org/repo"), + ("https://github.com/org/repo.git/", "https://github.com/org/repo"), + ("gitlab.example.com/org/repo", "https://gitlab.example.com/org/repo"), + ("git://github.com/org/repo.git", "https://github.com/org/repo"), + ("file:///srv/git/repo.git", "file:///srv/git/repo.git"), # passed through + # GitLab's CI_REPOSITORY_URL: the job token must not reach the file. + ( + "https://gitlab-ci-token:glcbt-xyz@gitlab.example.com/org/repo.git", + "https://gitlab.example.com/org/repo", + ), + ("https://user:pass@github.com/org/repo/", "https://github.com/org/repo"), + ("token@github.com:org/repo.git", "https://github.com/org/repo"), + # Local paths are passed through -- a drive letter is not a host. + ("C:\\repos\\repo", "C:\\repos\\repo"), + ("C:/repos/repo", "C:/repos/repo"), + ("/srv/git/repo", "/srv/git/repo"), + ], + ) + def test_remotes_normalise_to_a_browsable_base(self, remote, base): + # An ssh port belongs to the ssh endpoint, not the web UI -- and must + # not be mistaken for the first path segment. + assert normalise_remote_url(remote) == base + + def test_without_a_line_the_anchor_is_dropped(self): + assert ( + source_url("https://h/r", "abc", "f.py", "") == "https://h/r/blob/abc/f.py" + ) + + def test_without_a_line_a_fragment_without_the_line_is_kept(self): + url = source_url( + "https://h/r", "abc", "f.py", "", "{base}/{file}?ref={commit}#src" + ) + assert url == "https://h/r/f.py?ref=abc#src" + + def test_without_a_line_a_query_pattern_keeps_its_shape(self): + url = source_url( + "https://h/r", "abc", "f.py", "", "{base}/{file}?ref={commit}&line={line}" + ) + assert url == "https://h/r/f.py?ref=abc&line=" + + +class TestUrlPatternCheck: + def test_the_default_and_a_custom_pattern_pass(self): + assert check_url_pattern("{base}/blob/{commit}/{file}#L{line}") is None + assert check_url_pattern("{base}/-/blob/{commit}/{file}#L{line}") is None + + def test_an_unknown_placeholder_is_named(self): + problem = check_url_pattern("{base}/blob/{ref}/{file}#L{line}") + assert problem is not None + assert "{ref}" in problem + assert "{commit}" in problem # the allowed names are listed + + @pytest.mark.parametrize( + "pattern", + [ + "{base/blob/{commit}/{file}", + "{}/{file}", + "{0}/{file}", + "{base}}", + "{line:zz}", + ], + ) + def test_a_malformed_template_is_rejected(self, pattern): + problem = check_url_pattern(pattern) + assert problem is not None + assert "malformed" in problem + + @pytest.mark.parametrize( + "pattern", ["{base.__class__}/{file}", "{base[0]}/{file}", "{base.anything}"] + ) + def test_an_attribute_or_index_lookup_is_an_unknown_placeholder(self, pattern): + # str.format would resolve these on the substituted value -- and fail + # with an AttributeError, not a KeyError, on the first case. + problem = check_url_pattern(pattern) + assert problem is not None + assert "unknown placeholder {base" in problem + assert "{commit}" in problem + + +class TestDeclaredSchema: + """Every field the file uses is declared in the file. + + sphinx-needs writes a ``needs_schema`` into the ``needs.json`` it produces + and the converter has to do the same, or the type of a field is knowable + only by loading this extension into a Sphinx build -- which a consumer of + the artifact (a schema check, S-CORE's tooling, a plain jsonschema + validator) does not do. + """ + + @staticmethod + def _declared(**kwargs): + """The schema block and the needs of a one-case report.""" + reports = [("a.xml", [{"name": "s", "testcases": [_case()]}])] + payload = build_needs_file(reports, **kwargs) + version = payload["versions"][payload["current_version"]] + return version["needs_schema"], version["needs"] + + def test_the_block_is_a_json_schema(self): + schema, _ = self._declared() + assert schema["$schema"] == "http://json-schema.org/draft-07/schema#" + assert schema["type"] == "object" + + def test_no_field_of_a_need_is_undeclared(self): + schema, needs = self._declared( + link_properties={"Verifies": "verifies"}, + extra_options=("TestType",), + ) + written = {key for need in needs.values() for key in need} + assert written - set(schema["properties"]) == set() + + def test_the_core_fields_are_declared_as_core(self): + schema, _ = self._declared() + properties = schema["properties"] + assert properties["id"]["field_type"] == "core" + assert properties["tags"]["type"] == "array" + assert properties["content"]["type"] == "string" + + def test_time_is_declared_as_the_string_it_is(self): + # Pins today's type. It is the field's declared type in the build too, + # so the two change together or not at all. + schema, _ = self._declared() + assert schema["properties"]["time"]["type"] == ["string", "null"] + + def test_every_declaration_carries_a_description(self): + # A type alone does not say what a field holds; `case_line` and + # `result_text` are not self-explanatory. + schema, _ = self._declared( + link_properties={"Verifies": "verifies"}, extra_options=("TestType",) + ) + undescribed = [ + name + for name, declaration in schema["properties"].items() + if not declaration.get("description") + ] + assert undescribed == [] + + def test_renamed_fields_are_declared_under_their_names(self): + schema, _ = self._declared( + fields={ + "file_option": "report_file", + "source_file_option": "file", + "source_line_option": "line", + } + ) + properties = schema["properties"] + assert properties["report_file"]["description"] == "Test file name" + assert "line" in properties + assert "case_file" not in properties + assert "case_line" not in properties + + def test_a_mapped_link_field_is_declared_as_a_list_of_ids(self): + schema, _ = self._declared(link_properties={"Verifies": "verifies"}) + assert schema["properties"]["verifies"] == { + "type": "array", + "items": {"type": "string"}, + "description": "Link field", + "field_type": "links", + "default": [], + } + + def test_an_extra_option_is_declared_even_when_no_case_carries_it(self): + # The option is what the build registers, so the file says the field + # exists; a case without the property carries it as null -- the type + # the declaration allows for exactly that. + schema, needs = self._declared(extra_options=("TestType",)) + assert next(iter(needs.values()))["TestType"] is None + assert schema["properties"]["TestType"]["type"] == ["string", "null"] + + def test_the_counts_of_file_and_suite_needs_are_not_declared(self): + # The converter writes test-case needs only; declaring `passed` and + # friends would promise fields the file never carries. + schema, _ = self._declared() + assert "passed" not in schema["properties"] + assert "suites" not in schema["properties"] diff --git a/packages/sphinx-test-reports/tests/test_project_config.py b/packages/sphinx-test-reports/tests/test_project_config.py index 2f3b1e5a9..077b198c7 100644 --- a/packages/sphinx-test-reports/tests/test_project_config.py +++ b/packages/sphinx-test-reports/tests/test_project_config.py @@ -18,12 +18,15 @@ from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError from sphinxcontrib.test_reports.projectconfig import ( BRIDGE_KEYS, + BUILD_TABLE, + DEFAULT_FIELD_NAMES, DEFAULT_TOML_FILENAME, - FOREIGN_TABLES, SECTION, TomlConfigError, + field_names, find_project_config, load_project_config, + needs_settings, ) @@ -66,10 +69,10 @@ def test_full_section_round_trips(self, tmp_path): assert config["extra_options"] == ["more_info"] assert config["property_link_types"] == {"request": "req"} - def test_foreign_sub_table_is_kept_without_a_warning(self, tmp_path): - # [test_reports.build] belongs to the command line. This reader must - # neither complain about it nor apply it to a tr_* value -- the section - # describes the project, not just this extension. + def test_build_needs_table_is_validated_but_never_bridged(self, tmp_path): + # [test_reports.build.needs] belongs to the command line. The build + # validates it -- one file, one verdict -- but must not map it onto a + # tr_* value. _write( tmp_path, """ @@ -78,14 +81,188 @@ def test_foreign_sub_table_is_kept_without_a_warning(self, tmp_path): [test_reports.build.needs] project = "demo" - need_type = "check" + tags = ["ci"] """, ) reported = [] section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME, reported.append) assert reported == [] - assert section["build"] == {"needs": {"project": "demo", "need_type": "check"}} - assert not set(FOREIGN_TABLES) & set(BRIDGE_KEYS) + assert needs_settings(section) == {"project": "demo", "tags": ["ci"]} + assert BUILD_TABLE not in BRIDGE_KEYS + + @pytest.mark.parametrize( + ("key", "value"), + [ + ("project", "42"), + ("tags", '"ci, unit"'), # a bare string is not an array + ("tags", "[1]"), + ("link_properties", '["a"]'), + ("link_properties", '{ Verifies = ["verifies"] }'), # values too + ], + ) + def test_build_needs_wrong_types_are_rejected(self, tmp_path, key, value): + _write(tmp_path, f"[test_reports.build.needs]\n{key} = {value}\n") + with pytest.raises(TomlConfigError, match=f"build.needs.{key}"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_unknown_artifact_under_build_is_reported_but_not_fatal(self, tmp_path): + # `build` holds one table per artifact the command line produces. A + # newer command may produce one this version does not know, and a file + # naming it must not take the build down. + _write( + tmp_path, + """ + [test_reports.build.needs] + project = "p" + + [test_reports.build.graph] + format = "svg" + """, + ) + reported = [] + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME, reported.append) + assert needs_settings(section) == {"project": "p"} + assert section[BUILD_TABLE] == {"needs": {"project": "p"}} + assert len(reported) == 1 + assert "graph" in reported[0] + assert "[test_reports.build]" in reported[0] + + def test_a_non_table_needs_artifact_is_rejected(self, tmp_path): + _write(tmp_path, '[test_reports.build]\nneeds = "yes"\n') + with pytest.raises(TomlConfigError, match="build.needs"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_build_needs_unknown_key_is_reported_but_not_fatal(self, tmp_path): + _write(tmp_path, "[test_reports.build.needs]\nprojct = 'typo'\nproject = 'p'\n") + reported = [] + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME, reported.append) + assert needs_settings(section) == {"project": "p"} + assert len(reported) == 1 + assert "projct" in reported[0] + assert "[test_reports.build.needs]" in reported[0] + + def test_need_type_and_case_type_must_agree(self, tmp_path): + # The converter takes the need type (and the deterministic-ID prefix) + # from build.needs.need_type, the build from case's type. Disagreeing + # produces a needs.json the build neither registers nor cross-links. + _write( + tmp_path, + """ + [test_reports.build.needs] + need_type = "testcase" + + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + with pytest.raises(TomlConfigError, match="need_type"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_a_missing_side_is_compared_at_its_default(self, tmp_path): + # A customised case next to a convert table without need_type is a + # disagreement too: the converter would write the default type. + _write( + tmp_path, + """ + [test_reports.build.needs] + project = "p" + + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + with pytest.raises(TomlConfigError, match="'testcase'.*'check'"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + # ... and the mirror: need_type set, case left at its default. + _write(tmp_path, '[test_reports.build.needs]\nneed_type = "check"\n') + with pytest.raises(TomlConfigError, match="'check'.*'testcase'"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_without_a_convert_table_the_case_type_is_free(self, tmp_path): + # A project that only builds may name its case type as it likes. + _write( + tmp_path, + """ + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + assert ( + load_project_config(tmp_path / DEFAULT_TOML_FILENAME)["case"][1] == "check" + ) + + def test_empty_link_property_names_are_rejected_by_the_loader(self, tmp_path): + # One verdict for both consumers: the build refuses what the converter + # would refuse. + _write( + tmp_path, + '[test_reports.build.needs]\nlink_properties = { Verifies = "" }\n', + ) + with pytest.raises(TomlConfigError, match="link_properties"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_field_names_default_to_the_build_s(self, tmp_path): + _write(tmp_path, "[test_reports]\nsource_file_option = 'src'\n") + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + names = field_names(section) + assert names["source_file_option"] == "src" + assert names["file_option"] == DEFAULT_FIELD_NAMES["file_option"] == "file" + assert names["source_line_option"] == "case_line" + + def test_colliding_field_names_are_rejected(self, tmp_path): + # file (report path) and file (source path) cannot share a field. + _write(tmp_path, "[test_reports]\nsource_file_option = 'file'\n") + with pytest.raises(TomlConfigError, match="both name the need field 'file'"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + @pytest.mark.parametrize( + ("key", "name"), + [ + ("file_option", "case"), + ("source_file_option", "result"), + ("source_line_option", "id"), + ], + ) + def test_a_rename_onto_a_fixed_field_is_rejected(self, tmp_path, key, name): + # Every test-case need has these already: the directives would pass + # the keyword twice, the converter overwrite one value with the other. + _write(tmp_path, f"[test_reports]\n{key} = '{name}'\n") + with pytest.raises(TomlConfigError, match=f"{key} = '{name}'"): + load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + + def test_need_type_and_case_type_agreeing_is_fine(self, tmp_path): + _write( + tmp_path, + """ + [test_reports.build.needs] + need_type = "check" + + [test_reports.case] + directive = "test-case" + type = "check" + name = "Check" + prefix = "CH_" + color = "#999999" + style = "rectangle" + """, + ) + section = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) + assert section["case"][1] == needs_settings(section)["need_type"] == "check" def test_unknown_key_is_reported_but_not_fatal(self, tmp_path): # ubproject.toml is shared with tools on independent release cadences, @@ -587,6 +764,18 @@ def test_unknown_key_warns_but_builds(self, tmp_path): assert "no_such_key" in warnings assert app.config.tr_file_option == "ok" + def test_build_needs_table_is_not_applied_to_the_build(self, tmp_path): + docs = _basic_doc( + tmp_path, + "[test_reports]\nfile_option = 'ok'\n\n[test_reports.build.needs]\nproject = 'p'\n", + ) + app, warnings = _build(docs) + # Only this table's fate is under test; other builds in the process may + # already have emitted unrelated Sphinx warnings. + assert "convert" not in warnings + assert app.config.tr_file_option == "ok" + assert not hasattr(app.config, "tr_convert") + def test_walks_up_from_the_confdir(self, tmp_path): # ubproject.toml at the repo root, conf.py in docs/ -- the layout the # shared file exists for. diff --git a/packages/sphinx-test-reports/tests/test_source_location.py b/packages/sphinx-test-reports/tests/test_source_location.py index 1450d616f..4c00926df 100644 --- a/packages/sphinx-test-reports/tests/test_source_location.py +++ b/packages/sphinx-test-reports/tests/test_source_location.py @@ -142,6 +142,24 @@ def test_source_file_and_source_line_sharing_a_name_is_an_error(self): with pytest.raises(InvalidConfigurationError): check_field_name_collisions(config) + def test_a_rename_onto_a_fixed_field_is_an_error(self): + # The same failure as two options sharing a name: every test-case + # directive passes `case` to add_need already. + from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError + from sphinxcontrib.test_reports.test_reports import check_field_name_collisions + + config = self._Config( + tr_file_option="case", + tr_source_file_option="case_file", + tr_source_line_option="case_line", + ) + + with pytest.raises(InvalidConfigurationError) as exc: + check_field_name_collisions(config) + + assert "tr_file_option" in str(exc.value) + assert "'case'" in str(exc.value) + def test_distinct_names_are_accepted(self): from sphinxcontrib.test_reports.test_reports import check_field_name_collisions From f0a58b875aa8743c9d3cba1d889841e94a2fe9bb Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Thu, 10 Sep 2026 22:31:33 +0200 Subject: [PATCH 144/159] feat(pytest): plugin writing the XML shape this extension reads (useblocks/sphinx-test-reports#151) Based on master. Independent of the needs.json converter (useblocks/sphinx-test-reports#148, merged); rebased on top of it. ## Why A stock pytest run writes a JUnit XML this extension can only partly use. Under pytest's default `junit_family = xunit2`, no `` carries the `file`/`line` attributes that give a test case its source location (`tr_source_file_option`/`tr_source_line_option`, and the deterministic ID of `tr_deterministic_case_ids`). Under `xunit1` pytest writes them, but counts the line from 0, keeps Bazel's runfiles prefix, and has no way to point a case at the file that drove it. And nothing records the requirements a test verifies. ## What `-p sphinxcontrib.test_reports.pytest_plugin`, with `junit_family = xunit1` (warned about otherwise), does two things to every ``, through hooks on the test reports rather than fixtures, so a case skipped or erroring during setup gets the same treatment and pytest-xdist works: - the source location becomes the one an editor shows: line counted from 1, path relative to the rootdir with Bazel's `_main/` runfiles prefix cut at a whole path component; - the properties of an `add_test_properties(...)` decorator (or, for file-driven parameterised tests, the `apply_test_metadata(...)` runtime helper, which can also point the case at the driving file) are written as ``. Which properties exist is configuration, not code. The `test_reports_properties` ini option declares them, one `keyword [= XmlName] [, list]` per line: the keyword a test writes, the `` name it is written under, and whether it takes a list (joined with `", "`, which `tr_property_link_types` splits again). A keyword not declared is written under its own name with a single value; a list under it, a list item that is not a string, or bytes, is a `TypeError` naming the option, so nothing is lost to a Python `repr` silently. The plugin ships no metamodel of its own. S-CORE's model is the worked example in the docs: ```ini [pytest] addopts = -p sphinxcontrib.test_reports.pytest_plugin junit_family = xunit1 test_reports_properties = partially_verifies = PartiallyVerifies, list fully_verifies = FullyVerifies, list test_type = TestType derivation_technique = DerivationTechnique ``` Ported from S-CORE docs-as-code's `score_pytest` attribute plugin: same two entry-point names, and with that example the XML comes out the same, so tests written against that plugin keep working when they import from here. Four deliberate differences in the XML: a case skipped or erroring at setup carries its location and properties here and pytest's stock values there; the properties keep the order of the keywords; the Bazel prefix is cut at a whole `_main` component only; and a `file` handed to `apply_test_metadata` is cut the same way. Two of that plugin's rules are not ported, as process rules of that project rather than properties of the data: the `TestType`/`DerivationTechnique` vocabularies are documented, not enforced, and a decorated test needs no docstring. The package `__init__` resolves `setup` lazily (PEP 562, useblocks/sphinx-test-reports#145), so loading the plugin into a pytest process imports neither Sphinx nor docutils; a test asserts it. A per-module mypy override lifts only the two `Any` checks the pytest API needs. A `pytest` extra (`pytest>=7.0`, where everything the plugin uses exists) pulls pytest in; it is not a dependency of the extension. pytest before 7.3.2 does not run on Python 3.12 by itself, so a `plugin_floor` nox session, wired into CI, runs the plugin's tests on the oldest pytest of each Python: 7.0.1 on 3.11, 7.3.2 on 3.12. ## Tests `tests/test_pytest_plugin.py`, 63 tests through `pytester`, each inner pytest a fresh subprocess: locations (a decorated function is located at its first decorator, as pytest does; skipped and setup-erroring cases included), the properties written from ini and pyproject declarations, the option grammar and its errors, the value rules, marker merging across class and function, the runtime helper's location override, nested in-process sessions (one failing to configure), a decorator applied before `pytest_configure`, a bad shape next to a fixture error, `--strict-markers`, the `xunit2` start-up notice under strict warning policies, `-p no:junitxml`, `legacy`, an xdist run, the Bazel path cut, and that importing the plugin imports no Sphinx. Verified on pytest 7.0.1 and 7.4.4 (Python 3.11), 7.3.2, 7.4.4 and 8.4.2 (3.12) and 9.1.1 (3.14). --- .../.github/workflows/ci.yaml | 23 + .../sphinx-test-reports/docs/changelog.rst | 9 + packages/sphinx-test-reports/docs/index.rst | 1 + packages/sphinx-test-reports/docs/pytest.rst | 269 +++++++ packages/sphinx-test-reports/noxfile.py | 14 + packages/sphinx-test-reports/pyproject.toml | 24 + .../test_reports/pytest_plugin.py | 541 +++++++++++++ .../sphinx-test-reports/tests/conftest.py | 2 +- .../tests/test_pytest_plugin.py | 741 ++++++++++++++++++ 9 files changed, 1623 insertions(+), 1 deletion(-) create mode 100644 packages/sphinx-test-reports/docs/pytest.rst create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/pytest_plugin.py create mode 100644 packages/sphinx-test-reports/tests/test_pytest_plugin.py diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index 73ef1592b..e1565b73a 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -22,6 +22,28 @@ jobs: - name: Run Tests run: nox --non-interactive --session "tests-${{ matrix.python-version }}(sphinx='${{ matrix.sphinx-version }}', sphinx_needs='${{ matrix.sphinx_needs-version }}')" -- --full-trace + plugin-floor: + name: "Plugin (python: ${{ matrix.python-version }}, pytest: ${{ matrix.pytest-version }})" + runs-on: ubuntu-latest + strategy: + matrix: + include: + - python-version: "3.11" + pytest-version: "7.0.1" + - python-version: "3.12" + pytest-version: "7.3.2" + steps: + - uses: actions/checkout@v2 + - name: Set Up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Nox Dependencies + run: | + python -m pip install poetry nox nox-poetry + - name: Run the plugin's tests on the oldest supported pytest + run: nox --non-interactive --session "plugin_floor(python='${{ matrix.python-version }}', pytest_version='${{ matrix.pytest-version }}')" -- --full-trace + pre-commit: name: pre-commit runs-on: ubuntu-latest @@ -76,6 +98,7 @@ jobs: needs: - tests + - plugin-floor - pre-commit - mypy - linkcheck diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index ee3c8409b..f55f64afb 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -40,6 +40,15 @@ Unreleased consumer can read the type of a field from the artifact instead of from a Sphinx build with the extension loaded. The declarations and the fields the extension registers come from one table, so the two cannot drift apart. +* Feature: A pytest plugin (``-p sphinxcontrib.test_reports.pytest_plugin``) + gives every test case the source location an editor shows -- pytest's + ``file``/``line`` counted from 1, Bazel's runfiles prefix cut, a runtime + override for file-driven tests -- and requirement-link ```` from + an ``add_test_properties`` decorator or an ``apply_test_metadata`` runtime + helper, for cases skipped at setup and under pytest-xdist too. Which + properties exist, their XML names and which take lists is the + ``test_reports_properties`` pytest ini option; S-CORE's model, which the + plugin was ported from, is the documented example. See :ref:`pytest_plugin`. * Bugfix: ``tr_file_option``, ``tr_source_file_option`` and ``tr_source_line_option`` may no longer name a fixed field such as ``case`` or ``result``, in ``conf.py`` or in the declarative file. The build diff --git a/packages/sphinx-test-reports/docs/index.rst b/packages/sphinx-test-reports/docs/index.rst index 884dd97dc..4341bf59e 100644 --- a/packages/sphinx-test-reports/docs/index.rst +++ b/packages/sphinx-test-reports/docs/index.rst @@ -76,6 +76,7 @@ Content directives/index configuration cli + pytest parsers filter functions diff --git a/packages/sphinx-test-reports/docs/pytest.rst b/packages/sphinx-test-reports/docs/pytest.rst new file mode 100644 index 000000000..02ab1e5f1 --- /dev/null +++ b/packages/sphinx-test-reports/docs/pytest.rst @@ -0,0 +1,269 @@ +.. _pytest_plugin: + +pytest plugin +============= +.. versionadded:: 1.5.0 + +A stock pytest run writes a JUnit XML that this extension can only partly use. +Under pytest's default ``junit_family = xunit2`` no ```` carries the +``file``/``line`` attributes that give a test case its source location +(``tr_source_file_option``/``tr_source_line_option``, and the deterministic ID +of ``tr_deterministic_case_ids``). Under ``xunit1`` pytest writes them, but +counts the line from 0, keeps Bazel's runfiles prefix, and has no way to point +a case at the file that drove it. And nothing records the requirements a test +verifies. ``Sphinx-Test-Reports`` ships a small pytest plugin that takes care +of both. + +The plugin is generic: which properties exist, what they are called in the XML +and whether they take a list is pytest configuration, not code. S-CORE's model +is the worked example below. + +Enabling it +----------- + +.. code-block:: ini + + # pytest.ini / pyproject.toml [tool.pytest.ini_options] + addopts = -p sphinxcontrib.test_reports.pytest_plugin + junit_family = xunit1 + +then run with ``--junitxml=report.xml`` as usual. ``junit_family = xunit1`` is +required: pytest writes ```` attributes only under that family (its +``legacy`` is an alias), and the plugin warns at start-up when a report is +requested under ``xunit2``. Every test case now carries ``file`` and ``line`` +as an editor shows them: the line counted from 1, the path relative to the +pytest rootdir with Bazel's ``_main/`` runfiles prefix cut off. Every case +means every case -- one skipped or erroring during setup gets the same +treatment, so a deterministic ID does not move with the outcome. The plugin +works through hooks on the test reports, not fixtures, which is also why it +holds under pytest-xdist: the location is written on the controller, where +pytest keeps the XML writer, and the properties travel with the reports. + +Nothing else changes for tests that do not use the decorator below. + +The start-up notice is a ``TestReportsConfigWarning``. A project that turns +warnings into errors (``filterwarnings = error``, ``-W error``) gets it as a +clean usage error instead; +``ignore::sphinxcontrib.test_reports.pytest_plugin.TestReportsConfigWarning`` +silences it. + +Declaring the properties +------------------------ + +The ``test_reports_properties`` ini option declares the properties a test may +carry, one per line: + +.. code-block:: text + + keyword [= XmlName] [, list] + +*keyword* + what a test author writes -- the argument of ``add_test_properties`` or the + key in the metadata of ``apply_test_metadata``. +*XmlName* + the ```` written to the report. Leave it out when it + equals the keyword. +``list`` + marks a multi-valued property: a list is written joined with ``", "`` -- the + shape ``tr_property_link_types`` splits again -- and a bare string counts as + one value. Without it the property takes exactly one value, and a list is a + ``TypeError`` rather than a silent join. + +A keyword that is not declared is written under its own name with a single +value. A list under it is a ``TypeError`` whose message names the option, so a +project cannot lose requirement IDs to a Python ``repr`` silently. For the same +reason every item of a list has to be a string: a nested list, ``bytes`` or any +other object is a ``TypeError`` naming the item. Values are joined with a comma +and split on it again on the build side, and there is no escaping, so a value +of a ``list`` property must not contain a comma. A line outside the grammar, or +two keywords declaring the same XML name, stops the run at start-up with a usage +error that quotes the line. + +The option exists only while the plugin is loaded: an ini file that declares +``test_reports_properties`` without the ``-p`` line above fails +``--strict-config`` with an unknown option. The two belong together. + +**Example: S-CORE.** The model of S-CORE's docs-as-code, whose ``score_pytest`` +plugin this one was ported from: + +.. code-block:: ini + + # pytest.ini + [pytest] + addopts = -p sphinxcontrib.test_reports.pytest_plugin + junit_family = xunit1 + test_reports_properties = + partially_verifies = PartiallyVerifies, list + fully_verifies = FullyVerifies, list + test_type = TestType + derivation_technique = DerivationTechnique + +.. code-block:: toml + + # pyproject.toml + [tool.pytest.ini_options] + addopts = "-p sphinxcontrib.test_reports.pytest_plugin" + junit_family = "xunit1" + test_reports_properties = [ + "partially_verifies = PartiallyVerifies, list", + "fully_verifies = FullyVerifies, list", + "test_type = TestType", + "derivation_technique = DerivationTechnique", + ] + +With it, tests written against ``score_pytest`` keep working when they import +``add_test_properties`` and ``apply_test_metadata`` from here. The values of +``test_type`` and ``derivation_technique`` are the identifiers of S-CORE's +verification methods and derivation techniques, from its +`verification concept `_: + +.. list-table:: + :header-rows: 1 + + * - ``TestType`` + - ``DerivationTechnique`` + * - ``control-flow-analysis``, ``data-flow-analysis``, ``fault-injection``, + ``inspection``, ``interface-test``, ``requirements-based``, + ``resource-usage``, ``static-code-analysis``, + ``structural-statement-coverage``, ``structural-branch-coverage``, + ``walkthrough`` + - ``requirements-analysis``, ``design-analysis``, ``boundary-values``, + ``equivalence-classes``, ``fuzz-testing``, ``error-guessing``, + ``explorative-testing`` + +They are documented here, not enforced by the plugin: S-CORE's own metamodel +accepts any string for both fields, and a project with a different metamodel +writes its own values. + +Linking a test to requirements +------------------------------ + +With the S-CORE model declared: + +.. code-block:: python + + from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + + @add_test_properties( + partially_verifies=["REQ_1", "REQ_2"], + test_type="requirements-based", + derivation_technique="requirements-analysis", + ) + def test_addition(): + """Adding two numbers.""" + assert 1 + 1 == 2 + +writes, on that test's ````: + +.. code-block:: xml + + + + + + + +The declared XML name doubles as keyword, so ``PartiallyVerifies=[...]`` is +accepted too; a keyword declared as such wins over an XML name of the same +spelling. Empty values are not written, and a decorator that would write +nothing is an error at import time. The values are written when the test is +set up, against the declared model; a wrong shape -- a list where one value is +expected -- makes that test error at setup with the ``TypeError`` above (its +need then carries the result ``error``, not ``failure``). The properties keep +the order of the keywords. + +The decorator also goes on a class, and decorators stack: a classification on +the class and the requirement links on each method are merged into the method's +````, the decorator closest to the function winning where two set +the same property. + +A skipped test carries its properties too, so its requirement links are in the +report next to ``result="skipped"``. The plugin records the link; what the link +means is the project's rule to make. A traceability query that reads "verified" +off a link has to look at ``result`` as well, or a test that never ran counts as +verification. + +On the build side the properties arrive through the directives' property +handling: ``tr_property_link_types`` turns a comma-separated property into a +link field, and the link field has to exist as a sphinx-needs link type; +``tr_extra_options`` lists the properties that become plain fields, each of +which has to exist as a need field -- + +.. code-block:: python + + # conf.py, sphinx-needs 7 and later + needs_links = { + "partially_verifies": {"incoming": "partially verified by", "outgoing": "partially verifies"}, + "fully_verifies": {"incoming": "fully verified by", "outgoing": "fully verifies"}, + } + needs_fields = {"TestType": {"nullable": True}, "DerivationTechnique": {"nullable": True}} + tr_property_link_types = {"PartiallyVerifies": "partially_verifies", "FullyVerifies": "fully_verifies"} + tr_extra_options = ["TestType", "DerivationTechnique"] + +On sphinx-needs 6 the two registrations are ``needs_extra_links`` (a list of +dicts with an ``option`` key) and ``needs_extra_options`` (a list of names); +sphinx-needs 7 deprecated both in favour of the spelling above. A link field +missing from ``needs_links`` fails the build on the first test case that carries +the property. The same names work for any other consumer of the report. + +Metadata known only at run time +------------------------------- + +A parameterised test whose metadata comes from the file it is driven by cannot +use a decorator. :func:`apply_test_metadata` records the same properties from +inside the test body, and can point the case at the file that drove it instead +of at the test function: + +.. code-block:: python + + from sphinxcontrib.test_reports.pytest_plugin import apply_test_metadata + + @pytest.mark.parametrize("spec", SPECS) + def test_spec(spec, record_property): + metadata = read_metadata(spec) # {"fully_verifies": [...], "test_type": ...} + apply_test_metadata( + record_property=record_property, + metadata=metadata, + file=str(spec), + line=metadata_line(spec), + ) + ... # the actual checks + +Call it before the first assertion, so a failing test still carries its +metadata. Metadata without values -- a file with an empty metadata block, a +parser handing back ``""`` or ``[]`` for an absent field -- writes no properties +and is not an error; ``file`` and ``line`` are applied regardless. ``file`` is +cut like every other location. + +The override travels with the test report to where the XML is written, so it +holds under pytest-xdist: as two ``user_properties`` entries named +``sphinxcontrib.test_reports:file`` and ``sphinxcontrib.test_reports:line``, +which the plugin takes out again before the properties are written. Those two +names are reserved -- a property recorded under either is read as a location +override, not written as a property. + +Calls written against ``score_pytest`` may keep passing ``record_xml_attribute``; +the argument is accepted and ignored. Drop the fixture from the test's signature, +though: requesting it is what makes pytest warn that the fixture is +experimental, and under ``-W error`` or ``filterwarnings = error`` that request +is a setup error. The plugin neither requests the fixture nor filters its +notice any more, so whether a test keeps it, and how it treats the notice, is +that test's own business. + +Origin +------ + +The plugin is a port of the ``score_pytest`` attribute plugin of S-CORE's +`docs-as-code `_. What that +plugin hard-codes -- the four properties and their spelling -- is the +``test_reports_properties`` example above here, and other metamodels declare +their own. With that example the XML comes out the same, with four exceptions: +a case skipped or erroring at setup carries its location and properties here +and pytest's stock values there; the properties keep the order of the keywords +rather than a fixed one; the Bazel prefix is cut at a whole ``_main`` component +only, not wherever the text ``_main/`` occurs; and a ``file`` handed to +``apply_test_metadata`` is cut the same way rather than passed through. Two of +that plugin's rules are not ported, because they are process rules of that +project rather than properties of the data: the ``test_type`` and +``derivation_technique`` vocabularies are documented but not enforced, and a +decorated test is not required to carry a docstring. diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index fc4854389..b78e2abb3 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -20,6 +20,20 @@ def tests(session, sphinx_needs, sphinx): run_tests(session, sphinx, sphinx_needs) +#: The oldest pytest the plugin's tests run on, per Python: 7.0 is the plugin's +#: own floor (the pytest extra), and 7.3.2 the first pytest that runs on +#: Python 3.12 at all. +PLUGIN_PYTEST_FLOORS = [("3.11", "7.0.1"), ("3.12", "7.3.2")] + + +@session +@nox.parametrize("python,pytest_version", PLUGIN_PYTEST_FLOORS) +def plugin_floor(session, pytest_version): + """The pytest plugin's tests on the oldest pytest it supports.""" + session.install(".[test]", f"pytest=={pytest_version}") + session.run("pytest", "tests/test_pytest_plugin.py") + + @session(python="3.12") def linkcheck(session): session.install(".[docs]") diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 3f06b3cb8..cadcadcf1 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -26,6 +26,13 @@ requires-python = ">=3.11" dependencies = ["sphinx>=7.4", "lxml", "sphinx-needs>=6.0.1"] [project.optional-dependencies] +# The pytest plugin (sphinxcontrib.test_reports.pytest_plugin); pytest is not +# a dependency of the extension or the converter. 7.0 is where everything the +# plugin uses exists (pytest.Config/Item/Mark, Config.stash, +# issue_config_time_warning). pytest before 7.3.2 does not run on Python 3.12 +# at all -- that floor is pytest's own, not this one's; the nox session +# plugin_floor runs the plugin's tests on the oldest pytest of each Python. +pytest = ["pytest>=7.0"] test = [ "beautifulsoup4", "nox>=2025.2.9", @@ -54,6 +61,9 @@ dev = [ # Stubs for docutils, which ships none: without them every directive # option spec is untyped and `test_reports.py` cannot be checked. "types-docutils>=0.21", + # pytest: mypy type-checks the pytest plugin, so `uv sync --group dev` (the + # CI mypy job) has to be able to follow its imports. + "pytest>=7.0", ] [project.scripts] @@ -127,6 +137,7 @@ disallow_untyped_defs = true # check_untyped_defs = true # disallow_untyped_decorators = true + # # None and optional handling # no_implicit_optional = true @@ -157,3 +168,16 @@ module = [ "sphinxcontrib.test_reports.cli", ] disallow_any_expr = false + +# The pytest plugin decorates arbitrary test functions (Callable[..., object], +# whose `...` is an Any) and reads pytest's Any-typed config API; everything +# else stays strict. Both module names: `packages` above yields the full one, +# a file passed on the command line loses the `sphinxcontrib` prefix because +# that directory is a namespace package. +[[tool.mypy.overrides]] +module = [ + "sphinxcontrib.test_reports.pytest_plugin", + "test_reports.pytest_plugin", +] +disallow_any_expr = false +disallow_any_explicit = false diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/pytest_plugin.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/pytest_plugin.py new file mode 100644 index 000000000..ef980d7c5 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/pytest_plugin.py @@ -0,0 +1,541 @@ +"""pytest plugin: shape the JUnit XML the way this extension reads it. + +Enable it with ``-p sphinxcontrib.test_reports.pytest_plugin`` (or in +``addopts``) and write the report with ``--junitxml`` under +``junit_family = xunit1``. Two things then happen to every ````: + +* its ``file``/``line`` attributes -- the source location that the directives + put into ``tr_source_file_option``/``tr_source_line_option`` and that a + deterministic case ID is derived from -- are the ones an editor shows. pytest + writes the two under ``xunit1`` on its own, but counts the line from 0, keeps + Bazel's runfiles prefix and has no way to point a case at the file that drove + it; the plugin corrects the first two and adds the third + (:func:`apply_test_metadata`). Under the default ``xunit2`` pytest drops both + attributes, which is why ``xunit1`` is required; +* the properties given with :func:`add_test_properties` (or, for parameterised + tests, :func:`apply_test_metadata`) are written as ````, which the + directives turn into need fields (``tr_extra_options``) and link fields + (``tr_property_link_types``) pointing at the requirements a test verifies. + +Which keywords the two helpers know, the ```` name each is written +under and whether it takes a list is configuration, not code: the +``test_reports_properties`` ini option, one line per property (see +:func:`parse_properties`). The plugin ships no metamodel of its own; S-CORE's +is a four-line example in the docs. + +Both things happen through hooks on the test reports, not through fixtures, so +a case that is skipped or errors during setup is shaped like one that ran, and +under pytest-xdist the location is written on the controller, where pytest +keeps the XML writer. + +Ported from the ``score_pytest`` attribute plugin of S-CORE's docs-as-code. +With that example configured the XML comes out the same, with four exceptions: +a case skipped or erroring at setup carries its location and properties here +and pytest's stock values there; the properties keep the order of the keywords +rather than a fixed one; the Bazel prefix is cut at a whole ``_main`` component +only; and a file handed to :func:`apply_test_metadata` is cut the same way +rather than passed through. Two of that plugin's rules are not ported: the +``TestType``/``DerivationTechnique`` vocabularies are documented, not enforced, +and a test does not have to carry a docstring -- both are process rules of that +project, not of this tool. + +This module imports pytest and nothing else from the package's Sphinx side; it +is only ever loaded by pytest. +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass +from typing import TYPE_CHECKING, Callable, Generator, Mapping, Sequence + +import pluggy +import pytest + +if TYPE_CHECKING: + from _pytest.junitxml import LogXML + +#: Name of the marker :func:`add_test_properties` attaches. Registered in +#: :func:`pytest_configure` so ``--strict-markers`` accepts it. +MARKER = "test_properties" + +#: The ini option holding the property model, one line per property. +OPTION = "test_reports_properties" + +#: How one line of :data:`OPTION` reads. +GRAMMAR = "keyword [= XmlName] [, list]" + +#: One line of :data:`OPTION`: a keyword, an optional ``= XmlName`` and an +#: optional ``, flag``; ``flag`` is checked afterwards so the message can name +#: it. +_LINE = re.compile( + r"^\s*(?P[^\s=,]+)\s*(?:=\s*(?P[^\s=,]+)\s*)?(?:,\s*(?P[^\s,]+)\s*)?$" +) + +#: Bazel runs a test from a runfiles tree in which the workspace is the +#: directory ``_main``: ``../_main/pkg/test_x.py`` names ``pkg/test_x.py``. Only +#: a whole path component counts -- ``app_main/`` is somebody's directory -- and +#: the last one wins, since under bzlmod the execroot's workspace directory is +#: ``_main`` as well. +_RUNFILES_PREFIX = re.compile(r"^(?:.*[\\/])?_main[\\/]") + +#: The location override of :func:`apply_test_metadata` travels with the test +#: report as two entries of its ``user_properties`` under these names, and is +#: taken out again before pytest writes the properties -- on the process that +#: holds the XML writer, which under pytest-xdist is the controller, not the +#: worker the test ran on. Maps the entry name to the attribute it sets. +_OVERRIDES = { + "sphinxcontrib.test_reports:file": "file", + "sphinxcontrib.test_reports:line": "line", +} + +#: Registration name of the per-session hook object, :class:`_XmlShape`. +_HOOKS = "sphinxcontrib.test_reports.xml_shape" + +Recorder = Callable[[str, str], None] + +#: What a property keyword accepts: one value, or -- for a multi-valued +#: property -- a sequence of values. ``None`` and empty values are not written. +Value = str | Sequence[str] | None + + +@dataclass(frozen=True) +class Property: + """How one keyword of :func:`add_test_properties` reaches the XML.""" + + #: The ```` written. + name: str + #: Multi-valued: a sequence of strings is joined with ``", "``, which + #: ``tr_property_link_types`` splits again on the build side; a bare string + #: counts as one value. A single-valued property takes one value, and a + #: sequence is an error rather than a silent join. + multi: bool = False + + +#: Keyword -> how it is written: the model of :data:`OPTION`, installed by +#: :func:`pytest_configure` for the duration of the session (an inner session +#: gets its own and hands the outer one back). A keyword not found here is +#: written under its own name and takes a single value only. +PROPERTIES: dict[str, Property] = {} + +#: The models of the sessions an in-process inner session interrupted. +_OUTER_MODELS: list[dict[str, Property]] = [] + + +def parse_properties(lines: Sequence[str]) -> dict[str, Property]: + """The property model declared by the lines of :data:`OPTION`. + + Each line reads ``keyword [= XmlName] [, list]``: *keyword* is what a test + writes, *XmlName* the ```` name it is written under (the keyword + itself when omitted), and ``list`` marks a multi-valued property. Blank + lines are skipped. S-CORE's model, for example:: + + test_reports_properties = + partially_verifies = PartiallyVerifies, list + fully_verifies = FullyVerifies, list + test_type = TestType + derivation_technique = DerivationTechnique + + :raises ValueError: for a line outside the grammar, a flag other than + ``list``, a keyword declared twice, or two keywords sharing an XML name. + """ + model: dict[str, Property] = {} + for line in lines: + if not line.strip(): + continue + match = _LINE.match(line) + if match is None: + raise ValueError( + f"{OPTION}: cannot read {line.strip()!r}; a line is '{GRAMMAR}'" + ) + keyword, name, flag = match.group("keyword", "name", "flag") + if flag not in (None, "list"): + raise ValueError( + f"{OPTION}: unknown flag {flag!r} in {line.strip()!r}; the only " + "flag is 'list'" + ) + if keyword in model: + raise ValueError(f"{OPTION}: {keyword!r} is declared twice") + name = name or keyword + if any(existing.name == name for existing in model.values()): + raise ValueError( + f"{OPTION}: {name!r} is the XML name of two keywords; one " + "property, one line" + ) + model[keyword] = Property(name, multi=flag == "list") + return model + + +def _lookup(keyword: str) -> Property | None: + """The configured property for *keyword*. + + A declared keyword first; failing that, a property whose XML name is + spelled like *keyword*, so the XML name doubles as keyword. + """ + configured = PROPERTIES.get(keyword) + if configured is not None: + return configured + return next((p for p in PROPERTIES.values() if p.name == keyword), None) + + +def _serialise(keyword: str, configured: Property | None, value: object) -> str | None: + """The text written for *value*, or ``None`` when there is nothing to write. + + Strict about shape, because the build side splits a link property on + commas and turns every piece into a need ID: what is not a string, or a + list of strings under a ``list`` property, is a ``TypeError`` rather than + a ``repr`` that becomes bogus IDs. + """ + if value is None: + return None + if isinstance(value, str): + return value or None + if isinstance(value, (int, float)): + return str(value) + if isinstance(value, (bytes, bytearray)): + raise TypeError(f"{keyword!r} takes a string, not {type(value).__name__}") + if isinstance(value, Sequence): + # Empty items first: a parser handing back [] for an absent field has + # nothing to write under any keyword, so no arity applies. + items: list[str] = [] + for index, item in enumerate(value): + if item is None or item == "": + continue + if not isinstance(item, str): + raise TypeError( + f"item {index} of {keyword!r} is {type(item).__name__}, not " + "str; every item of a list is one value" + ) + items.append(item) + if not items: + return None + if configured is None: + raise TypeError( + f"{keyword!r} is not a configured property and takes a single " + f"value; a line '{keyword}, list' in {OPTION} lets it write a list" + ) + if not configured.multi: + raise TypeError( + f"{keyword!r} takes a single value, not a sequence; declare it " + f"'{keyword} = {configured.name}, list' in {OPTION} for lists" + ) + return ", ".join(items) + raise TypeError( + f"{keyword!r} takes a string" + + (" or a list of strings" if configured and configured.multi else "") + + f", not {type(value).__name__}" + ) + + +def _normalise(properties: Mapping[str, object]) -> dict[str, str]: + """The XML properties for keyword/value pairs; empty values dropped.""" + written: dict[str, str] = {} + for keyword, value in properties.items(): + configured = _lookup(keyword) + text = _serialise(keyword, configured, value) + if text is not None: + written[configured.name if configured else keyword] = text + return written + + +def _empty(value: object) -> bool: + """Whether :func:`_serialise` would write nothing for a well-formed *value*. + + ``None``, ``""`` and a sequence holding nothing else are empty. Anything + else is not -- a list holding a list is not empty, it is wrong, and + :func:`_serialise` says so. + """ + if value is None or value == "": + return True + if isinstance(value, Sequence) and not isinstance(value, (str, bytes, bytearray)): + return all(item is None or item == "" for item in value) + return False + + +def properties_mapping(**properties: Value) -> dict[str, str]: + """The property mapping that ends up in the XML, empty values dropped. + + Single source of truth for the decorator and the runtime helper. How a + value is written is decided by the configured model (:data:`PROPERTIES`), + not by the keyword it arrived under. + + :raises ValueError: when nothing would be written. + :raises TypeError: for a sequence under a single-valued or unconfigured + keyword, a list item that is not a string, or a value of another kind. + """ + cleaned = _normalise(properties) + if not cleaned: + raise ValueError("no test properties given: every value is empty") + return cleaned + + +def add_test_properties( + **properties: Value, +) -> Callable[[Callable[..., object]], Callable[..., object]]: + """Decorator recording requirement links and classification for a test. + + With S-CORE's model configured (see the docs):: + + @add_test_properties( + partially_verifies=["REQ_1", "REQ_2"], + test_type="requirements-based", + derivation_technique="requirements-analysis", + ) + def test_addition(): + ... + + The keywords are the ones ``test_reports_properties`` declares; any other + keyword is written under its own name with a single value. The values are + kept as given and written when the test is set up, against the model known + then, so the decorator itself does not depend on configuration having been + read. A call that would write nothing is refused here, at import time. + """ + if all(_empty(value) for value in properties.values()): + raise ValueError("no test properties given: every value is empty") + marker = getattr(pytest.mark, MARKER) + + def decorator(function: Callable[..., object]) -> Callable[..., object]: + decorated: Callable[..., object] = marker(dict(properties))(function) + return decorated + + return decorator + + +def apply_test_metadata( + *, + record_property: Recorder, + metadata: Mapping[str, object], + record_xml_attribute: Recorder | None = None, + file: str | None = None, + line: int | None = None, +) -> None: + """Runtime equivalent of :func:`add_test_properties`. + + For tests whose metadata is only known inside the test body -- typically a + parameterised test driven by files that carry their own metadata. Call it + *early*, before any assertion, so the properties are attached even when the + test then fails. *metadata* uses the decorator's keywords as keys; metadata + without a value -- absent, or with nothing but empty entries -- writes no + properties and is not an error. + + *file* and *line* override the location the plugin recorded, so a case can + point at the file that drove it rather than at the test function. The + override travels with the test report as two ``user_properties`` entries, + ``sphinxcontrib.test_reports:file`` and ``sphinxcontrib.test_reports:line``, + and is applied where the XML is written, so it holds under pytest-xdist as + well; the plugin takes the two entries out before the properties are + written, so a property recorded under either name is read as an override. + *record_xml_attribute* is accepted for calls written against + ``score_pytest`` and ignored -- and requesting that fixture is what draws + pytest's experimental-feature notice, so drop it from the signature. + """ + for name, value in _normalise(metadata).items(): + record_property(name, value) + if file is not None: + record_property("sphinxcontrib.test_reports:file", clean_source_path(file)) + if line is not None: + record_property("sphinxcontrib.test_reports:line", str(line)) + + +def clean_source_path(path: str) -> str: + """The workspace-relative source path of a test. + + pytest reports locations relative to its rootdir already; under Bazel the + rootdir sits inside a runfiles tree, so the path leads through ``_main``, + the workspace directory of that tree -- as does an absolute path handed to + :func:`apply_test_metadata`. Everything up to and including the last + ``_main/`` component is cut. + """ + return _RUNFILES_PREFIX.sub("", path, count=1) + + +class TestReportsConfigWarning(pytest.PytestWarning): + """A run configured such that the plugin cannot write the full XML shape. + + Issued once at start-up. Where the project turns warnings into errors + (``filterwarnings = error``, ``-W error``) it becomes a clean usage error + rather than a traceback; + ``ignore::sphinxcontrib.test_reports.pytest_plugin.TestReportsConfigWarning`` + silences it. + """ + + +def _report_family(config: pytest.Config) -> str | None: + """The ``junit_family`` of the report this run writes, ``None`` without one. + + ``legacy`` is pytest's alias of ``xunit1``. The option does not exist under + ``-p no:junitxml``. + """ + if not getattr(config.option, "xmlpath", None): + return None + family = str(config.getini("junit_family")) + return "xunit1" if family == "legacy" else family + + +def _notify(config: pytest.Config, message: str) -> None: + """Issue *message* as :class:`TestReportsConfigWarning` at configure time.""" + warning = TestReportsConfigWarning( + f"sphinxcontrib.test_reports.pytest_plugin: {message}" + ) + try: + config.issue_config_time_warning(warning, stacklevel=3) + except TestReportsConfigWarning as error: + # The project's filters make warnings errors; raised out of + # pytest_configure this would be an INTERNALERROR traceback. + raise pytest.UsageError(str(error)) from None + + +def pytest_addoption(parser: pytest.Parser) -> None: + parser.addini( + OPTION, + type="linelist", + help=f"Properties add_test_properties() knows, one '{GRAMMAR}' per line; " + "the sphinx-test-reports docs, page 'pytest plugin', have the details.", + ) + + +def pytest_configure(config: pytest.Config) -> None: + # First thing: pytest_unconfigure pops whatever happens here, so a session + # that fails to configure (a bad ini line) must have pushed already. + _OUTER_MODELS.append(dict(PROPERTIES)) + config.addinivalue_line( + "markers", + f"{MARKER}(properties): properties written to the JUnit XML of the " + "test; attached by sphinxcontrib.test_reports.pytest_plugin.add_test_properties", + ) + lines: Sequence[str] = config.getini(OPTION) + try: + model = parse_properties(lines) + except ValueError as error: + raise pytest.UsageError(str(error)) from None + PROPERTIES.clear() + PROPERTIES.update(model) + config.pluginmanager.register(_XmlShape(config), name=_HOOKS) + + family = _report_family(config) + # Once per run: an xdist worker has the same options, and its own notice + # would only repeat the controller's. + if family is not None and family != "xunit1" and not hasattr(config, "workerinput"): + _notify( + config, + f"junit_family is {family!r}, but pytest writes the file/line " + "attributes of a only under 'xunit1'. Set junit_family = " + "xunit1, or the test cases will have no source location.", + ) + + +def pytest_unconfigure(config: pytest.Config) -> None: + config.pluginmanager.unregister(name=_HOOKS) + PROPERTIES.clear() + if _OUTER_MODELS: + PROPERTIES.update(_OUTER_MODELS.pop()) + + +@pytest.hookimpl(hookwrapper=True) +def pytest_runtest_makereport( + item: pytest.Item, call: pytest.CallInfo[None] +) -> Generator[None, pluggy.Result[pytest.TestReport], None]: + """Attach the markers' properties to the item before its setup report is made. + + A hook rather than a fixture, so a case that is skipped or errors during + setup carries them too. The report copies the item's ``user_properties``, + which is how they reach the XML writer -- across the wire under xdist. A + value of the wrong shape turns the setup report into an error for that + case, with the message. + """ + problem: Exception | None = None + if call.when == "setup": + try: + item.user_properties.extend(_marked_properties(item).items()) + except (TypeError, pytest.UsageError) as error: + problem = error + outcome = yield + if problem is not None: + report = outcome.get_result() + message = f"{type(problem).__name__}: {problem}" + # Appended, not replacing: a fixture that failed in the same setup + # stays visible, so both problems show at once. + existing = report.longreprtext + report.longrepr = f"{existing}\n\n{message}" if existing else message + report.outcome = "failed" + + +class _XmlShape: + """The per-session hooks that shape pytest's XML writer's output. + + Registered by :func:`pytest_configure` so that they hold the session's + config. They act on the process that owns the XML writer: in a plain run + this one, under pytest-xdist the controller, where the workers' reports + arrive. + """ + + def __init__(self, config: pytest.Config) -> None: + self.config = config + + @pytest.hookimpl(tryfirst=True) + def pytest_runtest_logreport(self, report: pytest.TestReport) -> None: + # tryfirst: before pytest's junitxml handler reads the report's + # user_properties, the override entries have to be gone from them. + # A worker forwards its reports untouched; the controller does this. + if hasattr(self.config, "workerinput"): + return + overrides = [ + (name, value) + for name, value in report.user_properties + if name in _OVERRIDES + ] + if overrides: + report.user_properties[:] = [ + entry for entry in report.user_properties if entry[0] not in _OVERRIDES + ] + xml = _xml_writer(self.config) + if xml is None or _report_family(self.config) != "xunit1": + return + reporter = xml.node_reporter(report) + if report.when == "setup": + path, line_number, _domain = report.location + reporter.add_attribute("file", clean_source_path(path)) + if line_number is not None: + # pytest's line numbers are 0-based; editors and the report + # count from 1. + reporter.add_attribute("line", str(line_number + 1)) + for name, value in overrides: + reporter.add_attribute(_OVERRIDES[name], str(value)) + + +def _xml_writer(config: pytest.Config) -> LogXML | None: + """pytest's XML writer of this run: ``None`` without ``--junitxml``, under + ``-p no:junitxml``, and on an xdist worker, where pytest does not build it. + + The writer is what the ``record_xml_attribute`` fixture talks to as well; + it lives behind a private key, so its absence is handled, not assumed. + """ + try: + from _pytest.junitxml import xml_key + except ImportError: # pragma: no cover -- pytest moved its junitxml plugin + return None + return config.stash.get(xml_key, None) + + +def _marked_properties(node: pytest.Item) -> dict[str, str]: + """The properties of every ``test_properties`` marker on *node*, merged. + + Each marker carries the keywords as the decorator received them; they are + written here, against the configured model. A marker on the class or the + module counts as much as one on the function; where two set the same + property, the one closest to the function wins. + """ + merged: dict[str, str] = {} + for marker in node.iter_markers(MARKER): # closest first + arguments: tuple[object, ...] = marker.args + if not arguments or not isinstance(arguments[0], Mapping): + raise pytest.UsageError( + f"marker '{MARKER}' on {node.name} carries no property mapping; " + "attach it with add_test_properties(...)" + ) + given: Mapping[object, object] = arguments[0] + for name, value in _normalise( + {str(keyword): value for keyword, value in given.items()} + ).items(): + merged.setdefault(name, value) + return merged diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index f0b76826d..fe6baab89 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -6,7 +6,7 @@ import pytest -pytest_plugins = "sphinx.testing.fixtures" +pytest_plugins = ["sphinx.testing.fixtures", "pytester"] def copy_srcdir_to_tmpdir(srcdir, tmp): diff --git a/packages/sphinx-test-reports/tests/test_pytest_plugin.py b/packages/sphinx-test-reports/tests/test_pytest_plugin.py new file mode 100644 index 000000000..542ff2196 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_pytest_plugin.py @@ -0,0 +1,741 @@ +"""The pytest plugin produces the XML shape this extension reads. + +Run through ``pytester``: a small test file is executed with the plugin enabled +and the resulting JUnit XML inspected. The property model comes from the +``test_reports_properties`` ini option; S-CORE's is the profile most tests use. +""" + +import subprocess +import sys +import xml.etree.ElementTree as ET + +import pytest + +from sphinxcontrib.test_reports import pytest_plugin +from sphinxcontrib.test_reports.pytest_plugin import ( + Property, + apply_test_metadata, + clean_source_path, + parse_properties, + properties_mapping, +) + +PLUGIN = "sphinxcontrib.test_reports.pytest_plugin" + +#: S-CORE's model, as the docs show it: the profile most of these tests run with. +SCORE_PROFILE = """\ +test_reports_properties = + partially_verifies = PartiallyVerifies, list + fully_verifies = FullyVerifies, list + test_type = TestType + derivation_technique = DerivationTechnique +""" + +DECORATED = """ +from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + +@add_test_properties( + partially_verifies=["REQ_1", "REQ_2"], + test_type="requirements-based", + derivation_technique="requirements-analysis", + Owner="team-a", +) +def test_addition(): + assert 1 + 1 == 2 + + +def test_plain(): + assert True +""" + +RUNTIME = """ +import pytest +from sphinxcontrib.test_reports.pytest_plugin import apply_test_metadata + +@pytest.mark.parametrize("spec", ["a.rst", "b.rst"]) +def test_driven_by_a_file(spec, record_property): + apply_test_metadata( + record_property=record_property, + metadata={"fully_verifies": ["REQ_9"], "test_type": "interface-test"}, + file=f"../_main/specs/{spec}", + line=7, + ) + assert spec.endswith(".rst") +""" + +RUNTIME_COMPAT = """ +from sphinxcontrib.test_reports.pytest_plugin import apply_test_metadata + +def test_score_style(record_property, record_xml_attribute): + apply_test_metadata( + record_property=record_property, + metadata={"fully_verifies": ["REQ_9"]}, + record_xml_attribute=record_xml_attribute, + file="specs/a.rst", + line=7, + ) +""" + +SKIPPED = """ +import pytest +from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + + +@pytest.fixture(scope="module") +def broken(): + raise RuntimeError("no database") + + +@pytest.mark.skip(reason="not today") +@add_test_properties(partially_verifies=["REQ_1"]) +def test_skipped(): + assert False + + +@pytest.mark.xfail(run=False, reason="never run") +def test_not_run(): + assert False + + +@add_test_properties(fully_verifies=["REQ_2"]) +def test_setup_error(broken): + assert True + + +def test_runs(): + assert True +""" + +NESTED = """ +import pytest +from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + + +@add_test_properties(partially_verifies=["REQ_1"]) +def test_before(): + assert True + + +def test_inner_session(tmp_path): + # A project testing its own pytest setup runs an inner session in process. + inner = tmp_path / "test_inner.py" + inner.write_text("def test_inner():\\n assert True\\n") + (tmp_path / "pytest.ini").write_text("[pytest]\\n") + assert pytest.main(["-q", "-p", "no:cacheprovider", "-p", "PLUGIN", str(inner)]) == 0 + + +@add_test_properties(partially_verifies=["REQ_2"]) +def test_after(): + assert True +""".replace("PLUGIN", PLUGIN) + +PLAIN = """ +def test_plain(): + assert True +""" + +MARKED_STRICT = """ +import pytest + + +@pytest.mark.filterwarnings("error") +def test_strict(): + assert True +""" + +STACKED = """ +from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + + +@add_test_properties(test_type="requirements-based", Owner="team-a") +class TestThing: + @add_test_properties(partially_verifies=["REQ_1"]) + def test_one(self): + assert True + + @add_test_properties(partially_verifies=["REQ_2"], Owner="team-b") + def test_two(self): + assert True + + +@add_test_properties(fully_verifies=["REQ_3"]) +@add_test_properties(test_type="interface-test") +def test_stacked(): + assert True +""" + +CUSTOM = """ +from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + +@add_test_properties(satisfies=["REQ_1", "REQ_2"], reviewers=["ann", "bob"], Owner="x") +def test_custom(): + assert True +""" + + +def _line_of(source, needle): + """1-based line of *needle* in the file pytester writes (it strips the + leading blank line).""" + return next( + index + for index, line in enumerate(source.strip().splitlines(), start=1) + if line.startswith(needle) + ) + + +# pytest points a decorated function at its first decorator line. +ADDITION_LINE = _line_of(DECORATED, "@add_test_properties(") +PLAIN_LINE = _line_of(DECORATED, "def test_plain") +SKIPPED_LINES = { + "test_skipped": _line_of(SKIPPED, "@pytest.mark.skip"), + "test_not_run": _line_of(SKIPPED, "@pytest.mark.xfail"), + "test_setup_error": _line_of(SKIPPED, "@add_test_properties(fully_verifies"), + "test_runs": _line_of(SKIPPED, "def test_runs"), +} + + +def _run(pytester, source, *extra, family="xunit1", profile=SCORE_PROFILE, ini=""): + """Run *source* with the plugin in a fresh pytest process and parse the XML. + + *profile* is the ``test_reports_properties`` block of the ini file, *ini* + any further ini lines. A subprocess, not in-process: this module has the + plugin imported already, and pytest warns about a ``-p`` module it cannot + assert-rewrite any more -- noise in the warning counts, an error under a + strict warning policy. + """ + pytester.makeini("[pytest]\n" + profile + ini) + pytester.makepyfile(source) + report = pytester.path / "report.xml" + result = pytester.runpytest_subprocess( + "-p", PLUGIN, "--junitxml", str(report), "-o", f"junit_family={family}", *extra + ) + return result, (ET.parse(report).getroot() if report.exists() else None) + + +def _cases(root): + return {case.get("name"): case for case in root.iter("testcase")} + + +def _properties(case): + return {p.get("name"): p.get("value") for p in case.iter("property")} + + +@pytest.fixture +def score_model(monkeypatch): + """The S-CORE profile installed as the plugin's model, for direct calls.""" + lines = [line.strip() for line in SCORE_PROFILE.splitlines()[1:]] + monkeypatch.setattr(pytest_plugin, "PROPERTIES", parse_properties(lines)) + + +class TestXmlShape: + def test_every_case_carries_its_source_location(self, pytester): + result, root = _run(pytester, DECORATED) + result.assert_outcomes(passed=2) + cases = _cases(root) + for case in cases.values(): + assert case.get("file") == "test_every_case_carries_its_source_location.py" + # pytest counts lines from 0; the attribute counts from 1 like editors. + # A decorated function is located at its first decorator. + assert cases["test_addition"].get("line") == str(ADDITION_LINE) + assert cases["test_plain"].get("line") == str(PLAIN_LINE) + + def test_the_decorator_writes_properties(self, pytester): + _, root = _run(pytester, DECORATED) + assert _properties(_cases(root)["test_addition"]) == { + "PartiallyVerifies": "REQ_1, REQ_2", + "TestType": "requirements-based", + "DerivationTechnique": "requirements-analysis", + "Owner": "team-a", + } + assert _properties(_cases(root)["test_plain"]) == {} + + def test_runtime_metadata_and_location_override(self, pytester): + result, root = _run(pytester, RUNTIME) + result.assert_outcomes(passed=2) + case = _cases(root)["test_driven_by_a_file[a.rst]"] + assert _properties(case) == { + "FullyVerifies": "REQ_9", + "TestType": "interface-test", + } + assert case.get("file") == "specs/a.rst" + assert case.get("line") == "7" + + def test_record_xml_attribute_is_still_accepted(self, pytester): + # score_pytest call sites pass it; it is not needed any more. Requesting + # pytest's fixture is what draws its experimental-feature notice. + result, root = _run(pytester, RUNTIME_COMPAT) + result.assert_outcomes(passed=1, warnings=1) + case = _cases(root)["test_score_style"] + assert (case.get("file"), case.get("line")) == ("specs/a.rst", "7") + + def test_the_fixture_request_is_the_callers_under_a_strict_policy(self, pytester): + # The plugin neither requests that fixture nor silences its notice any + # more, so under -W error the request in the test's own signature is + # the error -- the docs say to drop it from the signature. + result, _ = _run(pytester, RUNTIME_COMPAT, "-W", "error") + result.assert_outcomes(errors=1) + result.stdout.fnmatch_lines( + ["*record_xml_attribute is an experimental feature*"] + ) + + def test_cases_skipped_or_erroring_at_setup_carry_the_same_shape(self, pytester): + # A function-scoped fixture never runs for these; the report has to be + # shaped by hooks, or one report mixes 1-based and 0-based lines and, + # under Bazel, cut and uncut paths -- which moves a deterministic ID. + result, root = _run(pytester, SKIPPED) + result.assert_outcomes(passed=1, skipped=1, xfailed=1, errors=1) + cases = _cases(root) + for name, line in SKIPPED_LINES.items(): + assert cases[name].get("line") == str(line), name + assert _properties(cases["test_skipped"]) == {"PartiallyVerifies": "REQ_1"} + assert _properties(cases["test_setup_error"]) == {"FullyVerifies": "REQ_2"} + + def test_an_inner_pytest_session_leaves_the_model_intact(self, pytester): + result, root = _run(pytester, NESTED) + result.assert_outcomes(passed=3) + assert _properties(_cases(root)["test_after"]) == {"PartiallyVerifies": "REQ_2"} + + def test_an_inner_session_that_fails_to_configure_leaves_it_intact(self, pytester): + # Its pytest_configure raises on the bad ini line; pytest_unconfigure + # still runs and must pop what that session pushed, not the outer entry. + broken = NESTED.replace( + 'write_text("[pytest]\\n")', + 'write_text("[pytest]\\ntest_reports_properties = a, set\\n")', + ).replace("str(inner)]) == 0", "str(inner)]) == 4") + assert broken != NESTED + result, root = _run(pytester, broken) + result.assert_outcomes(passed=3) + assert _properties(_cases(root)["test_after"]) == {"PartiallyVerifies": "REQ_2"} + + def test_the_marker_is_registered(self, pytester): + result, _ = _run(pytester, DECORATED, "--strict-markers") + result.assert_outcomes(passed=2) + + def test_the_record_xml_attribute_notice_is_silenced(self, pytester): + # pytest flags record_xml_attribute as experimental once per test; the + # plugin exists to use it, so that notice must not reach the user. + result, _ = _run(pytester, DECORATED) + noisy = [ + line + for line in result.stdout.lines + if "record_xml_attribute is an experimental feature" in line + ] + assert noisy == [] + + def test_xunit2_is_warned_about_at_configure_time(self, pytester): + result, root = _run(pytester, DECORATED, family="xunit2") + result.stdout.fnmatch_lines(["*junit_family is 'xunit2'*xunit1*"]) + assert _cases(root)["test_plain"].get("file") is None + + +class TestPropertyModel: + """The model is pytest configuration; the plugin ships no names of its own.""" + + def test_a_line_declares_keyword_name_and_arity(self): + assert parse_properties( + ["partially_verifies = PartiallyVerifies, list", "test_type = TestType"] + ) == { + "partially_verifies": Property("PartiallyVerifies", multi=True), + "test_type": Property("TestType"), + } + + def test_the_name_defaults_to_the_keyword(self): + assert parse_properties(["reviewers, list", "Owner"]) == { + "reviewers": Property("reviewers", multi=True), + "Owner": Property("Owner"), + } + + def test_blank_lines_are_skipped(self): + assert parse_properties(["", " ", "Owner"]) == {"Owner": Property("Owner")} + + @pytest.mark.parametrize( + "line", + ["a = b = c", "a, list, extra", "= Name", "a, set"], + ids=["two-equals", "two-flags", "no-keyword", "unknown-flag"], + ) + def test_a_line_outside_the_grammar_is_an_error(self, line): + with pytest.raises(ValueError, match="test_reports_properties"): + parse_properties([line]) + + def test_a_keyword_given_twice_is_an_error(self): + with pytest.raises(ValueError, match="twice"): + parse_properties(["a = A", "a = B"]) + + def test_two_keywords_for_one_xml_name_is_an_error(self): + # _normalise would keep only the later value, silently. + with pytest.raises(ValueError, match="'B'"): + parse_properties(["a = B", "c = B"]) + + def test_a_custom_profile_drives_the_xml(self, pytester): + profile = "test_reports_properties =\n satisfies = Satisfies, list\n reviewers, list\n" + result, root = _run(pytester, CUSTOM, profile=profile) + result.assert_outcomes(passed=1) + assert _properties(_cases(root)["test_custom"]) == { + "Satisfies": "REQ_1, REQ_2", + "reviewers": "ann, bob", + "Owner": "x", + } + + def test_the_profile_may_come_from_pyproject(self, pytester): + pytester.makepyprojecttoml( + "[tool.pytest.ini_options]\n" + "test_reports_properties = [\n" + ' "partially_verifies = PartiallyVerifies, list",\n' + ' "test_type = TestType",\n' + "]\n" + ) + pytester.makepyfile(DECORATED) + report = pytester.path / "report.xml" + result = pytester.runpytest_subprocess( + "-p", PLUGIN, "--junitxml", str(report), "-o", "junit_family=xunit1" + ) + result.assert_outcomes(passed=2) + written = _properties(_cases(ET.parse(report).getroot())["test_addition"]) + assert written["PartiallyVerifies"] == "REQ_1, REQ_2" + # Not configured: written under its own name, as a single value. + assert written["derivation_technique"] == "requirements-analysis" + + def test_a_decorator_may_run_before_configuration_is_read(self, pytester): + # A conftest.py that imports a helper module runs during pytest's + # pre-parse, before pytest_configure installs the model. The decorator + # keeps the keywords as given, so that shape neither crashes collection + # nor loses the properties, which are written at setup. + pytester.makepyfile( + helpers=( + "from sphinxcontrib.test_reports.pytest_plugin import add_test_properties\n" + "\n" + '@add_test_properties(partially_verifies=["REQ_1"], test_type="interface-test")\n' + "def test_from_helper():\n" + " assert True\n" + ) + ) + pytester.makeconftest("import helpers # decorates at pre-parse time\n") + result, root = _run(pytester, "from helpers import test_from_helper\n") + result.assert_outcomes(passed=1) + assert _properties(_cases(root)["test_from_helper"]) == { + "PartiallyVerifies": "REQ_1", + "TestType": "interface-test", + } + + def test_without_a_profile_a_list_is_an_error_naming_the_option(self, pytester): + # Silently writing "['REQ_1', 'REQ_2']" is the bug this replaces. + result, root = _run(pytester, DECORATED, profile="") + result.assert_outcomes(passed=1, errors=1) + result.stdout.fnmatch_lines( + ["*TypeError*'partially_verifies'*test_reports_properties*"] + ) + assert _properties(_cases(root)["test_plain"]) == {} + + def test_a_bad_line_is_a_usage_error_at_start_up(self, pytester): + result, _ = _run(pytester, PLAIN, profile="test_reports_properties = a, set\n") + assert result.ret == pytest.ExitCode.USAGE_ERROR + result.stderr.fnmatch_lines(["ERROR: test_reports_properties*'set'*"]) + + +class TestPropertyValues: + """How a keyword's value reaches the XML: declared per property, not guessed.""" + + def test_a_bare_string_is_one_requirement_id(self, score_model): + # str is a Sequence[str]; it must not be exploded character by character. + assert properties_mapping(partially_verifies="REQ_1") == { + "PartiallyVerifies": "REQ_1" + } + + def test_a_list_for_a_single_valued_property_is_an_error(self, score_model): + with pytest.raises(TypeError, match="test_type.*single value"): + properties_mapping(test_type=["a", "b"]) + + def test_an_unconfigured_keyword_takes_a_single_value(self, score_model): + assert properties_mapping(Owner="team-a") == {"Owner": "team-a"} + + def test_a_list_under_an_unconfigured_keyword_is_an_error(self, score_model): + with pytest.raises(TypeError, match="Satisfies.*test_reports_properties"): + properties_mapping(Satisfies=["REQ_1", "REQ_2"]) + + def test_the_xml_name_of_a_configured_property_works_as_keyword(self, score_model): + assert properties_mapping(PartiallyVerifies=["REQ_1", "REQ_2"]) == { + "PartiallyVerifies": "REQ_1, REQ_2" + } + + def test_numbers_are_written_as_text(self, score_model): + assert properties_mapping(Priority=3) == {"Priority": "3"} + + def test_bytes_are_an_error(self, score_model): + # bytes is a Sequence of ints: b"REQ_1" would join to "82, 69, 81, 95, 49". + with pytest.raises(TypeError, match="bytes"): + properties_mapping(fully_verifies=b"REQ_1") + + def test_every_item_of_a_list_must_be_a_string(self, score_model): + # A list of lists is one indentation away in a spec file; it used to be + # written as its repr and split into bogus IDs on the build side. + with pytest.raises(TypeError, match="partially_verifies.*item.*list"): + properties_mapping(partially_verifies=[["REQ_1", "REQ_2"]]) + with pytest.raises(TypeError, match="item.*int"): + properties_mapping(partially_verifies=[1, 2]) + + def test_an_empty_list_under_any_keyword_writes_nothing(self, score_model): + # A parser returning [] for an absent field is the documented pattern; + # the arity check must not fire before the items are looked at. + assert properties_mapping(test_type=[], fully_verifies=["R"]) == { + "FullyVerifies": "R" + } + assert properties_mapping(Owner=[None, ""], fully_verifies=["R"]) == { + "FullyVerifies": "R" + } + with pytest.raises(TypeError, match="test_type.*single value"): + properties_mapping(test_type=["a"]) + + def test_an_empty_nested_list_is_not_written_as_brackets(self, score_model): + with pytest.raises(TypeError, match="item"): + properties_mapping(partially_verifies=[[]], fully_verifies=["R"]) + + # The decorator builds the marker here, outside a session that registers it. + @pytest.mark.filterwarnings("ignore::pytest.PytestUnknownMarkWarning") + def test_the_import_gate_and_the_writer_agree_on_emptiness(self, score_model): + # Only None, "" and sequences of those count as empty. Anything else + # passes the decorator and is then judged by the writer. + with pytest.raises(ValueError, match="no test properties"): + pytest_plugin.add_test_properties(partially_verifies=[""], test_type=None) + decorator = pytest_plugin.add_test_properties(partially_verifies=[[]]) + assert callable(decorator) + with pytest.raises(TypeError): + properties_mapping(partially_verifies=[[]]) + + def test_an_unordered_collection_is_an_error(self, score_model): + # str(set) would be written otherwise, and a set has no stable order. + with pytest.raises(TypeError, match="partially_verifies"): + properties_mapping(partially_verifies={"REQ_1", "REQ_2"}) + + def test_empty_values_are_dropped(self, score_model): + assert properties_mapping(fully_verifies=["R"], test_type="") == { + "FullyVerifies": "R" + } + + def test_nothing_to_record_is_an_error(self, score_model): + with pytest.raises(ValueError, match="no test properties"): + properties_mapping(partially_verifies=[]) + + def test_the_decorator_rejects_an_empty_call_without_a_model(self, monkeypatch): + # Import time, before any configuration is read: emptiness needs none. + monkeypatch.setattr(pytest_plugin, "PROPERTIES", {}) + with pytest.raises(ValueError, match="no test properties"): + pytest_plugin.add_test_properties(partially_verifies=[], test_type="") + + +class TestRuntimeMetadata: + def test_all_empty_metadata_records_nothing(self, score_model): + # A spec file with an empty metadata block must not fail the test -- + # whether the parser hands back "" or [] for an absent field. + recorded = [] + apply_test_metadata( + record_property=lambda name, value: recorded.append((name, value)), + metadata={"fully_verifies": [], "test_type": "", "Owner": []}, + ) + apply_test_metadata( + record_property=lambda name, value: recorded.append((name, value)), + metadata={"test_type": [], "derivation_technique": [None]}, + ) + assert recorded == [] + + def test_the_location_is_applied_without_metadata(self, pytester): + source = RUNTIME.replace( + 'metadata={"fully_verifies": ["REQ_9"], "test_type": "interface-test"}', + "metadata={}", + ) + result, root = _run(pytester, source) + result.assert_outcomes(passed=2) + case = _cases(root)["test_driven_by_a_file[a.rst]"] + assert _properties(case) == {} + assert (case.get("file"), case.get("line")) == ("specs/a.rst", "7") + + +BAD_SHAPE_AND_BROKEN_FIXTURE = """ +import pytest +from sphinxcontrib.test_reports.pytest_plugin import add_test_properties + + +@pytest.fixture +def broken(): + raise RuntimeError("no database") + + +@add_test_properties(test_type=["a", "b"]) +def test_both(broken): + assert True +""" + + +class TestBadShape: + def test_a_bad_shape_errors_the_case_at_setup(self, pytester): + result, root = _run( + pytester, + "from sphinxcontrib.test_reports.pytest_plugin import add_test_properties\n\n@add_test_properties(test_type=['a', 'b'])\ndef test_shape():\n assert True\n", + ) + result.assert_outcomes(errors=1) + result.stdout.fnmatch_lines(["*TypeError*'test_type' takes a single value*"]) + + def test_a_bad_shape_is_appended_to_a_fixture_error(self, pytester): + # Replacing the fixture's error would hide it until the shape is fixed. + result, _ = _run(pytester, BAD_SHAPE_AND_BROKEN_FIXTURE) + result.assert_outcomes(errors=1) + result.stdout.fnmatch_lines( + ["*RuntimeError: no database*", "*TypeError*'test_type'*"] + ) + + +class TestMarkerMerge: + def test_class_and_method_markers_are_merged(self, pytester): + # A classification on the class and links on each method is the natural + # way to use the decorator; get_closest_marker kept only the innermost. + result, root = _run(pytester, STACKED) + result.assert_outcomes(passed=3) + cases = _cases(root) + assert _properties(cases["test_one"]) == { + "PartiallyVerifies": "REQ_1", + "TestType": "requirements-based", + "Owner": "team-a", + } + + def test_the_innermost_marker_wins_per_key(self, pytester): + _, root = _run(pytester, STACKED) + assert _properties(_cases(root)["test_two"])["Owner"] == "team-b" + + def test_stacked_decorators_on_a_function_are_merged(self, pytester): + _, root = _run(pytester, STACKED) + assert _properties(_cases(root)["test_stacked"]) == { + "FullyVerifies": "REQ_3", + "TestType": "interface-test", + } + + +class TestStartUp: + """The plugin's own notices, and pytest's about its fixtures, never take the + run down -- whatever the project's warning policy.""" + + def test_filterwarnings_error_in_the_ini_keeps_the_run_alive(self, pytester): + result, root = _run(pytester, DECORATED, ini="filterwarnings = error\n") + result.assert_outcomes(passed=2) + assert _cases(root)["test_plain"].get("line") == str(PLAIN_LINE) + + def test_w_error_on_the_command_line_keeps_the_run_alive(self, pytester): + # An appended ini filter cannot silence the record_xml_attribute notice + # here: command-line filters take precedence over every ini line. + result, root = _run(pytester, DECORATED, "-W", "error") + result.assert_outcomes(passed=2) + assert _cases(root)["test_plain"].get("line") == str(PLAIN_LINE) + + def test_a_strict_filterwarnings_mark_keeps_the_test_alive(self, pytester): + result, root = _run(pytester, MARKED_STRICT) + result.assert_outcomes(passed=1) + assert _cases(root)["test_strict"].get("file") is not None + + def test_xunit2_under_filterwarnings_error_is_a_clean_usage_error(self, pytester): + # The project asked for warnings to be errors; the plugin's advice is + # one, delivered as a usage error rather than an INTERNALERROR trace. + result, _ = _run( + pytester, PLAIN, family="xunit2", ini="filterwarnings = error\n" + ) + assert result.ret == pytest.ExitCode.USAGE_ERROR + result.stderr.fnmatch_lines(["ERROR: *junit_family is 'xunit2'*xunit1*"]) + assert "INTERNALERROR" not in result.stdout.str() + + def test_the_notice_can_be_silenced_by_its_class(self, pytester): + result, _ = _run( + pytester, + PLAIN, + family="xunit2", + ini=f"filterwarnings =\n error\n ignore::{PLUGIN}.TestReportsConfigWarning\n", + ) + result.assert_outcomes(passed=1, warnings=0) + + def test_xunit2_gives_no_per_test_fixture_warnings(self, pytester): + # pytest drops the attributes under xunit2 anyway and would warn per test + # that record_xml_attribute is incompatible; the plugin says it once. + result, _ = _run(pytester, PLAIN, family="xunit2") + result.assert_outcomes(passed=1, warnings=1) + assert not [ + line for line in result.stdout.lines if "is incompatible with" in line + ] + + def test_legacy_is_an_alias_of_xunit1(self, pytester): + result, root = _run(pytester, DECORATED, family="legacy") + result.assert_outcomes(passed=2, warnings=0) + assert _cases(root)["test_plain"].get("line") == str(PLAIN_LINE) + + def test_the_junitxml_plugin_may_be_disabled(self, pytester): + # config.option.xmlpath exists only while pytest's junitxml plugin is + # registered, and so do the record_* fixtures. + pytester.makeini("[pytest]\n" + SCORE_PROFILE) + pytester.makepyfile(DECORATED) + result = pytester.runpytest_subprocess("-p", PLUGIN, "-p", "no:junitxml") + result.assert_outcomes(passed=2) + + def test_xdist_gets_the_full_shape(self, pytester): + # pytest builds the XML writer on the controller only, so nothing a + # worker records as an attribute survives; the location is written on + # the controller from the report instead, and the model reaches the + # workers for the properties. + pytest.importorskip("xdist") + result, root = _run(pytester, DECORATED, "-n", "1") + result.assert_outcomes(passed=2, warnings=0) + case = _cases(root)["test_addition"] + assert case.get("line") == str(ADDITION_LINE) + assert _properties(case)["PartiallyVerifies"] == "REQ_1, REQ_2" + + def test_xdist_issues_the_xunit2_notice_once(self, pytester): + pytest.importorskip("xdist") + result, _ = _run(pytester, PLAIN, "-n", "1", family="xunit2") + result.assert_outcomes(passed=1, warnings=1) + + def test_xdist_gets_the_runtime_location_override(self, pytester): + pytest.importorskip("xdist") + result, root = _run(pytester, RUNTIME, "-n", "1") + result.assert_outcomes(passed=2) + case = _cases(root)["test_driven_by_a_file[a.rst]"] + assert (case.get("file"), case.get("line")) == ("specs/a.rst", "7") + + +class TestSourcePath: + def test_the_runfiles_prefix_is_cut_at_a_path_component(self): + assert clean_source_path("../_main/pkg/test_x.py") == "pkg/test_x.py" + assert clean_source_path("_main/pkg/test_x.py") == "pkg/test_x.py" + assert ( + clean_source_path("/cache/bin/t.runfiles/_main/pkg/test_x.py") + == "pkg/test_x.py" + ) + assert clean_source_path("pkg/test_x.py") == "pkg/test_x.py" + + def test_a_directory_merely_ending_in_main_is_kept(self): + # Two files under app_main/ and domain_main/ used to collapse onto the + # same path -- and, with tr_deterministic_case_ids, onto the same ID. + assert ( + clean_source_path("services/app_main/tests/test_api.py") + == "services/app_main/tests/test_api.py" + ) + assert clean_source_path("domain_main/test_api.py") == "domain_main/test_api.py" + + def test_the_last_runfiles_component_wins(self): + # Under bzlmod the execroot's workspace directory is _main as well. + assert ( + clean_source_path("execroot/_main/bazel-out/bin/t.runfiles/_main/pkg/t.py") + == "pkg/t.py" + ) + + def test_windows_separators_count_as_boundaries(self): + assert clean_source_path("..\\_main\\pkg\\test_x.py") == "pkg\\test_x.py" + + +class TestHelpers: + def test_the_plugin_does_not_import_sphinx(self): + script = ( + "import sys;" + f"import {PLUGIN};" + "leaked = sorted(m for m in sys.modules" + " if m in ('sphinx', 'docutils')" + " or m.startswith(('sphinx.', 'sphinx_needs', 'docutils.')));" + "print(','.join(leaked))" + ) + result = subprocess.run( + [sys.executable, "-c", script], capture_output=True, text=True, check=True + ) + assert result.stdout.strip() == "" From c2671c7d70e44c6ee6f1c2ac6e0e843355ee2ac2 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Thu, 10 Sep 2026 23:40:09 +0200 Subject: [PATCH 145/159] =?UTF-8?q?build:=20make=20Sphinx=20and=20sphinx-n?= =?UTF-8?q?eeds=20the=20`sphinx`=20extra=20=E2=80=94=20bare=20package=20an?= =?UTF-8?q?d=20`[pytest]`=20install=20without=20the=20toolchain=20(usebloc?= =?UTF-8?q?ks/sphinx-test-reports#159)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes useblocks/sphinx-test-reports#155. ## What changes `pip install sphinx-test-reports` now installs `lxml` alone. Sphinx and sphinx-needs move to a `sphinx` extra: ```toml dependencies = ["lxml"] [project.optional-dependencies] sphinx = ["sphinx>=7.4", "sphinx-needs>=6.0.1"] pytest = ["pytest>=7.0"] # from useblocks/sphinx-test-reports#151, unchanged ``` So the install line of a documentation project becomes `pip install "sphinx-test-reports[sphinx]"`, and a test runner or build action that only wants `test-reports build needs` no longer pulls the toolchain. The same goes for the pytest plugin useblocks/sphinx-test-reports#151 added as the `pytest` extra: `pip install "sphinx-test-reports[pytest]"` now yields the plugin, pytest and `lxml`, nothing of the toolchain. `[test]` gains the two floors it used to inherit from the core list; `[docs]` already had them; the nox matrix pins both explicitly and is unaffected. The install page lists the three install lines side by side (`sphinx` extra for a documentation project, `pytest` extra for a test runner, bare package for a build action running the command), and the plugin's page, which said how to enable the plugin but not how to install it, names the extra. ## The version-constraint gap An extra is opt-in, so a project that keeps installing the bare package next to an already-installed older toolchain never shows pip the floors. The lazy `setup` in `__init__.py` now enforces them at load time, before the extension is imported (an outdated sphinx-needs may well import and only fail later, inside a directive): ``` Extension error: Could not load extension sphinxcontrib.test_reports: sphinx-needs 5.1.0 is installed, but sphinx-needs>=6.0.1 is required. Install the Sphinx extension's dependencies with: pip install "sphinx-test-reports[sphinx]" ``` A toolchain that is missing altogether keeps the existing "Could not import extension" path, which now names the extra too: ``` Extension error: Could not import extension sphinxcontrib.test_reports; the Sphinx extension's dependencies are an extra, install them with: pip install "sphinx-test-reports[sphinx]" (exception: No module named 'sphinx_needs') ``` One deviation from the sketch in the issue: instead of `app.require_sphinx((7, 4))` plus a hard-coded sphinx-needs floor, the new `toolchain` module reads the `sphinx` extra's requirements from the package's own metadata (`importlib.metadata.requires`) and compares each installed version against its specifier. The floors then live in `pyproject.toml` alone -- useblocks/sphinx-test-reports#150 just moved them, and a copy in code would need a lockstep test -- and a test guards that the extra the check reads is the one `pyproject.toml` declares. `packaging` does the parsing; it is imported lazily and the check stands down without it, since it arrives with Sphinx (and pytest) wherever the extension can be loaded. A distribution that is *not installed* is deliberately left to the import: the import states it more precisely, and a toolchain importable from a source tree without metadata must not be refused. On Sphinx 9 the error appears inside Sphinx's crash report, as the existing "Known" changelog entry already notes for the configuration errors; the note now covers this case too. ## Guaranteeing the property in CI A `toolchain_free` nox session (Python 3.11 and 3.12, new CI job, wired into `all_good`) installs the package with the dependencies it declares -- `pip install ".[pytest]"`, no `--no-deps`, so the declared lists themselves are what is tested -- asserts that neither `sphinx`, `sphinx_needs` nor `docutils` is importable, and runs the converter's and the pytest plugin's test modules with `-m "not toolchain"`. The tests that need a build carry the new `toolchain` mark (the issue suggested `needs_sphinx`; `sphinx` itself is taken by Sphinx's own testing fixtures). `tests/conftest.py` loads `sphinx.testing.fixtures` only where Sphinx is importable, and one top-level import of the package's Sphinx-dependent `exceptions` module in `test_project_config.py` became local to the marked test that uses it. useblocks/sphinx-test-reports#151's `plugin_floor` session (the plugin's tests on the oldest pytest per Python) installed `.[test]`, which after this change brings the toolchain back in. It now installs `.[pytest]` plus pytest-xdist and runs the same toolchain-absent guard, so the floor run doubles as the isolation proof on old pytest. It also forwards nox's posargs, which CI passes (`--full-trace`) and it ignored. The mypy CI job installs with `uv sync --group dev --extra sphinx`; without the extra it would no longer see Sphinx and docutils. ## Open questions from the issue, as resolved here - **Extra name:** `sphinx`, as proposed. It matches the `[docs]`/`[test]` style and the `[pytest]` extra from useblocks/sphinx-test-reports#151. - **1.5.0 or 2.0:** not decided here. The changelog carries a "Breaking:" entry spelling out the install-line change; `version` is untouched, so the release can decide. - **Two-distribution split:** not done, per the suggested path. - **`[pytest]` extra:** on master since useblocks/sphinx-test-reports#151; this PR is what makes it toolchain-free, and the second commit proves and documents that. ## Verification - `pytest -n auto tests/`: 407 passed (13 new in `tests/test_toolchain.py`) - `nox -s toolchain_free-3.11 toolchain_free-3.12`: 308 passed, 3 skipped (the pytest-xdist tests; xdist is not installed there), 24 `toolchain`-marked deselected, in a venv holding the package, `lxml` and pytest only; the toolchain-absent guard passes - `nox -s "plugin_floor(python='3.11', pytest_version='7.0.1')" "plugin_floor(python='3.12', pytest_version='7.3.2')"`: 63 passed each, toolchain absent - `mypy`: clean (the new module is strict-checked, not excluded) - `pre-commit run --all-files`: clean - `sphinx-build -W` of the docs: clean ## Notes for the reviewer - Rebased onto useblocks/sphinx-test-reports#151 (`pyproject.toml`, `noxfile.py`, `ci.yaml`, `tests/conftest.py` conflicted; all resolved as a union of both sides). The first commit is the original change; the second is the plugin-isolation follow-up and can be reviewed, or dropped, on its own. - `docs/install.rst` also fixes two pre-existing typos on the page it rewrites ("must to be", "can be find"). --- .../.github/workflows/ci.yaml | 26 ++- .../sphinx-test-reports/docs/changelog.rst | 23 ++- packages/sphinx-test-reports/docs/cli.rst | 5 +- packages/sphinx-test-reports/docs/install.rst | 38 ++++- packages/sphinx-test-reports/docs/pytest.rst | 4 + packages/sphinx-test-reports/noxfile.py | 52 +++++- packages/sphinx-test-reports/pyproject.toml | 15 +- .../sphinxcontrib/test_reports/__init__.py | 81 ++++++--- .../sphinxcontrib/test_reports/toolchain.py | 77 +++++++++ .../sphinx-test-reports/tests/conftest.py | 11 +- .../tests/test_cli_convert.py | 2 + .../tests/test_project_config.py | 13 +- .../tests/test_toolchain.py | 158 ++++++++++++++++++ 13 files changed, 464 insertions(+), 41 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/toolchain.py create mode 100644 packages/sphinx-test-reports/tests/test_toolchain.py diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml index e1565b73a..d7f02c16f 100644 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ b/packages/sphinx-test-reports/.github/workflows/ci.yaml @@ -44,6 +44,27 @@ jobs: - name: Run the plugin's tests on the oldest supported pytest run: nox --non-interactive --session "plugin_floor(python='${{ matrix.python-version }}', pytest_version='${{ matrix.pytest-version }}')" -- --full-trace + toolchain-free: + # The converter and the pytest plugin run without Sphinx; this installs the + # package with the `pytest` extra alone and runs their tests where Sphinx is + # absent, the only thing that guarantees it. + name: "Test without Sphinx (python: ${{ matrix.python-version }})" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.11", "3.12"] + steps: + - uses: actions/checkout@v2 + - name: Set Up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Nox + run: | + python -m pip install nox + - name: Run Tests + run: nox --non-interactive --session "toolchain_free-${{ matrix.python-version }}" -- --full-trace + pre-commit: name: pre-commit runs-on: ubuntu-latest @@ -68,8 +89,10 @@ jobs: uses: astral-sh/setup-uv@v5 - name: uv sync + # The toolchain is an extra: without it, mypy cannot follow the + # extension's Sphinx and docutils imports. run: | - uv sync --group dev + uv sync --group dev --extra sphinx - name: Run mypy run: | @@ -99,6 +122,7 @@ jobs: needs: - tests - plugin-floor + - toolchain-free - pre-commit - mypy - linkcheck diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index f55f64afb..e9cbb4781 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,22 @@ Unreleased ---------- :Released: under development +* Breaking: ``pip install sphinx-test-reports`` no longer installs Sphinx and + Sphinx-Needs. They are the new ``sphinx`` extra, so the install line of a + documentation project becomes ``pip install "sphinx-test-reports[sphinx]"``. + The bare package brings only ``lxml``, the dependency of the ``test-reports`` + command, which runs in test runners and build actions that have no + documentation toolchain; the pytest plugin, the ``pytest`` extra, runs there + too. An extra is opt-in, so the extension now checks the + installed toolchain against the versions the extra declares when Sphinx + loads it: a missing or older Sphinx or Sphinx-Needs stops the build with a + message naming the install line, instead of a traceback from inside a + directive. +* Testing: CI installs the package with the ``pytest`` extra alone and runs the + converter's and the pytest plugin's tests without Sphinx -- on the newest + pytest and on the oldest the plugin supports -- so a toolchain import + creeping into either import chain, or Sphinx creeping back into a dependency + list, fails the build. * Feature: Support the googletest XML dialect: ``status="notrun"`` is reported as ``disabled`` instead of ``passed``, all ````/```` parts of a test case are kept instead of only the first, ``RecordProperty`` values @@ -48,7 +64,9 @@ Unreleased helper, for cases skipped at setup and under pytest-xdist too. Which properties exist, their XML names and which take lists is the ``test_reports_properties`` pytest ini option; S-CORE's model, which the - plugin was ported from, is the documented example. See :ref:`pytest_plugin`. + plugin was ported from, is the documented example. The plugin is the + ``pytest`` extra: ``pip install "sphinx-test-reports[pytest]"`` installs it + and pytest, without the documentation toolchain. See :ref:`pytest_plugin`. * Bugfix: ``tr_file_option``, ``tr_source_file_option`` and ``tr_source_line_option`` may no longer name a fixed field such as ``case`` or ``result``, in ``conf.py`` or in the declarative file. The build @@ -61,7 +79,8 @@ Unreleased file -- a wrong type, a rename onto a fixed field, a disagreeing need type -- as its crash report rather than as a one-line message; the message is in the report. A typo in ``[test_reports.build.needs]`` is reported the same - way. + way, and so is a missing or outdated toolchain refused when the extension + loads. * Support: Python 3.10 is no longer supported. It reached the end of upstream support, and dropping it lets the package read TOML with ``tomllib`` from the standard library instead of carrying a backport. diff --git a/packages/sphinx-test-reports/docs/cli.rst b/packages/sphinx-test-reports/docs/cli.rst index dc0182b2b..f53c0c6ac 100644 --- a/packages/sphinx-test-reports/docs/cli.rst +++ b/packages/sphinx-test-reports/docs/cli.rst @@ -13,7 +13,10 @@ be cached by a build system, and the data is unavailable to anything else. The CLI splits the computation out; the documentation build only imports the result. The command imports no Sphinx code at all, so it can run as a build action in an -environment that has no documentation toolchain installed. +environment that has no documentation toolchain installed. Installed as +``pip install sphinx-test-reports`` -- without the ``sphinx`` extra the +:doc:`extension needs ` -- the package brings a single dependency, +``lxml``. Converting a report ------------------- diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst index dc91cece1..4dcf7e334 100644 --- a/packages/sphinx-test-reports/docs/install.rst +++ b/packages/sphinx-test-reports/docs/install.rst @@ -3,9 +3,41 @@ Installation ============ -Install ``Sphinx-Test-Report`` via ``pip install sphinx-test-reports``. +The package has three consumers, and each installs a different part of it. -After that the extension must to be added to the ``conf.py`` file:: +A documentation project needs the Sphinx extension, and with it the +documentation toolchain -- Sphinx and +`Sphinx-Needs `_ -- which is +the ``sphinx`` extra of the package:: + + pip install "sphinx-test-reports[sphinx]" + +A test runner that should write the XML shape the extension reads installs the +:ref:`pytest plugin ` as the ``pytest`` extra, which adds pytest +and nothing of the documentation toolchain:: + + pip install "sphinx-test-reports[pytest]" + +A build action that only runs the :ref:`test-reports command `, which +turns test results into a ``needs.json`` without a Sphinx build, installs the +bare package, whose single dependency is ``lxml``:: + + pip install sphinx-test-reports + +.. versionchanged:: 1.5.0 + ``pip install sphinx-test-reports`` -- without an extra -- no longer + installs Sphinx and Sphinx-Needs. A documentation project has to add the + ``sphinx`` extra to its install line; a test runner or a build action that + has no documentation toolchain no longer gets one. + +The ``sphinx`` extra also states the supported versions: Sphinx 7.4 and +Sphinx-Needs 6.0.1 or later. An extra is opt-in, so a project that keeps +installing the bare package into an environment holding an older toolchain +would never be told by ``pip``; the extension therefore checks the installed +versions when Sphinx loads it and stops the build with a message naming the +install line above. + +After that the extension must be added to the ``conf.py`` file:: extensions = ['sphinx_needs', 'sphinxcontrib.test_reports', @@ -18,6 +50,6 @@ Therefore it must also be added to the ``extensions`` list! And same for `PlantUML `_, which is important to render flowcharts for filtered test-cases. -More details can be find in the +More details can be found in the `installation-guide `_ of ``Sphinx-Needs``. diff --git a/packages/sphinx-test-reports/docs/pytest.rst b/packages/sphinx-test-reports/docs/pytest.rst index 02ab1e5f1..d8c4b9467 100644 --- a/packages/sphinx-test-reports/docs/pytest.rst +++ b/packages/sphinx-test-reports/docs/pytest.rst @@ -21,6 +21,10 @@ is the worked example below. Enabling it ----------- +The plugin is the ``pytest`` extra of the package: ``pip install +"sphinx-test-reports[pytest]"`` installs it without the documentation toolchain +(see :doc:`/install`). Enable it in the pytest configuration: + .. code-block:: ini # pytest.ini / pyproject.toml [tool.pytest.ini_options] diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index b78e2abb3..d8c77abea 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -20,6 +20,46 @@ def tests(session, sphinx_needs, sphinx): run_tests(session, sphinx, sphinx_needs) +# The converter, its configuration and the pytest plugin run without the +# documentation toolchain, and these are their tests. Everything else builds +# documentation. +TOOLCHAIN_FREE_TESTS = [ + "tests/test_cli_config.py", + "tests/test_cli_convert.py", + "tests/test_identity.py", + "tests/test_junit_parser.py", + "tests/test_junit_parser_gtest.py", + "tests/test_needs_export.py", + "tests/test_project_config.py", + "tests/test_pytest_plugin.py", + "tests/test_toolchain.py", +] + +# Exits non-zero, naming them, if any module of the toolchain is importable. +TOOLCHAIN_IS_ABSENT = ( + "import importlib.util, sys;" + "present = [m for m in ('sphinx', 'sphinx_needs', 'docutils')" + " if importlib.util.find_spec(m)];" + "sys.exit(f'toolchain installed: {present}' if present else 0)" +) + + +@session(python=PYTHON_VERSIONS) +def toolchain_free(session): + """Run the converter's and the pytest plugin's tests without Sphinx. + + The package is installed with the dependencies it declares -- `lxml`, and + pytest through the `pytest` extra -- so a toolchain import creeping into + either import chain, or Sphinx creeping back into a dependency list, fails + here. The tests that need a documentation build carry the `toolchain` mark. + """ + session.install(".[pytest]") + session.run("python", "-c", TOOLCHAIN_IS_ABSENT) + session.run( + "pytest", "-m", "not toolchain", *TOOLCHAIN_FREE_TESTS, *session.posargs + ) + + #: The oldest pytest the plugin's tests run on, per Python: 7.0 is the plugin's #: own floor (the pytest extra), and 7.3.2 the first pytest that runs on #: Python 3.12 at all. @@ -29,9 +69,15 @@ def tests(session, sphinx_needs, sphinx): @session @nox.parametrize("python,pytest_version", PLUGIN_PYTEST_FLOORS) def plugin_floor(session, pytest_version): - """The pytest plugin's tests on the oldest pytest it supports.""" - session.install(".[test]", f"pytest=={pytest_version}") - session.run("pytest", "tests/test_pytest_plugin.py") + """The plugin's tests on the oldest pytest it supports, without Sphinx. + + Installed as a test runner installs it: the `pytest` extra, nothing of the + documentation toolchain. pytest-xdist is there for the tests that run the + plugin under it. + """ + session.install(".[pytest]", "pytest-xdist", f"pytest=={pytest_version}") + session.run("python", "-c", TOOLCHAIN_IS_ABSENT) + session.run("pytest", "tests/test_pytest_plugin.py", *session.posargs) @session(python="3.12") diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index cadcadcf1..200bf6008 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -23,9 +23,15 @@ classifiers = [ ] keywords = ["sphinx", "documentation", "test-reports"] requires-python = ">=3.11" -dependencies = ["sphinx>=7.4", "lxml", "sphinx-needs>=6.0.1"] +dependencies = ["lxml"] [project.optional-dependencies] +# The Sphinx extension. The `test-reports` command and the pytest plugin run +# without the documentation toolchain, so it is an extra rather than a +# dependency; the lazy +# `setup` in `__init__.py` enforces these floors when the extension is loaded, +# since an extra is opt-in and pip never sees them otherwise. +sphinx = ["sphinx>=7.4", "sphinx-needs>=6.0.1"] # The pytest plugin (sphinxcontrib.test_reports.pytest_plugin); pytest is not # a dependency of the extension or the converter. 7.0 is where everything the # plugin uses exists (pytest.Config/Item/Mark, Config.stash, @@ -40,6 +46,8 @@ test = [ "pytest-xdist", "pytest>=7.0", "pytest-cov", + "sphinx>=7.4", + "sphinx-needs>=6.0.1", "sphinx_design", "sphinxcontrib-plantuml", ] @@ -72,6 +80,11 @@ test-reports = "sphinxcontrib.test_reports.cli:main" [tool.flit.module] name = "sphinxcontrib.test_reports" +[tool.pytest.ini_options] +markers = [ + "toolchain: needs the documentation toolchain (Sphinx, sphinx-needs) installed; deselected by the toolchain_free nox session", +] + [project.urls] Homepage = "https://github.com/useblocks/sphinx-test-reports" Repository = "https://github.com/useblocks/sphinx-test-reports.git" diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py index 3e1fd759c..6bb405dc3 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py @@ -1,37 +1,66 @@ """Sphinx-Test-Reports. ``setup`` is resolved lazily (PEP 562) so that importing a submodule of this -package does not import Sphinx: :mod:`sphinxcontrib.test_reports.projectconfig` -is read by consumers that are not a documentation build, in environments where -the documentation toolchain is not installed, and every import of it runs this -file first. Sphinx still finds ``setup`` through normal attribute access when it +package does not import Sphinx: the ``test-reports`` command and +:mod:`sphinxcontrib.test_reports.projectconfig` are used where the +documentation toolchain is not installed -- it is the ``sphinx`` extra of the +package, not a dependency -- and every import of a submodule runs this file +first. Sphinx still finds ``setup`` through normal attribute access when it loads this package as an extension. + +Resolving ``setup`` is also where the toolchain is checked. An extra is opt-in, +so a project that installs the bare package into an environment already holding +an older Sphinx or sphinx-needs never shows pip the extra's version floors; +:mod:`sphinxcontrib.test_reports.toolchain` enforces them here instead, with +the install line in the message. """ __all__ = ["setup"] def __getattr__(name: str) -> object: - if name == "setup": + if name != "setup": + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + from sphinxcontrib.test_reports.toolchain import INSTALL_HINT, unmet_requirements + + unmet = unmet_requirements() + if unmet: + # Before the import: an outdated sphinx-needs may well import and fail + # only later, inside a directive, with a traceback that does not say + # why. Sphinx fetches `setup` with getattr(), which only tolerates + # AttributeError, so the error reaches the user as it is raised here. + message = ( + f"Could not load extension {__name__}: {'; '.join(unmet)}. " + f"Install the Sphinx extension's dependencies with: {INSTALL_HINT}" + ) try: - from sphinxcontrib.test_reports.test_reports import setup - except ImportError as error: - # Sphinx wraps an ImportError from importing the *package* in a - # clean "Could not import extension" message, but fetches `setup` - # with getattr(), which only tolerates AttributeError. Resolving - # lazily would let a missing sphinx-needs escape as a raw - # traceback, so the message Sphinx would have produced is raised - # here instead -- when Sphinx is there to receive it. The wrapped - # exception goes in the second argument only: ExtensionError.__str__ - # renders it as "(exception: ...)", so spelling it out in the - # message too would print it twice. - try: - from sphinx.errors import ExtensionError - except ImportError: - raise error from None - raise ExtensionError( - f"Could not import extension {__name__}", error - ) from error - - return setup - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + from sphinx.errors import ExtensionError + except ImportError: + raise ImportError(message) from None + raise ExtensionError(message) + + try: + from sphinxcontrib.test_reports.test_reports import setup + except ImportError as error: + # Sphinx wraps an ImportError from importing the *package* in a clean + # "Could not import extension" message, but fetches `setup` with + # getattr(), which only tolerates AttributeError. Resolving lazily + # would let a missing sphinx-needs escape as a raw traceback, so the + # message Sphinx would have produced is raised here instead -- when + # Sphinx is there to receive it -- naming the extra that installs the + # toolchain, the likely cause. The wrapped exception goes in the second + # argument only: ExtensionError.__str__ renders it as + # "(exception: ...)", so spelling it out in the message too would print + # it twice. + try: + from sphinx.errors import ExtensionError + except ImportError: + raise error from None + raise ExtensionError( + f"Could not import extension {__name__}; the Sphinx extension's " + f"dependencies are an extra, install them with: {INSTALL_HINT}", + error, + ) from error + + return setup diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/toolchain.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/toolchain.py new file mode 100644 index 000000000..e11f59baa --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/toolchain.py @@ -0,0 +1,77 @@ +"""The documentation toolchain the Sphinx extension needs, checked at load time. + +Sphinx and sphinx-needs are the ``sphinx`` extra of this package rather than +dependencies: the ``test-reports`` command runs where they are not installed. +An extra is opt-in, so nothing shows pip the extra's version floors when a +project installs the bare package into an environment that already holds an +older toolchain -- the old versions stay, and the extension would fail later, +inside a directive, with a traceback that does not say why. + +:func:`unmet_requirements` compares the installed toolchain against the floors +the extra declares, read from this package's own metadata so that they live in +``pyproject.toml`` alone. The lazy ``setup`` in the package ``__init__`` calls +it before the extension is imported and raises Sphinx's ``ExtensionError`` +with the install line. +""" + +from __future__ import annotations + +from importlib.metadata import PackageNotFoundError, requires, version +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from packaging.requirements import Requirement + +#: The distribution whose metadata declares the toolchain. +DISTRIBUTION = "sphinx-test-reports" +#: The extra holding the Sphinx extension's dependencies. +EXTRA = "sphinx" +#: The install line named by every message about a missing or outdated toolchain. +INSTALL_HINT = f'pip install "{DISTRIBUTION}[{EXTRA}]"' + + +def toolchain_requirements() -> list[Requirement]: + """The requirements the extra declares, read from the installed metadata. + + Empty without metadata (the package imported from a source tree on + ``sys.path``) and without ``packaging``, which parses them: it is not a + dependency of this package but arrives with Sphinx (and with pytest), so it + is there wherever the extension is loaded. + """ + try: + from packaging.requirements import Requirement + except ImportError: + return [] + try: + declared = requires(DISTRIBUTION) or [] + except PackageNotFoundError: + return [] + requirements = [Requirement(spec) for spec in declared] + return [ + requirement + for requirement in requirements + if requirement.marker is not None + and requirement.marker.evaluate({"extra": EXTRA}) + ] + + +def unmet_requirements() -> list[str]: + """One sentence per requirement of the extra the environment falls short of. + + A requirement whose distribution is not installed at all is not reported: + the import that fails on it states the problem more precisely, and a + toolchain importable from a source tree without metadata must not be + refused on the strength of the metadata alone. + """ + unmet: list[str] = [] + for requirement in toolchain_requirements(): + try: + installed = version(requirement.name) + except PackageNotFoundError: + continue + if not requirement.specifier.contains(installed, prereleases=True): + unmet.append( + f"{requirement.name} {installed} is installed, " + f"but {requirement.name}{requirement.specifier} is required" + ) + return unmet diff --git a/packages/sphinx-test-reports/tests/conftest.py b/packages/sphinx-test-reports/tests/conftest.py index fe6baab89..abb52087d 100644 --- a/packages/sphinx-test-reports/tests/conftest.py +++ b/packages/sphinx-test-reports/tests/conftest.py @@ -1,12 +1,21 @@ """Pytest conftest module containing common test configuration and fixtures.""" +import importlib.util import shutil from pathlib import Path from tempfile import mkdtemp import pytest -pytest_plugins = ["sphinx.testing.fixtures", "pytester"] +# The documentation toolchain is an extra of the package, and the converter's +# and the pytest plugin's tests run where it is not installed (the +# `toolchain_free` and `plugin_floor` nox sessions), so Sphinx's fixtures are +# loaded only where Sphinx is. Tests that need a build carry the `toolchain` +# mark and are deselected there. `pytester`, which the plugin's tests drive, +# ships with pytest itself. +pytest_plugins = ( + ["sphinx.testing.fixtures"] if importlib.util.find_spec("sphinx") else [] +) + ["pytester"] def copy_srcdir_to_tmpdir(srcdir, tmp): diff --git a/packages/sphinx-test-reports/tests/test_cli_convert.py b/packages/sphinx-test-reports/tests/test_cli_convert.py index af77c3a19..d16440b6f 100644 --- a/packages/sphinx-test-reports/tests/test_cli_convert.py +++ b/packages/sphinx-test-reports/tests/test_cli_convert.py @@ -68,6 +68,7 @@ def test_importing_the_cli_does_not_import_sphinx(self): class TestEnvelope: + @pytest.mark.toolchain def test_output_passes_the_sphinx_needs_schema(self, tmp_path): """The output must validate against sphinx-needs' own needs.json schema.""" from sphinx_needs import needsfile @@ -616,6 +617,7 @@ def test_a_message_absent_from_the_body_is_kept(self, tmp_path): assert "not applicable on this platform" in content +@pytest.mark.toolchain class TestImportIntoABuild: """The documented consumption path: ``needimport`` of the produced file. diff --git a/packages/sphinx-test-reports/tests/test_project_config.py b/packages/sphinx-test-reports/tests/test_project_config.py index 077b198c7..515fd891a 100644 --- a/packages/sphinx-test-reports/tests/test_project_config.py +++ b/packages/sphinx-test-reports/tests/test_project_config.py @@ -15,7 +15,6 @@ import pytest -from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError from sphinxcontrib.test_reports.projectconfig import ( BRIDGE_KEYS, BUILD_TABLE, @@ -459,6 +458,7 @@ def test_absolute_paths_stay_untouched(self, tmp_path): assert config["rootdir"] == str(tmp_path) +@pytest.mark.toolchain class TestSphinxBridge: """The build reads the same section and honours the same precedence.""" @@ -508,6 +508,8 @@ def test_bridge_rejects_a_broken_section(self, tmp_path): from sphinx.application import Sphinx + from sphinxcontrib.test_reports.exceptions import InvalidConfigurationError + docs = tmp_path / "docs" with pytest.raises(InvalidConfigurationError, match="suite_id_length"): Sphinx( @@ -715,6 +717,7 @@ def _basic_doc(tmp_path, toml=None, conf_extra=""): return docs +@pytest.mark.toolchain class TestBridgePrecedence: """``-D`` > TOML > conf.py, and the diagnostics for a file that is missing.""" @@ -822,6 +825,7 @@ def _documented_toml_example(): return "\n".join(block) + "\n" +@pytest.mark.toolchain class TestConfvalTypes: """The bridged values must pass Sphinx's own confval type check. @@ -878,13 +882,15 @@ def test_projectconfig_imports_without_sphinx(self): ) assert result.returncode == 0, result.stderr + @pytest.mark.toolchain def test_a_missing_sphinx_needs_is_an_extension_error(self): # The lazy `setup` owns the message Sphinx would have produced for a # broken extension import, because Sphinx fetches `setup` with # getattr() and would otherwise show a raw traceback. Sphinx renders # the wrapped exception itself, so the message must not carry it a - # second time. Checked in a subprocess: sphinx_needs is importable - # here. + # second time -- but it names the extra that installs the toolchain, + # the likely cause since the toolchain stopped being a dependency. + # Checked in a subprocess: sphinx_needs is importable here. code = ( "import sys\n" "sys.modules['sphinx_needs'] = None\n" # `from sphinx_needs...` fails @@ -907,3 +913,4 @@ def test_a_missing_sphinx_needs_is_an_extension_error(self): ) assert message.count("(exception:") == 1 assert "sphinx_needs" in message + assert 'pip install "sphinx-test-reports[sphinx]"' in message diff --git a/packages/sphinx-test-reports/tests/test_toolchain.py b/packages/sphinx-test-reports/tests/test_toolchain.py new file mode 100644 index 000000000..8e0042bdb --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_toolchain.py @@ -0,0 +1,158 @@ +"""The documentation toolchain is an extra; the extension checks it at load time. + +``pip install sphinx-test-reports`` installs the converter's dependency only. +The Sphinx extension needs Sphinx and sphinx-needs at the versions the +``sphinx`` extra declares -- and an extra is opt-in, so a project that installs +the bare package next to an older toolchain never shows pip those floors. The +lazy ``setup`` compares the installed versions against the extra's declarations +when Sphinx loads the extension, and names the install line in its message. +""" + +import sys +from importlib.metadata import PackageNotFoundError +from io import StringIO + +import pytest + +import sphinxcontrib.test_reports as package +from sphinxcontrib.test_reports import toolchain + +DECLARED = [ + "lxml", + 'sphinx>=7.4; extra == "sphinx"', + 'sphinx-needs>=6.0.1; extra == "sphinx"', + 'pytest>=7.0; extra == "pytest"', + 'pytest>=7.0; extra == "test"', +] + +AT_THE_FLOORS = {"sphinx": "7.4.7", "sphinx-needs": "6.0.1"} + +VIOLATION = "sphinx-needs 5.1.0 is installed, but sphinx-needs>=6.0.1 is required" + + +def _environment(monkeypatch, installed, declared=DECLARED): + """Fake the metadata: what this package declares and what is installed.""" + + def requires(name): + assert name == toolchain.DISTRIBUTION + return declared + + def version(name): + try: + return installed[name] + except KeyError: + raise PackageNotFoundError(name) from None + + monkeypatch.setattr(toolchain, "requires", requires) + monkeypatch.setattr(toolchain, "version", version) + + +class TestUnmetRequirements: + def test_a_toolchain_at_the_floors_is_accepted(self, monkeypatch): + _environment(monkeypatch, AT_THE_FLOORS) + assert toolchain.unmet_requirements() == [] + + def test_a_version_below_the_floor_is_named_with_the_floor(self, monkeypatch): + _environment(monkeypatch, {**AT_THE_FLOORS, "sphinx-needs": "5.1.0"}) + assert toolchain.unmet_requirements() == [VIOLATION] + + def test_every_violation_is_reported_in_declaration_order(self, monkeypatch): + _environment(monkeypatch, {"sphinx": "7.3.7", "sphinx-needs": "5.1.0"}) + assert toolchain.unmet_requirements() == [ + "sphinx 7.3.7 is installed, but sphinx>=7.4 is required", + VIOLATION, + ] + + def test_a_missing_distribution_is_left_to_the_import(self, monkeypatch): + # The import that fails on a missing package states the problem more + # precisely -- and a toolchain importable from a source tree without + # metadata must not be refused on the strength of the metadata alone. + _environment(monkeypatch, {"sphinx": "7.4.7"}) + assert toolchain.unmet_requirements() == [] + + def test_other_extras_and_the_core_dependency_are_not_checked(self, monkeypatch): + _environment(monkeypatch, {**AT_THE_FLOORS, "lxml": "0.1", "pytest": "1.0"}) + assert toolchain.unmet_requirements() == [] + + def test_a_prerelease_above_the_floor_is_accepted(self, monkeypatch): + _environment(monkeypatch, {**AT_THE_FLOORS, "sphinx-needs": "9.0.0rc1"}) + assert toolchain.unmet_requirements() == [] + + def test_without_our_own_metadata_there_is_nothing_to_check(self, monkeypatch): + # Run from a source tree on sys.path, the package has no metadata. + def requires(name): + raise PackageNotFoundError(name) + + monkeypatch.setattr(toolchain, "requires", requires) + assert toolchain.unmet_requirements() == [] + + def test_without_packaging_the_check_is_skipped(self, monkeypatch): + # `packaging` is not a dependency of this package: it arrives with + # Sphinx (and with pytest). Where neither is installed, nothing loads + # the extension either -- so the check stands down instead of failing + # on its own import. + _environment(monkeypatch, {"sphinx": "7.3.7", "sphinx-needs": "5.1.0"}) + monkeypatch.setitem(sys.modules, "packaging.requirements", None) + assert toolchain.unmet_requirements() == [] + + def test_the_installed_metadata_declares_the_toolchain_under_the_extra(self): + # Against the real metadata: the extra the check reads is the one + # pyproject.toml declares. Renaming it there would silently disarm the + # check, and this test. + names = sorted( + requirement.name for requirement in toolchain.toolchain_requirements() + ) + assert names == ["sphinx", "sphinx-needs"] + + def test_this_environment_meets_the_floors(self): + assert toolchain.unmet_requirements() == [] + + +@pytest.mark.toolchain +class TestLazySetup: + """Sphinx resolves ``setup`` through getattr(); the check runs first.""" + + def test_a_sufficient_toolchain_resolves_setup(self): + from sphinxcontrib.test_reports.test_reports import setup + + assert package.setup is setup + + def test_a_toolchain_below_the_floors_is_an_extension_error(self, monkeypatch): + from sphinx.errors import ExtensionError + + monkeypatch.setattr(toolchain, "unmet_requirements", lambda: [VIOLATION]) + with pytest.raises(ExtensionError) as info: + _ = package.setup + message = str(info.value) + assert message.startswith("Could not load extension sphinxcontrib.test_reports") + assert VIOLATION in message + assert toolchain.INSTALL_HINT in message + # Nothing was imported, so there is no exception to wrap; the message + # must not end in an empty "(exception: ...)". + assert "(exception:" not in message + + def test_sphinx_surfaces_the_error_when_loading_the_extension( + self, tmp_path, monkeypatch + ): + # Sphinx fetches `setup` with getattr(module, "setup", None), which + # only swallows AttributeError. The error must reach the user as the + # extension error it is, install line included -- not as "extension + # has no setup() function". + from sphinx.application import Sphinx + from sphinx.errors import ExtensionError + + monkeypatch.setattr(toolchain, "unmet_requirements", lambda: [VIOLATION]) + (tmp_path / "conf.py").write_text( + 'extensions = ["sphinxcontrib.test_reports"]\n', encoding="utf-8" + ) + (tmp_path / "index.rst").write_text("Index\n=====\n", encoding="utf-8") + with pytest.raises(ExtensionError, match=r"sphinx-test-reports\[sphinx\]"): + Sphinx( + srcdir=tmp_path, + confdir=tmp_path, + outdir=tmp_path / "_build", + doctreedir=tmp_path / "_doctrees", + buildername="html", + status=None, + warning=StringIO(), + ) From 91c9e197fc794651866bd5f6d0507b20387370a9 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Fri, 11 Sep 2026 09:36:06 +0200 Subject: [PATCH 146/159] =?UTF-8?q?feat(parsers)!:=20spell=20a=20failed=20?= =?UTF-8?q?result=20`failed`,=20not=20`failure`=20=E2=80=94=20one=20result?= =?UTF-8?q?=20vocabulary=20for=20both=20parsers=20(useblocks/sphinx-test-r?= =?UTF-8?q?eports#161)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Why S-CORE cannot adopt the `result` field as it is spelled today. A test case's `result` was never a chosen name — it was whatever the input called it. The JUnit parser passed the name of the result-carrying `` child through verbatim, so a failure came out as `failure`, after the `` element: ```python RESULT_PART_KINDS = ("skipped", "failure", "error") # XML element names ... tc_dict["result"] = first_part["kind"] # the element name, verbatim ``` The two states with no element of their own were invented in the `else` branch, and whoever wrote it reached for participles — `passed`, and `disabled` for googletest's `status="notrun"`. The JSON parser passed its report's own value through untouched. Three consequences: * the same product said `failure` for one case's result and `failed` for the count of them on its suite (`fields.FIELDS`), and `errors` next to `error`; * the same logical outcome could arrive under two spellings depending on the input format, although `jsonparser`'s API is documented as being in sync with `junitparser`'s; * `docs/directives/test_case.rst` documented the value as **`failed`** — which it never was. The page that documents the directive was simply wrong. S-CORE's own colouring hook keys on pytest's vocabulary (`passed`/`failed`/`skipped`/`disabled`), so STR-converted needs would render uncoloured against it. ## What changed Every state is now a participle: **`passed`, `failed`, `error`, `skipped`, `disabled`**. `error` is deliberately *not* renamed. It agrees with the `errors` count beside it and with pytest, which spells that outcome `error` too. The pair that disagreed was `failure`/`failed`, and `failed` is the half that already appeared in a field name. The substance is not the rename but the **normalisation step that did not exist**: the vocabulary is declared once, in a new `results` module, and both parsers map their input onto it. A JSON report written against the JUnit dialect no longer produces a different `result` than the XML it mirrors. A state this package does not know is still passed through untouched, so a `tr_json_mapping` pointing at a report with a vocabulary of its own keeps working. The part-level `kind` stays the XML element name — it reports which element the evidence came from, and the converter capitalises it into the evidence heading ("Failure: …"). A test pins that divergence, and it is red-green verified: normalising `kind` too makes it fail. The declared `result` description now names the states, so a consumer reading the declarations out of a produced `needs.json` — a schema check, a metamodel validator, S-CORE's tooling — learns the field's domain from the file: ```json "description": "Test result status: passed, failed, error, skipped, disabled" ``` ## Breaking — what a project has to update 1. **A filter naming the value**: `'failure' == result` becomes `'failed' == result`. 2. **A custom `tr_report_template`**: it carries *two* such filters from the shipped template it was copied from. This is the dangerous one — see below. 3. **Custom CSS** targeting the generated `tr_failure` class, now `tr_failed`. The stylesheet keeps rules for both, so the colours survive either way. The value is also what `test-reports build needs` writes into `needs.json`, so a consumer of that file has to be updated with it. All of this is in the changelog entry. ## The untested coupling this surfaced The shipped `test_report_template.txt` filters on the result value twice, and it had **no test coverage at all**: every fixture exercising `test-report` pointed `tr_report_template` at a template of its own. A rename could have emptied its "Failed test cases" table and count in every project using the default, silently. A fixture now builds with the default template, and its count caught exactly that during this change — the parser started saying `failed` while the template still filtered `failure`, and the count went to zero. ## Verification * `pytest -n auto tests/` — **421 passed**, 0 failures (baseline before the change: 407) * `mypy` (strict) — **Success: no issues found in 14 source files**. The new module is type-checked rather than parked on the `useblocks/sphinx-test-reports#114` exclude list that both parsers sit on. * `nox -s toolchain_free` — 3.11 and 3.12 both successful; the new tests run with Sphinx, sphinx-needs and docutils all absent, so the normalisation stays toolchain-free. * `pre-commit run --all-files` — all hooks pass. The KOI8-encoded fixture template survived the edit (its test asserts on the decoded text). * `sphinx-build docs` — clean. The documentation's own pytest example, filtering `'failed' == result` against a real report, renders **"Failed test cases: 4"** and emits `tr_failed` 12 times, so the filter and the CSS class are verified end to end rather than by inspection. ## Follow-ups, deliberately not in this PR * `common.css` has no `tr_disabled` rule although the parser emits `disabled`, and no dark-theme variants at all. * Annotating a *reference* to a test-case need with its result (the S-CORE feature this came from) — that belongs in sphinx-needs' `need_ref`/`meta_links`, with STR supplying the `tr_` palette. --- Targets `master`, adding to the `Unreleased` section; useblocks/sphinx-test-reports#160 gets rebased on top, which folds the entry into the 2.0.0 section. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) --- .../sphinx-test-reports/docs/changelog.rst | 22 +++ packages/sphinx-test-reports/docs/cli.rst | 2 +- .../docs/custom_test_report_template.txt | 4 +- .../docs/directives/test_case.rst | 3 +- .../docs/examples/pytest.rst | 4 +- packages/sphinx-test-reports/docs/pytest.rst | 2 +- packages/sphinx-test-reports/noxfile.py | 1 + .../sphinxcontrib/test_reports/css/common.css | 6 + .../directives/test_report_template.txt | 4 +- .../sphinxcontrib/test_reports/fields.py | 7 +- .../sphinxcontrib/test_reports/jsonparser.py | 10 + .../sphinxcontrib/test_reports/junitparser.py | 12 +- .../test_reports/needs_export.py | 10 +- .../sphinxcontrib/test_reports/results.py | 63 +++++++ .../custom_test_report_template.txt | 4 +- .../custom_test_report_template.txt | 4 +- .../custom_test_report_template.txt | 4 +- .../doc_test/default_tr_template/conf.py | 8 + .../doc_test/default_tr_template/index.rst | 10 + .../tests/test_cli_convert.py | 6 +- .../tests/test_junit_parser.py | 4 +- .../tests/test_junit_parser_gtest.py | 2 +- .../tests/test_properties.py | 2 +- .../tests/test_result_vocabulary.py | 172 ++++++++++++++++++ 24 files changed, 336 insertions(+), 30 deletions(-) create mode 100644 packages/sphinx-test-reports/sphinxcontrib/test_reports/results.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/default_tr_template/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/default_tr_template/index.rst create mode 100644 packages/sphinx-test-reports/tests/test_result_vocabulary.py diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index e9cbb4781..401ac067e 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,28 @@ Unreleased ---------- :Released: under development +* Breaking: a failed test case now carries the ``result`` value ``failed`` + instead of ``failure``, so that every state is spelled the same way -- as a + participle, like the ``passed``, ``skipped`` and ``disabled`` beside it, and + like the ``failed`` count on a test-file and test-suite need. ``failure`` was + never a chosen name: it was the name of the JUnit ```` element, + passed through by the parser. The full vocabulary is now ``passed``, + ``failed``, ``error``, ``skipped``, ``disabled``; ``error`` is unchanged, + because it agrees with the ``errors`` count beside it. **Three things in a + project have to be updated:** a filter naming the value + (``'failure' == result`` becomes ``'failed' == result``), a custom + ``tr_report_template``, which contains two such filters in the shipped + template it was copied from, and custom CSS targeting the generated + ``tr_failure`` class, which is now ``tr_failed`` (the stylesheet still + carries rules for both, so the colours survive either way). The value is also + what ``test-reports build needs`` writes into ``needs.json``, so a consumer + of that file -- a schema, a metamodel validator -- has to be updated with it. +* Improvement: both parsers now map their input onto that one vocabulary + instead of each passing its own through, so a JSON report written against + the JUnit dialect no longer produces a different ``result`` than the XML it + mirrors. A state this package does not know is still passed through + untouched, so a ``tr_json_mapping`` pointing at a report with a vocabulary + of its own keeps working. * Breaking: ``pip install sphinx-test-reports`` no longer installs Sphinx and Sphinx-Needs. They are the new ``sphinx`` extra, so the install line of a documentation project becomes ``pip install "sphinx-test-reports[sphinx]"``. diff --git a/packages/sphinx-test-reports/docs/cli.rst b/packages/sphinx-test-reports/docs/cli.rst index f53c0c6ac..805e5de9f 100644 --- a/packages/sphinx-test-reports/docs/cli.rst +++ b/packages/sphinx-test-reports/docs/cli.rst @@ -41,7 +41,7 @@ lost evidence. Each test case becomes one need shaped exactly like the need the build's ``test-case`` directive creates for it: titled with the case name; ``suite``, ``case``, ``case_name``, ``case_parameter``, ``classname``, ``result`` (spelled -as the build spells it -- ``passed``, ``failure``, ``error``, ``skipped``, +as the build spells it -- ``passed``, ``failed``, ``error``, ``skipped``, ``disabled`` -- so one filter matches imported and local cases alike) and ``time``; the report path under ``file``; the test's source location under ``case_file`` and ``case_line``; a one-line ``result_text``; and the full diff --git a/packages/sphinx-test-reports/docs/custom_test_report_template.txt b/packages/sphinx-test-reports/docs/custom_test_report_template.txt index 1362d5714..0cb423b50 100644 --- a/packages/sphinx-test-reports/docs/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/docs/custom_test_report_template.txt @@ -24,7 +24,7 @@ **Failed test cases**: .. needtable:: - :filter: '{id}' in tags and 'failure' == result + :filter: '{id}' in tags and 'failed' == result :columns: id, title, result :style_row: tr_[[copy('result')]] @@ -40,7 +40,7 @@ | Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` | Test cases: :need_count:`'{id}' in tags and type=='{case_need}'` -| Failed test cases: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Failed test cases: :need_count:`'{id}' in tags and 'failed' == result and type=='{case_need}'` | Skipped test cases: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` diff --git a/packages/sphinx-test-reports/docs/directives/test_case.rst b/packages/sphinx-test-reports/docs/directives/test_case.rst index 4c70beed3..17cd4fbc7 100644 --- a/packages/sphinx-test-reports/docs/directives/test_case.rst +++ b/packages/sphinx-test-reports/docs/directives/test_case.rst @@ -38,7 +38,8 @@ or if it selects only the first found test case. The best case is to always try ``test-case`` creates a need of type ``testcase`` and adds the following options automatically: -* **result**: Result of the test case run. E.g passed or failed. +* **result**: Result of the test case run: ``passed``, ``failed``, ``error``, + ``skipped`` or ``disabled``. * **time**: Needed time for running the test case These options can also be used to :ref:`filter for certain test-files `. diff --git a/packages/sphinx-test-reports/docs/examples/pytest.rst b/packages/sphinx-test-reports/docs/examples/pytest.rst index 8c95a4f17..f63f6e4ab 100644 --- a/packages/sphinx-test-reports/docs/examples/pytest.rst +++ b/packages/sphinx-test-reports/docs/examples/pytest.rst @@ -7,13 +7,13 @@ The data is coming from a pytest-run on the tests of the sphinx project. | Test suites: :need_count:`'pytest_sphinx' in tags and type=='testsuite'` | Test cases: :need_count:`'pytest_sphinx' in tags and type=='testcase'` -| Failed test cases: :need_count:`'pytest_sphinx' in tags and 'failure' == result and type=='testcase'` +| Failed test cases: :need_count:`'pytest_sphinx' in tags and 'failed' == result and type=='testcase'` | Skipped test cases: :need_count:`'pytest_sphinx' in tags and 'skipped' == result and type=='testcase'` **Failed test cases**: .. needtable:: - :filter: 'pytest_sphinx' in tags and 'failure' == result + :filter: 'pytest_sphinx' in tags and 'failed' == result :columns: id, title, result :style: table :style_row: tr_[[copy('result')]] diff --git a/packages/sphinx-test-reports/docs/pytest.rst b/packages/sphinx-test-reports/docs/pytest.rst index d8c4b9467..80d286e12 100644 --- a/packages/sphinx-test-reports/docs/pytest.rst +++ b/packages/sphinx-test-reports/docs/pytest.rst @@ -173,7 +173,7 @@ spelling. Empty values are not written, and a decorator that would write nothing is an error at import time. The values are written when the test is set up, against the declared model; a wrong shape -- a list where one value is expected -- makes that test error at setup with the ``TypeError`` above (its -need then carries the result ``error``, not ``failure``). The properties keep +need then carries the result ``error``, not ``failed``). The properties keep the order of the keywords. The decorator also goes on a class, and decorators stack: a classification on diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py index d8c77abea..ddae11a3c 100644 --- a/packages/sphinx-test-reports/noxfile.py +++ b/packages/sphinx-test-reports/noxfile.py @@ -32,6 +32,7 @@ def tests(session, sphinx_needs, sphinx): "tests/test_needs_export.py", "tests/test_project_config.py", "tests/test_pytest_plugin.py", + "tests/test_result_vocabulary.py", "tests/test_toolchain.py", ] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css index a88f5b99d..6825ce7ac 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css @@ -2,6 +2,11 @@ tr.tr_passed, div.tr_passed { background-color: rgba(0,250,0,0.2) !important; } +/* `tr_failure` is the class needs carried before the result was spelled + `failed`. It is kept because a project may still produce it: a result a + `tr_json_mapping` supplies under a vocabulary of its own is passed through + unnormalised, and the class is built from the result value. */ +tr.tr_failed, div.tr_failed, tr.tr_failure, div.tr_failure { background-color: rgba(250,0,0,0.2) !important; } @@ -25,6 +30,7 @@ td.status p.tr_passed{ color: #008000; } +td.status p.tr_failed, td.status p.tr_failure{ border: 1px solid #800000; color: #800000; diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt index a5228aaa4..f33593e3e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt @@ -6,7 +6,7 @@ | Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` | Test cases: :need_count:`'{id}' in tags and type=='{case_need}'` -| Failed test cases: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Failed test cases: :need_count:`'{id}' in tags and 'failed' == result and type=='{case_need}'` | Skipped test cases: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` **Test cases**: @@ -19,7 +19,7 @@ **Failed test cases**: .. needtable:: - :filter: '{id}' in tags and 'failure' == result + :filter: '{id}' in tags and 'failed' == result :columns: id, title, result :style_row: tr_[[copy('result')]] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py index b1fa447dc..21ff78866 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py @@ -18,6 +18,8 @@ from typing import Iterable, Mapping +from sphinxcontrib.test_reports.results import CANONICAL_RESULTS + #: ``name -> (JSON type, description)`` for every field declared under a fixed #: name. The build registers all of them, on test-file, test-suite and #: test-case needs alike; the converter writes test-case needs and therefore @@ -38,7 +40,10 @@ # Turning it into a number is issue #156: it has to change here, in both # writers and in every consuming filter at once. "time": ("string", "Test execution time, in seconds"), - "result": ("string", "Test result status"), + # The states are named, not just the field: a consumer reading the + # declarations out of a produced `needs.json` learns the field's domain + # from them without having to load this package. + "result": ("string", f"Test result status: {', '.join(CANONICAL_RESULTS)}"), "result_text": ("string", "One-line rendering of the first failure message"), "remote_url": ("string", "URL of the test's source in the remote repository"), "suites": ("integer", "Number of test suites"), diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py index 19a5e55e0..0534d370b 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py @@ -12,6 +12,8 @@ from functools import reduce from typing import Any, Dict, List +from sphinxcontrib.test_reports.results import normalize_result + def dict_get(root, items, default=None): """ @@ -60,6 +62,14 @@ def parse_testcase(json_dict) -> Dict[str, Any]: tc_dict = { k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items() } + # A JSON report written against the JUnit dialect spells a failure + # `failure`, after the element name. The API is documented as being + # in sync with the JUnit parser's, so the same outcome has to + # arrive under the same `result` here -- a value this package does + # not know is left as the report wrote it. + result = tc_dict.get("result") + if isinstance(result, str): + tc_dict["result"] = normalize_result(result) return tc_dict def parse_testsuite(json_dict) -> Dict[str, Any]: diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py index 9717daf6b..ead778c5a 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py @@ -6,6 +6,8 @@ from lxml import etree, objectify +from sphinxcontrib.test_reports.results import normalize_result + #: Attributes the JUnit/googletest dialects define themselves. Every *other* #: attribute is a ``RecordProperty`` value in attribute form: googletest wrote #: test-case properties as attributes before 1.8.1 (the form its official docs @@ -46,7 +48,9 @@ ) #: ```` children carrying a result, in the precedence order used to -#: classify a case that has more than one kind of them. +#: classify a case that has more than one kind of them. These are XML element +#: names, not ``result`` values -- ```` is read as the result +#: ``failed`` (see :mod:`sphinxcontrib.test_reports.results`). RESULT_PART_KINDS = ("skipped", "failure", "error") @@ -187,7 +191,11 @@ def parse_testcase(xml_object): None, ) if first_part is not None: - tc_dict["result"] = first_part["kind"] + # The part's `kind` is the name of the XML element the evidence + # came from and stays that way -- the converter capitalises it + # into the evidence heading. `result` is this package's + # vocabulary, so it goes through the mapping. + tc_dict["result"] = normalize_result(first_part["kind"]) tc_dict["type"] = first_part["type"] # part text can be None for pytest xfail test cases tc_dict["text"] = first_part["text"] diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py index 53c0dfcc6..3e751e3bd 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py @@ -176,11 +176,11 @@ def build_need( ``case_name``/``case_parameter``/``classname``/``result``/``time`` plus the renameable report-path and source-location fields in *fields* (see :data:`DEFAULT_FIELD_NAMES`) -- and so are the values: the title is the - case name and ``result`` keeps the parser's spelling (``failure``, which is - also a documented field value and the ``tr_failure`` CSS class), so that a - need imported from the produced ``needs.json`` and one created locally from - the same report are indistinguishable to a schema, a filter or a - ``needtable``. + case name and ``result`` keeps the parser's spelling (``failed``, which is + also a documented field value and the ``tr_failed`` CSS class, see + :mod:`sphinxcontrib.test_reports.results`), so that a need imported from + the produced ``needs.json`` and one created locally from the same report + are indistinguishable to a schema, a filter or a ``needtable``. XML properties become fields under their own names only when listed in *extra_options* -- the same list that makes the build register them as need diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/results.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/results.py new file mode 100644 index 000000000..da2f4e416 --- /dev/null +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/results.py @@ -0,0 +1,63 @@ +"""The vocabulary of the ``result`` field, and the one place it is decided. + +Every state a test case can be in is spelled as a participle: ``passed``, +``failed``, ``error``, ``skipped``, ``disabled``. That is one decision applied +to two parsers, which is the point of this module -- before it, ``result`` was +whatever the input happened to call it. The JUnit parser passed the name of the +result-carrying ```` child through verbatim, so a failure was +``failure`` after the ```` element, while the two states with no +element of their own were invented as participles (``passed``, and ``disabled`` +for googletest's ``status="notrun"``). The JSON parser passed its report's own +value through untouched. So the same outcome could arrive under two spellings, +and a single test case was ``failure`` while the count of them on its suite was +``failed`` (:data:`~sphinxcontrib.test_reports.fields.FIELDS`). + +``error`` stays a noun-state deliberately: it agrees with the ``errors`` count +beside it and with pytest, which spells that outcome ``error`` too. The pair +that disagreed was ``failure``/``failed``, and ``failed`` is the half that +already appeared in a field name. + +**Nothing in this module may import Sphinx.** Both parsers run under the +``test-reports`` command, as a build action without the documentation +toolchain installed. +""" + +#: Every value the parsers of this package put into ``result``. A documented +#: field value: a project filters on it (``'failed' == result``), the +#: directives turn it into the CSS class that colours a need and a table row +#: (``tr_failed``), and the converter writes it into ``needs.json`` for +#: consumers that never load this extension. +#: +#: A tuple, in the order a reader wants them rather than alphabetically: +#: :func:`~sphinxcontrib.test_reports.fields.declaration` renders it into the +#: declared description of the field, and the converter's output has to be +#: byte-stable, which a set's iteration order is not. +CANONICAL_RESULTS: tuple[str, ...] = ( + "passed", + "failed", + "error", + "skipped", + "disabled", +) + +#: ``as read -> canonical``, for the input spellings that are not already the +#: vocabulary above. Only spellings some input really produces are listed, so +#: that a state this package does not know -- ``tr_json_mapping`` points at an +#: arbitrary report, whose states are its own -- survives untouched instead of +#: being rewritten into something a project's filters no longer match. +RESULT_ALIASES: dict[str, str] = { + # The name of the JUnit ```` element, which the JUnit parser reads + # a case's result from, and which a JSON report written against the same + # dialect uses as its value. + "failure": "failed", +} + + +def normalize_result(result: str) -> str: + """*result* in the vocabulary of :data:`CANONICAL_RESULTS`. + + Idempotent, and total: a value already canonical and a value this package + does not know are both returned unchanged, so the function can be applied + wherever a result is read without having to know where it came from. + """ + return RESULT_ALIASES.get(result, result) diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt index e4219689b..5b25bdbb4 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/custom_test_report_template.txt @@ -24,7 +24,7 @@ **Fehlgeschlagene Tests**: .. needtable:: - :filter: '{id}' in tags and 'failure' == result + :filter: '{id}' in tags and 'failed' == result :columns: id, title, result :style_row: tr_[[copy('result')]] @@ -40,7 +40,7 @@ | Test Gruppen: :need_count:`'{id}' in tags and type=='{suite_need}'` | Test F?lle: :need_count:`'{id}' in tags and type=='{case_need}'` -| Fehlgeschlagene Tests: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Fehlgeschlagene Tests: :need_count:`'{id}' in tags and 'failed' == result and type=='{case_need}'` | Ausgelassene Tests: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt index 1362d5714..0cb423b50 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/custom_test_report_template.txt @@ -24,7 +24,7 @@ **Failed test cases**: .. needtable:: - :filter: '{id}' in tags and 'failure' == result + :filter: '{id}' in tags and 'failed' == result :columns: id, title, result :style_row: tr_[[copy('result')]] @@ -40,7 +40,7 @@ | Test suites: :need_count:`'{id}' in tags and type=='{suite_need}'` | Test cases: :need_count:`'{id}' in tags and type=='{case_need}'` -| Failed test cases: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Failed test cases: :need_count:`'{id}' in tags and 'failed' == result and type=='{case_need}'` | Skipped test cases: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt index 0a85df37b..f7f689c88 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/custom_test_report_template.txt @@ -24,7 +24,7 @@ **Fehlgeschlagene Tests**: .. needtable:: - :filter: '{id}' in tags and 'failure' == result + :filter: '{id}' in tags and 'failed' == result :columns: id, title, result :style_row: tr_[[copy('result')]] @@ -40,7 +40,7 @@ | Test Gruppen: :need_count:`'{id}' in tags and type=='{suite_need}'` | Test Fälle: :need_count:`'{id}' in tags and type=='{case_need}'` -| Fehlgeschlagene Tests: :need_count:`'{id}' in tags and 'failure' == result and type=='{case_need}'` +| Fehlgeschlagene Tests: :need_count:`'{id}' in tags and 'failed' == result and type=='{case_need}'` | Ausgelassene Tests: :need_count:`'{id}' in tags and 'skipped' == result and type=='{case_need}'` diff --git a/packages/sphinx-test-reports/tests/doc_test/default_tr_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/default_tr_template/conf.py new file mode 100644 index 000000000..e5be83e3f --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/default_tr_template/conf.py @@ -0,0 +1,8 @@ +# A `test-report` build that leaves `tr_report_template` at its default, so the +# template this package ships is the one that renders. Every other +# `test-report` fixture points the option at a template of its own, which left +# the shipped template -- and the `result` value its filters name -- uncovered. +extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] + +master_doc = "index" +html_theme = "basic" diff --git a/packages/sphinx-test-reports/tests/doc_test/default_tr_template/index.rst b/packages/sphinx-test-reports/tests/doc_test/default_tr_template/index.rst new file mode 100644 index 000000000..cbaeaacaa --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/default_tr_template/index.rst @@ -0,0 +1,10 @@ +Default Report Template +======================= + +``xml_data.xml`` holds three test cases, exactly one of which carries a +```` child -- so the template's failed-case count is 1. + +.. test-report:: My Report + :id: REPORT + :file: ../utils/xml_data.xml + :tags: my_report diff --git a/packages/sphinx-test-reports/tests/test_cli_convert.py b/packages/sphinx-test-reports/tests/test_cli_convert.py index d16440b6f..3a75e96c8 100644 --- a/packages/sphinx-test-reports/tests/test_cli_convert.py +++ b/packages/sphinx-test-reports/tests/test_cli_convert.py @@ -567,8 +567,8 @@ def test_url_synthesis_needs_both_parts(tmp_path, flag): class TestResultVocabulary: """The export uses the parser's vocabulary, which is the build's. - ``failure`` is a documented need field value and a CSS class - (``tr_failure``), and the shipped report template filters on it. A project + ``failed`` is a documented need field value and a CSS class + (``tr_failed``), and the shipped report template filters on it. A project that mixes imported and locally created test-case needs filters both with one expression only if the two writers spell the result alike. """ @@ -577,7 +577,7 @@ def test_failure_is_exported_as_the_build_spells_it(self, tmp_path): _, data = _convert(tmp_path) assert ( - _needs(data)["testcase__MathTest__Subtraction_srmht"]["result"] == "failure" + _needs(data)["testcase__MathTest__Subtraction_srmht"]["result"] == "failed" ) @pytest.mark.parametrize( diff --git a/packages/sphinx-test-reports/tests/test_junit_parser.py b/packages/sphinx-test-reports/tests/test_junit_parser.py index 00afcddd6..5be1bce2e 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser.py @@ -148,7 +148,7 @@ def test_parse_ctest_xml(): ) # fail in name, but nowhere in status, faked fail assert test_suite["testcases"][2]["result"] == "passed" assert test_suite["testcases"][3]["name"] == "fail_test_output" - assert test_suite["testcases"][3]["result"] == "failure" + assert test_suite["testcases"][3]["result"] == "failed" assert test_suite["testcases"][4]["name"] == "skipped_test" assert test_suite["testcases"][4]["result"] == "skipped" @@ -171,7 +171,7 @@ def test_parse_error_xml(): assert test_suite["testcases"][0]["result"] == "passed" assert test_suite["testcases"][1]["name"] == "AFailingTest" - assert test_suite["testcases"][1]["result"] == "failure" + assert test_suite["testcases"][1]["result"] == "failed" assert test_suite["testcases"][2]["name"] == "AnErrorTest" assert test_suite["testcases"][2]["result"] == "error" diff --git a/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py b/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py index 910e08176..d2d134640 100644 --- a/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py +++ b/packages/sphinx-test-reports/tests/test_junit_parser_gtest.py @@ -59,7 +59,7 @@ def test_first_failure_part_stays_in_the_legacy_flat_keys(): """``text``/``message`` keep their meaning for existing consumers.""" case = _case("MathTest", "Subtraction") - assert case["result"] == "failure" + assert case["result"] == "failed" assert case["message"] == case["parts"][0]["message"] assert case["text"] == case["parts"][0]["text"] diff --git a/packages/sphinx-test-reports/tests/test_properties.py b/packages/sphinx-test-reports/tests/test_properties.py index 446365c23..da83058a1 100644 --- a/packages/sphinx-test-reports/tests/test_properties.py +++ b/packages/sphinx-test-reports/tests/test_properties.py @@ -159,7 +159,7 @@ def test_existing_failure_testcase_unchanged(self): tc = results[0]["testcases"][2] assert tc["name"] == "AFailingTest" - assert tc["result"] == "failure" + assert tc["result"] == "failed" assert tc["text"] == " details about failure " diff --git a/packages/sphinx-test-reports/tests/test_result_vocabulary.py b/packages/sphinx-test-reports/tests/test_result_vocabulary.py new file mode 100644 index 000000000..1f73d5191 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_result_vocabulary.py @@ -0,0 +1,172 @@ +"""The ``result`` field's vocabulary, and the one place it is decided. + +A test case's ``result`` used to be whatever the input spelled it: the JUnit +parser passed the name of the ```` child element through verbatim +(``failure``), the JSON parser passed the report's own value through, and the +two states with no element of their own -- ``passed`` and ``disabled`` -- were +spelled as participles because nothing forced a choice. So one product said +``failure`` for a single case and ``failed`` for the count of them +(``fields.FIELDS``), and the documented value and the documented example +disagreed. + +These tests pin the vocabulary down: every parser maps its input onto the same +participles, and the mapping is the only place that decides. The part-level +``kind`` is deliberately *not* normalised -- it names the XML element the +evidence came from, which is what the rendered evidence heading reports. +""" + +import os + +import pytest + +UTILS = os.path.join(os.path.dirname(__file__), "doc_test", "utils") +XML_PATH = os.path.join(UTILS, "xml_data.xml") +JSON_PATH = os.path.join(UTILS, "json_data.json") + +#: The mapping the JSON parser needs, as ``tr_json_mapping`` declares it. +JSON_MAPPING = { + "testsuite": { + "name": (["name"], "unknown"), + "tests": (["tests"], "unknown"), + "errors": (["errors"], "unknown"), + "failures": (["failures"], "unknown"), + "skips": (["skips"], "unknown"), + "passed": (["passed"], "unknown"), + "time": (["time"], "unknown"), + "testcases": (["testcase"], "unknown"), + }, + "testcase": { + "name": (["name"], "unknown"), + "classname": (["classname"], "unknown"), + "file": (["file"], "unknown"), + "line": (["line"], "unknown"), + "time": (["time"], "unknown"), + "result": (["result"], "unknown"), + "type": (["type"], "unknown"), + "text": (["text"], "unknown"), + "message": (["message"], "unknown"), + "system-out": (["system-out"], "unknown"), + }, +} + + +class TestNormalisation: + """One function decides the vocabulary, so both parsers cannot disagree.""" + + def test_the_junit_failure_element_name_becomes_failed(self): + from sphinxcontrib.test_reports.results import normalize_result + + assert normalize_result("failure") == "failed" + + def test_normalising_the_canonical_spelling_changes_nothing(self): + """Normalisation runs on already-canonical values too, so it must be + idempotent -- a JSON report may already spell the result ``failed``.""" + from sphinxcontrib.test_reports.results import normalize_result + + assert normalize_result("failed") == "failed" + + @pytest.mark.parametrize("result", ["passed", "skipped", "error", "disabled"]) + def test_the_other_states_are_already_canonical(self, result): + from sphinxcontrib.test_reports.results import normalize_result + + assert normalize_result(result) == result + + def test_a_vocabulary_this_extension_does_not_know_is_left_alone(self): + """``tr_json_mapping`` points at an arbitrary report, so a project may + feed in states of its own. Rewriting those would break its filters.""" + from sphinxcontrib.test_reports.results import normalize_result + + assert normalize_result("flaky") == "flaky" + + def test_the_canonical_states_are_the_documented_ones(self): + """Ordered, because the declared field description is built from it and + the converter's output has to be byte-stable.""" + from sphinxcontrib.test_reports.results import CANONICAL_RESULTS + + assert CANONICAL_RESULTS == ( + "passed", + "failed", + "error", + "skipped", + "disabled", + ) + + +class TestDeclaredSchema: + """The converter writes the field declarations into the ``needs.json`` it + produces, so that a consumer which never loads this extension -- a schema + check, a metamodel validator -- learns the fields from the file. Naming the + states in the ``result`` description tells it the field's domain too. + """ + + def test_the_result_declaration_names_every_state(self): + from sphinxcontrib.test_reports.fields import declaration + from sphinxcontrib.test_reports.results import CANONICAL_RESULTS + + _, description = declaration("result") + + assert all(state in description for state in CANONICAL_RESULTS), description + + +class TestJUnitParser: + """The JUnit dialect is where the old spelling came from.""" + + def test_a_failure_child_yields_the_failed_result(self): + from sphinxcontrib.test_reports.junitparser import JUnitParser + + suite = JUnitParser(XML_PATH).parse()[0] + + assert suite["testcases"][2]["result"] == "failed" + + def test_a_result_part_keeps_the_name_of_its_xml_element(self): + """``kind`` reports which element the evidence came from -- the + converter capitalises it into the evidence heading -- so it stays the + XML name even though ``result`` no longer is.""" + from sphinxcontrib.test_reports.junitparser import JUnitParser + + suite = JUnitParser(XML_PATH).parse()[0] + + assert suite["testcases"][2]["parts"][0]["kind"] == "failure" + + +class TestJsonParser: + """The JSON parser's API is documented as being in sync with the JUnit + parser's, so the same report content has to produce the same result.""" + + def test_the_failure_spelling_in_a_json_report_is_normalised(self): + from sphinxcontrib.test_reports.jsonparser import JsonParser + + parser = JsonParser(JSON_PATH, json_mapping=JSON_MAPPING) + suite = parser.parse()[0] + + assert suite["testcases"][0]["result"] == "failed" + + def test_the_results_needing_no_normalisation_are_untouched(self): + from sphinxcontrib.test_reports.jsonparser import JsonParser + + parser = JsonParser(JSON_PATH, json_mapping=JSON_MAPPING) + suite = parser.parse()[0] + + assert suite["testcases"][1]["result"] == "passed" + assert suite["testcases"][2]["result"] == "skipped" + + +@pytest.mark.toolchain +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/default_tr_template"}], + indirect=True, +) +def test_the_shipped_report_template_counts_a_failed_case(test_app): + """The template that ``tr_report_template`` defaults to filters on the + ``result`` value, and every fixture that exercises ``test-report`` used to + override it -- so a rename could empty its "Failed test cases" table and + its count without a single test noticing. + """ + from pathlib import Path + + app = test_app + app.build() + html = Path(app.outdir, "index.html").read_text() + + assert "Failed test cases: 1" in html From ffdf962e0d19400206659cf51b776792eaa09568 Mon Sep 17 00:00:00 2001 From: Marco Heinemann Date: Fri, 11 Sep 2026 10:27:53 +0200 Subject: [PATCH 147/159] =?UTF-8?q?=F0=9F=9A=80=20Release=20v2.0.0=20(useb?= =?UTF-8?q?locks/sphinx-test-reports#160)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Release v2.0.0 Bumps the version, retitles the version directives that were written against the planned 1.5.0, and turns the `Unreleased` changelog into the 2.0.0 section. ### Why 2.0.0 and not 1.5.0 Four changes in this cycle are breaking, so the major digit moves. The first three break an existing install; the fourth breaks project content instead: | Change | PR | What breaks | | --- | --- | --- | | Sphinx and Sphinx-Needs became the `sphinx` extra | useblocks/sphinx-test-reports#159 | A documentation project has to install `sphinx-test-reports[sphinx]`; the bare package no longer brings a toolchain | | Python 3.10 dropped | useblocks/sphinx-test-reports#147 | 3.11 is the floor | | Sphinx-Needs 6.0.1 / Sphinx 7.4 floors | useblocks/sphinx-test-reports#150 | The compatibility branches for older releases are gone | | A failed test case's `result` is `failed`, not `failure` | useblocks/sphinx-test-reports#161 | A filter naming the value (`'failure' == result`), a custom `tr_report_template` — which carries two such filters from the shipped template it was copied from — and custom CSS on the generated `tr_failure` class, now `tr_failed` | The docs were already written for 1.5.0, so every `versionadded` / `versionchanged` directive naming it is retitled here. ### Changes - **Version** → `2.0.0` in `pyproject.toml`, `docs/conf.py` (`version` = `2.0`, `release` = `2.0.0`) and `sphinxcontrib/test_reports/test_reports.py` (`VERSION`), matching the three places 1.4.0 touched. - **Version directives** → `2.0.0` in `docs/cli.rst`, `docs/pytest.rst`, `docs/install.rst` and the five in `docs/configuration.rst`. - **Changelog** → new `2.0.0` section, released 11.09.2026, with the `Unreleased` heading kept empty on top. ### Changelog notes The entry prose is unchanged; it is regrouped by category the way the 1.4.0 section is, and each entry now carries its PR link. Two deliberate edits: - The Python 3.10 drop and the Sphinx-Needs 6.0.1 / Sphinx 7.4 floors were labelled `Support:`. They are relabelled `Breaking:`, since they are what the major bump is for. - useblocks/sphinx-test-reports#154 (`packaging` dropped as a runtime dependency, moved into the `docs` and `test` extras) had no changelog line. Added as a `Support:` entry — it changes the installed dependency set, which is this release's theme. All 16 `Unreleased` entries survive; the new count is 17. Rebasing onto master after useblocks/sphinx-test-reports#161 merged folded in its two entries — the `Breaking:` rename and the `Improvement:` parser normalisation — bringing the section to 19. They are placed by the same category grouping, and the section's opening prose gained the rename as a fourth breaking change; its "Nothing else in an existing project has to change" sentence had to be inverted, since the rename makes it false. ### Verification - `uv run pytest -n auto tests/` → **421 passed** (Python 3.14, from a fresh `uv sync --all-groups --all-extras`), re-run on the rebased branch; 407 before useblocks/sphinx-test-reports#161, which added a test module. - `uv run sphinx-build -b html docs docs/_build/html` → `build succeeded.`, no warnings, so the rewritten changelog is valid reStructuredText. - `uv run pre-commit run --files ` → all hooks pass. - `grep -rn "1\.5\.0" docs/ sphinxcontrib/ pyproject.toml` → no matches left. - No test asserts the package version, so the bump needed no test changes. ### After merge Push a `2.0.0` tag. `.github/workflows/release.yaml` triggers on tags matching `[0-9].[0-9]+.[0-9]+`, which `2.0.0` does, and publishes to PyPI via trusted publishing. --- .../sphinx-test-reports/docs/changelog.rst | 167 +++++++++++------- packages/sphinx-test-reports/docs/cli.rst | 2 +- packages/sphinx-test-reports/docs/conf.py | 4 +- .../docs/configuration.rst | 10 +- packages/sphinx-test-reports/docs/install.rst | 2 +- packages/sphinx-test-reports/docs/pytest.rst | 2 +- packages/sphinx-test-reports/pyproject.toml | 2 +- .../test_reports/test_reports.py | 2 +- 8 files changed, 117 insertions(+), 74 deletions(-) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 401ac067e..049d36f51 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -7,6 +7,48 @@ Unreleased ---------- :Released: under development +.. _`release:2.0.0`: + +2.0.0 +----- +:Released: 11.09.2026 + +A major release. ``pip install sphinx-test-reports`` no longer installs Sphinx +and Sphinx-Needs, Python 3.10 is no longer supported, Sphinx-Needs 6.0.1 and +Sphinx 7.4 are the oldest supported versions, and a failed test case's +``result`` is spelled ``failed`` rather than ``failure``. What the bare package +gains in return is a life outside a documentation build: a ``test-reports`` +command that turns test-result XML into a ``needs.json`` without running +Sphinx, and a pytest plugin that writes the XML shape this extension reads. A +project can also be described once, declaratively, in the ``[test_reports]`` +section of ``ubproject.toml`` instead of being restated in ``conf.py``. + +Upgrading a documentation project means adding the extra to its install line: +``pip install "sphinx-test-reports[sphinx]"``. Beyond that, only a project that +names the old ``failure`` result has to change anything: a filter on the value, +a custom ``tr_report_template`` copied from the shipped one, and custom CSS on +the ``tr_failure`` class. + +* Breaking: ``pip install sphinx-test-reports`` no longer installs Sphinx and + Sphinx-Needs. They are the new ``sphinx`` extra, so the install line of a + documentation project becomes ``pip install "sphinx-test-reports[sphinx]"``. + The bare package brings only ``lxml``, the dependency of the ``test-reports`` + command, which runs in test runners and build actions that have no + documentation toolchain; the pytest plugin, the ``pytest`` extra, runs there + too. An extra is opt-in, so the extension now checks the installed toolchain + against the versions the extra declares when Sphinx loads it: a missing or + older Sphinx or Sphinx-Needs stops the build with a message naming the + install line, instead of a traceback from inside a directive. + `#159 `_ +* Breaking: Python 3.10 is no longer supported. It reached the end of upstream + support, and dropping it lets the package read TOML with ``tomllib`` from the + standard library instead of carrying a backport. + `#147 `_ +* Breaking: sphinx-needs 6.0.1 and Sphinx 7.4 are the oldest supported + versions. 6.0.1 is the first release whose ``add_extra_option`` takes a + schema, which this extension registers its fields with; sphinx-needs 6 itself + requires Sphinx 7.4. The compatibility branches for older releases are gone. + `#150 `_ * Breaking: a failed test case now carries the ``result`` value ``failed`` instead of ``failure``, so that every state is spelled the same way -- as a participle, like the ``passed``, ``skipped`` and ``disabled`` beside it, and @@ -23,61 +65,14 @@ Unreleased carries rules for both, so the colours survive either way). The value is also what ``test-reports build needs`` writes into ``needs.json``, so a consumer of that file -- a schema, a metamodel validator -- has to be updated with it. -* Improvement: both parsers now map their input onto that one vocabulary - instead of each passing its own through, so a JSON report written against - the JUnit dialect no longer produces a different ``result`` than the XML it - mirrors. A state this package does not know is still passed through - untouched, so a ``tr_json_mapping`` pointing at a report with a vocabulary - of its own keeps working. -* Breaking: ``pip install sphinx-test-reports`` no longer installs Sphinx and - Sphinx-Needs. They are the new ``sphinx`` extra, so the install line of a - documentation project becomes ``pip install "sphinx-test-reports[sphinx]"``. - The bare package brings only ``lxml``, the dependency of the ``test-reports`` - command, which runs in test runners and build actions that have no - documentation toolchain; the pytest plugin, the ``pytest`` extra, runs there - too. An extra is opt-in, so the extension now checks the - installed toolchain against the versions the extra declares when Sphinx - loads it: a missing or older Sphinx or Sphinx-Needs stops the build with a - message naming the install line, instead of a traceback from inside a - directive. -* Testing: CI installs the package with the ``pytest`` extra alone and runs the - converter's and the pytest plugin's tests without Sphinx -- on the newest - pytest and on the oldest the plugin supports -- so a toolchain import - creeping into either import chain, or Sphinx creeping back into a dependency - list, fails the build. -* Feature: Support the googletest XML dialect: ``status="notrun"`` is reported - as ``disabled`` instead of ``passed``, all ````/```` parts - of a test case are kept instead of only the first, ``RecordProperty`` values - in attribute form are read (on ```` for googletest < 1.8.1 and on - ```` for suite-level properties up to 1.15.x), and ``timestamp``, - ``value_param`` and ``type_param`` are parsed. ```` is captured. -* Feature: The source location of a test case is available as Sphinx-Needs - fields, configurable via the new ``tr_source_file_option`` and - ``tr_source_line_option``. -* Bugfix: ``tr_file_option`` is now honoured by the directives, not only by the - field registration. Renaming the field previously produced needs carrying an - unregistered field. -* Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from - the source location instead of the need content, so an ID no longer changes - when a test starts failing differently. -* Feature: Declarative configuration in the ``[test_reports]`` section of - ``ubproject.toml``, the file shared with the other useblocks tooling, so a - project is described once instead of being restated in ``conf.py``. The file - is searched for upwards from the ``confdir``, stopping at the repository - root; - the new ``tr_config_from_toml`` names or disables it. Precedence is ``-D`` > - ``ubproject.toml`` > ``conf.py`` > default. See :ref:`tr_config_from_toml`. + `#161 `_ * Feature: New ``test-reports build needs`` command line interface, converting test-result XML into a ``needs.json`` without running Sphinx, so the conversion can run as a cacheable build action and the documentation build - only imports the result. Its settings come from the ``[test_reports.build.needs]`` - table of ``ubproject.toml``, with flags for per-invocation overrides. See - :ref:`cli`. -* Feature: The produced ``needs.json`` declares every field it uses in a - ``needs_schema``, as Sphinx-Needs does for the files a build writes, so a - consumer can read the type of a field from the artifact instead of from a - Sphinx build with the extension loaded. The declarations and the fields the - extension registers come from one table, so the two cannot drift apart. + only imports the result. Its settings come from the + ``[test_reports.build.needs]`` table of ``ubproject.toml``, with flags for + per-invocation overrides. See :ref:`cli`. + `#148 `_ * Feature: A pytest plugin (``-p sphinxcontrib.test_reports.pytest_plugin``) gives every test case the source location an editor shows -- pytest's ``file``/``line`` counted from 1, Bazel's runfiles prefix cut, a runtime @@ -89,30 +84,78 @@ Unreleased plugin was ported from, is the documented example. The plugin is the ``pytest`` extra: ``pip install "sphinx-test-reports[pytest]"`` installs it and pytest, without the documentation toolchain. See :ref:`pytest_plugin`. + `#151 `_ +* Feature: Declarative configuration in the ``[test_reports]`` section of + ``ubproject.toml``, the file shared with the other useblocks tooling, so a + project is described once instead of being restated in ``conf.py``. The file + is searched for upwards from the ``confdir``, stopping at the repository + root; the new ``tr_config_from_toml`` names or disables it. Precedence is + ``-D`` > ``ubproject.toml`` > ``conf.py`` > default. See + :ref:`tr_config_from_toml`. + `#145 `_ +* Feature: The produced ``needs.json`` declares every field it uses in a + ``needs_schema``, as Sphinx-Needs does for the files a build writes, so a + consumer can read the type of a field from the artifact instead of from a + Sphinx build with the extension loaded. The declarations and the fields the + extension registers come from one table, so the two cannot drift apart. + `#148 `_ +* Feature: Support the googletest XML dialect: ``status="notrun"`` is reported + as ``disabled`` instead of ``passed``, all ````/```` parts + of a test case are kept instead of only the first, ``RecordProperty`` values + in attribute form are read (on ```` for googletest < 1.8.1 and on + ```` for suite-level properties up to 1.15.x), and ``timestamp``, + ``value_param`` and ``type_param`` are parsed. ```` is captured. + `#141 `_ +* Feature: The source location of a test case is available as Sphinx-Needs + fields, configurable via the new ``tr_source_file_option`` and + ``tr_source_line_option``. + `#142 `_ +* Feature: New ``tr_deterministic_case_ids`` option derives test-case IDs from + the source location instead of the need content, so an ID no longer changes + when a test starts failing differently. + `#143 `_ +* Improvement: both parsers now map their input onto the one ``result`` + vocabulary instead of each passing its own through, so a JSON report written + against the JUnit dialect no longer produces a different ``result`` than the + XML it mirrors. A state this package does not know is still passed through + untouched, so a ``tr_json_mapping`` pointing at a report with a vocabulary of + its own keeps working. + `#161 `_ +* Bugfix: ``tr_file_option`` is now honoured by the directives, not only by the + field registration. Renaming the field previously produced needs carrying an + unregistered field. + `#142 `_ * Bugfix: ``tr_file_option``, ``tr_source_file_option`` and ``tr_source_line_option`` may no longer name a fixed field such as ``case`` or ``result``, in ``conf.py`` or in the declarative file. The build previously stopped with a bare ``TypeError`` from inside a directive. + `#148 `_ * Support: ``result_text`` and ``remote_url`` are registered as need fields by the extension, so a ``needs.json`` the ``build needs`` command produced imports without dropping them. A project that registered ``remote_url`` itself keeps its own registration. + `#148 `_ +* Support: ``packaging`` is no longer a runtime dependency. The last import of + it under ``sphinxcontrib/`` is gone, so the ``docs`` and ``test`` extras, + whose ``conf.py`` files still use it, declare it instead. + `#154 `_ +* Testing: CI installs the package with the ``pytest`` extra alone and runs the + converter's and the pytest plugin's tests without Sphinx -- on the newest + pytest and on the oldest the plugin supports -- so a toolchain import + creeping into either import chain, or Sphinx creeping back into a dependency + list, fails the build. + `#159 `_ +* Testing: Run the test suite against sphinx-needs 8.5.0. The matrix + previously topped out at 8.0.0, so the release a fresh install resolves to + was untested. + `#158 `_ * Known: Sphinx 9 renders a configuration error raised from the declarative file -- a wrong type, a rename onto a fixed field, a disagreeing need type -- as its crash report rather than as a one-line message; the message is in the report. A typo in ``[test_reports.build.needs]`` is reported the same way, and so is a missing or outdated toolchain refused when the extension loads. -* Support: Python 3.10 is no longer supported. It reached the end of upstream - support, and dropping it lets the package read TOML with ``tomllib`` from the - standard library instead of carrying a backport. -* Support: sphinx-needs 6.0.1 and Sphinx 7.4 are the oldest supported versions. - 6.0.1 is the first release whose ``add_extra_option`` takes a schema, which - this extension registers its fields with; sphinx-needs 6 itself requires - Sphinx 7.4. The compatibility branches for older releases are gone. -* Testing: Run the test suite against sphinx-needs 8.5.0. The matrix - previously topped out at 8.0.0, so the release a fresh install resolves to - was untested. + `#148 `_ .. _`release:1.4.0`: diff --git a/packages/sphinx-test-reports/docs/cli.rst b/packages/sphinx-test-reports/docs/cli.rst index 805e5de9f..97c1b9ba7 100644 --- a/packages/sphinx-test-reports/docs/cli.rst +++ b/packages/sphinx-test-reports/docs/cli.rst @@ -2,7 +2,7 @@ Command line interface ====================== -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 ``Sphinx-Test-Reports`` ships a ``test-reports`` command that converts test-result XML into a ``needs.json`` **without running Sphinx**. diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index f52a790f8..58bea4518 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -32,9 +32,9 @@ author = "team useblocks" # The short X.Y version -version = "1.4" +version = "2.0" # The full version, including alpha/beta/rc tags -release = "1.4.0" +release = "2.0.0" needs_id_regex = ".*" needs_css = "dark.css" diff --git a/packages/sphinx-test-reports/docs/configuration.rst b/packages/sphinx-test-reports/docs/configuration.rst index 9b3381091..da24e88f7 100644 --- a/packages/sphinx-test-reports/docs/configuration.rst +++ b/packages/sphinx-test-reports/docs/configuration.rst @@ -130,7 +130,7 @@ Default: **file** tr_source_file_option --------------------- -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 Name of the Sphinx-Needs field that carries the source file of a test case, taken from the ``file`` attribute of the JUnit/googletest ```` @@ -162,7 +162,7 @@ Default: **case_file** tr_source_line_option --------------------- -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 Name of the Sphinx-Needs field that carries the source line of a test case, taken from the ``line`` attribute of the ```` element. @@ -174,7 +174,7 @@ Default: **case_line** tr_deterministic_case_ids ------------------------- -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 Derive test-case IDs from the source location and the case name instead of hashing the need's type, title and content. @@ -413,7 +413,7 @@ An example of a JSON file, which supports the below configuration, can be seen i Declarative configuration (ubproject.toml) ------------------------------------------ -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 All of the above can also be configured declaratively, in the ``[test_reports]`` section of your project's ``ubproject.toml`` -- the same @@ -497,7 +497,7 @@ deterministic case IDs, next to locally created test-case needs, must set tr_config_from_toml ~~~~~~~~~~~~~~~~~~~ -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 Name of the declarative configuration file whose ``[test_reports]`` section is applied to the ``tr_*`` values above. Defaults to ``ubproject.toml``. diff --git a/packages/sphinx-test-reports/docs/install.rst b/packages/sphinx-test-reports/docs/install.rst index 4dcf7e334..c7c605304 100644 --- a/packages/sphinx-test-reports/docs/install.rst +++ b/packages/sphinx-test-reports/docs/install.rst @@ -24,7 +24,7 @@ bare package, whose single dependency is ``lxml``:: pip install sphinx-test-reports -.. versionchanged:: 1.5.0 +.. versionchanged:: 2.0.0 ``pip install sphinx-test-reports`` -- without an extra -- no longer installs Sphinx and Sphinx-Needs. A documentation project has to add the ``sphinx`` extra to its install line; a test runner or a build action that diff --git a/packages/sphinx-test-reports/docs/pytest.rst b/packages/sphinx-test-reports/docs/pytest.rst index 80d286e12..cd2ced2ce 100644 --- a/packages/sphinx-test-reports/docs/pytest.rst +++ b/packages/sphinx-test-reports/docs/pytest.rst @@ -2,7 +2,7 @@ pytest plugin ============= -.. versionadded:: 1.5.0 +.. versionadded:: 2.0.0 A stock pytest run writes a JUnit XML that this extension can only partly use. Under pytest's default ``junit_family = xunit2`` no ```` carries the diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 200bf6008..749e7c89b 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi" [project] name = "sphinx-test-reports" -version = "1.4.0" +version = "2.0.0" description = "Sphinx extension for showing test results and test environment information inside sphinx documentations" readme = "README.rst" license = { text = "MIT" } diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py index 756a7a687..3f942e17e 100644 --- a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py @@ -54,7 +54,7 @@ # fmt: on -VERSION = "1.4.0" +VERSION = "2.0.0" try: # sphinx-needs >= 7.0: fields are registered through add_field. From 787609777898a4ec4960bd081ee6fac42bb1444b Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 17:34:06 +0200 Subject: [PATCH 148/159] =?UTF-8?q?=F0=9F=94=A7=20Wire=20sphinx-test-repor?= =?UTF-8?q?ts=20into=20the=20workspace,=20and=20relock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **This is the arc's ONE `--no-verify` commit, and it has to be.** The merge before it made `uv sync --frozen` fail instantly -- `[tool.uv.workspace] members = ["packages/*"]` discovers the directory the moment it lands, so the lock is a member short and the `uv-lock` prek hook, the `check-workspace` hook and the `ty` hook all fail together until this commit relocks. Every commit after this one passes the hooks normally. * **Layout.** `git mv sphinxcontrib src/sphinxcontrib`, the shape every other member has. `sphinxcontrib/` stays a PEP 420 namespace with no `__init__.py`, which is why the manifest has to declare `[tool.flit.module] name` at all. * **The member manifest is truncated to what a member may own.** `check_workspace.py` check (7) refuses `[dependency-groups]`, `[tool.ruff.lint]` and `[tool.pytest.ini_options]` here -- the root owns all three -- and `[tool.mypy]` goes because this workspace type-checks with ty, not because a fence says so. The `test` extra goes with them: its contents are the root's shared `test` group, minus `nox` and `packaging`, which the noxfile took with it. `requires-python` becomes `>=3.11,<4` (check (3) is a string EQUALITY compare against the root, and a bare `>=3.11` fails it), and both surviving `sphinx-needs` specifiers become `>=8.5.0,<9` (check (4)'s tight tracking on an intra-workspace edge, `propagate_floors.py`'s to move at each release). `[project.urls]` is repointed at this repository, and the dead lowercase `download-url` dropped. * **Root wiring, all eight edits**: `[project] dependencies`, the `docs-reports` pass-through extra, `[tool.uv.sources]`, both `[tool.ruff] src` roots (isort decides first-party by finding a module under one of them), `[tool.ty.src] include`, **the `typecheck` task's explicit path list** -- ty intersects the CLI path with the include, so the include alone would leave the member checked by nothing with every gate green -- the `toolchain` pytest marker relocated from the member, and `sphinx-design` into the shared `test` group, without which three tests error at setup in every cell. `dependabot.yml` gains the fourth `ignore` entry. * **Poe tasks**, short name `reports`: `test-reports`, `test-reports-sphinx{7,8,9}`, `docs-reports`, `docs-reports-clean`, `build-reports`, `import-check-reports`. * **The lock gains one name, one entry, zero third-party distributions and zero bytes to download**: 144 -> 145 packages, `+ sphinx-test-reports`, nothing removed and no version moved. Both of this package's non-sibling needs were already here -- `lxml` through the root `test` group, `sphinx-immaterial` through sphinx-needs' `theme-im` extra. **This commit also adds `design/import-commit-map.txt`**, all 258 commits the rewrite parsed. 161 of the right-hand hashes exist here (`master`); the other 97 lived only on the 29 branches that were not imported and resolve in the archived old repository through the left-hand column. Its header also records what makes this import unfaithful in exactly one respect -- the three stripped PlantUML jar blobs, by hash and byte count -- so that a reader of the map does not have to find that out from a pull request body. `check_workspace.py` now exits 0 with every check green. --- .github/dependabot.yml | 5 + .../design/import-commit-map.txt | 290 ++++++++++++++++++ packages/sphinx-test-reports/pyproject.toml | 197 +++--------- .../sphinxcontrib/test_reports/__init__.py | 0 .../sphinxcontrib/test_reports/cli.py | 0 .../sphinxcontrib/test_reports/config.py | 0 .../sphinxcontrib/test_reports/css/common.css | 0 .../test_reports/directives/__init__.py | 0 .../test_reports/directives/test_case.py | 0 .../test_reports/directives/test_common.py | 0 .../test_reports/directives/test_env.py | 0 .../test_reports/directives/test_file.py | 0 .../test_reports/directives/test_report.py | 0 .../directives/test_report_template.txt | 0 .../test_reports/directives/test_results.py | 0 .../test_reports/directives/test_suite.py | 0 .../sphinxcontrib/test_reports/environment.py | 0 .../sphinxcontrib/test_reports/exceptions.py | 0 .../sphinxcontrib/test_reports/fields.py | 0 .../test_reports/functions/__init__.py | 0 .../sphinxcontrib/test_reports/identity.py | 0 .../sphinxcontrib/test_reports/jsonparser.py | 0 .../sphinxcontrib/test_reports/junitparser.py | 0 .../test_reports/needs_export.py | 0 .../test_reports/projectconfig.py | 0 .../test_reports/pytest_plugin.py | 0 .../sphinxcontrib/test_reports/remote.py | 0 .../sphinxcontrib/test_reports/results.py | 0 .../test_reports/schemas/JUnit.xsd | 0 .../test_reports/test_reports.py | 0 .../sphinxcontrib/test_reports/toolchain.py | 0 .../tests/doc_test/basic_doc/conf.py | 2 - .../tests/doc_test/custom_types/conf.py | 2 - .../tests/doc_test/deterministic_ids/conf.py | 2 - .../doc_test/doc_test_ctest_file/conf.py | 2 - .../tests/doc_test/doc_test_file/conf.py | 2 - .../tests/doc_test/env_report_doc/conf.py | 2 - .../doc_test/env_report_doc_default/conf.py | 2 - .../tests/doc_test/env_report_doc_raw/conf.py | 2 - .../doc_test/env_report_warnings/conf.py | 2 - .../tests/doc_test/json_parser/conf.py | 2 - .../doc_test/json_parser_complex/conf.py | 2 - .../tests/doc_test/json_parser_custom/conf.py | 2 - .../doc_test/many_testsuites_doc/conf.py | 2 - .../tests/doc_test/needs_linking/conf.py | 2 - .../tests/doc_test/properties_linking/conf.py | 2 - .../tests/doc_test/pytest_6_2/conf.py | 2 - .../tests/doc_test/schema_strictness/conf.py | 2 - .../doc_test/schema_strictness_status/conf.py | 2 - .../tests/doc_test/source_location/conf.py | 2 - .../doc_test/source_location_renamed/conf.py | 2 - .../tests/doc_test/testsuites_doc/conf.py | 2 - .../tests/doc_test/ubproject_toml/conf.py | 2 - pyproject.toml | 108 ++++++- uv.lock | 61 +++- 55 files changed, 512 insertions(+), 193 deletions(-) create mode 100644 packages/sphinx-test-reports/design/import-commit-map.txt rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/__init__.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/cli.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/config.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/css/common.css (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/__init__.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_case.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_common.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_env.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_file.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_report.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_report_template.txt (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_results.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/directives/test_suite.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/environment.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/exceptions.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/fields.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/functions/__init__.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/identity.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/jsonparser.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/junitparser.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/needs_export.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/projectconfig.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/pytest_plugin.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/remote.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/results.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/schemas/JUnit.xsd (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/test_reports.py (100%) rename packages/sphinx-test-reports/{ => src}/sphinxcontrib/test_reports/toolchain.py (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b96f6e9d1..be1c43c84 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -57,6 +57,11 @@ updates: # (`sphinx-needs>=8.5.0,<9`), and that specifier is a floor moved by hand at release # time by `propagate_floors.py`, not by dependabot - dependency-name: sphinx-codelinks + # the fourth member, same reason: `sphinx-test-reports` is a real PyPI project as + # well as a directory under `packages/`, and it names the published sphinx-needs by + # name in two extras (`sphinx-needs>=8.5.0,<9`) -- a floor `propagate_floors.py` + # moves at release time, not dependabot + - dependency-name: sphinx-test-reports # the workspace root itself. Its name is not on PyPI at all, so there is nothing to # bump to -- this pre-empts the same #14004 noise rather than fixing a live proposal - dependency-name: sphinx-needs-workspace diff --git a/packages/sphinx-test-reports/design/import-commit-map.txt b/packages/sphinx-test-reports/design/import-commit-map.txt new file mode 100644 index 000000000..1d517d18d --- /dev/null +++ b/packages/sphinx-test-reports/design/import-commit-map.txt @@ -0,0 +1,290 @@ +# The git-filter-repo commit map from the import of useblocks/sphinx-test-reports into this +# workspace: every commit hash the old repository had, and the hash it now has here. +# Left column = the hash in useblocks/sphinx-test-reports, right column = the hash in this +# repository. It is kept because links into the old repository name old hashes -- ten +# released versions' GitHub Releases, changelog entries and PyPI project page are full of +# them -- and this file is how such a permalink is resolved to the commit here. The old +# repository stays archived and readable, so those links keep working; this maps them across. +# All 258 commits the rewrite parsed are listed, including the ones on the 29 branches that +# were not imported (only `master` was merged). So 161 of the right-hand hashes exist in +# this repository and 97 do not: those lived only on branches that were left behind, and +# they are resolvable in the archived old repository through the LEFT-hand column alone. +# +# THIS IMPORT IS NOT BYTE-FOR-BYTE FAITHFUL, in exactly one respect, and the difference is +# recorded here rather than left for someone to discover. The filter also ran +# `--path-glob '*.jar' --invert-paths`, which removed three PlantUML jar blobs -- 19.97 MB, +# 94 % of this import's permanent weight -- from every historical tree: +# +# 392b3a6fb54e223b77a62d3e734e7fd2f53613b5 8 608 232 docs/utils/plantuml.jar +# AND tests/doc_test/utils/plantuml.jar +# (one blob, two paths at ca74b80) +# 6acb756ccc20fd16406aa0cce95f79866e9785b7 5 489 571 docs/utils/plantuml.jar (older) +# 8eee1b2c6b3d6b4c40d7efd64b15d17003fd75d1 5 870 114 docs/utils/plantuml_beta.jar +# +# Unstripped the import would have added 18.75 MiB of objects to a repository whose whole +# object set is ~101.6 MiB; stripped it adds 1.07 MiB. This workspace already vendors one +# PlantUML jar, once, at `vendor/plantuml/`, under a `verify-plantuml` gate, which is where +# the renderer comes from now. Nothing else was altered: extracting the source clone at +# `ca74b80` and the imported tree and diffing them reports those two paths and nothing else +# (the two live copies were one blob). A stripped historical checkout still installs, +# imports and runs its suite; what it cannot do is render a diagram in a docs build of a +# 2020-era tree, which would fail naming the missing file rather than pass wrongly. +old new +00ec0ff81912fb8c303e4d4fcd90da473bfa71d4 3685ff8bf758916d2155adb6e6381ea8e24bbdba +011db47bd089728157ee259b82197f3036496c31 7a62cfa714c633e82925b41e905901b913137dd2 +019810b3c02219497d5d0f6bab8b2ec565410b1f c2f2583502b0741de13d9b1ca65fcd4be19b3d63 +02123f7a1327ac62117035841fa1a91ad7428ad9 1707554529a0bd6b415511c239cf86c6c6567e26 +0316d1361f0a6b50756a21cc58f33fa4e177a1ef c654990346e6db4c67c112e16ba0e25ab22338f8 +0357d95356d067f89f07adb07a18dae083e13fa5 3c7a255507d08debf514b8adfcf882b7cc8211d4 +042b69cd75894ed6e1de0f68ff690fc98b9d1fae 5301cae6d2b914ea2e23f9ca16a8a72791561dfe +04a6da4f43069067296e3664dbc13697e1281488 6e594a5a678d42837734c2a9998f8005044562a9 +04d30a609043d65d23c9b111f430d36d8f3d92fc 0f426ad35401bd1bd759aa80d6aac87122c0744c +0693206c633836f531bd789a0f99dd497f2f30e3 32a67c4dcc4c75b77525202c27c26abe7de0a616 +07ceed5d573d24837d9c1e8cfe516298adebd180 7a8aa7b981d239e0002cf1f05bc09b502b4bf58f +0848a9ef83f77f7fd48b0a701dc30b99bbf48ae1 5a167612bed8fd07677bc859d14d33436a97eb3d +0895e6cf33a9ac20d4249f6d185f76e655a6302a efe28576500e39de597b0f07ec81d3acf9b83412 +0902f5796b9ef15a4ba309f3c2cc87bd271c156f c24c1341528c3301be44de8abd283b8c9d38d5d6 +0b5fe4a469a9452b0af7646d2dce5aedac72a3cb f451e748d484b481918281769d059fde49f13255 +0c21a59494adf09b93bf3840d5cebf230b241954 2879a40e8a5a9a1b81703a1bda448f8df804c623 +0dabd1a0acdaeec63f35be7ac0188ed971161469 33c7cb2fb1b0cc276f7327da93dd429cad1def6a +0e581c47887a472b9970ea042bd5ec995f4bfb61 d96c0a5cf6b562a2579e3e7891d78e40296c80ae +0f0c56f78ad432e3c75f51c9c35a964700794df5 6b96b40218750c0861b927409818bc1ec3bc97ee +0f1ee42c8fecdca334e81009a5e89eefaf4b093f b88dc6359618c18a7d6665dbcf24cc1665d0bfad +0f394f44bf82d77f08ea7ca19d35e12e99f2fb11 72dc832bf0884e31ca1fb8025530c0894afa3e31 +0f979d3f4f6aae41977b1303d775062b9153f0e2 e1d0a91e4a06eb84aaf937efa2ceaa2b2e6a8fbf +128702d4756e158921ddc80d28a74987029c13b2 3e78be80c3a8c35226c46d49e8105cd856531b0f +149bd09af3dd505bd7de1fbdb49e6de8739a23c6 206817f0175ad392d78f9e0d53a07a9bbdb51f69 +15de5df900c7d61a68a7988b552c4a3980a10d99 b2fc009c2bddcf850ae30d695a85cb96ad28bbd2 +1655c81a3b9e79cd46244810cd7f3ef8fb84c1aa bf1f4e3ce5e1937ca2e5102ffeaad6cee5108cc3 +1696d4383fb01adb440af001844e0d240730a6ed 4dd6c7944714b055f5313ac1c3745cee271187a9 +16ac6f5a97da7829c9258ce8ce9573b9b0085072 71d626015bb6dca3deaccb8fbde610cd83c008d5 +16c4988676380e9895ad7456946256eba6ba0b54 15a196c6028c80201524ae77310435fdf260b5f4 +189b383eac608d3b952a74f68c6e25d137f78107 bded6d6ed7ad503215f41008dd610661d6f94786 +192a3c52686bd45ffd46543df1d783a13315cf7b 4302414b9cc3549911e3c00cfd0a90b1153da13a +1a491f64c42c46680d7288b1263bba90347144b8 64491f039aec8e532d4aa4b8c7d6a8af15cf0d21 +1c9a52363259fa581871d0d82e677365780d06ec 93b5a994777aa10bbd8d4072822c4451b8731841 +1cc04cbcba48b9dba71c978a906ffbce298e5837 687a9123a4544592d9b67ef0972a33a0c6ea4629 +1d6fb94cdcda227bf60a073a460532accb65c162 6372af5848fe8daa03c6722bdf70f919ff4bc3a3 +1f8c5d0b8af689febdc5dbe34deb2bfac1bb9ff8 72eb68b76c48b24269c46cd5deb2d0d2d51e5f38 +1fd81e68bb4b03b3f75cdd308c3c1107e842f05a d7b4cb95f7315bb9d2cb73d79a5f95fcbc415d9b +20e1828a01b9085ec36e088d79cdd0b3c4f37efa ce63b5d056c76ce1a1775981e7a88125c560e1a7 +2111b252a5f02ded02efee0db49d501f84f253ec 52a3711f318990b1b471388bd8bb40abd093265a +242be4c078bd849c2ade6ada46820da22c155555 ec73fc91bb8cf2dcc738d3b0db97b686741c9df9 +256ba638058f73e37e29dce18d9e6e5b8c4857db 767074054e43c7fdd2b44517de441ec36718bfc1 +25c0ddd23549426e31a914376222832880062ed1 c1843031821e095ab4fd29a6d6922f73c4125774 +26205624b85ef08acd2e6b245494670d9a2e6d6a de699d638b0705c01bc7674f373f387f98b0d3fd +267bb47d2d15e655af1b8cdfc42a2141445a14bc 5fc68518f5c102b17ae6024d1a4bf516f75261d6 +2746d072ecd594ebe92716bd9ee4f227f2beb85d 3ae363b9b7c36aa9ab32223dbf1565cd36c6455b +27539b4c32b134ec48100058aa921af544406dae b1eeebb2ab886d7d9853355cae055d91322835c8 +294d7a39ded38243d78eb7129b3d12d82d9f6aa1 10089b418cfd655850cf5c4701f748a205fc09c5 +29c0f858822f5f1f74beba2c67608221e80d0e03 99e21bf8ce79c97880e4acffe1106c55b5a51d42 +2c42c145469ae10bebf895613cea1f7836dccf36 fc20d21fa0c259c3f202c01ebeaf2be25ddccad3 +2cca99de14e5114e53979e158e54af50c7eee4f5 dc66f2d41d49d98515f20a4a8f7331cff024aa71 +2d08223e69718f339e06f0c6b6470c0f437e5d4e 5ec351148774787738f06809e2154806319177a7 +2dcd656bb9d8d002514eb06b569a6c08717f67bf 023aa2f938bf9846682572809b3e45f51086c467 +2fbde3cb9a13e78afd2ab48e8d2484bc1dfdcd41 49a1397c59f89ab44fadb99fe783aec0c3a94d41 +31524caa5b75efbfddc997714947bb4e38d3e76d 1f96cd832a0554035c48c44b7f777f3e5375700a +31b999120e8e50721d95baf086b2834091af60c4 d5314915797f2dedf367b5b93a98c9c213656e9c +3581dbe7975114850dc854e69ee85b45cc35af59 efcc26ae81255957589a8f7429d913aabff52359 +3666c009c3a8fcaa8e1a02401d7cf89cd3836a54 f2660a9de40bbf8026dab48e81e3f8a6699f96a9 +3779935692f24daba2bccd42467ef4a1ff5d9e9e f1d27dd4dd02529b89a46333cbb32cbc8c86789f +3ac8dc52a5244faccc11ac678fd1ccbee6662d33 cdc39d41267e8addfc622639917220fcf319c8b3 +3adde48e327ce91f630d9f48516ba9cf852e1624 b3e759e9b2d66a95b66ca1ca32f04d6a2485bbfc +3b9d8317172cedacd8c6bc321aecfb798222da39 ab0d809219d54dbce544a54a5d4964da48e104d9 +3dc5b1dd00ee4018e073b3e91a41a926c01c3cde 952f45c83e89a2896a90d2f85919c417434e086a +405253ab7070933803ef73cbf6b1c8c320c213d6 29178e0a77e41c82292aae10d7cfc4172c2e86ef +40903f02eb82166334f20f1180f367d23c6046b4 7b710e3932a6657ff1b2f34f4e214332abed3b8f +40c46c2630fbc029ee81df26b4785f00179ac0e9 0ba5857ef4081c24e5703ab456e0f4a9a5a3c5c9 +41da8d37bf551b7d991fb4b6ba3280cff7d541ae 03c1f1ac1cdceb584a8265ef107e2f1b24a1af7d +424543ba5ad7776f37ad8de852826ff3bc558f65 52649f6af47b0eb9c5a7fed7e42c5464352a42b9 +4405acfd501b6991a376b1994c965924a1555e8a 668f29594e71c9c82c00d8c7331ec05475d69c67 +4427f0723f2b0e8d82164711fe17771204170290 46f8923f32d854de3da82dffe4bd290c2527b799 +452ef0ecc878b23136697e1b2bb77a2e3c0f1973 8377046808f589bee2541029ee5ddc53fca3e65d +4536bec29bbf7917129c0ac4f5649d832f5bd758 b4ef193c0db91e10627ce6acf21666ce5022330b +46a6bd811a55e6afa4846ed2b291a8ededc66633 a62d56a725c2ddac8cc7a69c6180700c1618aef7 +46f2db070fbbeba741739357dc897a6989f596c7 096d96817a32a8056fc545ad5848e89e8a7c254a +48d789fdeaada7e54e970e0f23a47d445f87d473 5ff1f891b7ecf3ff7545ee40574d00089920b375 +49bd07472c8c48390fb7b8a392563f6b78a9d024 77d9c49757018e421c3601937fbc8fac85be86f8 +4a4cc91c30480559caebe0d347694d2cd0887f9b 832882530e4ff4ff6ff9476a86fd939e1b9188d6 +4d9fc00e1d0687bcbd0e78f6c2a993bbac41cbf4 c7cc20287498fee57a87a20b81ebd5b1e08155f3 +4e07caa8522ec0abf04da98b50e63c4d0054bd31 f4c37227157fcf8bc1ebfbb64f8af8a1b9785405 +4e4a5118f7a0accbd5ab12fc7674bf5521cc963d 87776b798f94482f41d479012079402b2e90294a +4e5acfe63e2529338cf792b0dd3b69853fc29503 c2671c7d70e44c6ee6f1c2ac6e0e843355ee2ac2 +51dc5b298027f200f1cd3a98ab29c029ca20b431 461cab9503c0566a420f2c85073f0e9467422a04 +529246ac818714720dd8fdbd3331b922ffcd8b0b e1b057e59b2361cff4682d12d2d1c86c34e9d429 +52e9f2cb0e51fd70216dd844d28cb76b02def09e ab5be94d4e27bd081e8779f50f6cad2f557aabf5 +543c7c33521f3a58dc3664bf36e578f295b6aedc 132dad61ecafe40ca7319807d64971b1b0140890 +5478acb743f232184564eb23cdf1f42bfe4f65a5 982d0e1b9ae43edf82292d463b06a6a9d6afeacf +54fa458960a97b747d4eacd009c36f4cdec44f59 9e871dd26126b6578a6a77c42ddb9603302aa62c +54fdd8e264fb57512b2c590f56023b8419e88567 d0a0326e0fa33c55df0349ca4295eb14f86f3bd7 +5719e3ab4bfae4d572ee5fd151f17333cc6fccea 57f1e78256fdfcc4913589556b0241b943f65232 +579ff6cae934817559c845a40963b54db720c9ad 5b9f238cba8b5161419e00ee1f4177b3d7fd054a +587b45dad4304a882e7555459b2974086edc30f9 a7b95a4f41cdf5228003cfcd8a41b49c3205a383 +589528e31f390955d7a6928f5da43030a8d7f0bd f2d0b52822416b1b0544ffffda9c5032725ffa98 +58d7b124601cbbae90df7eff4f3310bdcf976ece fbd40b7eb628607b0db19d06e47872e58c3d82aa +5a145ef033060ced82ecc270c782d81b74f65a41 4dfae57c04e036830dd6f8693f41d01808bd00fb +6070b59090233245e1d08551da131d424b1be6a7 7d216624bc06eaaf2159582e13133c06bd59d975 +612c65f6ed24270cdb08046be1b5bff26f28735b 2feaa196e0cd093300e799209d12f56b92022ffa +61eb992b3c699d03eda9102395953d76d82f7a56 8377aa1e2cf3c491008e176d0cec8ccb3847b1fb +623f856e414fee00a51cfd0204a45ad200ee60a6 791cd5b9c2121f0917ecb3caa1dc8034d98397ae +6364ffd7dd344fe0e78e21734120732dbb781933 29f9d061f2bb961aace38599dcebe16630debf71 +6399bd2509c096bc1b516a9795019324016d38dd 5046b9f8a9739a7158e20eab8b3c91245873810e +63c9f0d7cd4b5f05591837dabe796fa951557a1b f12798069a54eca64ecd03c84dd950cdc4bd93cf +6443fb513a40602933546d8ce593766aa482477d 08dabeeaf8403861235328214d99617ea72a6457 +65dad785e5db317ffccfafe9d079fe7cd7713df6 f4b3ce05c70d1c4e704ac2610e3486a6b90848af +6677baa72f1fff9ee66638460c1c4d42f70c6715 5036f288034103e7cad8d9e9e7dd703c7f6e5b00 +689bed71d4031e3b7b96bc49a599cfb4662bd541 f992de76692ae4bdeb8a781583bd8172664feb0b +696f8fbd6861dfb65fc158fad3916ae8c8de7fcc 7960247f680a1eaea72ab17d0cf97abee42420d8 +699a1aa782a7ae6a6deda1c6b81cb2bbd29195de 927ba19358117754c91fdf6e3fdb20d33dc59d1f +6a293fa0ec2339d1aeddc45d73de3d47b44c0011 7b9ca303b510083eaa24bf5783acdc05eeb9f67d +6a3849dd01808aece9f7d1911be1df129884318c 8abde4470090f8919dc833c6b8ddadb84a6923cd +6ac41ee29126a1dec66be95d807e773e2f4ee67f 747d03c248fe8377208125a0afeb6d41617d0182 +6ce34ff04365bc1bee38ef873190633eb5483256 1ffc67e94aca93a4c15cb7257adf50cec66fd34c +6d40cfdf90ac71aaa36aff7114d687d69d3fed14 f901ec53bfeb35bc912b04e486b10aee882be30a +6d48a152b7b9d06ef23555e3b8d13f71f15e9b1f a19a7a857217e93eb05e878aed410a0eb54e57ea +6ddbfa86bc74005df45e7d2b61d1e97f7226ce70 6e6c8caebdacceaab8e8617b3e14d6cfcfe888f1 +6e804963e0746eccdaaa86e8cbeea38cb1582ada 038603e45f60b30a10a0fcb032142a4f1bdc8f62 +703197241ec10408344b2fb15ac3c7d2e5300deb 5bd4c53e86405f15f340d30a835f311b421362b7 +7550bcad14e27065e1586a14256b22ec5da0a221 f090dd39008c06bb92e57b307e34625a1be8410d +75b13735e5c2a9198ea335fcfc0429aa8ec20a5c dc4a63fa5a78ea5d5c06ef073810fdeb87b3ed41 +7623b3a0cc1d501749b88183cbf3060b2d4fc6a9 ad493d776ccb1455dd4ac8260c5f11c0c4ef5610 +78401b2d84e5d1037455ef67ec9e8cd4b968e29c 03d0279c9533be877312c041565d254491d9e900 +787301ea420e111b47d61947ad8733a27ad4ea73 69633491e9ae9cc89f4418b9a598bcf0683c8be9 +7ac27911bf25208b6f8f68eb191f4107e5632f36 66ed4905fb54d0c93cd139389b6584cf0db6bac6 +7c3eef502dbaf82b1c62c932df92bd6a715613ac 41344710376a693cdf573ed6c45f07540335347e +7cab1e1963dec9ffc2ccd55727dd776da431781b 86c322a055ef3bf7173f397984b8ccce30a3b546 +7e6a45ae1f1eaad8b018a53092abd3348c1daa96 6c97b01addfcc04109b79516d17e7e37886587cb +7f37b3c1c2865467c44b686907555fe4bc3428ee 2dd3214d797dbe49ee45acc8277f82b50064ef11 +7fe8876516d544b60cee9eb61698513140517185 7e3bf2d5c5c662e374375ad9cda9c876b6811dc4 +815c0e493d99aedfb8c39e5d6b0985b009b0aff9 02391d35c2b6d454192859d5852bbe5934ad9f8a +81ea621daa2c88e2af199d2fb2912559365886f6 29c5be0c0a25585ca3d15486f1bd5b7c6a1b7077 +821e126c7b844c068e549050e9bb9b4b0b4b0fcc 04c2ff1ed8496815e22aa5b2fe98de375eb03124 +82819bb9342a990a8d2d3cb3320438eba363e18f 7e669c0711aef38702fcb3fe20d86cdba6544fe7 +837271a03d06b2a10f59e8a3517a2ad12e3e7960 b265c3059a1468536342ba5008df2029e98030b7 +8535e74d591bda435eebc8c089d47b382e5404b3 43f1a7977e652576e6b705ee96fdc231ab03e798 +86aa425c96923c7da604c94ed16676e2ec0eb29d cf0ed81880d1ea5865b8a03165a0b706ded57c33 +872e07a60c3d544712623dbe994bbdc2723dcf34 51ad3d2d4de98db26292060c308a60ba8c58550b +885d10ea5419d94c2fce5c88f30a3b20850021e4 9c70407629d8af8b1d9ccfd58c634bdbd871b2c8 +88c72ecdbdf1e66040628a100577f8a46d824bf7 a63de8df9b7dbddd59f3ec53f61cfefd0f8955ce +8ae74d5cd7a262311537ad8e29ac6e95001822ff 4320923c8eeef1ef5501374e48c92197b87a145f +8d69ddee092dcaf28a4f6df82e55ed5f17ea5bbe 9c041678687cbac72faec7a0e1e62c135f1f84c4 +8eb58fb01b47cf93ba7bfc11c62f5ad1b5566103 05b3df4ce8fdbf8de09bf13fffe59c1b93103fe8 +8f559a5fd27fa894d0862833776b604d260aeed3 afb3fac502f76a0fe4494dea6d35051f6d942871 +909d0d925b74eb9ee43e47c81fdd334b9f5ef018 c32bffcba3b6ad0700e509a378319f290f650644 +91f1ded983bd7e083ab742d3374b191234c00b1a 4b24df6c83fb0ac409f1df1a94d6a5e860215fc1 +93d27a0715baa72d8bf7f88b90b00a95d3b51721 cf032a7a0622b8be2fc57acd4438fd4fa5c2b003 +94798547dc3074845bd85ad681ad4d6c27f8663b a0ddeb40a5209bec81beb7cd57de5afd6fafb244 +947e58f53b34a07729fcab99dd8e933a929aa68c 9241df58a4924f3a5253af7542b8e31cbb8311a9 +95483fc26dc1b4cd9b2a9c3f13c5a0c288917cdb 92596482fb64e8884d132ebf685c02a75a681337 +9560224e4f010c8eed81eb6352c08e52f5ed5658 77562a9739496e73d1ee6f4a3745e5b13896a380 +95621b37123b0dd9b5d992bce676bf2246982dbf bbd3f8ed983f1b4a6357364c0f36415009de5685 +9652f22fa8153dea122cefeedebe1fe29b354b68 f0a58b875aa8743c9d3cba1d889841e94a2fe9bb +9716a2e31410e6ed47d490a372498eb799f92063 785066c27db55abbb32daa0d49c32b51195fccaf +9741dc0bf57172613b7b656855dda97be4869e2f 1612f5fd0ea16ebbf01cb28861b2848bcc3391db +97df9daec4a50800ecb5cfdcd5a49416840750bf 52e9cfc202d23f75294e0666419a5f193ea9fb4a +9835aa49eaab233bce83560c3992d6ad15c1d5a8 6c898bd102957eb65792c587259fb6e3df81e97f +99565dc9a8bf6921e8039f005437f6f450dfb041 d0f8da8a792d9d485b7c77b7a3d01f98d1632435 +99d71c7ce5ac234bca9a77b519c3c633f54cafe5 5e9a4810e5e856ff55056ccce8447a543a3cc65d +9ce2b7b5fb1b6bb5dd27ab7cd3625a988bdae17e 1e51a4644771fd9958c8cc6f48da6c4543802c3d +9e20631f81adbb51d42c1ea481a9e0cad7b40a53 a81feb996eeb456587cb3c88eb8ba0e0df6301eb +9e4a8743c9c6db65e5a7c149e173df083415f2a3 8e0e71730785a68f1a66ba6e498c5ddf865547df +a01a9f39f8658774b7dd3e4460c40b3dddb0ed77 93051bd7668e077a65a321088e0b3c8e6c0afb68 +a09cf9fe4876e1882dd542b314bcb257bdca6e86 560f97f7bdca789aa7f4914887fbf916e3b41322 +a0e5f55d14b561cd72e92f6b902d3b751997d2d8 cb1ca43d87ba0ec8d3cf12a242107184ae665e74 +a19b4a0d8140350b92e20e744d2c5b2e4282eb95 fa82b9a22a10100a7fbeac5dbbc69e32e0f4ba01 +a1f5bf29ed19fc5d88ee5b92740ffa064add49f0 3d85464e4ca74e047c8b35f63ec7b0ac355dd983 +a386c3f059d099d92d9b699d23f30b7e3b00c92c 2a3cd7c4a55df02f257f7e2e96a5d03d0bafb502 +a538445a5733a79c78c72ea8f257fc81d548fb5b 5daeff3742e4799b0eab865e084c961699567963 +a56cae4197c720d85d08e245422d6cb702be3837 8722cef43bb13e3fe72b800f57230a90a7554cd2 +a5bc249d726c67a1a1da39646ccb1fcbb602e363 3fe2b9c24344fa35e6593eef075052c31dde79b2 +a5d37c27e667ff7e690c5b6b19ca54f277aff54f 098432ab7cef39e6b4c97062e78ed338668b82a7 +a7d3832bc1de25474750298a8965e1e8dfdf173d 473db4ad722256f08396225e5f341c3f9949f6e3 +a8662f6dfe5f9de4beaa02213115e39202d64764 ab0e3698b694a75ec44ea87a1ff264b68de0cb4f +a8b4d0e81397b6a88096824e8cc50f034119434e d9ca80216546da7f6754acaf6b121339be075bb1 +a8da8e814ecb176fa72857756895888ee05bff88 e274fd8b133dd8aa1d819ec1364c727d74a815ee +aa0132172d04cb2a6f414bb6d9fe0cee142e5764 c7c3d6787a7022964c78dfd791e96f71ff04ec2f +aaa35edad638d60de3197b1a10a07b2970bd0286 e874807ec7a23b2e6cd1c2511b6a86f189d0b238 +ab17c4a375067059437a79fa7695708b4942e8d0 ca8941fd7096da1f5facf70921e629fd71372593 +aba899b4b6724fac452f89aa54f742c195ccb10d af557d5112a33d95247f4eef9a131d4d875c93ff +ac4d771777b0af46919acf31f7cd34178d0b46d5 1502f8dbc9186e57f0fbba53e6a516822dc74a94 +acb601d03dcea9930122335d9f585b148fa004d7 ee592014c70367cd9798fed16ec7ebaa604e5935 +af3d6eeb9deaf2118428fca20b4a1e5af617c9fe 2df1f2756019fc87c94f6d8e24befcc1088705c9 +b176a88187ae0679ef0b758aab7b34d11b472c17 bbf88ea53844a209709eaa967d0d0021b6e0e96d +b28c01e5b58c57c6fe0b318755779dd42108fcf7 0b1b66f2b4b784eeb8421f209bc1eac452c7de9c +b44b0b71e1ca17374ff1dc46038bb7f4d9436a20 da0c8bf9e7d548c0157508a18d98a49401abdc7b +b4d8b6cfa0b9d12d02b049968461728629f06f83 9963c8af556f981abbfea3a23cf4fdde2f681ba5 +b6c4f868b723b83e0934500023b754fdb0e4ad25 f088d83334f63822f06192b322f80c61458a7635 +b806add6c85572c3d3af6c6a153fd92aea536d34 f7135f1d40f91387c41348126dba46cef93d0c9c +b8f321b8987f38bd9e51c719a58c171cb9575a7a 2334e8a07e69b495d85eec1e4486c5aa01b520e1 +b9ae84fc02f61bb2a0cc29d7b80657a89ad2b6a1 8aeaee2909f72bbacfa789bf91e2845377660d77 +bb6bf4ccf7e4b3a3642cfea33c1a75b6915d74cf 9b090a31a388363f4c456bda31a3a88e066458fa +bbac71a50631bd729825e27db234fa39d75f6360 b9dbf2b2f066e29f7a262a4b3337a60f60853b97 +bc3577bfbbaf3950c2018caf3c7bac3d018f846c 7a966b32b3643ee8c252080c93281974cec9bed5 +bcaba18200816f4137ca76fead26fe413b9a1e2e 5e845dad46c55b07bb8f5f9ab566778d0a312bcb +be4400e1fb85541160a51e2394a4796c94215ba9 858ab47cc4bed3dae3da152194ad6ba426cfdd7c +becd66b89b303a583c35518e9815069ddbeee0c8 9e85a805cb5562938bea0a00507cf0031a5b3997 +bee116000fe9d392128c9480cfff6e8dc2420b22 d13ad96575a12c7348d514eda51d94686bd1dc2c +c01eaafba85568979e8f418a038ce5eb66e3e9ea 5783ab81ba908d43694ddde9e7cb717dcc004eb5 +c06454dcfd04073f90b0e6e3815c1aa4e51cfa24 92a5906b1560ec89b075fccac5ea07f4dcc40bee +c160dcc4f66c576322ff7a22f04fc3e8a614f325 b0599bd5a7519c2bf16f99a50b69212ce1fa4ca4 +c3c1bbfe4f24107d4e2468e785f08e8540c52783 d3bf18390a5a9182a74af8ee4ae4804d60fdca54 +c487ea0919d282b6a6d29bd2a8d422f1b550921f 1bf3bfb925505e79a69729bb54f07ff853470f9c +c49bb7e0ba8ad22f2d87f9d27791201390634daf a67ffbe5eadb59ea1e84608803109c6a2845b071 +c6524cc7c4186e1edb3512ef77912859e1aa5221 f1d854bb5942b0e9eff636876643d9fb1fc6d0a5 +c7b982c4994a52f54ff26ac23bf515e0e8c3755c e2384cfe64ee6be84fd76b731c07cd67262f50f4 +c853346d5328d166d2afdd19b1c933cbf8453109 20684df42323210c6c2491d4aa662fa7d4e9ee40 +c85bbd9c980ab9d77daf4398778db37baf42e499 4d4b964e48ea5ffcccc8aca3c50c4f9ec4a13972 +c8a8ab8141a0087d971f3b465c498275bfd06d9d ba8b65af87d4f792639291221fafea966250845d +ca0624e4302050bb5ca7dc3e4f5d91d037503c66 33d3bd076d64bca1b73ec99bf56ea9bc693abdfb +ca74b8020172436a7a16d001a763da5efc9de66e ffdf962e0d19400206659cf51b776792eaa09568 +cbb74bf85171d2925d87208af36fea71e5b151e3 bebaf96d6b3b9612057476d88b0d611400d3c4c7 +cf825adcba8862d17517aa815a5bb47e06fecf0a da2436d33cc590e12f04e9664e063f41f445d128 +d127b49c7b7fa05da23c8bc10efd6b003d5b2f12 91c9e197fc794651866bd5f6d0507b20387370a9 +d1cbf6d8aa773580658564c219d7af3fa464e413 95dfb01c8deff5af58abc32e8ddf86e3f4a4708c +d27d7720e8331432ca565bc38cf404b8bc6228fc 256d4fbed07f05a6d4d26496346ceb457ddcb8cf +d30322b35a4ec4d056a30e7d27a630ee497b493e 8fc93c0c79b3a217f220c8de6956dd5de0fdd0e0 +d3dae25837731e6ff3e81d79a1307f4d5f42915b f014b8ab546533af637ceb2746a31f6172d1b001 +d3e13f4ca4d541e3b5a7f01e31521a7dab3ba3c1 7e056b2e0517909df1b99221de82b7c6f3504953 +d3ecfce1ce9c05944c0e2e18f12b3ff00459dde7 596fee8be265c9732abc5a9e8908c03809cc9121 +d45db41622300a9b309f3cc7ddaae9ddcde1cb39 0a2423d48a799b24b465414064b57342c917f8a2 +d4f75c75e84eb6fc74468b06212ffa2c5cc00eb6 0aa7ecc657ed771aba58c94d12276dd8542b0a9a +d62f25b222df9261cebb163c04ee4ead72069b36 6cf3afd89b206b06ff873e040baca357452fcb98 +d7e81fc46425e640c84ce99b62c6c3667e60dcb0 13c06b1f99718bf5691b96c586a1da38b162a8a7 +d9e9c86a2663a40b2d2e748914169cba6ca1c9ca b489e18bbd2ee366d0f2f5b7fd2e77c17f296e37 +d9fd750bee76bcc009e0e31a4f06c3a2e68850d4 d109df00cfe234146ba2becff160fa1215bf2283 +da2e870142583b856e9be8beda1589dce7640088 299d216ec0404263977977369cfc74523a4b46b3 +db3617f0d22ad735fcd3e976ce037f961566c11c f02a45897593a0606b3928b48a9d333f40beb92f +dbad44b0da11d40950b05bd1c634e09593c9095f dfcecc535c820bbd41b1dfdc48c38cf680663325 +dd85b1142f76305c769134f84b94ec433fb30744 ecb408068e5bbf89c60408e7c420b29ebdfd7bd2 +df6b27d486b29ca13a9259fb09ec92e490404e0b b6a275556fab46a03506b7a90bdcb9eed511ed21 +e05825ff426ccfa9e23d07a3ed5b76def8f2bea6 38023bffd425dcb3df2b87700d2694d2fbfea271 +e11808d73a2f24553f03d97d71404581baf9c20e 7c9b5414605c70605a4a3763eab343fd5e2bf53b +e395b9e7a9fa32490ce4e6c90d0ba6ef24109943 b8cfcfc1e81c75619e6cc61ecd1495627e1a12f1 +e44ec21477282d70eb6bd3f056f07387a0e43ea7 b5fef5edcf2d76b6289a1541f794fd9eced28993 +e5d1593cff8fc781ebe60b2f491a5e822b66c4b7 e1b730d9c92d944ccf884bf13848c24ea2ab1757 +e7c9b035708b031db0fb8527897eda8647ae8d0f 430c49f554521c509288e5173fcf214f143c40f4 +e7cf1c9837762930ccb2b7c5ad066d8e0c60dfe8 2e916d558d98586dea4c6d36a3db8d76fb6637de +e81da6ab60656ecb522b7bccdc8f3016ec2514d3 99f4cf8511124149d5f9cc8015641ee4dce9e866 +e8c298912c09a6e6c2e2251266481ae79b84b672 369ef4bd25e003dac5de03871e1a12b1bdca685c +ea1b6b3624449f3d14bc26eced64894402af3a0a f37cfd5b6c8005a382a0ec1edc6deac5ab7464f6 +ebe46800b4cddca76774257b888edfc1041d73b2 014c1a856f258b9295c0dbf1c8261f8b57043d1a +ec9814fa4eca4067828da22687520ffe1eadf6dd b58b40aed1f583041969d2f41ecacd946fbc474c +ee021979dcd72f028434f7d975bb3bb9e7ecd16a 438c08ec1970e3cefa8d3e4a4e1aaf54f01d0ecc +eeb34642eec00dca48ea08571651d91f2c4bca6d dacfed9b8f63b5136e5dcf1404cc8a60457e52a0 +ef6f3f9d0d1736debf026565215972869633d64e d398b88fda2596c0ae2bcc7439488f2808d09f23 +f1482fe738352b9461d320feb55b64ec3f16f5b7 88a4d703770e0e56a9b1479d5c045421d8b8da3b +f3234b8501053d93d5ef556ee2a12d53b7820e0a 9c51740b7a97f3c7592519ed2da49148959f8d29 +f445ca35f16718baaf79df79ad29010e52ed8e85 9cafb0912fa391ebefd471b6b86db73b3e7a1f5f +f4991cd15baf96cdd111e679b2698a7bafc1da70 b3ed2c9b4e4f6a5653f503927b7b0c5c617530fc +f51c5d1c4d6b719a821aa093f2334645e0c00a61 a7504cd592932a8091c0a7fa4284d675754eb077 +f696f23490325820935a5e72247dd245bcccee3a e8a5a06b8fd1fc137a49165cf91f78206bf9d505 +f70346cfea2aba36d970025cf638ef8cd8492f48 c01fdaf683478b91522f7aec4e55459fa3ece340 +f7331bb55142b220ff8e4a35f90abe3f8eb42ff2 7a63821447a499a56a20a0540d5b1b652e21ba83 +fa8d5a7f8d73c5682c43af1c1508d8688358487f 0ee198bf1d38c9517798fce47423e99253d3e199 +faf47fc3bd6b0ec1bb6ca6943d33780e381d9a3a c01d95611038c9ba69d95a6ad9e2e36c999f2fb1 +fdd0870145d8d1aa74b52a7d96e6250d03416bb5 1ebca80cc191b1f85af9fdead141c52a03057896 +fdd8b79544c508ce06f7586567a856e812102d17 5bc966a7cf3f25c692d204b7783faafb7df0d214 +fe2f43574ae4e6320f654f70e1a8830bb381f94f c9fb0da63d582dc927af5bd6d6c3665dddec9d5e +fede4f5409656d2cc1adc5fd9185417ddff82113 4fea71023c053ee21cf6ac5f36f630744ee3b652 +ff399edb7572fb77c2c5774d229d28a78e40b3cf a8c4d4f22b1b74405a7717761c20d6e4048961b0 +ff6bafc69541879c7b11bb4e7e8d361876ce29ab 9ea922fea612418bdc46604bc1ea818da802c9c7 diff --git a/packages/sphinx-test-reports/pyproject.toml b/packages/sphinx-test-reports/pyproject.toml index 749e7c89b..d153e2e6c 100644 --- a/packages/sphinx-test-reports/pyproject.toml +++ b/packages/sphinx-test-reports/pyproject.toml @@ -1,7 +1,3 @@ -[build-system] -requires = ["flit_core >=3.4,<4"] -build-backend = "flit_core.buildapi" - [project] name = "sphinx-test-reports" version = "2.0.0" @@ -22,7 +18,12 @@ classifiers = [ "Topic :: Documentation", ] keywords = ["sphinx", "documentation", "test-reports"] -requires-python = ">=3.11" +# EQUAL to the workspace root's `requires-python`, deliberately: `check_workspace.py` +# check (3) compares the two strings for EQUALITY, so the `,<4` is not cosmetic -- uv +# resolves one lock against the root, and a member out of step with it still locks, builds +# and publishes; the gap shows up only as an install failure for a user on an interpreter +# inside it. This package declared a bare `>=3.11` before the import. +requires-python = ">=3.11,<4" dependencies = ["lxml"] [project.optional-dependencies] @@ -31,166 +32,68 @@ dependencies = ["lxml"] # dependency; the lazy # `setup` in `__init__.py` enforces these floors when the extension is loaded, # since an extra is opt-in and pip never sees them otherwise. -sphinx = ["sphinx>=7.4", "sphinx-needs>=6.0.1"] +# +# TIGHT tracking on the sibling, not a compatibility range: sphinx-needs is a member of +# this workspace, and `check_workspace.py` check (4) requires +# `>=,<` on every intra-workspace edge -- +# including one declared in an extra. uv never validates a specifier it resolves through +# `workspace = true` (uv#9811), so the floor is the only statement of what was actually +# tested, and `propagate_floors.py` moves it at each sphinx-needs release. The published +# 2.0.0 said `>=6.0.1`; narrowing it is what the import costs, and the changelog says so. +sphinx = ["sphinx>=7.4", "sphinx-needs>=8.5.0,<9"] # The pytest plugin (sphinxcontrib.test_reports.pytest_plugin); pytest is not # a dependency of the extension or the converter. 7.0 is where everything the # plugin uses exists (pytest.Config/Item/Mark, Config.stash, # issue_config_time_warning). pytest before 7.3.2 does not run on Python 3.12 -# at all -- that floor is pytest's own, not this one's; the nox session -# plugin_floor runs the plugin's tests on the oldest pytest of each Python. +# at all -- that floor is pytest's own, not this one's; the `toolchain-free` CI job runs +# the plugin's tests with no documentation toolchain installed at all. pytest = ["pytest>=7.0"] -test = [ - "beautifulsoup4", - "nox>=2025.2.9", - "packaging", - "pytest-xdist", - "pytest>=7.0", - "pytest-cov", - "sphinx>=7.4", - "sphinx-needs>=6.0.1", - "sphinx_design", - "sphinxcontrib-plantuml", -] +# There is no `test` extra any more: the workspace's test tooling is the ROOT's shared +# `test` dependency group, which every cell and the release compat cell install, and +# `check_workspace.py` check (7) refuses a `[dependency-groups]` table here. `nox` and +# `packaging` went with the noxfile the CI matrix replaced. +# +# An EXTRA rather than a group for the docs, because Read the Docs installs extras and +# cannot install PEP 735 groups: its `python.install` block takes `extra_requirements`. +# The root re-exports it as `docs-reports` -- uv resolves `--extra` against the project, +# which is the workspace root, so an extra that lives only here is not reachable by name. docs = [ "packaging", "pillow", "sphinx-design", "sphinx-immaterial", - "sphinx-needs>=6", + "sphinx-needs>=8.5.0,<9", "sphinx", "sphinxcontrib-plantuml", ] -[dependency-groups] -dev = [ - "pre-commit~=3.0", - "nox>=2025.2.9", - "mypy>=1.16.0", - # Stubs for docutils, which ships none: without them every directive - # option spec is untyped and `test_reports.py` cannot be checked. - "types-docutils>=0.21", - # pytest: mypy type-checks the pytest plugin, so `uv sync --group dev` (the - # CI mypy job) has to be able to follow its imports. - "pytest>=7.0", -] +[project.urls] +Homepage = "https://sphinx-test-reports.readthedocs.io/en/latest/" +Documentation = "https://sphinx-test-reports.readthedocs.io/en/latest/" +Repository = "https://github.com/useblocks/sphinx-needs" +Issues = "https://github.com/useblocks/sphinx-needs/issues" +Changelog = "https://github.com/useblocks/sphinx-needs/blob/master/packages/sphinx-test-reports/docs/changelog.rst" [project.scripts] test-reports = "sphinxcontrib.test_reports.cli:main" +[build-system] +requires = ["flit_core >=3.4,<4"] +build-backend = "flit_core.buildapi" + +# The import name is NOT the distribution name with `-` -> `_`: this package installs into +# the `sphinxcontrib` PEP 420 namespace, which is why this table exists at all. +# `check_workspace.Member.module` and `tools/src/sn_tools/import_check.py` both read it; +# `release.yaml` is taught to read it too, because its `${DIST//-/_}` derivation would +# otherwise name a module that does not exist. See this package's `AGENTS.md` for what the +# DOTTED name costs today -- check (5) prints no line for this member. [tool.flit.module] name = "sphinxcontrib.test_reports" -[tool.pytest.ini_options] -markers = [ - "toolchain: needs the documentation toolchain (Sphinx, sphinx-needs) installed; deselected by the toolchain_free nox session", -] - -[project.urls] -Homepage = "https://github.com/useblocks/sphinx-test-reports" -Repository = "https://github.com/useblocks/sphinx-test-reports.git" -Documentation = "https://sphinx-test-reports.readthedocs.io/en/latest/" -download-url = "http://pypi.python.org/pypi/sphinx-test-reports" - -[tool.ruff.lint] -# TODO enable and fix commented rules -extend-select = [ - "B", # flake8-bugbear - "C4", # flake8-comprehensions - "FURB", # refurb (modernising code) - "I", # isort - "ICN", # flake8-import-conventions - "ISC", # flake8-implicit-str-concat - "N", # pep8-naming - "PERF", # perflint (performance anti-patterns) - "PGH", # pygrep-hooks - "PIE", # flake8-pie - # "PL", # pylint - # "PTH", # flake8-use-pathlib - # "RUF", # Ruff-specific rules - # "SIM", # flake8-simplify - "SLF", # private member access - # "UP", # pyupgrade - # "T20", # flake8-print -] - -[tool.mypy] -packages = ["sphinxcontrib.test_reports"] -strict = true -show_error_codes = true -# TODO: reactivate below files and fix issues in future PRs (#114) -exclude = [ - "^sphinxcontrib/test_reports/__init__\\.py$", - "^sphinxcontrib/test_reports/config\\.py$", - "^sphinxcontrib/test_reports/directives/__init__\\.py$", - "^sphinxcontrib/test_reports/directives/test_case\\.py$", - "^sphinxcontrib/test_reports/directives/test_common\\.py$", - "^sphinxcontrib/test_reports/directives/test_env\\.py$", - "^sphinxcontrib/test_reports/directives/test_file\\.py$", - "^sphinxcontrib/test_reports/directives/test_report\\.py$", - "^sphinxcontrib/test_reports/directives/test_results\\.py$", - "^sphinxcontrib/test_reports/directives/test_suite\\.py$", - "^sphinxcontrib/test_reports/environment\\.py$", - "^sphinxcontrib/test_reports/exceptions\\.py$", - "^sphinxcontrib/test_reports/functions", - "^sphinxcontrib/test_reports/jsonparser\\.py$", - "^sphinxcontrib/test_reports/junitparser\\.py$", -] -# Disallow dynamic typing -disallow_any_unimported = true -disallow_any_expr = true -disallow_any_decorated = true -disallow_any_generics = true -disallow_any_explicit = true -disallow_subclassing_any = true - -# Disallow untyped definitions and calls -disallow_untyped_calls = true -disallow_untyped_defs = true -# disallow_incomplete_defs = true -# check_untyped_defs = true -# disallow_untyped_decorators = true - - -# # None and optional handling -# no_implicit_optional = true - -# # Configuring warnings -# warn_unused_ignores = true -# warn_no_return = true -# warn_return_any = true -# warn_redundant_casts = true - -# # Misc things -# strict_equality = true - -# # Config file -# warn_unused_configs = true - -# The two modules that talk to something untyped by construction: -# `test_reports.py` to the sphinx-needs API (which ships no py.typed) and to -# `tr_*` config values read off the Sphinx config with `getattr`; `cli.py` to -# `argparse.Namespace`, whose attributes are `Any`. Nearly every expression in -# them is therefore `Any`, which `disallow_any_expr` cannot accept and no -# amount of local annotation fixes. The flag also has no counterpart in `ty`, -# which the sphinx-needs workspace uses, so relaxing it here costs nothing -# there. Every other strict check still applies -- annotations and real type -# errors are caught, which the `exclude` entries this replaces prevented. -[[tool.mypy.overrides]] -module = [ - "sphinxcontrib.test_reports.test_reports", - "sphinxcontrib.test_reports.cli", -] -disallow_any_expr = false - -# The pytest plugin decorates arbitrary test functions (Callable[..., object], -# whose `...` is an Any) and reads pytest's Any-typed config API; everything -# else stays strict. Both module names: `packages` above yields the full one, -# a file passed on the command line loses the `sphinxcontrib` prefix because -# that directory is a namespace package. -[[tool.mypy.overrides]] -module = [ - "sphinxcontrib.test_reports.pytest_plugin", - "test_reports.pytest_plugin", -] -disallow_any_expr = false -disallow_any_explicit = false +# Deliberately NO `[tool.flit.sdist]`: this distribution's sdist already ships the module +# and nothing else, which is byte-for-byte the shape published on PyPI. +# Everything else -- ruff, ty, pytest and the dependency groups -- is the ROOT's, and +# `check_workspace.py` check (7) refuses those tables here: a member `[tool.ruff]` does not +# extend the root's configuration, it replaces it. The `toolchain` pytest marker this +# package declared moved to the root's `markers` list with the rest of the pytest +# configuration; `[tool.mypy]` went because the workspace type-checks with ty. diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/__init__.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/__init__.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/__init__.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/cli.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/cli.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/cli.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/config.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/config.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/config.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/css/common.css similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/css/common.css rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/css/common.css diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/__init__.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/__init__.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/__init__.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_case.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_case.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_case.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_common.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_common.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_common.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_env.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_env.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_env.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_file.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_file.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_file.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report_template.txt similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_report_template.txt rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report_template.txt diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_results.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_results.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_results.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_suite.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/directives/test_suite.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_suite.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/environment.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/environment.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/environment.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/exceptions.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/exceptions.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/exceptions.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/fields.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/fields.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/fields.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/functions/__init__.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/functions/__init__.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/functions/__init__.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/identity.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/identity.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/identity.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/jsonparser.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/jsonparser.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/jsonparser.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/junitparser.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/junitparser.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/junitparser.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/needs_export.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/needs_export.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/needs_export.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/projectconfig.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/projectconfig.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/projectconfig.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/pytest_plugin.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/pytest_plugin.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/pytest_plugin.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/pytest_plugin.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/remote.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/remote.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/remote.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/results.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/results.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/results.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/results.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/schemas/JUnit.xsd similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/schemas/JUnit.xsd rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/schemas/JUnit.xsd diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/test_reports.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/test_reports.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/test_reports.py diff --git a/packages/sphinx-test-reports/sphinxcontrib/test_reports/toolchain.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/toolchain.py similarity index 100% rename from packages/sphinx-test-reports/sphinxcontrib/test_reports/toolchain.py rename to packages/sphinx-test-reports/src/sphinxcontrib/test_reports/toolchain.py diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index 6d45cbbf0..17f5ac30b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py index 3dec85dda..04baf54c0 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py index 05de723c3..c7fa3f27c 100644 --- a/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py @@ -1,8 +1,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py index e087bb9da..77934e7cf 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py index a9751465f..648934460 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index 5f1fa9f62..d61f30cbe 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index 5f1fa9f62..d61f30cbe 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index 5f1fa9f62..d61f30cbe 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index a69b1cbb9..f41dd8610 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py index 49826de2d..9cbb502c4 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py index bb0d11d20..19634d6e2 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py index d803798e4..7b055d164 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py index c6881826d..bd063fb99 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py index b3a0edfe6..e3a040428 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py index 1d4a0038d..939878a7e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py @@ -4,8 +4,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] needs_types = [ diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py index a69b1cbb9..f41dd8610 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -18,8 +18,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py index e005b0d02..7c19d1c28 100644 --- a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py @@ -1,8 +1,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py index 8290ad306..93e1ef78e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py @@ -1,8 +1,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py b/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py index 227a99fde..ea74db398 100644 --- a/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py @@ -1,8 +1,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py index f3d3b2396..ce024ffa8 100644 --- a/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py @@ -1,8 +1,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py index 59a318cc9..83ef14801 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py @@ -21,8 +21,6 @@ import sphinx_needs from packaging.version import Version -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py index b547363ef..abd95af46 100644 --- a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py @@ -1,8 +1,6 @@ import os import sys -sys.path.insert(0, os.path.abspath("../../sphinxcontrib")) - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/pyproject.toml b/pyproject.toml index d2819cc42..371092097 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ dependencies = [ "sphinx-needs", "sphinx-mounts", "sphinx-codelinks", + "sphinx-test-reports", "sphinx-needs-workspace-tools", ] @@ -46,6 +47,10 @@ docs = ["sphinx-needs[docs]"] docs-mounts = ["sphinx-mounts[docs]"] # and so does sphinx-codelinks docs-codelinks = ["sphinx-codelinks[docs]"] +# and so does sphinx-test-reports. Of the three EXTENSION packages its docs build is the +# only one that needs a renderer: 13 `needflow` directives across three pages. (sphinx-needs' +# own docs render too, and far more.) +docs-reports = ["sphinx-test-reports[docs]"] # sphinx-codelinks' optional preprocessor-aware C/C++ engine. CI drives it from the # `codelinks-libclang` GROUP below rather than through this line -- a group composes with # `--no-default-groups --group test --group sphinx-N` without changing the shape of the @@ -61,6 +66,7 @@ theme-rtd = ["sphinx-needs[theme-rtd]"] sphinx-needs = { workspace = true } sphinx-mounts = { workspace = true } sphinx-codelinks = { workspace = true } +sphinx-test-reports = { workspace = true } sphinx-needs-workspace-tools = { workspace = true } sphinx-needs-testkit = { workspace = true } @@ -126,6 +132,10 @@ test = [ "sphinxcontrib-mermaid>=1.0.0", # sphinx-mounts: path-directive rendering # sphinx-codelinks: `tests/test_cmd.py` WRITES toml, and the stdlib's tomllib only reads "toml>=0.10.2", + # sphinx-test-reports: the three `custom_tr_*` test projects load `sphinx_design` as a + # Sphinx extension, so without it those three tests ERROR at setup in every cell. It was + # in that package's own `test` extra, which the root's shared `test` group replaces + "sphinx-design>=0.6.1", # sphinx-codelinks: `tests/data/sphinx` and `tests/data/needextend_demo` set # `html_theme = "furo"` and `test_src_trace.py` builds the first, so this is a test # dependency there rather than a docs one. It costs nothing in the lock -- it is already @@ -240,6 +250,11 @@ markers = [ "jstest: marks tests as JavaScript test (deselect with '-m \"not jstest\"')", "benchmark: marks tests as expensive benchmark test (deselect with '-m \"not benchmark\"')", "bazel: tests that require a Bazel installation on PATH (deselect with '-m \"not bazel\"')", + # sphinx-test-reports', relocated from that member's own `[tool.pytest.ini_options]`, + # which check (7) refuses here: 8 sites / 25 tests carry it, and without the entry every + # one of them raises `PytestUnknownMarkWarning`. The `toolchain-free` CI job is what + # deselects them, in an environment with no Sphinx at all + "toolchain: needs the documentation toolchain (Sphinx, sphinx-needs) installed (deselect with '-m \"not toolchain\"')", ] filterwarnings = [ "ignore:.*removed in Python 3.14.*:DeprecationWarning", @@ -260,6 +275,8 @@ src = [ "packages/sphinx-mounts/src", "packages/sphinx-codelinks", "packages/sphinx-codelinks/src", + "packages/sphinx-test-reports", + "packages/sphinx-test-reports/src", "packages/sphinx-needs-testkit", "packages/sphinx-needs-testkit/src", ] @@ -327,6 +344,7 @@ include = [ # named it: sphinx_mounts is the only module under it "packages/sphinx-mounts/src", "packages/sphinx-codelinks/src", + "packages/sphinx-test-reports/src", "tools/src", ".github/scripts", "scripts", @@ -612,6 +630,58 @@ executor = { type = "uv", frozen = true, no-group = "dev", group = [ ] } env = { UV_PROJECT_ENVIRONMENT = ".venvs/sphinx-9" } +# sphinx-test-reports. The short name is `reports`, not `test-reports`: the naming rule +# takes the distribution name minus its `sphinx-` prefix, which here would collide with the +# task verb and give `test-test-reports`. +# +# `pytest tests` NAMES its path, unlike the sphinx-needs tasks which pass `--ignore=` +# instead -- and here that is not a style choice. Eight modules of this package's own SOURCE +# are called `test_*.py` (`test_reports.py`, and `directives/test_case.py`, `test_common.py`, +# `test_env.py`, `test_file.py`, `test_report.py`, `test_results.py`, `test_suite.py`), so a +# bare `pytest` from the package directory collects `src/` and tries to import the extension +# as a test module. The cost is the documented one: poe APPENDS trailing words, so +# `poe test-reports tests/test_cli_convert.py` runs that file IN ADDITION to the suite +# rather than instead of it (`-k` and `-m` behave as expected). +# +# `deps = ["fetch-plantuml"]` is NOT here and that is deliberate: no test document in this +# suite carries a rendering directive, so nothing in it needs `java` or a jar (the dead +# 8.6 MB `tests/doc_test/utils/plantuml.jar` left with the import). `docs-reports` below +# does render, and declares it. +[tool.poe.tasks.test-reports] +help = "Run the sphinx-test-reports suite against the default (newest) sphinx; trailing args go to pytest" +cmd = "pytest tests" +cwd = "packages/sphinx-test-reports" + +[tool.poe.tasks.test-reports-sphinx7] +help = "Run the sphinx-test-reports suite against sphinx 7.4 (set UV_PYTHON to pick the interpreter)" +cmd = "pytest tests" +cwd = "packages/sphinx-test-reports" +executor = { type = "uv", frozen = true, no-group = "dev", group = [ + "test", + "sphinx-7", +] } +env = { UV_PROJECT_ENVIRONMENT = ".venvs/sphinx-7" } + +[tool.poe.tasks.test-reports-sphinx8] +help = "Run the sphinx-test-reports suite against sphinx 8.2 (set UV_PYTHON to pick the interpreter)" +cmd = "pytest tests" +cwd = "packages/sphinx-test-reports" +executor = { type = "uv", frozen = true, no-group = "dev", group = [ + "test", + "sphinx-8", +] } +env = { UV_PROJECT_ENVIRONMENT = ".venvs/sphinx-8" } + +[tool.poe.tasks.test-reports-sphinx9] +help = "Run the sphinx-test-reports suite against sphinx 9.1 (python >= 3.12; set UV_PYTHON to pick the interpreter)" +cmd = "pytest tests" +cwd = "packages/sphinx-test-reports" +executor = { type = "uv", frozen = true, no-group = "dev", group = [ + "test", + "sphinx-9", +] } +env = { UV_PROJECT_ENVIRONMENT = ".venvs/sphinx-9" } + # BARE, not `typecheck-needs`: the naming rule suffixes a task that acts on ONE package, # and this one checks the whole repository -- both packages plus the tooling -- out of a # single `[tool.ty]` configuration and a single environment. Splitting it per package would @@ -623,7 +693,7 @@ help = "Type-check every package with ty against the oldest supported sphinx (th # but it is NOT a fence on `src.include` above: ty intersects the two, so a stale `include` # makes this check zero files and exit 0. The canary step in ci.yaml's Lint job is what # guards that. -cmd = "ty check packages/sphinx-needs/src/sphinx_needs packages/sphinx-mounts/src/sphinx_mounts packages/sphinx-codelinks/src/sphinx_codelinks tools/src .github/scripts scripts --python .venvs/typing" +cmd = "ty check packages/sphinx-needs/src/sphinx_needs packages/sphinx-mounts/src/sphinx_mounts packages/sphinx-codelinks/src/sphinx_codelinks packages/sphinx-test-reports/src tools/src .github/scripts scripts --python .venvs/typing" executor = { type = "uv", frozen = true, no-group = "dev", group = ["typing"] } env = { UV_PROJECT_ENVIRONMENT = ".venvs/typing" } @@ -741,6 +811,19 @@ help = "Import every sphinx-codelinks module from its built wheel, with dependen # `compat-requirements.txt` cmd = "python tools/src/sn_tools/import_check.py sphinx-codelinks --extra libclang" +[tool.poe.tasks.build-reports] +help = "Build the sphinx-test-reports sdist + wheel into dist/sphinx-test-reports" +cmd = "uv build --package sphinx-test-reports --no-sources -o dist/sphinx-test-reports" + +[tool.poe.tasks.import-check-reports] +help = "Import every sphinx-test-reports module from its built wheel, with dependencies as PUBLISHED" +# `--extra sphinx`, because this is the first member in the workspace whose RUNTIME +# dependencies are optional: the bare wheel's `Requires-Dist` is `lxml` alone, and +# `sphinxcontrib.test_reports.test_reports` imports sphinx-needs. Without the extra the +# walk fails 6 of its 25 modules. The release workflow's compat cell gets the same two +# names from this member's `compat-requirements.txt` +cmd = "python tools/src/sn_tools/import_check.py sphinx-test-reports --extra sphinx" + # There is no `smoke-mounts`. `scripts/smoke_needs.py`'s reason for existing is that 88% of # the sphinx-needs wheel by file count is non-Python payload that no test run touches; # sphinx-mounts' wheel has none at all, so `import-check-mounts` plus the release @@ -796,6 +879,29 @@ sequence = [ { ref = "docs-codelinks" }, ] +[tool.poe.tasks.docs-reports] +help = "Build the sphinx-test-reports HTML docs" +# These docs RENDER: 13 `needflow` directives across `filter.rst`, `functions.rst` and +# `examples/index.rst`, so `java` and graphviz's `dot` both have to be on PATH and the jar +# has to be there. That is unlike both SIBLING extensions, whose docs draw nothing -- but +# not unlike sphinx-needs' own docs, which carry 48 needflow directives and declare this +# same dep. `docs/conf.py` resolves it +# through its own copy of the three-route chain (PLANTUML_JAR, then vendor/plantuml/, then +# a `plantuml` executable), the way `packages/sphinx-needs/docs/conf.py` does and for the +# same reason: a docs build must not import a test-only member +deps = ["fetch-plantuml"] +cmd = "sphinx-build -nW --keep-going -b html docs docs/_build/html -T" +cwd = "packages/sphinx-test-reports" +executor = { type = "uv", frozen = true, no-group = "dev", extra = "docs-reports" } +env = { UV_PROJECT_ENVIRONMENT = ".venvs/docs-reports" } + +[tool.poe.tasks.docs-reports-clean] +help = "Delete the built sphinx-test-reports HTML docs, then build them again from scratch" +sequence = [ + { script = "shutil:rmtree('packages/sphinx-test-reports/docs/_build/html', ignore_errors=True)" }, + { ref = "docs-reports" }, +] + [tool.poe.tasks.docs-needs-clean] help = "Delete the built HTML docs, then build them again from scratch" sequence = [ diff --git a/uv.lock b/uv.lock index 21f776f5a..5ecbe7cc4 100644 --- a/uv.lock +++ b/uv.lock @@ -21,6 +21,7 @@ members = [ "sphinx-needs-testkit", "sphinx-needs-workspace", "sphinx-needs-workspace-tools", + "sphinx-test-reports", ] [[package]] @@ -2928,6 +2929,7 @@ dependencies = [ { name = "sphinx-mounts" }, { name = "sphinx-needs" }, { name = "sphinx-needs-workspace-tools" }, + { name = "sphinx-test-reports" }, ] [package.optional-dependencies] @@ -2943,6 +2945,9 @@ docs-codelinks = [ docs-mounts = [ { name = "sphinx-mounts", extra = ["docs"] }, ] +docs-reports = [ + { name = "sphinx-test-reports", extra = ["docs"] }, +] plotting = [ { name = "sphinx-needs", extra = ["plotting"] }, ] @@ -2976,6 +2981,7 @@ benchmark = [ { name = "pytest-xdist" }, { name = "pyyaml" }, { name = "responses" }, + { name = "sphinx-design" }, { name = "sphinx-needs-testkit" }, { name = "sphinxcontrib-mermaid" }, { name = "sphinxcontrib-plantuml" }, @@ -3002,6 +3008,7 @@ dev = [ { name = "pytest-xdist" }, { name = "pyyaml" }, { name = "responses" }, + { name = "sphinx-design" }, { name = "sphinx-needs-testkit" }, { name = "sphinxcontrib-mermaid" }, { name = "sphinxcontrib-plantuml" }, @@ -3035,6 +3042,7 @@ test = [ { name = "pytest-xdist" }, { name = "pyyaml" }, { name = "responses" }, + { name = "sphinx-design" }, { name = "sphinx-needs-testkit" }, { name = "sphinxcontrib-mermaid" }, { name = "sphinxcontrib-plantuml" }, @@ -3066,8 +3074,10 @@ requires-dist = [ { name = "sphinx-needs", extras = ["theme-pds"], marker = "extra == 'theme-pds'", editable = "packages/sphinx-needs" }, { name = "sphinx-needs", extras = ["theme-rtd"], marker = "extra == 'theme-rtd'", editable = "packages/sphinx-needs" }, { name = "sphinx-needs-workspace-tools", virtual = "tools" }, + { name = "sphinx-test-reports", editable = "packages/sphinx-test-reports" }, + { name = "sphinx-test-reports", extras = ["docs"], marker = "extra == 'docs-reports'", editable = "packages/sphinx-test-reports" }, ] -provides-extras = ["plotting", "docs", "docs-mounts", "docs-codelinks", "codelinks-libclang", "theme-im", "theme-furo", "theme-pds", "theme-rtd"] +provides-extras = ["plotting", "docs", "docs-mounts", "docs-codelinks", "docs-reports", "codelinks-libclang", "theme-im", "theme-furo", "theme-pds", "theme-rtd"] [package.metadata.requires-dev] benchmark = [ @@ -3085,6 +3095,7 @@ benchmark = [ { name = "pytest-xdist", specifier = "~=3.0" }, { name = "pyyaml", specifier = "~=6.0" }, { name = "responses", specifier = ">=0.22,<0.27" }, + { name = "sphinx-design", specifier = ">=0.6.1" }, { name = "sphinx-needs-testkit", editable = "packages/sphinx-needs-testkit" }, { name = "sphinxcontrib-mermaid", specifier = ">=1.0.0" }, { name = "sphinxcontrib-plantuml", specifier = ">=0.30,<1" }, @@ -3108,6 +3119,7 @@ dev = [ { name = "pytest-xdist", specifier = "~=3.0" }, { name = "pyyaml", specifier = "~=6.0" }, { name = "responses", specifier = ">=0.22,<0.27" }, + { name = "sphinx-design", specifier = ">=0.6.1" }, { name = "sphinx-needs-testkit", editable = "packages/sphinx-needs-testkit" }, { name = "sphinxcontrib-mermaid", specifier = ">=1.0.0" }, { name = "sphinxcontrib-plantuml", specifier = ">=0.30,<1" }, @@ -3132,6 +3144,7 @@ test = [ { name = "pytest-xdist", specifier = "~=3.0" }, { name = "pyyaml", specifier = "~=6.0" }, { name = "responses", specifier = ">=0.22,<0.27" }, + { name = "sphinx-design", specifier = ">=0.6.1" }, { name = "sphinx-needs-testkit", editable = "packages/sphinx-needs-testkit" }, { name = "sphinxcontrib-mermaid", specifier = ">=1.0.0" }, { name = "sphinxcontrib-plantuml", specifier = ">=0.30,<1" }, @@ -3194,6 +3207,52 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/86/ff/a6c6ab520fefd9f786b1c86480524929ed5a02077e4d2dc4a437a15a76ee/sphinx_syntax_example-0.2.0-py3-none-any.whl", hash = "sha256:e2ff213562e5c2148f2bd76a904dd90153329e83ef3883b2949bcdaaff9af4b4", size = 16036, upload-time = "2026-07-27T19:32:30.792Z" }, ] +[[package]] +name = "sphinx-test-reports" +version = "2.0.0" +source = { editable = "packages/sphinx-test-reports" } +dependencies = [ + { name = "lxml" }, +] + +[package.optional-dependencies] +docs = [ + { name = "packaging" }, + { name = "pillow" }, + { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-22-sphinx-needs-workspace-sphinx-7' or extra == 'group-22-sphinx-needs-workspace-typing' or (extra == 'group-22-sphinx-needs-workspace-sphinx-8' and extra == 'group-22-sphinx-needs-workspace-sphinx-9')" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.12' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (python_full_version < '3.12' and extra != 'group-22-sphinx-needs-workspace-sphinx-7' and extra != 'group-22-sphinx-needs-workspace-typing') or extra == 'group-22-sphinx-needs-workspace-sphinx-8' or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-9' and extra == 'group-22-sphinx-needs-workspace-typing')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (python_full_version >= '3.12' and extra != 'group-22-sphinx-needs-workspace-sphinx-7' and extra != 'group-22-sphinx-needs-workspace-sphinx-8' and extra != 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-9' and extra == 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-sphinx-8') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-8' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (extra == 'group-22-sphinx-needs-workspace-sphinx-8' and extra == 'group-22-sphinx-needs-workspace-typing')" }, + { name = "sphinx-design" }, + { name = "sphinx-immaterial" }, + { name = "sphinx-needs" }, + { name = "sphinxcontrib-plantuml" }, +] +pytest = [ + { name = "pytest" }, +] +sphinx = [ + { name = "sphinx", version = "7.4.7", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-22-sphinx-needs-workspace-sphinx-7' or extra == 'group-22-sphinx-needs-workspace-typing' or (extra == 'group-22-sphinx-needs-workspace-sphinx-8' and extra == 'group-22-sphinx-needs-workspace-sphinx-9')" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.12' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (python_full_version < '3.12' and extra != 'group-22-sphinx-needs-workspace-sphinx-7' and extra != 'group-22-sphinx-needs-workspace-typing') or extra == 'group-22-sphinx-needs-workspace-sphinx-8' or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-9' and extra == 'group-22-sphinx-needs-workspace-typing')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (python_full_version >= '3.12' and extra != 'group-22-sphinx-needs-workspace-sphinx-7' and extra != 'group-22-sphinx-needs-workspace-sphinx-8' and extra != 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-9' and extra == 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-sphinx-8') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (extra == 'group-22-sphinx-needs-workspace-sphinx-7' and extra == 'group-22-sphinx-needs-workspace-typing') or (extra == 'group-22-sphinx-needs-workspace-sphinx-8' and extra == 'group-22-sphinx-needs-workspace-sphinx-9') or (extra == 'group-22-sphinx-needs-workspace-sphinx-8' and extra == 'group-22-sphinx-needs-workspace-typing')" }, + { name = "sphinx-needs" }, +] + +[package.metadata] +requires-dist = [ + { name = "lxml" }, + { name = "packaging", marker = "extra == 'docs'" }, + { name = "pillow", marker = "extra == 'docs'" }, + { name = "pytest", marker = "extra == 'pytest'", specifier = ">=7.0" }, + { name = "sphinx", marker = "extra == 'docs'" }, + { name = "sphinx", marker = "extra == 'sphinx'", specifier = ">=7.4" }, + { name = "sphinx-design", marker = "extra == 'docs'" }, + { name = "sphinx-immaterial", marker = "extra == 'docs'" }, + { name = "sphinx-needs", marker = "extra == 'docs'", editable = "packages/sphinx-needs" }, + { name = "sphinx-needs", marker = "extra == 'sphinx'", editable = "packages/sphinx-needs" }, + { name = "sphinxcontrib-plantuml", marker = "extra == 'docs'" }, +] +provides-extras = ["sphinx", "pytest", "docs"] + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" From d48721b238174122a07eb6654aff0324500257dd Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 17:34:09 +0200 Subject: [PATCH 149/159] =?UTF-8?q?=F0=9F=94=A7=20Retire=20sphinx-test-rep?= =?UTF-8?q?orts'=20standalone=20tooling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every file that existed because the package was its own repository. **Retired**, each replaced by something this repository already has: * `.github/workflows/{ci,coverage,release}.yaml` -- the four Extensions cells, the Extensions cell's codecov upload, and this repository's one `release.yaml`. The 20-cell sphinx-needs axis that `ci.yaml` ran is the one real loss, and the changelog entry names it rather than letting the CI diff say it. * `noxfile.py` -- 36 sessions. Its `toolchain_free` lane does NOT retire with it: it is the fence that keeps the converter and the pytest plugin importable with no documentation toolchain installed, and it comes back as a scratch-venv CI job, because no `uv sync` at this root can express it (every workspace environment installs every member, and sphinx-needs declares sphinx at runtime). `plugin_floor` is deferred. * `Makefile` and `docs/{Makefile,make.bat}` -- the poe tasks. * `.pre-commit-config.yaml` -- the root's is the one config, and its `ruff` hook id is even spelled differently here (`ruff-check`). * `.yamlfmt` -- identical intent to the root's. **Two things retire with NO replacement, and they are named here because nothing else in the diff says so:** * **`linkcheck`.** The retired `ci.yaml` ran one. The workspace's `docs.yaml` is scoped `paths: [packages/sphinx-needs/docs/**]` and runs in that directory, so **this package's documentation is link-checked nowhere** -- in a pull request that repointed three stale links. Widening that job is a follow-up, not this import. * **Three prek hooks**: `end-of-file-fixer`, `trailing-whitespace` and `pretty-format-json`. The root's hook set is taplo-format, ruff-check, ruff-format, yamlfmt, check-workspace, ty, uv-lock and check-readme -- there is no `pre-commit-hooks` repository in it at all. * `.gitignore` -- the root's covers all of it. Nothing was merged upward: its only entries the root lacks are tox and editor leftovers (`.tox/`, `{envlogdir}`, `.directory`, `.VSCodeCounter`), and one that would be actively wrong here, `uv.lock`. * `CONTRIBUTING.md` -- this repository's contributing guide is `packages/sphinx-needs/docs/contributing.rst`, which the root README links. Every command in the retired file (`nox`, `make`, `uv sync --all-groups --all-extras`) is wrong in a workspace; the last of those three is documented in `AGENTS.md` as a thing that ALWAYS fails. **Kept**, deliberately: `AUTHORS` (three named contributors -- nothing else in this workspace records them, and a credits file deleted in an import is the kind of thing nobody notices until someone does), `LICENSE` and `README.rst`, which every member has. --- .../.github/workflows/ci.yaml | 135 ------------------ .../.github/workflows/coverage.yaml | 25 ---- .../.github/workflows/release.yaml | 50 ------- packages/sphinx-test-reports/.gitignore | 26 ---- .../.pre-commit-config.yaml | 27 ---- packages/sphinx-test-reports/.yamlfmt | 4 - packages/sphinx-test-reports/CONTRIBUTING.md | 46 ------ packages/sphinx-test-reports/Makefile | 27 ---- packages/sphinx-test-reports/docs/Makefile | 20 --- packages/sphinx-test-reports/docs/make.bat | 36 ----- packages/sphinx-test-reports/noxfile.py | 88 ------------ 11 files changed, 484 deletions(-) delete mode 100644 packages/sphinx-test-reports/.github/workflows/ci.yaml delete mode 100644 packages/sphinx-test-reports/.github/workflows/coverage.yaml delete mode 100644 packages/sphinx-test-reports/.github/workflows/release.yaml delete mode 100644 packages/sphinx-test-reports/.gitignore delete mode 100644 packages/sphinx-test-reports/.pre-commit-config.yaml delete mode 100644 packages/sphinx-test-reports/.yamlfmt delete mode 100644 packages/sphinx-test-reports/CONTRIBUTING.md delete mode 100644 packages/sphinx-test-reports/Makefile delete mode 100644 packages/sphinx-test-reports/docs/Makefile delete mode 100644 packages/sphinx-test-reports/docs/make.bat delete mode 100644 packages/sphinx-test-reports/noxfile.py diff --git a/packages/sphinx-test-reports/.github/workflows/ci.yaml b/packages/sphinx-test-reports/.github/workflows/ci.yaml deleted file mode 100644 index d7f02c16f..000000000 --- a/packages/sphinx-test-reports/.github/workflows/ci.yaml +++ /dev/null @@ -1,135 +0,0 @@ -name: CI -on: [pull_request] -jobs: - tests: - name: "Test (python: ${{ matrix.python-version }}, sphinx: ${{ matrix.sphinx-version }}, sphinx-needs: ${{ matrix.sphinx_needs-version }})" - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - python-version: ["3.11", "3.12"] - sphinx-version: ["7.4.7", "8.1.3"] - sphinx_needs-version: ["6.0.1", "6.3.0", "7.0.0", "8.0.0", "8.5.0"] - steps: - - uses: actions/checkout@v2 - - name: Set Up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install Nox Dependencies - run: | - python -m pip install poetry nox nox-poetry - - name: Run Tests - run: nox --non-interactive --session "tests-${{ matrix.python-version }}(sphinx='${{ matrix.sphinx-version }}', sphinx_needs='${{ matrix.sphinx_needs-version }}')" -- --full-trace - - plugin-floor: - name: "Plugin (python: ${{ matrix.python-version }}, pytest: ${{ matrix.pytest-version }})" - runs-on: ubuntu-latest - strategy: - matrix: - include: - - python-version: "3.11" - pytest-version: "7.0.1" - - python-version: "3.12" - pytest-version: "7.3.2" - steps: - - uses: actions/checkout@v2 - - name: Set Up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install Nox Dependencies - run: | - python -m pip install poetry nox nox-poetry - - name: Run the plugin's tests on the oldest supported pytest - run: nox --non-interactive --session "plugin_floor(python='${{ matrix.python-version }}', pytest_version='${{ matrix.pytest-version }}')" -- --full-trace - - toolchain-free: - # The converter and the pytest plugin run without Sphinx; this installs the - # package with the `pytest` extra alone and runs their tests where Sphinx is - # absent, the only thing that guarantees it. - name: "Test without Sphinx (python: ${{ matrix.python-version }})" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.11", "3.12"] - steps: - - uses: actions/checkout@v2 - - name: Set Up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install Nox - run: | - python -m pip install nox - - name: Run Tests - run: nox --non-interactive --session "toolchain_free-${{ matrix.python-version }}" -- --full-trace - - pre-commit: - name: pre-commit - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set Up Python - uses: actions/setup-python@v2 - with: - python-version: "3.12" - - name: Install Nox Dependencies - run: | - python -m pip install poetry nox nox-poetry - - uses: pre-commit/action@v3.0.0 - - mypy: - name: mypy - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: uv sync - # The toolchain is an extra: without it, mypy cannot follow the - # extension's Sphinx and docutils imports. - run: | - uv sync --group dev --extra sphinx - - - name: Run mypy - run: | - uv run mypy - - linkcheck: - name: Docs-Linkcheck - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set Up Python - uses: actions/setup-python@v2 - with: - python-version: "3.12" - - name: Install Nox Dependencies - run: | - python -m pip install poetry nox nox-poetry - - name: Run LinkCheck - run: nox --non-interactive --session linkcheck -- --full-trace - - all_good: - # This job does nothing and is only used for the branch protection - # see https://github.com/marketplace/actions/alls-green#why - - if: ${{ !cancelled() }} - - needs: - - tests - - plugin-floor - - toolchain-free - - pre-commit - - mypy - - linkcheck - - runs-on: ubuntu-latest - steps: - - name: Decide whether the needed jobs succeeded or failed - uses: re-actors/alls-green@release/v1 - with: - jobs: ${{ toJSON(needs) }} diff --git a/packages/sphinx-test-reports/.github/workflows/coverage.yaml b/packages/sphinx-test-reports/.github/workflows/coverage.yaml deleted file mode 100644 index eb6a11162..000000000 --- a/packages/sphinx-test-reports/.github/workflows/coverage.yaml +++ /dev/null @@ -1,25 +0,0 @@ -name: Run tests and upload coverage - -on: push - -jobs: - test: - name: Run tests and collect coverage - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install uv - uses: astral-sh/setup-uv@v5 - - - name: uv sync - run: | - uv sync --all-groups --all-extras - - - name: Run tests - run: uv run make coverage - - - name: Upload results to Codecov - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} diff --git a/packages/sphinx-test-reports/.github/workflows/release.yaml b/packages/sphinx-test-reports/.github/workflows/release.yaml deleted file mode 100644 index 0ad678bfc..000000000 --- a/packages/sphinx-test-reports/.github/workflows/release.yaml +++ /dev/null @@ -1,50 +0,0 @@ -name: Release -on: - push: - tags: - - '[0-9].[0-9]+.[0-9]+' - -permissions: - id-token: write # IMPORTANT: this permission is mandatory for trusted publishing - contents: read - -jobs: - build: - name: Build distribution 📦 - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - name: Install pypa/build - run: >- - python3 -m pip install build --user - - name: Build a binary wheel and a source tarball - run: python3 -m build - - name: Store the distribution packages - uses: actions/upload-artifact@v4 - with: - name: python-package-distributions - path: dist/ - - publish-to-pypi: - name: >- - Publish Python 🐍 distribution 📦 to PyPI - needs: - - build - runs-on: ubuntu-latest - permissions: - id-token: write # IMPORTANT: mandatory for trusted publishing - steps: - - name: Download all the dists - uses: actions/download-artifact@v4 - with: - name: python-package-distributions - path: dist/ - - name: Publish distribution 📦 to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/packages/sphinx-test-reports/.gitignore b/packages/sphinx-test-reports/.gitignore deleted file mode 100644 index 574ff48a7..000000000 --- a/packages/sphinx-test-reports/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -.idea -*.pyc -*.egg-info -*egg-info/ -dist -build -_build -.cache/ -*pycache* -.tox/ -.cache/ -.pytest_cache -.coverage -.directory - -{envlogdir} - -.envrc -.venv -.vscode -.VSCodeCounter - -uv.lock - -.coverage -coverage.xml diff --git a/packages/sphinx-test-reports/.pre-commit-config.yaml b/packages/sphinx-test-reports/.pre-commit-config.yaml deleted file mode 100644 index 37c987ce1..000000000 --- a/packages/sphinx-test-reports/.pre-commit-config.yaml +++ /dev/null @@ -1,27 +0,0 @@ -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 - hooks: - - id: end-of-file-fixer - # minified file - exclude: docs/ub_theme/js/jquery.js - - id: trailing-whitespace - - id: pretty-format-json - args: [--autofix, --no-sort-keys] - - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.11.2 - hooks: - - id: ruff - args: [--fix] - - id: ruff-format - - - repo: https://github.com/ComPWA/taplo-pre-commit - rev: v0.9.3 - hooks: - - id: taplo-format - - - repo: https://github.com/google/yamlfmt - rev: v0.16.0 - hooks: - - id: yamlfmt diff --git a/packages/sphinx-test-reports/.yamlfmt b/packages/sphinx-test-reports/.yamlfmt deleted file mode 100644 index ad197f6e2..000000000 --- a/packages/sphinx-test-reports/.yamlfmt +++ /dev/null @@ -1,4 +0,0 @@ -formatter: - type: basic - retain_line_breaks_single: true - disallow_anchors: true diff --git a/packages/sphinx-test-reports/CONTRIBUTING.md b/packages/sphinx-test-reports/CONTRIBUTING.md deleted file mode 100644 index 849038877..000000000 --- a/packages/sphinx-test-reports/CONTRIBUTING.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributing - -## Formatting and linting - -The easiest way to run the formatting and linting is to use the [pre-commit] tool. -Install it, then run: - -```bash -pre-commit run --all -``` - -This will run formatting and linting on all files in the repository (principally using [ruff]). - -To install as a pre-commit hook: - -```bash -pre-commit install -``` - -## Managing the Python code - -The pyproject.toml follows the [PEP621] standard. -To install all dependencies for local development you may use [uv]: - -```bash -uv sync --all-groups --all-extras -``` - -A Makefile exits to execute common tasks: -```bash -make docs-html -make docs-linkcheck -make format -make lint -make test -make test-matrix -``` - -The test matrix is executed using [nox] and runs all tests in all supported Python versions. -The Python versions must be pre-installed on your system. - -[pre-commit]: https://pre-commit.com/ -[ruff]: https://docs.astral.sh/ruff/ -[uv]: https://docs.astral.sh/uv/ -[nox]: https://nox.thea.codes -[PEP621]: https://peps.python.org/pep-0621/ diff --git a/packages/sphinx-test-reports/Makefile b/packages/sphinx-test-reports/Makefile deleted file mode 100644 index f1ba90cd3..000000000 --- a/packages/sphinx-test-reports/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -.PHONY: list -list: - @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | grep -E -v -e '^[^[:alnum:]]' -e '^$@$$' - -.PHONY: lint format -lint format: - pre-commit run --all-files - -.PHONY: test -test: - pytest -n auto --tb=long tests/ - -.PHONY: test-matrix -test-matrix: - nox - -.PHONY: coverage -coverage: - pytest --cov --cov-branch --cov-report=xml - -.PHONY: docs-html -docs-html: - make --directory docs/ clean && make --directory docs/ html - -.PHONY: docs-linkcheck -docs-linkcheck: - make --directory docs/ linkcheck diff --git a/packages/sphinx-test-reports/docs/Makefile b/packages/sphinx-test-reports/docs/Makefile deleted file mode 100644 index a5208bba2..000000000 --- a/packages/sphinx-test-reports/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = sphinx-test-reports -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/sphinx-test-reports/docs/make.bat b/packages/sphinx-test-reports/docs/make.bat deleted file mode 100644 index aed9853cc..000000000 --- a/packages/sphinx-test-reports/docs/make.bat +++ /dev/null @@ -1,36 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=build -set SPHINXPROJ=sphinx-test-reports - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/packages/sphinx-test-reports/noxfile.py b/packages/sphinx-test-reports/noxfile.py deleted file mode 100644 index ddae11a3c..000000000 --- a/packages/sphinx-test-reports/noxfile.py +++ /dev/null @@ -1,88 +0,0 @@ -import nox -from nox import session - -PYTHON_VERSIONS = ["3.11", "3.12"] -SPHINX_VERSIONS = ["7.4.7", "8.1.3"] -SPHINX_NEEDS_VERSIONS = ["6.0.1", "6.3.0", "7.0.0", "8.0.0", "8.5.0"] - - -def run_tests(session, sphinx, sphinx_needs): - session.install(".[test]") - session.run("pip", "install", f"sphinx=={sphinx}", silent=True) - session.run("pip", "install", f"sphinx_needs=={sphinx_needs}", silent=True) - session.run("make", "test", external=True) - - -@session(python=PYTHON_VERSIONS) -@nox.parametrize("sphinx_needs", SPHINX_NEEDS_VERSIONS) -@nox.parametrize("sphinx", SPHINX_VERSIONS) -def tests(session, sphinx_needs, sphinx): - run_tests(session, sphinx, sphinx_needs) - - -# The converter, its configuration and the pytest plugin run without the -# documentation toolchain, and these are their tests. Everything else builds -# documentation. -TOOLCHAIN_FREE_TESTS = [ - "tests/test_cli_config.py", - "tests/test_cli_convert.py", - "tests/test_identity.py", - "tests/test_junit_parser.py", - "tests/test_junit_parser_gtest.py", - "tests/test_needs_export.py", - "tests/test_project_config.py", - "tests/test_pytest_plugin.py", - "tests/test_result_vocabulary.py", - "tests/test_toolchain.py", -] - -# Exits non-zero, naming them, if any module of the toolchain is importable. -TOOLCHAIN_IS_ABSENT = ( - "import importlib.util, sys;" - "present = [m for m in ('sphinx', 'sphinx_needs', 'docutils')" - " if importlib.util.find_spec(m)];" - "sys.exit(f'toolchain installed: {present}' if present else 0)" -) - - -@session(python=PYTHON_VERSIONS) -def toolchain_free(session): - """Run the converter's and the pytest plugin's tests without Sphinx. - - The package is installed with the dependencies it declares -- `lxml`, and - pytest through the `pytest` extra -- so a toolchain import creeping into - either import chain, or Sphinx creeping back into a dependency list, fails - here. The tests that need a documentation build carry the `toolchain` mark. - """ - session.install(".[pytest]") - session.run("python", "-c", TOOLCHAIN_IS_ABSENT) - session.run( - "pytest", "-m", "not toolchain", *TOOLCHAIN_FREE_TESTS, *session.posargs - ) - - -#: The oldest pytest the plugin's tests run on, per Python: 7.0 is the plugin's -#: own floor (the pytest extra), and 7.3.2 the first pytest that runs on -#: Python 3.12 at all. -PLUGIN_PYTEST_FLOORS = [("3.11", "7.0.1"), ("3.12", "7.3.2")] - - -@session -@nox.parametrize("python,pytest_version", PLUGIN_PYTEST_FLOORS) -def plugin_floor(session, pytest_version): - """The plugin's tests on the oldest pytest it supports, without Sphinx. - - Installed as a test runner installs it: the `pytest` extra, nothing of the - documentation toolchain. pytest-xdist is there for the tests that run the - plugin under it. - """ - session.install(".[pytest]", "pytest-xdist", f"pytest=={pytest_version}") - session.run("python", "-c", TOOLCHAIN_IS_ABSENT) - session.run("pytest", "tests/test_pytest_plugin.py", *session.posargs) - - -@session(python="3.12") -def linkcheck(session): - session.install(".[docs]") - with session.chdir("docs"): - session.run("make", "linkcheck", external=True) From 09ef57b60a2f7b6b5fd2ed3857a0eda2139ad299 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:36 +0200 Subject: [PATCH 150/159] =?UTF-8?q?=F0=9F=8E=A8=20Adopt=20the=20workspace'?= =?UTF-8?q?s=20ruff=20set=20and=20port=20sphinx-test-reports=20to=20ty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two halves of one commit, and they cannot be separated: the `ty` prek hook fires on any commit touching `packages/*/src/`, so a lint-only commit would be gated by a type check that had not been done yet. **ruff** -- the member's own `[tool.ruff.lint]` left with the manifest (check (7) refuses it, because a member table REPLACES the root's configuration rather than extending it), so the root's set applies here for the first time. 56 findings: 33 fixed by `--fix` (import sorting, which appears only now that the root's isort roots name this package, plus `UP006`/`UP035`/`UP037`), and 23 by hand: * **`UP031` x3, deleted rather than rewritten** -- all three were `plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar")` in the `custom_tr_*` test projects, naming the jar the import removed. They were dead BEFORE the move: `cwd` is `os.getcwd()`, which under pytest is the rootdir, where no `utils/` has ever existed. * **`RUF043` x9** -- `pytest.raises(match=...)` patterns containing metacharacters, now raw strings; every pattern was already being read as a regex and none changed. * `SIM118` x5, `RUF015` x2, `UP007`, `RUF059`, `RUF028` (a `# fmt: skip` inside an `if (...)` expression, which suppressed nothing), and `RUF001` on the deliberate Cyrillic in the koi8-r fixture -- whose reason had to move OUT of the comment, or `RUF003` flags the comment for containing the same character. **No root per-file-ignore was needed**, unlike sphinx-codelinks. What the workspace set does not carry that this package's did -- `FURB`, `PERF`, `PGH`, `PIE`, `SLF` -- is at zero violations today, which is exactly why that loss is recorded in the changelog and the package's `AGENTS.md` rather than left to a reader of the manifest diff. **ty** -- 62 diagnostics over 9 files, now zero, and almost none of it by suppression: * **~45 of them had ONE cause.** `TestCommonDirective.__init__` set eleven attributes to a bare `None`, so every `self.results[0]`, `for x in self.results`, `self.extra_options[k]` and `add_need(title=self.test_name, ...)` in the three directive subclasses was being checked against `None`. They are now declared with the type each actually holds. `test_file` and `test_id` start empty rather than `None`, and the two guards that enforced their presence became falsiness checks. For `test_id` that is identical behaviour; for `test_file` it is a fix, described below, and `test_file_given = self.test_file[:]` stops being a crash for a directive written with no `:file:`. * **27 more were the three `add_need(**...)` splats**, whose keys come from configuration (the report-path field is renameable). Each site now builds one `dict[str, Any]` first, which is what a mapping splatted into individually-typed keyword parameters has to be. * **The sphinx-needs < 4 branch is gone.** The import narrowed this member to `sphinx-needs>=8.5.0,<9`, so the `make_hashed_id` fallback could no longer run -- and no longer resolves either, the name having left `sphinx_needs.api` entirely (measured on 8.5.0). `_make_hashed_id` is the only spelling left. * **TWO latent crashes fixed.** In `test_env.py` the `:raw:` + `:env:` branch iterated `self.data_option_list` outside the `is not None` guard its sibling branch keeps it inside, so a `test-env` written without `:data:` raised `TypeError`. And giving `test_file` an empty default turns a second one into a readable error: the guard that was meant to catch a directive written without `:file:` was DEAD CODE, because `prepare_basic_options` runs before `load_test_file` in all four directives and `test_file_given = self.test_file[:]` raised `TypeError` on `None` two lines before the guard could be reached. The slice is now a no-op and the guard is live, so that mistake raises `TestReportFileNotSetError`. The source comment says which of the two guards is identical behaviour (`test_id`) and which is a fix (`test_file`). * **Both come with a regression test**, in a new `tests/test_directive_regressions.py` with three new fixture projects. Neither crash had a fixture that could reach it: no `test-env` fixture combined `:raw:` and `:env:` without `:data:` (they carried `:data:` with `:env:`, the same with `:raw:`, or no options at all), and every `test-file` fixture carried a `:file:` -- which is precisely why nothing caught either. Each of the two tests was mutation-proved against the code it covers: red on the published form, green on the fix. The same module covers the missing-file error path, which no fixture reached, and fences the `nodes.Text()` change below -- mutation-proved the same way -- with a warning filter scoped to docutils' exact deprecation AND to this package's module -- without the filter an assertion on the rendered node passes on the old call too, which was measured -- plus a positive control on the same pattern constant, so a docutils rewording fails loudly instead of disarming the fence. * `nodes.Text(text, text)` -> `nodes.Text(text)`. A deprecation cleanup, not a bug fix: docutils ignores the second (`rawsource`) argument, warns that it is deprecated, and removes it only in Docutils 2.0, so the old call works on every supported version. ty reported it because the typing floor's docutils stubs already omit the parameter. * **Four `# type: ignore` comments deleted** -- ty reports nothing at any of them and their codes were mypy's. **FIVE narrow `# ty: ignore` remain**, each with its reason: two on `schema={"type": ...}`, where sphinx-needs types the parameter as a union of TypedDicts (a real API-shape mismatch, worth its own issue); one on the `option_spec` assignment docutils types as optional; one on `app.tr_types`, an attribute attached to the application object; and one on the `lxml` import, which ships no stubs and which `allowed-unresolved-imports` cannot cover because the diagnostic is a "has no member" rather than an unresolved module. * The root gains `pytest`, `pluggy` and `_pytest.**` in `[tool.ty.analysis] allowed-unresolved-imports`, exactly as `clang.**` is there: the `typing` environment deliberately has no pytest, so this package's pytest plugin cannot resolve the runner it plugs into. The plugin itself is still checked. `error-on-warning = true` means every one of those suppressions must still be suppressing something -- a stale one fails Lint, which is how the first placement of the `add_extra_option` ignore was caught: ty reports that error on the argument, not the call. The suite is unchanged throughout: **420 passed, 1 failed** before and after, the failure being the pytest-playwright collision the next commit fixes. --- packages/sphinx-test-reports/docs/conf.py | 3 +- .../src/sphinxcontrib/test_reports/cli.py | 12 +- .../test_reports/directives/test_case.py | 17 +- .../test_reports/directives/test_common.py | 94 ++++++----- .../test_reports/directives/test_env.py | 15 +- .../test_reports/directives/test_file.py | 24 +-- .../test_reports/directives/test_suite.py | 39 +++-- .../sphinxcontrib/test_reports/environment.py | 2 +- .../src/sphinxcontrib/test_reports/fields.py | 2 +- .../test_reports/functions/__init__.py | 2 +- .../sphinxcontrib/test_reports/jsonparser.py | 8 +- .../sphinxcontrib/test_reports/junitparser.py | 2 +- .../test_reports/needs_export.py | 4 +- .../test_reports/projectconfig.py | 3 +- .../test_reports/pytest_plugin.py | 3 +- .../test_reports/test_reports.py | 23 ++- .../tests/doc_test/basic_doc/conf.py | 5 +- .../doc_test/custom_tr_koi8_template/conf.py | 15 +- .../tests/doc_test/custom_tr_template/conf.py | 15 +- .../doc_test/custom_tr_utf8_template/conf.py | 15 +- .../tests/doc_test/custom_types/conf.py | 2 - .../tests/doc_test/deterministic_ids/conf.py | 3 - .../doc_test/doc_test_ctest_file/conf.py | 5 +- .../tests/doc_test/doc_test_file/conf.py | 5 +- .../tests/doc_test/env_report_doc/conf.py | 2 - .../doc_test/env_report_doc_default/conf.py | 2 - .../tests/doc_test/env_report_doc_raw/conf.py | 2 - .../doc_test/env_report_raw_no_data/conf.py | 158 ++++++++++++++++++ .../doc_test/env_report_raw_no_data/index.rst | 6 + .../doc_test/env_report_warnings/conf.py | 2 - .../tests/doc_test/json_parser/conf.py | 2 - .../doc_test/json_parser_complex/conf.py | 2 - .../tests/doc_test/json_parser_custom/conf.py | 5 +- .../doc_test/many_testsuites_doc/conf.py | 5 +- .../tests/doc_test/needs_linking/conf.py | 5 +- .../tests/doc_test/properties_linking/conf.py | 4 +- .../tests/doc_test/pytest_6_2/conf.py | 2 - .../tests/doc_test/schema_strictness/conf.py | 3 - .../doc_test/schema_strictness_status/conf.py | 3 - .../tests/doc_test/source_location/conf.py | 3 - .../doc_test/source_location_renamed/conf.py | 3 - .../tests/doc_test/test_file_missing/conf.py | 158 ++++++++++++++++++ .../doc_test/test_file_missing/index.rst | 6 + .../tests/doc_test/test_file_no_file/conf.py | 158 ++++++++++++++++++ .../doc_test/test_file_no_file/index.rst | 5 + .../tests/doc_test/testsuites_doc/conf.py | 5 +- .../tests/doc_test/ubproject_toml/conf.py | 3 - .../tests/test_custom_template.py | 4 +- .../tests/test_directive_regressions.py | 126 ++++++++++++++ .../tests/test_json_parser.py | 2 +- .../tests/test_needs_export.py | 2 +- .../tests/test_project_config.py | 6 +- .../tests/test_pytest_plugin.py | 12 +- pyproject.toml | 9 + 54 files changed, 813 insertions(+), 210 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/test_file_missing/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/test_file_missing/index.rst create mode 100644 packages/sphinx-test-reports/tests/doc_test/test_file_no_file/conf.py create mode 100644 packages/sphinx-test-reports/tests/doc_test/test_file_no_file/index.rst create mode 100644 packages/sphinx-test-reports/tests/test_directive_regressions.py diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 58bea4518..80095f543 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -17,9 +17,10 @@ # import os import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + sys.path.append(os.path.abspath(".")) from ub_theme.conf import html_theme_options diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/cli.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/cli.py index 8c014d0c2..2920d7146 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/cli.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/cli.py @@ -16,8 +16,8 @@ import argparse import json import sys +from collections.abc import Mapping, Sequence from pathlib import Path -from typing import Mapping, Sequence from sphinxcontrib.test_reports.junitparser import JUnitParser from sphinxcontrib.test_reports.needs_export import ( @@ -378,8 +378,8 @@ def _resolve_settings( because a diagnostic has to name the flag or the TOML key the user actually wrote. """ - resolved: "dict[str, object]" = {} - sources: "dict[str, str]" = {} + resolved: dict[str, object] = {} + sources: dict[str, str] = {} for key in CONVERSION_KEYS: flag = getattr(arguments, _DESTS.get(key, key)) if flag is not None: @@ -518,7 +518,7 @@ def _build_needs(arguments: argparse.Namespace) -> int: ) return 2 - reports: "list[Report]" = [] + reports: list[Report] = [] for name in arguments.files: path = Path(name) if not path.is_file(): @@ -527,8 +527,8 @@ def _build_needs(arguments: argparse.Namespace) -> int: try: # The parser is not typed yet (#114), so both calls are # untyped to mypy; nothing to fix from this side. - parsed = JUnitParser(str(path)).parse() # type: ignore[no-untyped-call] - except Exception as error: # noqa: BLE001 - report, never traceback + parsed = JUnitParser(str(path)).parse() + except Exception as error: print(f"error: {path}: {error}", file=sys.stderr) return 1 _warn_about_empty_report(path, parsed) diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_case.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_case.py index c88cb779b..a7601360a 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_case.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_case.py @@ -1,8 +1,10 @@ +from typing import Any + from docutils import nodes from docutils.parsers.rst import directives + from sphinx_needs.api import add_need from sphinx_needs.utils import add_doc - from sphinxcontrib.test_reports.config import DEFAULT_OPTIONS from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOptionError @@ -185,6 +187,15 @@ def run(self, nested=False, suite_count=-1, case_count=-1): docname = self.state.document.settings.env.docname main_section = [] + # The fields whose NAMES come from configuration, in one mapping: the report-path + # field is renameable, the source-location pair with it, and the configured extra + # options are arbitrary. `dict[str, Any]` because `add_need` types each keyword + # parameter separately and none of these names is known here. + report_fields: dict[str, Any] = { + self.report_file_field(): self.test_file_given, + **self.source_location_fields(case), + **self.extra_options, + } # Merge all options including extra ones main_section += add_need( self.app, @@ -207,9 +218,7 @@ def run(self, nested=False, suite_count=-1, case_count=-1): result=result, time=time_str, style=style, - **{self.report_file_field(): self.test_file_given}, - **self.source_location_fields(case), - **self.extra_options, + **report_fields, ) add_doc(self.env, docname) diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_common.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_common.py index 6f90936a5..eea5ad3ab 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_common.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_common.py @@ -5,12 +5,17 @@ # fmt: off import os import pathlib -from importlib.metadata import version +from typing import Any from docutils.parsers.rst import Directive from sphinx.util import logging -from sphinx_needs.config import NeedsSphinxConfig +# `_make_hashed_id` has been sphinx-needs' spelling since its 4.0; the import narrowed to +# `sphinx-needs>=8.5.0,<9` at the workspace import, so the `make_hashed_id` fallback this +# used to carry could no longer run -- and no longer resolves, since the name is gone from +# `sphinx_needs.api` entirely (measured against 8.5.0). +from sphinx_needs.api.need import _make_hashed_id +from sphinx_needs.config import NeedsSphinxConfig from sphinxcontrib.test_reports.exceptions import ( SphinxError, TestReportFileNotSetError, @@ -19,14 +24,6 @@ from sphinxcontrib.test_reports.jsonparser import JsonParser from sphinxcontrib.test_reports.junitparser import JUnitParser -sn_major_version = int(version("sphinx-needs").split('.')[0]) - -if sn_major_version >= 4: - from sphinx_needs.api.need import _make_hashed_id -else: - from sphinx_needs.api import make_hashed_id - - # fmt: on @@ -42,23 +39,41 @@ def __init__(self, *args, **kwargs): if not hasattr(self.app, "testreport_data"): self.app.testreport_data = {} - self.test_file = None - self.results = None - self.docname = None - self.test_name = None - self.test_id = None - self.test_content = None - self.test_file_given = None - self.test_links = None - self.test_tags = None - self.test_status = None - self.collapse = None - self.need_type = None - self.extra_options = None + # Every one of these is populated by `prepare_basic_options` (and `results` by + # `load_test_file`) before any directive reads it. Declared here with the type each + # one actually holds, because the bare `None` they used to start as is what the + # subclasses' `self.results[0]`, `for x in self.results`, `self.extra_options[k]` + # and `add_need(title=self.test_name, ...)` were all being type-checked against. + # `test_file` and `test_id` start EMPTY rather than `None`: both are required, and + # the two guards that enforced that are now falsiness checks. For `test_id` that is + # exactly identical behaviour. For `test_file` it is NOT, and the difference is a + # bug fix: `prepare_basic_options` runs before `load_test_file` in all four + # directives, so `test_file_given = self.test_file[:]` raised TypeError on a + # directive written without `:file:` before the guard in `load_test_file` could + # ever be reached -- that guard was dead code. The slice is now a no-op and the + # guard is live, so such a directive raises TestReportFileNotSetError, a + # SphinxError. + self.test_file: str = "" + #: Whatever the JUnit/JSON parser returned -- untyped by construction. + self.results: Any = None + self.docname: str = "" + self.test_name: str = "" + self.test_id: str = "" + self.test_content: str = "" + self.test_file_given: str = "" + self.test_links: str = "" + self.test_tags: str = "" + self.test_status: str | None = None + self.collapse: bool | str = False + self.need_type: str = "" + #: Values read off the Sphinx config and the report, so `Any` rather than `str`: + #: this mapping is splatted into `add_need`, whose keyword parameters are typed + #: individually, and a `dict[str, str]` would be checked against every one of them. + self.extra_options: dict[str, Any] = {} self.log = logging.getLogger(__name__) - def report_file_field(self): + def report_file_field(self) -> str: """Need field carrying the XML report path (renameable via config). Renaming it is what frees ``file``/``line`` for the *test source* @@ -67,7 +82,7 @@ def report_file_field(self): """ return getattr(self.app.config, "tr_file_option", "file") - def source_location_fields(self, case): + def source_location_fields(self, case: Any) -> dict[str, Any]: """Need fields for the ```` file/line attributes. The parser reports ``"unknown"``/``-1`` when the attributes are absent, @@ -116,7 +131,7 @@ def load_test_file(self): :return: None """ - if self.test_file is None: + if not self.test_file: raise TestReportFileNotSetError("Option test_file must be set.") test_path = pathlib.Path(self.test_file) @@ -131,9 +146,9 @@ def load_test_file(self): ) return None - if self.test_file not in self.app.testreport_data.keys(): + if self.test_file not in self.app.testreport_data: if os.path.splitext(self.test_file)[1] == ".json": - mapping = list(self.app.config.tr_json_mapping.values())[0] + mapping = next(iter(self.app.config.tr_json_mapping.values())) parser = JsonParser(self.test_file, json_mapping=mapping) else: parser = JUnitParser(self.test_file) @@ -153,29 +168,24 @@ def prepare_basic_options(self): self.test_content = "\n".join(self.content) if self.name != "test-report": self.need_type = self.app.tr_types[self.name][0] - if sn_major_version >= 4: - hashed_id = _make_hashed_id( - self.need_type, - self.test_name, - self.test_content, - NeedsSphinxConfig(self.app.config), - ) - else: # Sphinx-Needs < 4 - hashed_id = make_hashed_id( - self.app, self.need_type, self.test_name, self.test_content - ) + hashed_id = _make_hashed_id( + self.need_type, + self.test_name, + self.test_content, + NeedsSphinxConfig(self.app.config), + ) self.test_id = self.options.get( "id", hashed_id, ) else: - self.test_id = self.options.get("id") + self.test_id = self.options.get("id", "") - if self.test_id is None: + if not self.test_id: raise SphinxError("ID must be set for test-report.") - self.test_file = self.options.get("file") + self.test_file = self.options.get("file", "") self.test_file_given = self.test_file[:] self.test_links = self.options.get("links", "") diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_env.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_env.py index 611f00d3c..a6f119c2f 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_env.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_env.py @@ -134,12 +134,15 @@ def run(self): if opt not in self.data_option_list: del temp_dict2[enviro][opt] - # option check - for opt in self.data_option_list: - if opt not in temp_dict2[enviro]: - logger.warning( - f"option '{opt}' is not present in '{enviro}' environment file" - ) + # option check. Inside the guard, like the `:raw:`-without-`:env:` + # branch above: `:data:` is optional, and iterating it unguarded is a + # TypeError for a `test-env` written with `:raw:` and `:env:` but no + # `:data:`. + for opt in self.data_option_list: + if opt not in temp_dict2[enviro]: + logger.warning( + f"option '{opt}' is not present in '{enviro}' environment file" + ) del temp_dict diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_file.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_file.py index b3c0b3ef7..0234f6b1f 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_file.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_file.py @@ -1,11 +1,12 @@ import hashlib +from typing import Any from docutils import nodes from docutils.parsers.rst import directives -from sphinx_needs.api import add_need -from sphinx_needs.utils import add_doc import sphinxcontrib.test_reports.directives.test_suite +from sphinx_needs.api import add_need +from sphinx_needs.utils import add_doc from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportIncompleteConfigurationError @@ -49,7 +50,7 @@ def run(self): content = nodes.error() para = nodes.paragraph() text_string = f"Test file not found: {self.test_file}" - text = nodes.Text(text_string, text_string) + text = nodes.Text(text_string) para += text content.append(para) main_section.append(content) @@ -65,6 +66,13 @@ def run(self): main_section = [] docname = self.state.document.settings.env.docname + # The fields whose NAMES come from configuration -- the renameable report-path + # field and the configured extra options -- in one mapping. `dict[str, Any]` + # because `add_need` types each keyword parameter separately. + report_fields: dict[str, Any] = { + self.report_file_field(): self.test_file_given, + **self.extra_options, + } main_section += add_need( self.app, self.state, @@ -84,20 +92,16 @@ def run(self): skipped=skipped, failed=failed, errors=errors, - **{self.report_file_field(): self.test_file_given}, - **self.extra_options, + **report_fields, ) - if ( - "auto_cases" in self.options.keys() - and "auto_suites" not in self.options.keys() - ): + if "auto_cases" in self.options and "auto_suites" not in self.options: raise TestReportIncompleteConfigurationError( "option auto_cases must be used together with " "auto_suites for test-file directives." ) - if "auto_suites" in self.options.keys(): + if "auto_suites" in self.options: for suite in self.results: suite_id = self.test_id suite_id += ( diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_suite.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_suite.py index 79640735e..ab46ddc0c 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_suite.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_suite.py @@ -1,11 +1,12 @@ import hashlib +from typing import Any from docutils import nodes from docutils.parsers.rst import directives -from sphinx_needs.api import add_need -from sphinx_needs.utils import add_doc import sphinxcontrib.test_reports.directives.test_case +from sphinx_needs.api import add_need +from sphinx_needs.utils import add_doc from sphinxcontrib.test_reports.directives.test_common import TestCommonDirective from sphinxcontrib.test_reports.exceptions import TestReportInvalidOptionError @@ -91,6 +92,13 @@ def run(self, nested=False, count=-1): main_section = [] docname = self.state.document.settings.env.docname + # The fields whose NAMES come from configuration -- the renameable report-path + # field and the configured extra options -- in one mapping. `dict[str, Any]` + # because `add_need` types each keyword parameter separately. + report_fields: dict[str, Any] = { + self.report_file_field(): self.test_file_given, + **self.extra_options, + } main_section += add_need( self.app, self.state, @@ -110,8 +118,7 @@ def run(self, nested=False, count=-1): skipped=skipped, failed=failed, errors=errors, - **{self.report_file_field(): self.test_file_given}, - **self.extra_options, + **report_fields, ) # TODO double nested logic @@ -137,18 +144,16 @@ def run(self, nested=False, count=-1): options["links"] = options["links"] + ";" + self.test_id arguments = [suite["name"]] - suite_directive = ( - sphinxcontrib.test_reports.directives.test_suite.TestSuiteDirective( - self.app.config.tr_suite[0], - arguments, - options, - "", - self.lineno, # no content - self.content_offset, - self.block_text, - self.state, - self.state_machine, - ) + suite_directive = TestSuiteDirective( + self.app.config.tr_suite[0], + arguments, + options, + "", + self.lineno, # no content + self.content_offset, + self.block_text, + self.state, + self.state_machine, ) is_nested = len(suite_obj["testsuites"]) > 0 @@ -159,7 +164,7 @@ def run(self, nested=False, count=-1): access_count += 1 # suite has testcases - if "auto_cases" in self.options.keys() and len(suite_obj["testcases"]) > 0: + if "auto_cases" in self.options and len(suite_obj["testcases"]) > 0: case_count = 0 for case in suite["testcases"]: diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/environment.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/environment.py index c5aa8a797..021175fee 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/environment.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/environment.py @@ -1,7 +1,7 @@ import os from sphinx.application import Sphinx -from sphinx.util.console import brown # type: ignore[import-not-found] +from sphinx.util.console import brown from sphinx.util.display import status_iterator from sphinx.util.osutil import copyfile, ensuredir diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/fields.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/fields.py index 21ff78866..165af4339 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/fields.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/fields.py @@ -16,7 +16,7 @@ sphinx-needs declares every registered field. """ -from typing import Iterable, Mapping +from collections.abc import Iterable, Mapping from sphinxcontrib.test_reports.results import CANONICAL_RESULTS diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/functions/__init__.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/functions/__init__.py index 79d48960c..dbdcd8328 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/functions/__init__.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/functions/__init__.py @@ -14,7 +14,7 @@ def tr_link(app, need, needs, test_option, target_option, *args, **kwargs): if ( test_opt == need_target[target_option] and test_opt is not None - and len(test_opt) > 0 # fmt: skip + and len(test_opt) > 0 ): links.append(need_target["id"]) diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/jsonparser.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/jsonparser.py index 0534d370b..779b36ed4 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/jsonparser.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/jsonparser.py @@ -10,7 +10,7 @@ import operator import os from functools import reduce -from typing import Any, Dict, List +from typing import Any from sphinxcontrib.test_reports.results import normalize_result @@ -49,7 +49,7 @@ def validate(self): # But to be compatible with the API, we need to return True return True - def parse(self) -> List[Dict[str, Any]]: + def parse(self) -> list[dict[str, Any]]: """ Creates a common python list of object, no matter what information are supported by the parsed json file for test results junit(). @@ -57,7 +57,7 @@ def parse(self) -> List[Dict[str, Any]]: :return: list of test suites as dictionaries """ - def parse_testcase(json_dict) -> Dict[str, Any]: + def parse_testcase(json_dict) -> dict[str, Any]: tc_mapping = self.json_mapping.get("testcase") tc_dict = { k: dict_get(json_dict, v[0], v[1]) for k, v in tc_mapping.items() @@ -72,7 +72,7 @@ def parse_testcase(json_dict) -> Dict[str, Any]: tc_dict["result"] = normalize_result(result) return tc_dict - def parse_testsuite(json_dict) -> Dict[str, Any]: + def parse_testsuite(json_dict) -> dict[str, Any]: ts_mapping = self.json_mapping.get("testsuite") ts_dict = { k: dict_get(json_dict, v[0], v[1]) diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/junitparser.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/junitparser.py index ead778c5a..2b0752899 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/junitparser.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/junitparser.py @@ -4,7 +4,7 @@ import os -from lxml import etree, objectify +from lxml import etree, objectify # ty: ignore[unresolved-import] from sphinxcontrib.test_reports.results import normalize_result diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/needs_export.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/needs_export.py index 3e751e3bd..08665f514 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/needs_export.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/needs_export.py @@ -22,7 +22,7 @@ import re import textwrap -from typing import Callable, Iterable, Iterator, Mapping, Sequence, Union +from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from sphinxcontrib.test_reports.fields import case_needs_schema from sphinxcontrib.test_reports.identity import ( @@ -35,7 +35,7 @@ #: A need field value as it appears in needs.json. ``None`` is the value of an #: exported property the case does not carry, as the build leaves it. -FieldValue = Union[str, list[str], None] +FieldValue = str | list[str] | None NeedItem = dict[str, FieldValue] #: A parsed report: the path it was read from, and its top-level suites. The diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/projectconfig.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/projectconfig.py index 8f085f52d..30fce3082 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/projectconfig.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/projectconfig.py @@ -35,8 +35,9 @@ """ import tomllib +from collections.abc import Callable, Mapping, Sequence from pathlib import Path -from typing import Callable, Mapping, NoReturn, Sequence +from typing import NoReturn from sphinxcontrib.test_reports.fields import RESERVED_NAMES diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/pytest_plugin.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/pytest_plugin.py index ef980d7c5..b545234ab 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/pytest_plugin.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/pytest_plugin.py @@ -46,8 +46,9 @@ from __future__ import annotations import re +from collections.abc import Callable, Generator, Mapping, Sequence from dataclasses import dataclass -from typing import TYPE_CHECKING, Callable, Generator, Mapping, Sequence +from typing import TYPE_CHECKING import pluggy import pytest diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/test_reports.py b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/test_reports.py index 3f942e17e..5653f505a 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/test_reports.py +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/test_reports.py @@ -8,16 +8,13 @@ from sphinx.util import logging # from docutils import nodes -# sphinx-needs ships no py.typed marker and no stubs exist, so every import -# from it is untyped to mypy. Nothing to fix on this side. -from sphinx_needs.api import ( # type: ignore[import-untyped] +from sphinx_needs.api import ( add_dynamic_function, add_need_type, ) -from sphinx_needs.exceptions import ( # type: ignore[import-untyped] +from sphinx_needs.exceptions import ( NeedsApiConfigWarning, ) - from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective from sphinxcontrib.test_reports.directives.test_file import TestFile, TestFileDirective @@ -63,7 +60,11 @@ def _register_field(app: Sphinx, name: str, role: str | None = None) -> None: type_, description = declaration(name, role) try: - _add_field(name, description, schema={"type": type_}) + # sphinx-needs types `schema=` as a union of TypedDicts; this passes the + # equivalent plain mapping, which is what it has always passed. Narrowing it + # properly means importing `FieldSchemaTypes` from `sphinx_needs.schema.config` + # -- an internal path the ImportError fallback below cannot depend on. + _add_field(name, description, schema={"type": type_}) # ty: ignore[invalid-argument-type] except NeedsApiConfigWarning: # Already registered, e.g. via needs_fields or needs_extra_options # in conf.py. Anything else is a real error and must surface. @@ -80,7 +81,11 @@ def _register_field(app: Sphinx, name: str, role: str | None = None) -> None: type_, description = declaration(name, role) try: _add_extra_option( - app, name, description=description, schema={"type": type_} + # the same plain mapping, and the same reason, as the `_add_field` call above + app, + name, + description=description, + schema={"type": type_}, # ty: ignore[invalid-argument-type] ) except NeedsApiConfigWarning: logging.getLogger(__name__).debug( @@ -246,7 +251,7 @@ def register_tr_extra_options(app: Sphinx) -> None: spec[option_name] = directives.unchanged log.debug(f"Registered {option_name} with {direc}") log.debug(f"{direc}.option_spec now has keys: {list(spec.keys())}") - direc.option_spec = spec + direc.option_spec = spec # ty: ignore[invalid-assignment] def _command_line_overrides(config: Config) -> set[str]: @@ -347,7 +352,7 @@ def tr_preparation(app: Sphinx, *args: object) -> None: # back the same way (see `test_common.py`). One narrow ignore for the # attachment; the rest of the function works on a typed mapping. types: dict[str, list[str]] = getattr(app, "tr_types", None) or {} - app.tr_types = types # type: ignore[attr-defined] + app.tr_types = types # ty: ignore[unresolved-attribute] # Collects the configured test-report node types types[app.config.tr_file[0]] = app.config.tr_file[1:] diff --git a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py index 17f5ac30b..f7894576e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/basic_doc/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py index 57cb00b82..03c788c79 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_koi8_template/conf.py @@ -14,7 +14,6 @@ # import os # import sys import datetime -import os # sys.path.insert(0, os.path.abspath('.')) @@ -49,16 +48,10 @@ tr_import_encoding = "koi8-u" -cwd = os.getcwd() -plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") - -# If we are running on windows, we need to manipulate the path, -# otherwise plantuml will have problems. -if os.name == "nt": - plantuml = plantuml.replace("/", "\\") - plantuml = plantuml.replace("\\", "\\\\") - -plantuml_output_format = "png" +# No `plantuml` setting: no document in these test projects renders a diagram, and the +# 8.6 MB `tests/doc_test/utils/plantuml.jar` this pointed at left with the import -- it was +# dead before the move too, resolving `utils/plantuml.jar` against pytest's rootdir, where +# no `utils/` has ever existed. # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py index c52e80f43..9104ea77e 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_template/conf.py @@ -14,7 +14,6 @@ # import os # import sys import datetime -import os # sys.path.insert(0, os.path.abspath('.')) @@ -47,16 +46,10 @@ "sphinx_design", ] -cwd = os.getcwd() -plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") - -# If we are running on windows, we need to manipulate the path, -# otherwise plantuml will have problems. -if os.name == "nt": - plantuml = plantuml.replace("/", "\\") - plantuml = plantuml.replace("\\", "\\\\") - -plantuml_output_format = "png" +# No `plantuml` setting: no document in these test projects renders a diagram, and the +# 8.6 MB `tests/doc_test/utils/plantuml.jar` this pointed at left with the import -- it was +# dead before the move too, resolving `utils/plantuml.jar` against pytest's rootdir, where +# no `utils/` has ever existed. # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py index 097732330..ea2d639cc 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_tr_utf8_template/conf.py @@ -14,7 +14,6 @@ # import os # import sys import datetime -import os # sys.path.insert(0, os.path.abspath('.')) @@ -49,16 +48,10 @@ tr_import_encoding = "utf8" -cwd = os.getcwd() -plantuml = "java -jar %s" % os.path.join(cwd, "utils/plantuml.jar") - -# If we are running on windows, we need to manipulate the path, -# otherwise plantuml will have problems. -if os.name == "nt": - plantuml = plantuml.replace("/", "\\") - plantuml = plantuml.replace("\\", "\\\\") - -plantuml_output_format = "png" +# No `plantuml` setting: no document in these test projects renders a diagram, and the +# 8.6 MB `tests/doc_test/utils/plantuml.jar` this pointed at left with the import -- it was +# dead before the move too, resolving `utils/plantuml.jar` against pytest's rootdir, where +# no `utils/` has ever existed. # Add any paths that contain templates here, relative to this directory. diff --git a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py index 04baf54c0..68feaebbc 100644 --- a/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/custom_types/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py index c7fa3f27c..d666dbed1 100644 --- a/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/deterministic_ids/conf.py @@ -1,6 +1,3 @@ -import os -import sys - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py index 77934e7cf..f845d8c50 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_ctest_file/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py index 648934460..1ab448a9a 100644 --- a/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/doc_test_file/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py index d61f30cbe..7cde4d02f 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py index d61f30cbe..7cde4d02f 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_default/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py index d61f30cbe..7cde4d02f 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_doc_raw/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/conf.py new file mode 100644 index 000000000..7cde4d02f --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/conf.py @@ -0,0 +1,158 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/index.rst b/packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/index.rst new file mode 100644 index 000000000..13ef77d4b --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_raw_no_data/index.rst @@ -0,0 +1,6 @@ +Test-Env report +================== + +.. test-env:: ../utils/tox-report.json + :env: py35, flake8 + :raw: diff --git a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py index f41dd8610..6edb2febc 100644 --- a/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/env_report_warnings/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py index 9cbb502c4..8d2776264 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py index 19634d6e2..33e5a9f85 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_complex/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py index 7b055d164..17d6edac0 100644 --- a/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/json_parser_custom/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py index bd063fb99..cbdd936df 100644 --- a/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/many_testsuites_doc/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py index e3a040428..15f47ccb2 100644 --- a/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/needs_linking/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py index 939878a7e..f16a4e7e4 100644 --- a/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/properties_linking/conf.py @@ -1,8 +1,6 @@ -import os -import sys +from packaging.version import Version import sphinx_needs -from packaging.version import Version extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] diff --git a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py index f41dd8610..6edb2febc 100644 --- a/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/pytest_6_2/conf.py @@ -15,8 +15,6 @@ # 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. # -import os -import sys # -- General configuration ------------------------------------------------ diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py index 7c19d1c28..d439fea3b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness/conf.py @@ -1,6 +1,3 @@ -import os -import sys - # -- General configuration ------------------------------------------------ extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] diff --git a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py index 93e1ef78e..6f54d5b47 100644 --- a/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/schema_strictness_status/conf.py @@ -1,6 +1,3 @@ -import os -import sys - # -- General configuration ------------------------------------------------ extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py b/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py index ea74db398..ef0fe0a5b 100644 --- a/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/source_location/conf.py @@ -1,6 +1,3 @@ -import os -import sys - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py index ce024ffa8..21aff2eb7 100644 --- a/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/source_location_renamed/conf.py @@ -1,6 +1,3 @@ -import os -import sys - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/doc_test/test_file_missing/conf.py b/packages/sphinx-test-reports/tests/doc_test/test_file_missing/conf.py new file mode 100644 index 000000000..7cde4d02f --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/test_file_missing/conf.py @@ -0,0 +1,158 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/test_file_missing/index.rst b/packages/sphinx-test-reports/tests/doc_test/test_file_missing/index.rst new file mode 100644 index 000000000..b7cf943f0 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/test_file_missing/index.rst @@ -0,0 +1,6 @@ +Missing test file +================= + +.. test-file:: A report that is not there + :file: ../utils/no_such_report.xml + :id: TESTFILE_MISSING diff --git a/packages/sphinx-test-reports/tests/doc_test/test_file_no_file/conf.py b/packages/sphinx-test-reports/tests/doc_test/test_file_no_file/conf.py new file mode 100644 index 000000000..7cde4d02f --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/test_file_no_file/conf.py @@ -0,0 +1,158 @@ +# +# testreport test docs documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 28 11:37:14 2017. +# +# 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. + +# 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. +# + +# -- General configuration ------------------------------------------------ + +# If your documentation testreport a minimal Sphinx version, state it here. +# +# testreport_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_needs", "sphinxcontrib.test_reports"] + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "test-report test docs" +copyright = "2017, team useblocks" +author = "team useblocks" + +# 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. +version = "1.0" +# The full version, including alpha/beta/rc tags. +release = "1.0" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# -- 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 = "alabaster" + +# 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 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"] + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "testreporttestdocsdoc" + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + master_doc, + "testreporttestdocs.tex", + "testreport test docs Documentation", + "team useblocks", + "manual", + ), +] + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + [author], + 1, + ) +] + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "testreporttestdocs", + "testreport test docs Documentation", + author, + "testreporttestdocs", + "One line description of project.", + "Miscellaneous", + ), +] diff --git a/packages/sphinx-test-reports/tests/doc_test/test_file_no_file/index.rst b/packages/sphinx-test-reports/tests/doc_test/test_file_no_file/index.rst new file mode 100644 index 000000000..42f97d6b0 --- /dev/null +++ b/packages/sphinx-test-reports/tests/doc_test/test_file_no_file/index.rst @@ -0,0 +1,5 @@ +A test-file with no file option +=============================== + +.. test-file:: A report with no file option + :id: TESTFILE_NO_FILE diff --git a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py index 83ef14801..cc2ca0ae3 100644 --- a/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/testsuites_doc/conf.py @@ -15,12 +15,11 @@ # 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. # -import os -import sys -import sphinx_needs from packaging.version import Version +import sphinx_needs + # -- General configuration ------------------------------------------------ # If your documentation testreport a minimal Sphinx version, state it here. diff --git a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py index abd95af46..30be23615 100644 --- a/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py +++ b/packages/sphinx-test-reports/tests/doc_test/ubproject_toml/conf.py @@ -1,6 +1,3 @@ -import os -import sys - extensions = ["sphinx_needs", "sphinxcontrib.test_reports"] source_suffix = ".rst" diff --git a/packages/sphinx-test-reports/tests/test_custom_template.py b/packages/sphinx-test-reports/tests/test_custom_template.py index 0e29f187f..ea7da4d0c 100644 --- a/packages/sphinx-test-reports/tests/test_custom_template.py +++ b/packages/sphinx-test-reports/tests/test_custom_template.py @@ -47,4 +47,6 @@ def test_custom_koi8_template(test_app): print(html) assert "бцдеф" in html - assert "Testfбlle" in html + # The Cyrillic letter in the string below is deliberate: this fixture + # asserts koi8-r decoding, so ruff's confusable check is suppressed. + assert "Testfбlle" in html # noqa: RUF001 diff --git a/packages/sphinx-test-reports/tests/test_directive_regressions.py b/packages/sphinx-test-reports/tests/test_directive_regressions.py new file mode 100644 index 000000000..3e37ed3de --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_directive_regressions.py @@ -0,0 +1,126 @@ +"""Regressions for the three directive changes the workspace import made. + +The first three tests each build a fixture project the suite did not have before: the +shape that triggered each problem was exactly a shape none of the existing fixtures +covered, which is why nothing caught any of them. The fourth is the positive control for +the third. +""" + +import re +import warnings +from pathlib import Path + +import pytest +from docutils import nodes + +from sphinxcontrib.test_reports.exceptions import TestReportFileNotSetError + +#: docutils' deprecation for ``Text()``'s second argument. ONE constant, shared by the fence in +#: the missing-file test and by its positive control, so that the two cannot drift apart. It is +#: anchored with ``^`` because the two read it differently: ``warnings.filterwarnings`` applies +#: ``re.match``, ``pytest.warns(match=...)`` applies ``re.search``, and without the anchor a +#: docutils message that gained a prefix would still satisfy the control while the fence stopped +#: matching. +RAWSOURCE_DEPRECATION = r'^nodes\.Text: initialization argument "rawsource"' + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/env_report_raw_no_data"}], + indirect=True, +) +def test_raw_env_report_without_a_data_option_builds(test_app): + """``:raw:`` and ``:env:`` with no ``:data:`` used to raise ``TypeError``. + + That branch iterated ``self.data_option_list`` outside the ``is not None`` guard its + sibling branch keeps it inside, and ``:data:`` is optional -- so the list is ``None`` + and the loop raised. No existing ``test-env`` fixture had that combination -- they + carried ``:data:`` with ``:env:``, the same with ``:raw:``, or no options at all, which + takes neither branch -- so it had no coverage. + """ + app = test_app + app.build() + html = Path(app.outdir / "index.html").read_text() + + # the requested environments render, and nothing else does + assert "py35" in html + assert "flake8" in html + assert "pylint" not in html + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/test_file_no_file"}], + indirect=True, +) +def test_a_test_file_without_a_file_option_raises_a_readable_error(test_app): + """A ``test-file`` written with no ``:file:`` used to crash with ``TypeError``. + + ``prepare_basic_options`` sliced ``self.options.get("file")`` -- ``None`` when the + option is absent -- before the guard in ``load_test_file`` could run, so that guard was + dead code and the build died on ``TypeError: 'NoneType' object is not subscriptable``. + Measured: that is exactly what ``app.build()`` raised on the published code, and it + reaches this call unwrapped, as does the error below. Every existing ``test-file`` + fixture carried a ``:file:``. + """ + with pytest.raises(TestReportFileNotSetError, match="Option test_file must be set"): + test_app.build() + + +@pytest.mark.parametrize( + "test_app", + [{"buildername": "html", "srcdir": "doc_test/test_file_missing"}], + indirect=True, +) +def test_a_missing_test_file_renders_an_error_node(test_app): + """The "not found" path, which no other fixture reaches, and its ``nodes.Text`` call. + + That call used to pass a second argument. docutils ignores it, deprecates it and + removes it only in Docutils 2.0, so the old call still WORKS on every supported + docutils: an assertion on the rendered node alone passes either way, which was + measured. The filter below is what makes this a fence. It turns exactly that + deprecation into an error, and only when it is raised from this package's own code: + docutils warns with ``stacklevel=2``, which attributes the warning to the caller, so + ``module=`` matches ``sphinxcontrib.test_reports.directives.test_file`` -- and the same + deprecation raised from Sphinx or sphinx-needs during the build is left alone. Both + directions were measured. + """ + app = test_app + with warnings.catch_warnings(): + warnings.filterwarnings( + "error", + message=RAWSOURCE_DEPRECATION, + category=DeprecationWarning, + module=r"sphinxcontrib\.test_reports", + ) + app.build() + html = Path(app.outdir / "index.html").read_text() + + assert "Test file not found" in html + assert "no_such_report.xml" in html + + +def test_the_rawsource_pattern_still_matches_docutils(): + """The positive control for the fence in the test above. + + The fence can disarm SILENTLY in two ways -- the missing-file test would then stay green + whatever the code did -- and this fails loudly on both: + + * docutils rewords the deprecation, prefixes included: the anchored constant stops matching + here exactly as the filter's ``re.match`` stops matching there; + * docutils moves the warning's attribution, say by changing its ``stacklevel``: the fence's + ``module=`` scope relies on the warning being attributed to the CALLER of ``Text()``, so + this asserts the warning below is attributed to this file, its caller. + """ + with pytest.warns(DeprecationWarning, match=RAWSOURCE_DEPRECATION) as record: + nodes.Text("x", "y") + matching = [ + w + for w in record + if re.match(RAWSOURCE_DEPRECATION, str(w.message), re.IGNORECASE) + ] + assert matching, [str(w.message) for w in record] + here = Path(__file__).resolve() + assert all(Path(w.filename).resolve() == here for w in matching), [ + w.filename for w in matching + ] diff --git a/packages/sphinx-test-reports/tests/test_json_parser.py b/packages/sphinx-test-reports/tests/test_json_parser.py index f767067e5..a31884299 100644 --- a/packages/sphinx-test-reports/tests/test_json_parser.py +++ b/packages/sphinx-test-reports/tests/test_json_parser.py @@ -44,7 +44,7 @@ def test_parse_json_data(): } } - mapping = list(json_mapping.values())[0] + mapping = next(iter(json_mapping.values())) parser = JsonParser(json_path, json_mapping=mapping) results = parser.parse() assert results is not None diff --git a/packages/sphinx-test-reports/tests/test_needs_export.py b/packages/sphinx-test-reports/tests/test_needs_export.py index 494522284..fbda21341 100644 --- a/packages/sphinx-test-reports/tests/test_needs_export.py +++ b/packages/sphinx-test-reports/tests/test_needs_export.py @@ -53,7 +53,7 @@ def test_a_case_reported_twice_is_refused(self): ("a.xml", [{"name": "s", "testcases": [_case(), _case("test_y")]}]), ("b.xml", [{"name": "s", "testcases": [_case()]}]), ] - with pytest.raises(ValueError, match="1 test case.*testcase__Suite__test_x"): + with pytest.raises(ValueError, match=r"1 test case.*testcase__Suite__test_x"): build_needs_file(reports) def test_distinct_cases_are_all_kept(self): diff --git a/packages/sphinx-test-reports/tests/test_project_config.py b/packages/sphinx-test-reports/tests/test_project_config.py index 515fd891a..dfc4183f9 100644 --- a/packages/sphinx-test-reports/tests/test_project_config.py +++ b/packages/sphinx-test-reports/tests/test_project_config.py @@ -128,7 +128,7 @@ def test_unknown_artifact_under_build_is_reported_but_not_fatal(self, tmp_path): def test_a_non_table_needs_artifact_is_rejected(self, tmp_path): _write(tmp_path, '[test_reports.build]\nneeds = "yes"\n') - with pytest.raises(TomlConfigError, match="build.needs"): + with pytest.raises(TomlConfigError, match=r"build.needs"): load_project_config(tmp_path / DEFAULT_TOML_FILENAME) def test_build_needs_unknown_key_is_reported_but_not_fatal(self, tmp_path): @@ -180,11 +180,11 @@ def test_a_missing_side_is_compared_at_its_default(self, tmp_path): style = "rectangle" """, ) - with pytest.raises(TomlConfigError, match="'testcase'.*'check'"): + with pytest.raises(TomlConfigError, match=r"'testcase'.*'check'"): load_project_config(tmp_path / DEFAULT_TOML_FILENAME) # ... and the mirror: need_type set, case left at its default. _write(tmp_path, '[test_reports.build.needs]\nneed_type = "check"\n') - with pytest.raises(TomlConfigError, match="'check'.*'testcase'"): + with pytest.raises(TomlConfigError, match=r"'check'.*'testcase'"): load_project_config(tmp_path / DEFAULT_TOML_FILENAME) def test_without_a_convert_table_the_case_type_is_free(self, tmp_path): diff --git a/packages/sphinx-test-reports/tests/test_pytest_plugin.py b/packages/sphinx-test-reports/tests/test_pytest_plugin.py index 542ff2196..4828ad2c4 100644 --- a/packages/sphinx-test-reports/tests/test_pytest_plugin.py +++ b/packages/sphinx-test-reports/tests/test_pytest_plugin.py @@ -442,14 +442,14 @@ def test_a_bare_string_is_one_requirement_id(self, score_model): } def test_a_list_for_a_single_valued_property_is_an_error(self, score_model): - with pytest.raises(TypeError, match="test_type.*single value"): + with pytest.raises(TypeError, match=r"test_type.*single value"): properties_mapping(test_type=["a", "b"]) def test_an_unconfigured_keyword_takes_a_single_value(self, score_model): assert properties_mapping(Owner="team-a") == {"Owner": "team-a"} def test_a_list_under_an_unconfigured_keyword_is_an_error(self, score_model): - with pytest.raises(TypeError, match="Satisfies.*test_reports_properties"): + with pytest.raises(TypeError, match=r"Satisfies.*test_reports_properties"): properties_mapping(Satisfies=["REQ_1", "REQ_2"]) def test_the_xml_name_of_a_configured_property_works_as_keyword(self, score_model): @@ -468,9 +468,9 @@ def test_bytes_are_an_error(self, score_model): def test_every_item_of_a_list_must_be_a_string(self, score_model): # A list of lists is one indentation away in a spec file; it used to be # written as its repr and split into bogus IDs on the build side. - with pytest.raises(TypeError, match="partially_verifies.*item.*list"): + with pytest.raises(TypeError, match=r"partially_verifies.*item.*list"): properties_mapping(partially_verifies=[["REQ_1", "REQ_2"]]) - with pytest.raises(TypeError, match="item.*int"): + with pytest.raises(TypeError, match=r"item.*int"): properties_mapping(partially_verifies=[1, 2]) def test_an_empty_list_under_any_keyword_writes_nothing(self, score_model): @@ -482,7 +482,7 @@ def test_an_empty_list_under_any_keyword_writes_nothing(self, score_model): assert properties_mapping(Owner=[None, ""], fully_verifies=["R"]) == { "FullyVerifies": "R" } - with pytest.raises(TypeError, match="test_type.*single value"): + with pytest.raises(TypeError, match=r"test_type.*single value"): properties_mapping(test_type=["a"]) def test_an_empty_nested_list_is_not_written_as_brackets(self, score_model): @@ -567,7 +567,7 @@ def test_both(broken): class TestBadShape: def test_a_bad_shape_errors_the_case_at_setup(self, pytester): - result, root = _run( + result, _root = _run( pytester, "from sphinxcontrib.test_reports.pytest_plugin import add_test_properties\n\n@add_test_properties(test_type=['a', 'b'])\ndef test_shape():\n assert True\n", ) diff --git a/pyproject.toml b/pyproject.toml index 371092097..17bcc03b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -372,6 +372,15 @@ allowed-unresolved-imports = [ # sphinx-codelinks' optional libclang engine: `clang.cindex` ships no py.typed and sits # behind the `libclang` extra at runtime, so the typing floor deliberately lacks it "clang.**", + # sphinx-test-reports' pytest plugin. The `typing` environment deliberately has no + # pytest -- it pins the oldest supported sphinx and docutils and nothing else it does + # not need -- so the plugin's own imports cannot resolve there. The plugin IS type-checked + # otherwise; what is unresolved is the runner it plugs into, which is exactly the shape + # `clang.**` above has. `_pytest.junitxml` is pytest's private junitxml writer, which the + # plugin reaches for behind a `TYPE_CHECKING` guard and a try/except + "pytest", + "pluggy", + "_pytest.**", "matplotlib", "matplotlib.**", "requests_file", From 251f654c282a5635267a35d9ac9d39f78429adfd Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:40 +0200 Subject: [PATCH 151/159] =?UTF-8?q?=F0=9F=A7=AA=20Spawn=20builds=20through?= =?UTF-8?q?=20the=20interpreter=20under=20test,=20and=20fence=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **R7.** Three tests here spawned the build command resolved on `PATH` (`test_env.py`, `test_test_file.py`, `test_test_ctest_file.py`). The bare word is not the environment under test: from an unactivated shell, or any shell whose `PATH` carries another Sphinx first, the child process is a different Sphinx and a different sphinx-needs -- or none, and the test dies in `subprocess` with `FileNotFoundError` rather than reporting anything about the build. All three failed that way from a bare shell, which is useblocks/sphinx-test-reports#145. The fix is the workspace's, not this suite's: `sphinx_needs_testkit.sphinx_build_command` builds `[sys.executable, "-m", "sphinx", ...]`, the same entry point the console script wraps. `tests/test_subprocess_fence.py` is the one-line fence, reading SOURCE because there is no result to read -- a site that spawns the bare word passes in every environment where `PATH` happens to be right, which is every CI job here. sphinx-mounts carries the identical file; the helper's own docstring already named this package as its third consumer. **And the workspace-only failure, which is worth its own paragraph.** `test_an_inner_pytest_session_leaves_the_model_intact` drives an in-process `pytest.main()` inside a `pytester` session. In a developer's default `.venv` that process has every installed plugin loaded, and pytest-playwright -- from the root `js` group, which the default `dev` group includes -- keeps a module-global soft-assertion scope in its `pytest_runtest_call` wrapper, so the nested session dies with *nested soft assertion scopes are not supported*. Every CI cell syncs `--no-default-groups --group test --group sphinx-N`, where the plugin is absent. **So this suite would have been green in CI and red for anyone running `poe test-reports`** -- the shape the brief's own gate list warns about. The innermost session now passes `-p no:playwright`. That line has to stay a single line, and there is a comment saying so: `test_an_inner_session_that_fails_to_configure_leaves_it_intact` derives its own fixture from this one by replacing the literal `str(inner)]) == 0`, which a wrapped call breaks -- measured, it turned that sibling red. Default `.venv`: **422 passed**, from 420 passed + 1 failed (the collision) + the new fence. --- .../sphinx-test-reports/tests/test_env.py | 4 +++- .../tests/test_pytest_plugin.py | 12 +++++++++- .../tests/test_subprocess_fence.py | 22 +++++++++++++++++++ .../tests/test_test_ctest_file.py | 4 +++- .../tests/test_test_file.py | 4 +++- 5 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 packages/sphinx-test-reports/tests/test_subprocess_fence.py diff --git a/packages/sphinx-test-reports/tests/test_env.py b/packages/sphinx-test-reports/tests/test_env.py index f6ec4059d..88906e59e 100644 --- a/packages/sphinx-test-reports/tests/test_env.py +++ b/packages/sphinx-test-reports/tests/test_env.py @@ -5,6 +5,8 @@ import pytest import sphinx +from sphinx_needs_testkit import sphinx_build_command + sphinx_version = int( sphinx.__version__.split(".")[0] + sphinx.__version__.split(".")[1] ) @@ -117,7 +119,7 @@ def test_doc_env_report_warning_build_html(test_app): app = test_app output = str( check_output( - ["sphinx-build", "-a", "-E", "-b", "html", app.srcdir, app.outdir], + sphinx_build_command("-a", "-E", "-b", "html", app.srcdir, app.outdir), stderr=STDOUT, universal_newlines=True, ) diff --git a/packages/sphinx-test-reports/tests/test_pytest_plugin.py b/packages/sphinx-test-reports/tests/test_pytest_plugin.py index 4828ad2c4..e0a07232b 100644 --- a/packages/sphinx-test-reports/tests/test_pytest_plugin.py +++ b/packages/sphinx-test-reports/tests/test_pytest_plugin.py @@ -106,6 +106,16 @@ def test_runs(): assert True """ +# `-p no:playwright` in the innermost session below. That session is started in process by +# a test that is itself running under a pytest which has every installed plugin loaded, and +# pytest-playwright -- the workspace's `js` group, which the default `dev` group includes -- +# keeps a module-global soft-assertion scope in its `pytest_runtest_call` wrapper. A session +# nested inside that one dies with "nested soft assertion scopes are not supported". Every CI +# cell syncs `--no-default-groups --group test --group sphinx-N`, where the plugin is absent, +# so without this the suite is green in CI and red in a developer's default environment. +# +# It has to stay ONE line: `test_an_inner_session_that_fails_to_configure_leaves_it_intact` +# derives its own fixture from this string by replacing `str(inner)]) == 0`. NESTED = """ import pytest from sphinxcontrib.test_reports.pytest_plugin import add_test_properties @@ -121,7 +131,7 @@ def test_inner_session(tmp_path): inner = tmp_path / "test_inner.py" inner.write_text("def test_inner():\\n assert True\\n") (tmp_path / "pytest.ini").write_text("[pytest]\\n") - assert pytest.main(["-q", "-p", "no:cacheprovider", "-p", "PLUGIN", str(inner)]) == 0 + assert pytest.main(["-q", "-p", "no:cacheprovider", "-p", "no:playwright", "-p", "PLUGIN", str(inner)]) == 0 @add_test_properties(partially_verifies=["REQ_2"]) diff --git a/packages/sphinx-test-reports/tests/test_subprocess_fence.py b/packages/sphinx-test-reports/tests/test_subprocess_fence.py new file mode 100644 index 000000000..5086d7971 --- /dev/null +++ b/packages/sphinx-test-reports/tests/test_subprocess_fence.py @@ -0,0 +1,22 @@ +"""No test in this suite spawns the build command resolved on ``PATH``. + +Three sites here did (``test_env.py``, ``test_test_file.py``, ``test_test_ctest_file.py``), +and all three failed from an unactivated shell -- the bare word resolves to whatever Sphinx +``PATH`` happens to carry first, which is not the environment under test, and to nothing at +all when there is none. That is useblocks/sphinx-test-reports#145; the fix travelled into +the workspace's shared test layer as ``sphinx_build_command`` rather than as three local +argv lists. + +The walk is that layer's, so this suite and sphinx-mounts' fence the same rule the same +way, and a fourth suite gets the fence with the helper rather than a file to copy. +""" + +from __future__ import annotations + +from pathlib import Path + +from sphinx_needs_testkit import assert_no_bare_sphinx_build + + +def test_no_test_in_this_tree_spawns_the_bare_command() -> None: + assert_no_bare_sphinx_build(Path(__file__).parent) diff --git a/packages/sphinx-test-reports/tests/test_test_ctest_file.py b/packages/sphinx-test-reports/tests/test_test_ctest_file.py index 644b1a8d2..e5d2e5117 100644 --- a/packages/sphinx-test-reports/tests/test_test_ctest_file.py +++ b/packages/sphinx-test-reports/tests/test_test_ctest_file.py @@ -2,6 +2,8 @@ import pytest +from sphinx_needs_testkit import sphinx_build_command + @pytest.mark.parametrize( "test_app", @@ -29,7 +31,7 @@ def test_test_ctest_file(test_app): out_dir = srcdir / "_build" out = subprocess.run( - ["sphinx-build", "-M", "html", srcdir, out_dir], + sphinx_build_command("-M", "html", srcdir, out_dir), capture_output=True, check=False, ) diff --git a/packages/sphinx-test-reports/tests/test_test_file.py b/packages/sphinx-test-reports/tests/test_test_file.py index dfc4c9b40..c7d82114c 100644 --- a/packages/sphinx-test-reports/tests/test_test_file.py +++ b/packages/sphinx-test-reports/tests/test_test_file.py @@ -3,6 +3,8 @@ import pytest from bs4 import BeautifulSoup +from sphinx_needs_testkit import sphinx_build_command + @pytest.mark.parametrize( "test_app", @@ -30,7 +32,7 @@ def test_test_file_needs_extra_options_no_warning(test_app): out_dir = srcdir / "_build" out = subprocess.run( - ["sphinx-build", "-M", "html", srcdir, out_dir], + sphinx_build_command("-M", "html", srcdir, out_dir), capture_output=True, check=False, ) From 02e6236fd9f95012072fda56e84c5b4902bec765 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:43 +0200 Subject: [PATCH 152/159] =?UTF-8?q?=F0=9F=93=9A=20Make=20the=20sphinx-test?= =?UTF-8?q?-reports=20docs=20build=20clean=20in=20the=20workspace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `uv run poe docs-reports` is `-nW --keep-going`, like every docs task here. Five warnings, each with its own cause. **The renderer (3).** `docs/conf.py` pointed `plantuml` at `docs/utils/plantuml.jar`, a second copy of the tool at a second version, which the import removed. It now resolves the renderer through the chain the whole workspace agrees on -- `PLANTUML_JAR`, then the jar committed at `vendor/plantuml/` that `vendor/plantuml/pin.toml` names, then a `plantuml` executable on `PATH` -- written out here rather than imported, exactly as `packages/sphinx-needs/docs/conf.py` writes it out and for the same reason: a docs build must not import a test-only member. Of the three EXTENSION packages these are the only docs that render (13 `needflow` directives across three pages -- sphinx-needs' own docs render far more), so this is not decorative. **The shipped template (1), and it is a user-facing bug.** `src/sphinxcontrib/test_reports/directives/test_report_template.txt` ends with a `literalinclude` of *itself* by a path with no `src/` in it, so the `src/` move broke it. That file is not a docs page -- it is the DEFAULT `tr_report_template`, and it ships in the wheel, so **every project using the default template already emits a literalinclude of a path that exists only in this package's own checkout**. Verified in the published 2.0.0 wheel. The path is fixed here; the released bug is an issue of its own, because it affects users and is not this pull request's to fix. **A nitpick target (1).** `docs/pytest.rst` cross-referenced `apply_test_metadata` with `:func:`, and these docs run no autodoc, so there is no target to resolve. It was invisible upstream: Read the Docs' `fail_on_warning` is `-W` without `-n`, and the retired Makefile passed neither. Beside those, three links that the move made wrong: the issue tracker in `docs/support.rst` (now this repository's, with a note to set the `pkg:` label), the theme's `repo_url`, and the `README.rst` logo, which pointed at `raw.githubusercontent.com/.../sphinx-test-reports` and would have gone stale the moment that repository was archived. Finally, `docs/changelog.rst`'s `Unreleased` section loses `:Released: under development`. That line is not cosmetic: `poe bump` refuses to run at all while the newest `:Released:` is neither `DD.MM.YYYY` nor `YYYY-MM-DD`, so until it went, this member could not have been released from this workspace. build succeeded. (0 warnings, -nW --keep-going) --- packages/sphinx-test-reports/README.rst | 2 +- .../sphinx-test-reports/docs/changelog.rst | 1 - packages/sphinx-test-reports/docs/conf.py | 69 ++++++++++++++++--- packages/sphinx-test-reports/docs/pytest.rst | 2 +- packages/sphinx-test-reports/docs/support.rst | 5 +- .../directives/test_report_template.txt | 2 +- 6 files changed, 67 insertions(+), 14 deletions(-) diff --git a/packages/sphinx-test-reports/README.rst b/packages/sphinx-test-reports/README.rst index b5c8ed1d3..083d1593c 100644 --- a/packages/sphinx-test-reports/README.rst +++ b/packages/sphinx-test-reports/README.rst @@ -1,7 +1,7 @@ Sphinx-Test-Reports =================== -.. image:: https://raw.githubusercontent.com/useblocks/sphinx-test-reports/master/docs/_static/sphinx-test-reports-logo.png +.. image:: https://raw.githubusercontent.com/useblocks/sphinx-needs/master/packages/sphinx-test-reports/docs/_static/sphinx-test-reports-logo.png Sphinx-Test-Reports shows test results of your unit tests inside your sphinx documentation. diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 049d36f51..2abd30785 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -5,7 +5,6 @@ Changelog Unreleased ---------- -:Released: under development .. _`release:2.0.0`: diff --git a/packages/sphinx-test-reports/docs/conf.py b/packages/sphinx-test-reports/docs/conf.py index 80095f543..ea22df6f2 100644 --- a/packages/sphinx-test-reports/docs/conf.py +++ b/packages/sphinx-test-reports/docs/conf.py @@ -9,6 +9,7 @@ import datetime import os +import shutil # 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 @@ -16,6 +17,8 @@ # # import os import sys +import tomllib +from pathlib import Path from packaging.version import Version @@ -57,14 +60,62 @@ "sphinx_immaterial", ] -local_plantuml_path = os.path.join(os.path.dirname(__file__), "utils", "plantuml.jar") -plantuml = f"java -Djava.awt.headless=true -jar {local_plantuml_path}" -# If we are running on windows, we need to manipulate the path, -# otherwise plantuml will have problems. -if os.name == "nt": - plantuml = plantuml.replace("/", "\\") - plantuml = plantuml.replace("\\", "\\\\") +def _resolve_plantuml() -> str: + """How these docs render PlantUML, in the order the whole workspace agrees on. + + 1. ``PLANTUML_JAR``, through ``java``. An explicit choice wins, and a value naming no + file is an error rather than a silent fall-through. + 2. The workspace's committed jar, ``vendor/plantuml/plantuml-.jar``. + ``vendor/plantuml/pin.toml`` is the one place the version is written, and the jar is + committed beside it, so this route needs nothing of the environment -- which is what + lets Read the Docs build these docs with no network beyond its own install. + 3. A ``plantuml`` executable on ``PATH`` (``plantumlc`` first on Windows, whose + chocolatey ``plantuml`` shim is a non-blocking ``javaw`` launcher). + + These docs carried their own jar under ``docs/utils/`` until the import into this + workspace -- a second copy, at a second version, beside the test suite's own. The chain + is written out here rather than imported from the shared test layer, exactly as + ``packages/sphinx-needs/docs/conf.py`` writes it out: a docs build must not import a + test-only member, and a reader of this file should not have to look elsewhere to find + out what renders their diagrams. + """ + quoted = 'java -Djava.awt.headless=true -jar "{}"' + env_jar = os.environ.get("PLANTUML_JAR") + if env_jar: + if not os.path.isfile(env_jar): + raise RuntimeError( + f"PLANTUML_JAR names {env_jar!r}, which is not a file. Point it at a " + "plantuml jar, or unset it to render with the jar committed at " + "vendor/plantuml/." + ) + return quoted.format(env_jar) + vendor = Path(__file__).resolve().parents[3] / "vendor" / "plantuml" + pinned = None + if (pin := vendor / "pin.toml").is_file(): + version = tomllib.loads(pin.read_text(encoding="utf-8"))["version"] + pinned = vendor / f"plantuml-{version}.jar" + if pinned.is_file(): + return quoted.format(pinned) + for name in ("plantumlc", "plantuml") if os.name == "nt" else ("plantuml",): + if executable := shutil.which(name): + return executable + if pinned is None: + raise RuntimeError( + "no PlantUML to render these docs with, and this tree has no " + "vendor/plantuml/pin.toml naming one -- which is what an sdist looks like. " + "Set PLANTUML_JAR to a plantuml jar (with java on PATH), or install a " + "plantuml executable; in a checkout of the repository, " + "`uv run poe fetch-plantuml` downloads the pinned one." + ) + raise RuntimeError( + "no PlantUML to render these docs with. Run `uv run poe fetch-plantuml` to " + "download the pinned jar into vendor/plantuml/, or set PLANTUML_JAR to a plantuml " + "jar of your own (with java on PATH), or install a plantuml executable." + ) + + +plantuml = _resolve_plantuml() plantuml_output_format = "png" @@ -123,8 +174,8 @@ html_title = "Sphinx-Test-Reports" other_options = { - "repo_url": "https://github.com/useblocks/sphinx-test-reports", - "repo_name": "sphinx-test-reports", + "repo_url": "https://github.com/useblocks/sphinx-needs", + "repo_name": "sphinx-needs", "font": False, } html_theme_options.update(other_options) diff --git a/packages/sphinx-test-reports/docs/pytest.rst b/packages/sphinx-test-reports/docs/pytest.rst index cd2ced2ce..3991a2ebd 100644 --- a/packages/sphinx-test-reports/docs/pytest.rst +++ b/packages/sphinx-test-reports/docs/pytest.rst @@ -214,7 +214,7 @@ Metadata known only at run time ------------------------------- A parameterised test whose metadata comes from the file it is driven by cannot -use a decorator. :func:`apply_test_metadata` records the same properties from +use a decorator. ``apply_test_metadata`` records the same properties from inside the test body, and can point the case at the file that drove it instead of at the test function: diff --git a/packages/sphinx-test-reports/docs/support.rst b/packages/sphinx-test-reports/docs/support.rst index f9d87826d..b71e53c99 100644 --- a/packages/sphinx-test-reports/docs/support.rst +++ b/packages/sphinx-test-reports/docs/support.rst @@ -4,7 +4,10 @@ Support ======= If you find any bugs or have an idea for an improvement, feel free to open an entry on our issue-tracker at github: -https://github.com/useblocks/sphinx-test-reports +https://github.com/useblocks/sphinx-needs/issues + +Please add the ``pkg: sphinx-test-reports`` label, or pick *sphinx-test-reports* from the +"Package" dropdown of the issue form, so that it reaches the right maintainers. We are happy for each new entry and support wherever we can. diff --git a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report_template.txt b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report_template.txt index f33593e3e..ad81bf912 100644 --- a/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report_template.txt +++ b/packages/sphinx-test-reports/src/sphinxcontrib/test_reports/directives/test_report_template.txt @@ -47,5 +47,5 @@ Template -------- The following rst-code is used to generate the report. -.. literalinclude:: ../../sphinxcontrib/test_reports/directives/test_report_template.txt +.. literalinclude:: ../../src/sphinxcontrib/test_reports/directives/test_report_template.txt :language: rst From a9a52ad8c5bb9b4edc2a49060e79b9f7aa4b73e0 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:47 +0200 Subject: [PATCH 153/159] =?UTF-8?q?=F0=9F=94=A7=20Re-root=20sphinx-test-re?= =?UTF-8?q?ports'=20Read=20the=20Docs=20config=20at=20the=20repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **R11.** The file keeps its name and moves nowhere -- it arrived at `packages/sphinx-test-reports/.readthedocs.yaml` with the import -- but every path inside it was relative to the old repository root and is now relative to THIS one, which is what Read the Docs' monorepo guide requires and what both sibling packages already do. Three things differ from the siblings, each for a reason: * **`apt_packages: [default-jdk, graphviz]` stays.** Both SIBLING extensions' configs deliberately install none, because those docs draw nothing; these render 13 `needflow` directives across three pages. (sphinx-needs' own documentation renders too, and far more -- 48 of them -- and its config installs the same two packages. The contrast is with sphinx-mounts and sphinx-codelinks, not with every docs build here.) The jar is not installed -- `docs/conf.py` resolves the one committed at `vendor/plantuml/`, which is outside this package but inside the checkout RTD makes, so the build reaches the network for nothing beyond its own pip install. * **Two `python.install` entries, the sibling first**, as sphinx-codelinks has: a member installed alone would resolve `sphinx-needs` from PyPI rather than from the checkout beside it, and the build could then pass or fail on code this workspace does not have. * **The `exit 183` `post_checkout` block**, so that a pull request touching nothing under this package cancels the build instead of spending a runner on it. The comment records the one input outside the package that this filter deliberately ignores -- `vendor/plantuml/` -- and why that is safe. `os` and `tools.python` move to `ubuntu-24.04` / `3.13`, matching both siblings and the root `.python-version`, from `ubuntu-22.04` / `3.12`. The old `pre_create_environment` job (`echo "DOT details"; which dot`) was a debugging aid and does not survive. **The RTD project's own settings are not in this pull request and cannot be**: the repository URL has to be repointed at `useblocks/sphinx-needs` and `readthedocs_yaml_path` set to this file, both in the project's admin page, by someone with access (the project's users are danwos and ub_marco). The pull request body carries that checklist. --- .../sphinx-test-reports/.readthedocs.yaml | 85 ++++++++++++++++--- 1 file changed, 72 insertions(+), 13 deletions(-) diff --git a/packages/sphinx-test-reports/.readthedocs.yaml b/packages/sphinx-test-reports/.readthedocs.yaml index d378af319..1924ce12d 100644 --- a/packages/sphinx-test-reports/.readthedocs.yaml +++ b/packages/sphinx-test-reports/.readthedocs.yaml @@ -1,31 +1,90 @@ +# Read the Docs configuration for the sphinx-test-reports project. +# +# It lives HERE, next to the package, and the sphinx-test-reports RTD project points at it +# with its per-project "Build configuration file" setting (`readthedocs_yaml_path`). The +# sphinx-needs project keeps the repository-root `.readthedocs.yml` and must NOT be +# repointed: that setting applies to every version a project builds, so moving an existing +# project's config path makes every pre-move tag unbuildable. +# +# EVERY PATH BELOW IS RELATIVE TO THE REPOSITORY ROOT, not to this file -- RTD's monorepo +# guide is explicit about it -- which is why they all start `packages/sphinx-test-reports/`. version: 2 build: - os: ubuntu-22.04 + # These apt packages ARE needed, unlike both SIBLING extensions', whose configs + # deliberately install none: 13 `needflow` directives across `filter.rst`, + # `functions.rst` and `examples/index.rst` need graphviz's `dot`, and PlantUML needs a + # JDK. (sphinx-needs' own docs render too, and its config installs the same two.) The jar itself + # comes from the checkout -- `vendor/plantuml/` is outside this package, so + # `python.install` below does not carry it, but RTD checks out the whole repository, so + # the relative path `docs/conf.py` resolves finds it and nothing is downloaded. + os: ubuntu-24.04 apt_packages: - default-jdk - graphviz tools: - python: "3.12" + python: "3.13" jobs: - pre_create_environment: - - echo "DOT details" - - which dot - -# Build documentation in the "docs/" directory with Sphinx + post_checkout: + # Every pull request against this repository builds every Read the Docs project it + # has. A pull request that leaves `packages/sphinx-test-reports/` untouched has + # nothing for this one to build, so cancel it. Exit code 183 is Read the Docs' + # documented "skip" code + # (https://docs.readthedocs.com/platform/stable/guides/build/skip-build.html): the + # build is recorded as `cancelled`, and the commit status sent to GitHub is `success` + # with the description "Read the Docs build skipped", so no pull request is ever + # blocked by it. + # + # Why a plain two-dot `git diff` and not a merge base: Read the Docs clones the + # default branch with `--depth 1` and then fetches the pull-request head with + # `--depth 50`, so `origin/master` is a shallow root with no ancestry and + # `git merge-base` has nothing to walk. The diff therefore compares against master's + # CURRENT tip: if master moved and touched this package, the build runs although the + # pull request did not touch it. That is the safe direction; it never skips a build + # that was needed. + # + # `packages/sphinx-test-reports/` is ALMOST the complete set of inputs, and the one + # exception is deliberate: `docs/conf.py` also reads `vendor/plantuml/pin.toml` and + # the jar beside it. A bump there changes only which renderer version draws the + # diagrams, never whether the build succeeds, so it is not worth widening the filter + # and rebuilding this project for every workspace-level commit. + - | + if [ "$READTHEDOCS_VERSION_TYPE" != "external" ]; then + exit 0 + fi + if ! git rev-parse --verify --quiet origin/master > /dev/null; then + echo "origin/master is not available in this clone; building to be safe" + exit 0 + fi + if git diff --quiet origin/master -- packages/sphinx-test-reports/; then + echo "nothing under packages/sphinx-test-reports/ changed; skipping this build (exit 183)" + exit 183 + fi sphinx: - configuration: docs/conf.py + # `docs/conf.py` is IN the source directory, so Read the Docs' own invocation + # (`sphinx-build -b html …`, with no `-c`) finds it. + configuration: packages/sphinx-test-reports/docs/conf.py builder: html + # the same strictness the `docs-reports` poe task uses. Note it is `-W` without `-n`: + # the poe task and CI add the nitpicky flag, so they are the stricter gate of the two. fail_on_warning: true -# Optional but recommended, declare the Python requirements required -# to build your documentation -# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html - python: install: + # The workspace sibling FIRST, from this checkout. Read the Docs runs these entries in + # order with pip, and a member installed on its own would resolve `sphinx-needs` from + # PyPI -- the released version, not the one beside it -- so a docs build here could + # pass or fail on code the workspace does not have. With the sibling already installed + # the member's requirement is satisfied and pip fetches nothing (tight tracking keeps + # the checkout's version inside the member's floor and cap). + - method: pip + path: packages/sphinx-needs - method: pip - path: . + path: packages/sphinx-test-reports extra_requirements: + # the MEMBER's extra, not the root's `docs-reports` pass-through: RTD pip-installs + # the package directory itself, so the name it resolves is the member's own. An + # extra rather than a dependency group, because `python.install` has no way to + # install a PEP 735 group - docs From 903a6468a16c75bd651bd8447696f8e3b96480e7 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:50 +0200 Subject: [PATCH 154/159] =?UTF-8?q?=F0=9F=A7=AA=20Run=20sphinx-test-report?= =?UTF-8?q?s=20in=20CI,=20and=20fix=20the=20type=20gate's=20canary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **R12.** One more pytest step and one more Codecov upload in the Extensions cell, in the sphinx-codelinks shape, plus the fourth `codecov.yml` project status at `target: auto` -- this package arrived with an import and its coverage number has never been measured here. `reports.xml` joins `mounts.xml` and `codelinks.xml` in `.gitignore`: the cell runs three suites in one working directory, so each names its own report or the uploads all carry the first one's numbers under different flags. **No new tool installs.** Nothing in this suite renders a diagram, so the graphviz and PlantUML the cell already installs for sphinx-mounts are not for it, and it needs no libclang and no browser. The marginal cost is the ~14 s the suite takes, on a 1-3 minute job, times four cells. `--cov=sphinxcontrib.test_reports` is the IMPORT name, which for this member is not the distribution name with `-` -> `_`: it installs into the `sphinxcontrib` PEP 420 namespace. **A NEW job, `toolchain-free`.** The converter and the pytest plugin are meant to run where the documentation toolchain is not installed -- that is why Sphinx and sphinx-needs are an extra of this package rather than dependencies -- and the retired noxfile's `toolchain_free` session was the only thing keeping that true. It cannot become a matrix cell, and the reason is structural rather than a configuration gap: the root's `[project] dependencies` name every member, those are installed in EVERY environment, and sphinx-needs declares sphinx at runtime, so every environment a `uv sync` at this root can produce has Sphinx in it. The job therefore builds its environment outside the project with `uv pip install --no-sources`, exactly as `release.yaml`'s compat cell does, **asserts that sphinx, sphinx_needs and docutils are all absent** -- without which the job would pass while testing nothing it claims to -- and runs the ten toolchain-free modules with `-m "not toolchain"`. ~20 lines, ~40 s. `plugin_floor`, the noxfile's other lane, is deliberately not here; it belongs with the release that makes the plugin a shipped surface of its own. **A `Docs reports` job**, in the `docs-codelinks` shape plus the renderer these docs need (graphviz, and `PLANTUML_JAR` pointed at the vendored jar). R9 and R11 took this build from five warnings to zero, and without a job nothing holds that: the Read the Docs build is not a required check, it is `-W` without `-n`, and that project's settings do not point at this repository yet. sphinx-mounts has no docs job either, so this is a deliberate departure from that precedent rather than an oversight -- the difference is that these docs RENDER, which is the failure mode a build catches and review does not. The job's PlantUML step is the workspace's one capture shape -- `shell: bash`, `tr -d` on the capture, the export on the next line -- and **`tools/tests/test_ci_plantuml_steps.py` counts it**: that fence hard-codes how many CI steps run `fetch_plantuml.py` and says adding a rendering job means raising the numbers deliberately, "so that the addition is a decision someone made rather than a step nobody checked". This is that decision: eight sites, seven captures. (Both counts' prose was already one ahead of the constants -- the comment said seven captures while asserting six, and a docstring already called the Lint check "the eighth site" -- so after the bump the text and the numbers agree for the first time.) **And a fix to a hole that predates this pull request.** The Lint job's type-gate canary -- the step that plants a deliberate type error per package and demands the failure name the probe, because a stale `[tool.ty.src] include` makes ty check zero files and exit 0 -- probed only `sphinx-needs` and `sphinx-mounts`. **`sphinx-codelinks` was already missing from it**, so the gap was one package wide before this import and would have been two after. Both are added. It is three tokens on one line, and it is the difference between the gate being checked and being believed. --- .github/workflows/ci.yaml | 114 ++++++++++++++++++++++++- .github/workflows/test-extensions.yaml | 22 +++++ .gitignore | 1 + codecov.yml | 8 ++ tools/tests/test_ci_plantuml_steps.py | 9 +- 5 files changed, 149 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d1929ed1a..4056ecad3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -61,7 +61,7 @@ jobs: # ONE probe at a time, and one per package: with both planted at once a gate that had # dropped one package would still go red on the other and look healthy. run: | - probes="packages/sphinx-needs/src/sphinx_needs/_ty_gate_probe.py packages/sphinx-mounts/src/sphinx_mounts/_ty_gate_probe.py" + probes="packages/sphinx-needs/src/sphinx_needs/_ty_gate_probe.py packages/sphinx-mounts/src/sphinx_mounts/_ty_gate_probe.py packages/sphinx-codelinks/src/sphinx_codelinks/_ty_gate_probe.py packages/sphinx-test-reports/src/sphinxcontrib/test_reports/_ty_gate_probe.py" # shellcheck disable=SC2064 trap "rm -f $probes" EXIT for probe in $probes; do @@ -408,6 +408,116 @@ jobs: run: uv run --no-sync sphinx-build -nW --keep-going -b html docs docs/_build/html -T working-directory: packages/sphinx-codelinks + docs-reports: + name: Docs reports + runs-on: ubuntu-latest + permissions: + contents: read + # sphinx-test-reports' docs went from five warnings to zero in this pull request, and + # without this job nothing holds that: the Read the Docs build is not a required check, + # it is `-W` WITHOUT `-n`, and that project's settings do not point at this repository + # yet. `docs.yaml`'s linkcheck is scoped to sphinx-needs' own docs. sphinx-mounts has no + # docs job either, so this is a deliberate departure from that precedent rather than an + # oversight -- the difference is that these docs RENDER, which is a failure mode a build + # catches and a reviewer does not. + # + # No `paths:` filter and no `if:`: a change to `src/` with no change to `docs/` is + # precisely the change that breaks a docs build. + steps: + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v10.0.1 + with: + enable-cache: true + cache-suffix: docs-reports + # no `python-version`, so this runs on the root `.python-version` + cache-python: true + - name: Install graphviz + # 13 `needflow` directives across three pages need `dot`; PlantUML needs a JDK, + # which every Linux runner image already has + run: sudo apt-get install graphviz + - name: Point PLANTUML_JAR at the vendored jar + # the one jar `vendor/plantuml/pin.toml` names, verified against the pin first. + # The capture shape is the workspace's ONE shape and is fenced as such by + # `tools/tests/test_ci_plantuml_steps.py`, on every site including ubuntu-only ones: + # `shell: bash` for pipefail, `tr -d` for Windows' carriage return, and the export on + # the very next line. Uniform so that a step copied anywhere is already right -- + # vendor/plantuml/README.md, "The step CI runs", says why each clause matters. + shell: bash + run: | + jar="$(uv run --no-project python tools/src/sn_tools/fetch_plantuml.py --verify | tr -d '\r')" + echo "PLANTUML_JAR=$jar" >> "$GITHUB_ENV" + - name: Install the docs environment + # `docs.yaml`'s idiom -- sync ONE environment, then run the builder in it with + # `--no-sync` -- rather than `uv run --frozen poe docs-reports`, which pays for two + # environments because poe itself lives in the `dev` group. Keep in step with the + # `docs-reports` poe task. + run: uv sync --frozen --no-default-groups --extra docs-reports + - name: Build the docs + # `-nW --keep-going`, from the poe task: a nitpick warning is an error here, which + # is stricter than the Read the Docs build and is the point of the job + run: uv run --no-sync sphinx-build -nW --keep-going -b html docs docs/_build/html -T + working-directory: packages/sphinx-test-reports + + toolchain-free: + name: Toolchain-free (sphinx-test-reports) + runs-on: ubuntu-latest + permissions: + contents: read + # sphinx-test-reports' converter (`test-reports`) and its pytest plugin are meant to run + # where the documentation toolchain is NOT installed -- that is why Sphinx and + # sphinx-needs are an EXTRA of that package rather than dependencies. This job is the + # only thing that keeps it true: it installs the package with the dependencies it + # declares, asserts that sphinx, sphinx_needs and docutils are all absent, and runs the + # modules that do not need a build. + # + # It CANNOT be a matrix cell, and that is structural rather than a configuration gap: + # the root's `[project] dependencies` name every member, `[project] dependencies` are + # installed in every environment, and sphinx-needs declares sphinx at runtime -- so + # every environment a `uv sync` at this root can produce has Sphinx in it, whatever + # groups are asked for. The environment is therefore built OUTSIDE the project with + # `uv pip install --no-sources`, exactly as `release.yaml`'s compat cell builds its own. + # + # It replaces the `toolchain_free` session of the noxfile the import retired. That + # noxfile's other lane, `plugin_floor` (the plugin on the oldest pytest of each Python), + # is deliberately NOT here: it belongs with the release that makes the plugin a shipped + # surface of its own. + steps: + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v10.0.1 + with: + enable-cache: true + cache-suffix: toolchain-free + cache-python: true + - name: Build an environment with no documentation toolchain in it + run: | + uv venv /tmp/toolchain-free + uv pip install --python /tmp/toolchain-free --no-sources "packages/sphinx-test-reports[pytest]" + - name: Assert the toolchain really is absent + # the fence's fence. Without this the job would still pass with Sphinx installed, + # and would be testing nothing it claims to test. + run: | + /tmp/toolchain-free/bin/python -c " + import importlib.util, sys + present = [m for m in ('sphinx', 'sphinx_needs', 'docutils') if importlib.util.find_spec(m)] + sys.exit(f'toolchain installed: {present}' if present else 0) + " + - name: Run the modules that need no documentation build + # From the REPOSITORY ROOT, so pytest's rootdir is this repository and the root + # `[tool.pytest.ini_options]` applies -- which is where the `toolchain` marker is + # registered, so `-m "not toolchain"` deselects rather than warning. + run: | + /tmp/toolchain-free/bin/python -m pytest -q -m "not toolchain" \ + packages/sphinx-test-reports/tests/test_cli_config.py \ + packages/sphinx-test-reports/tests/test_cli_convert.py \ + packages/sphinx-test-reports/tests/test_identity.py \ + packages/sphinx-test-reports/tests/test_junit_parser.py \ + packages/sphinx-test-reports/tests/test_junit_parser_gtest.py \ + packages/sphinx-test-reports/tests/test_needs_export.py \ + packages/sphinx-test-reports/tests/test_project_config.py \ + packages/sphinx-test-reports/tests/test_pytest_plugin.py \ + packages/sphinx-test-reports/tests/test_result_vocabulary.py \ + packages/sphinx-test-reports/tests/test_toolchain.py + bazel: name: Mounts Bazel integration runs-on: ubuntu-latest @@ -485,6 +595,8 @@ jobs: - tests-no-mpl - tests-extensions - docs-codelinks + - docs-reports + - toolchain-free - bazel - smoke-needs diff --git a/.github/workflows/test-extensions.yaml b/.github/workflows/test-extensions.yaml index 5743c84cd..76ce7446f 100644 --- a/.github/workflows/test-extensions.yaml +++ b/.github/workflows/test-extensions.yaml @@ -143,3 +143,25 @@ jobs: flags: codelinks files: ./codelinks.xml fail_ci_if_error: true + - name: "sphinx-test-reports: pytest" + # `!cancelled()` plus the prologue check, for the reason the step above gives: a + # failure in either suite before it must not hide this one, but a failed + # `prepare-cell` must, or `uv run --no-sync` silently creates an empty environment + # and the step dies on an import error four steps from the cause. + # + # `--cov=sphinxcontrib.test_reports` is the IMPORT name, which is not the + # distribution name with `-`->`_` for this member -- it installs into the + # `sphinxcontrib` PEP 420 namespace. This cell needs no new tool: nothing in this + # suite renders a diagram, so neither the graphviz nor the PlantUML the cell + # already installs for sphinx-mounts is for it. + if: ${{ !cancelled() && steps.prepare.outcome == 'success' }} + run: uv run --no-sync pytest -v packages/sphinx-test-reports/tests --durations=25 --cov=sphinxcontrib.test_reports --cov-report=xml:reports.xml --cov-report=term-missing + - name: "sphinx-test-reports: upload to Codecov" + if: inputs.upload-coverage && github.event.pull_request.head.repo.full_name == github.repository && github.repository == 'useblocks/sphinx-needs' && github.actor != 'dependabot[bot]' + uses: codecov/codecov-action@v7 + with: + token: ${{ secrets.CODECOV_TOKEN }} + name: sphinx-test-reports-pytests + flags: reports + files: ./reports.xml + fail_ci_if_error: true diff --git a/.gitignore b/.gitignore index 294e7e697..6469e9e81 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ coverage.xml # coverage report (`--cov-report=xml:.xml`) instead of sharing `coverage.xml` mounts.xml codelinks.xml +reports.xml .ty_cache # packages/sphinx-codelinks' tests write these at the CWD: `tests/test_cmd.py` writes diff --git a/codecov.yml b/codecov.yml index 5fd7f3ae3..12ed7f29d 100644 --- a/codecov.yml +++ b/codecov.yml @@ -24,6 +24,14 @@ coverage: flags: [codelinks] target: auto threshold: 0.5% + # sphinx-test-reports, uploaded by the same cell with `flags: reports`, from its own + # `--cov-report=xml:reports.xml`. `target: auto` for the third time and the same + # reason: this package arrived with an import and its number has never been measured + # here + reports: + flags: [reports] + target: auto + threshold: 0.5% patch: default: target: 67% diff --git a/tools/tests/test_ci_plantuml_steps.py b/tools/tests/test_ci_plantuml_steps.py index 180ca8465..b2fdde516 100644 --- a/tools/tests/test_ci_plantuml_steps.py +++ b/tools/tests/test_ci_plantuml_steps.py @@ -50,8 +50,8 @@ REPO = Path(__file__).resolve().parents[2] SCRIPT = "tools/src/sn_tools/fetch_plantuml.py" -# The seven sites, counted by hand on this head and asserted below. Six CAPTURE the jar's -# path into `PLANTUML_JAR`; the seventh is CI's Lint job, which runs the same `--verify` with +# The eight sites, counted by hand on this head and asserted below. Seven CAPTURE the jar's +# path into `PLANTUML_JAR`; the eighth is CI's Lint job, which runs the same `--verify` with # no pipe and no capture — so it needs neither `shell: bash` nor the `tr`, and a plain `run:` # under `bash -e` already carries the script's exit status. # @@ -59,6 +59,7 @@ # tests-extensions x4) # .github/workflows/benchmark.yaml benchmarks capture # .github/workflows/ci.yaml bazel capture +# .github/workflows/ci.yaml docs-reports capture # .github/workflows/ci.yaml tests-no-mpl capture # .github/workflows/docs.yaml linkcheck capture # .github/workflows/release.yaml build capture @@ -66,8 +67,8 @@ # # Adding a job that renders means adding a site and raising these numbers — deliberately, so # that the addition is a decision someone made rather than a step nobody checked. -EXPECTED_SITES = 7 -EXPECTED_CAPTURES = 6 +EXPECTED_SITES = 8 +EXPECTED_CAPTURES = 7 @dataclass(frozen=True) From 6c1b260788367f5ee93467fa765a8c7f8b7974f9 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:54 +0200 Subject: [PATCH 155/159] =?UTF-8?q?=F0=9F=94=A7=20Teach=20the=20release=20?= =?UTF-8?q?workflow=20this=20member's=20module=20name,=20and=20its=20compa?= =?UTF-8?q?t=20cell=20its=20extras?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **R13, two defects with one fix each. Both are invisible until a release job runs**, which is why they are fixed now rather than found at the worst possible moment. **1. `module=${DIST//-/_}` derives a module that does not exist.** For this member that is `sphinx_test_reports`, and the package installs into the `sphinxcontrib` PEP 420 namespace: the real import name is `sphinxcontrib.test_reports`, declared in `[tool.flit.module]`. The `import_check` walk would have failed with `ModuleNotFoundError` on every release of it. The step now reads that key and falls back to the derivation for the three members that declare no such table -- `check_workspace.Member.module` and `import_check.py` have both honoured it from the start, so this brings the third reader into line. The comment it replaces predicted this member by name. Verified against all four manifests: `sphinx_needs`, `sphinx_mounts`, `sphinx_codelinks`, `sphinxcontrib.test_reports`. **2. The compat cell installs the wheel with no extras, and 2.0.0 put Sphinx in one.** Measured on the built wheel: `Requires-Dist: lxml`, full stop -- both Sphinx and sphinx-needs sit behind the `sphinx` extra, so that the converter and the pytest plugin install without a documentation toolchain. Run by hand, the cell fails the `import_check` walk `6 of 25 modules ... No module named 'sphinx_needs'`. The workflow already has exactly the right mechanism and needed no change for this half: a per-member `compat-requirements.txt`, installed with `-r` before the wheel and passed again as a `-c` constraint. Both siblings use it, each with a comment explaining why theirs exists; this one explains what is different about this member -- it is the first here whose RUNTIME dependencies are optional, so the file covers the package's own requirements rather than a test-only need. --- .github/workflows/release.yaml | 25 ++++++++++++---- .../compat-requirements.txt | 29 +++++++++++++++++++ 2 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 packages/sphinx-test-reports/compat-requirements.txt diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9cc014926..d4edf3df4 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -155,11 +155,26 @@ jobs: # FileNotFoundError on a runner or -- worse, locally -- silently use whatever # `sphinx-build` an activated virtualenv happens to have left on PATH export PATH="/tmp/compat/bin:$PATH" - # both of these assume the distribution name IS the directory name and, with - # `-`->`_`, the module name. `check_workspace.py` deliberately honours - # `[tool.flit.module] name`, so a second member that sets it needs this step - # taught the same thing - module=${DIST//-/_} + # The distribution name IS the directory name, but it is NOT always the module + # name with `-`->`_`: sphinx-test-reports installs into the `sphinxcontrib` + # PEP 420 namespace and declares `[tool.flit.module] name = + # "sphinxcontrib.test_reports"`, for which the derivation below yields + # `sphinx_test_reports` -- a module that does not exist, so the walk would fail + # with `ModuleNotFoundError` on every release of it. `check_workspace.Member.module` + # has honoured that key from the start and this step now does too, falling back to + # the derivation for every member that declares no such table (all three others). + # The comment this replaces predicted exactly this member. + module=$(/tmp/compat/bin/python - "$DIST" <<'PYEOF' + import pathlib, sys, tomllib + + dist = sys.argv[1] + manifest = pathlib.Path("packages", dist, "pyproject.toml") + data = tomllib.loads(manifest.read_text(encoding="utf-8")) + declared = data.get("tool", {}).get("flit", {}).get("module", {}).get("name") + print(declared or dist.replace("-", "_")) + PYEOF + ) + echo "walking module: $module" # Import every module of the wheel BEFORE the suite. A name that is missing from # a dependency AS PUBLISHED is then reported in seconds, by name, instead of # somewhere inside a six-minute pytest run -- and `--expect-prefix` subsumes the diff --git a/packages/sphinx-test-reports/compat-requirements.txt b/packages/sphinx-test-reports/compat-requirements.txt new file mode 100644 index 000000000..5f18834c5 --- /dev/null +++ b/packages/sphinx-test-reports/compat-requirements.txt @@ -0,0 +1,29 @@ +# The RELEASED dependencies this package needs beyond what its wheel declares, for the +# compat cell in .github/workflows/release.yaml -- the one gate that runs a member's suite +# against everything as PUBLISHED rather than as checked out. It is installed BEFORE the +# wheel and then passed again as a `-c` constraint, so it cannot be downgraded by the +# wheel's own `Requires-Dist`. +# +# This file covers something neither sibling's does: sphinx-test-reports is the first member +# here whose RUNTIME dependencies are optional. Its 2.0.0 release moved Sphinx and +# sphinx-needs behind a `sphinx` extra -- so that the `test-reports` converter and the pytest +# plugin install without a documentation toolchain -- and the compat cell installs a bare +# wheel path with no extras. Measured on the built wheel: `Requires-Dist` is `lxml`, full +# stop. +# +# Without these two lines the failure is LOUD rather than silent, which is the good case: +# `release.yaml` runs the `import_check` walk BEFORE pytest, and that walk fails +# `FAIL 6 of 25 modules failed to import` naming `sphinx_needs`, exit 1, under the step's +# default `bash -e`. Measured by running the cell by hand. With them, the walk imports 25 of +# 25 and the suite runs. +# +# Note that `sphinx` alone is already present in that environment -- the root `test` group +# carries it for the other suites -- and `sphinx-needs` is NOT, because it is a `[project]` +# dependency of the workspace ROOT and `uv export --only-group test` deliberately excludes +# it. It is named here anyway: this file states what THIS package needs, and a future change +# to the `test` group must not be able to take it away silently. +# +# The specifiers are the member's own `sphinx` extra, verbatim, so the cell tests the range +# the package actually claims. +sphinx>=7.4 +sphinx-needs>=8.5.0,<9 From 2b3767818356e5fbb03b9c00ce5c19aca2818d0c Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:11:57 +0200 Subject: [PATCH 156/159] =?UTF-8?q?=F0=9F=93=9A=20Record=20sphinx-test-rep?= =?UTF-8?q?orts=20in=20the=20places=20that=20list=20the=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **R15.** Four lists, one new file and one shim. * **`.github/labeler.yml`** and **`.github/issue-labeler.yml`**, plus the "Package" dropdown of both issue forms. These go together and cannot be split: the issue labeler runs with `sync-labels: 1`, so an option offered by a form with no pattern behind it means the label is SYNCED AWAY rather than merely not added. The comment about no two names containing another as a `\b`-delimited word is restated for four names, since it is an invariant someone has to re-check when a fifth arrives. * **The root `README.md` table gains TWO rows**, not one: **sphinx-codelinks was already missing from it**, so the table has listed two of three packages since that import. It now lists four of four. * **`packages/sphinx-test-reports/AGENTS.md`**, the package delta, with `CLAUDE.md` as the usual one-line shim. It carries the paragraph **R14 requires**: `check_workspace.py` check (5) prints no line at all for this member, for two independent reasons — a dotted module name that `module_version()` can never resolve, and no `__version__` literal anywhere, which the check treats as "not an error" by design. Silence that nobody wrote down is the failure mode; a documented gap is not. It also records what the move COST -- the sphinx-needs axis, five ruff families, `plugin_floor`, and the theme still being sphinx_immaterial -- none of which is visible in a diff. * **The root `AGENTS.md`** gains the member's row, its two commands, its RTD path, the renderer facts (the suite needs none; the docs need both -- of the three extension packages, the only docs that render, though sphinx-needs' own render far more), the `pkg:` label, and the correction from "all three packages ship a `tests/__init__.py`" to four. The history section now names three imports rather than two, and says that this one's commit map records the stripped jars. --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + .github/ISSUE_TEMPLATE/feature_request.yml | 1 + .github/issue-labeler.yml | 12 +- .github/labeler.yml | 3 + AGENTS.md | 35 ++-- README.md | 2 + packages/sphinx-test-reports/AGENTS.md | 219 +++++++++++++++++++++ packages/sphinx-test-reports/CLAUDE.md | 1 + 8 files changed, 258 insertions(+), 16 deletions(-) create mode 100644 packages/sphinx-test-reports/AGENTS.md create mode 100644 packages/sphinx-test-reports/CLAUDE.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b83412603..3fcacf3a5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -18,6 +18,7 @@ body: - sphinx-needs - sphinx-mounts - sphinx-codelinks + - sphinx-test-reports - the repository (workflows, CI, release, docker, tooling) validations: required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 6f000e001..ce23ea14e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -13,6 +13,7 @@ body: - sphinx-needs - sphinx-mounts - sphinx-codelinks + - sphinx-test-reports - the repository (workflows, CI, release, docker, tooling) validations: required: true diff --git a/.github/issue-labeler.yml b/.github/issue-labeler.yml index d0661c787..ce3f8cbda 100644 --- a/.github/issue-labeler.yml +++ b/.github/issue-labeler.yml @@ -7,14 +7,16 @@ # patterns case-insensitive, like the workflow's `contains()` gate, so the two agree. 'pkg: sphinx-needs': - '/### Package[^#]*\bsphinx-needs\b/i' -# `sphinx-mounts` contains neither `sphinx-needs` nor `sphinx-codelinks` as a -# \b-delimited word, and neither of those contains the others, so no two patterns can -# match one choice. Every pattern has to be present before its option is offered by a -# form, though: the workflow runs with `sync-labels: 1`, so a pattern that is missing when -# its option is picked means the label is synced away rather than merely not added +# No two of `sphinx-needs`, `sphinx-mounts`, `sphinx-codelinks` and `sphinx-test-reports` +# contains another as a \b-delimited word, so no two patterns can match one choice. Every +# pattern has to be present before its option is offered by a form, though: the workflow +# runs with `sync-labels: 1`, so a pattern that is missing when its option is picked means +# the label is synced away rather than merely not added 'pkg: sphinx-mounts': - '/### Package[^#]*\bsphinx-mounts\b/i' 'pkg: sphinx-codelinks': - '/### Package[^#]*\bsphinx-codelinks\b/i' +'pkg: sphinx-test-reports': + - '/### Package[^#]*\bsphinx-test-reports\b/i' 'pkg: workspace': - '/### Package[^#]*\bthe repository\b/i' diff --git a/.github/labeler.yml b/.github/labeler.yml index 0f79e1301..2ca576fde 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -15,6 +15,9 @@ 'pkg: sphinx-codelinks': - changed-files: - any-glob-to-any-file: 'packages/sphinx-codelinks/**' +'pkg: sphinx-test-reports': + - changed-files: + - any-glob-to-any-file: 'packages/sphinx-test-reports/**' 'pkg: sphinx-needs-testkit': - changed-files: - any-glob-to-any-file: 'packages/sphinx-needs-testkit/**' diff --git a/AGENTS.md b/AGENTS.md index 91d749f2b..f2e954b9a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,6 +24,7 @@ the shim. | its documentation | `packages/sphinx-needs/docs/` (changelog: `docs/changelog.rst`) | | sphinx-mounts' behaviour, tests, documentation | `packages/sphinx-mounts/{src/sphinx_mounts,tests,docs}/` — start at [`packages/sphinx-mounts/AGENTS.md`](packages/sphinx-mounts/AGENTS.md) | | sphinx-codelinks' behaviour, tests, documentation | `packages/sphinx-codelinks/{src/sphinx_codelinks,tests,docs}/` — start at [`packages/sphinx-codelinks/AGENTS.md`](packages/sphinx-codelinks/AGENTS.md) | +| sphinx-test-reports' behaviour, tests, documentation | `packages/sphinx-test-reports/{src/sphinxcontrib/test_reports,tests,docs}/` — start at [`packages/sphinx-test-reports/AGENTS.md`](packages/sphinx-test-reports/AGENTS.md) | | the fixtures, helpers and renderer resolution three suites share | `packages/sphinx-needs-testkit/` — a member this repository never publishes, installed through the root's `test` group and loaded by each suite's `tests/conftest.py` as a pytest plugin | | the two conformance corpora | `packages/sphinx-needs/tests/conformance/` (needflow) and `packages/sphinx-mounts/tests/fixtures/variant_condition_conformance.toml` (variant conditions) — both shared byte-for-byte with ubCode, which is their repository of record; do not reformat either (`.gitattributes` plus the yamlfmt and taplo excludes protect them) | | a package's metadata, dependencies and extras | `packages//pyproject.toml` | @@ -35,7 +36,7 @@ the shim. | the PlantUML renderer | `vendor/plantuml/` — `pin.toml` (version + sha256, the one place either is written), the committed `plantuml-.jar` it names, and a `README.md`. `uv run poe verify-plantuml` fences the two against each other | | CI | `.github/workflows/`, and `.github/scripts/` for the three checks that must run *inside* a CI environment | | the docker image | `docker/` — a repository-level deliverable, like the workflows | -| Read the Docs | sphinx-needs: `.readthedocs.yml`, and it stays at the root under that exact name — the configuration path applies to every version, so moving it makes older tags unbuildable. sphinx-mounts: `packages/sphinx-mounts/.readthedocs.yaml`, and sphinx-codelinks: `packages/sphinx-codelinks/.readthedocs.yaml`, each of which its own RTD project points at; every path inside those is relative to the REPOSITORY root, not to the file | +| Read the Docs | sphinx-needs: `.readthedocs.yml`, and it stays at the root under that exact name — the configuration path applies to every version, so moving it makes older tags unbuildable. sphinx-mounts: `packages/sphinx-mounts/.readthedocs.yaml`, sphinx-codelinks: `packages/sphinx-codelinks/.readthedocs.yaml`, and sphinx-test-reports: `packages/sphinx-test-reports/.readthedocs.yaml`, each of which its own RTD project points at; every path inside those is relative to the REPOSITORY root, not to the file | **`tools/` is the workspace's tooling — a virtual member, never released, whose manifest declares the tooling's dependencies; `.github/scripts/` keeps only the checks that must @@ -77,12 +78,14 @@ uv run poe # list every task with its help uv run poe test-needs -k # trailing words are appended to the task's command uv run poe test-mounts # the sphinx-mounts suite (bazel tests deselected) uv run poe test-codelinks # the sphinx-codelinks suite (adds the libclang group) +uv run poe test-reports # the sphinx-test-reports suite uv run poe lint # every prek hook over the whole tree uv run poe typecheck # ty over both packages, against the oldest supported sphinx uv run poe typecheck-js-needs # tsc over the vendored needstable.js (needs node) uv run poe docs-needs # the furo docs build uv run poe docs-mounts # the sphinx-mounts docs build uv run poe docs-codelinks # the sphinx-codelinks docs build +uv run poe docs-reports # the sphinx-test-reports docs build (renders; needs java + dot) uv run poe smoke-needs # build the wheel and test the built package uv run poe verify-plantuml # the committed PlantUML jar is the one its pin names uv run poe fetch-plantuml # download it -- a bump step; otherwise a hash check @@ -147,6 +150,13 @@ neither the jar nor the pin — `vendor/` is outside the directory flit builds t and a packager who runs the suite does so from a repository snapshot, where the jar, the pin and the testkit all are. The sdist is ≈7.4 MB rather than 28. +**sphinx-test-reports is the two cases at once**: its SUITE needs neither renderer (no test +document carries a rendering directive, and the dead 8.6 MB jar its tests used to carry left +with the import), while `docs-reports` DOES render — 13 `needflow` directives — so it needs +`java` and `dot`, and its `.readthedocs.yaml` keeps `apt_packages` where both SIBLING +extensions' have none. (sphinx-needs' own docs render too, and more: 48 needflow +directives.) + **sphinx-codelinks needs NEITHER renderer**: nothing in that package draws a diagram, its docs build installs no `apt_packages` and its CI cell asks for graphviz only because it shares a cell with sphinx-mounts. What it does need is `git` on `PATH` — its suite builds @@ -225,12 +235,13 @@ the rootdir, so the tasks carry `--ignore=performance` instead of naming `tests` the task's own command would be *added* to yours rather than replaced by it.) **A bare `pytest` at the root collects sphinx-needs' suite and the tooling's — not -sphinx-mounts' and not sphinx-codelinks'.** Their `tests` directories are deliberately -absent from `testpaths`: all three packages ship a `tests/__init__.py`, so under +sphinx-mounts', not sphinx-codelinks' and not sphinx-test-reports'.** Their `tests` directories are deliberately +absent from `testpaths`: all four packages ship a `tests/__init__.py`, so under `--import-mode=importlib` every `conftest.py` resolves to the module name `tests.conftest` and a rootdir-invoked pytest refuses the second outright — listing one there collects -*nothing*, rather than more. Run those suites through `poe test-mounts` and -`poe test-codelinks` (which cd into the package), the way CI does with an explicit path. +*nothing*, rather than more. Run those suites through `poe test-mounts`, +`poe test-codelinks` and `poe test-reports` (which cd into the package), the way CI does +with an explicit path. The Lint job's "Check a bare root pytest still collects" step is what keeps the list honest. @@ -385,12 +396,14 @@ history (`git blame` follows renames on its own and needs nothing), and the sphinx-mounts import landed as. **The imported packages' files are the opposite case and need no `--follow`.** -sphinx-mounts' and sphinx-codelinks' histories were imported in 2026-09 through -`git filter-repo`, which rewrote the paths in every historical commit, so from this -repository's point of view those files were always at `packages/sphinx-mounts/` and -`packages/sphinx-codelinks/` — a plain `git log ` (and GitHub's per-file *History* +sphinx-mounts', sphinx-codelinks' and sphinx-test-reports' histories were imported in +2026-09 through `git filter-repo`, which rewrote the paths in every historical commit, so +from this repository's point of view those files were always at `packages/sphinx-mounts/`, +`packages/sphinx-codelinks/` and `packages/sphinx-test-reports/` — a plain `git log ` (and GitHub's per-file *History* button) shows the whole thing. `packages//design/import-commit-map.txt` maps every -hash the old repository had to its hash here, for both of them. +hash the old repository had to its hash here, for all three of them. sphinx-test-reports' map +also records the one way its import is NOT byte-for-byte faithful: three PlantUML jar blobs +were stripped from its history. To rebase a pull request opened before the move, use `git rebase -X find-renames=15% origin/master`, and never `git rebase --apply`, `git am` @@ -409,7 +422,7 @@ move's pull request. Every issue and pull request carries one or more `pkg:` labels naming what it concerns: `pkg: ` (today `pkg: sphinx-needs`, `pkg: sphinx-mounts`, -`pkg: sphinx-codelinks` and `pkg: sphinx-needs-testkit`) or `pkg: workspace` for the repository +`pkg: sphinx-codelinks`, `pkg: sphinx-test-reports` and `pkg: sphinx-needs-testkit`) or `pkg: workspace` for the repository itself — workflows, CI, release, docker, tooling, the workspace root. Pull requests get theirs automatically from the paths they touch (`.github/labeler.yml`); the issue forms set it from their "Package" dropdown (`.github/issue-labeler.yml`). **An issue created diff --git a/README.md b/README.md index bdc453b8f..59559ecd0 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ definitions and the CI workflows. |---|---|---| | [`packages/sphinx-needs`](packages/sphinx-needs) | [`sphinx-needs`](https://pypi.org/project/sphinx-needs/) | the Sphinx extension for managing requirements and specifications — [documentation](https://sphinx-needs.readthedocs.io), [README](packages/sphinx-needs/README.rst) | | [`packages/sphinx-mounts`](packages/sphinx-mounts) | [`sphinx-mounts`](https://pypi.org/project/sphinx-mounts/) | the Sphinx extension that mounts external source trees into a build without copying or symlinking — [documentation](https://sphinx-mounts.useblocks.com), [README](packages/sphinx-mounts/README.md) | +| [`packages/sphinx-codelinks`](packages/sphinx-codelinks) | [`sphinx-codelinks`](https://pypi.org/project/sphinx-codelinks/) | fast source-code traceability for sphinx-needs — it scans source files for comment markers, turns them into needs, and links documentation to exact source lines — [documentation](https://codelinks.useblocks.com), [README](packages/sphinx-codelinks/README.md) | +| [`packages/sphinx-test-reports`](packages/sphinx-test-reports) | [`sphinx-test-reports`](https://pypi.org/project/sphinx-test-reports/) | test results as needs: JUnit/ctest/googletest XML and tox-envreport JSON become needs in a build, and a `test-reports` command turns the same reports into a `needs.json` without running Sphinx — [documentation](https://sphinx-test-reports.readthedocs.io), [README](packages/sphinx-test-reports/README.rst) | ## Why one repository, and why still several packages diff --git a/packages/sphinx-test-reports/AGENTS.md b/packages/sphinx-test-reports/AGENTS.md new file mode 100644 index 000000000..50942520f --- /dev/null +++ b/packages/sphinx-test-reports/AGENTS.md @@ -0,0 +1,219 @@ +# AGENTS.md — packages/sphinx-test-reports + +The delta for this package. Everything repository-level — the workspace layout, the +commands, the lock, lint/format/type-check configuration, the release recipe, the pull +request requirements — is in the ROOT [`AGENTS.md`](../../AGENTS.md), and this file does not +repeat it. What is here is what an agent has to know that is true of sphinx-test-reports and +not of the workspace. + +## Project Overview + +sphinx-test-reports turns test results into needs. It has **three surfaces, and only one of +them is a Sphinx extension** — which is the single most important thing to know about this +package, because it shapes the manifest, the CI and the split that is coming: + +- **the extension** — `test-file`, `test-suite`, `test-case`, `test-report`, `test-results` + and `test-env` directives, which read JUnit / ctest / googletest XML and tox-envreport + JSON and create sphinx-needs items from them, plus the `tr_link` dynamic function; +- **the converter** — a `test-reports` console script that turns the same reports into a + `needs.json` **without running Sphinx at all**; +- **the pytest plugin** — `sphinxcontrib.test_reports.pytest_plugin`, which writes the XML + shape the extension reads, including per-case properties for traceability. + +So **Sphinx and sphinx-needs are an `[project.optional-dependencies]` extra, not +dependencies**: `pip install sphinx-test-reports` gets you `lxml` and the last two surfaces; +`pip install "sphinx-test-reports[sphinx]"` gets you the extension. The published wheel's +`Requires-Dist` is `lxml` alone. Two things in this repository exist because of that — the +`toolchain-free` CI job and this package's `compat-requirements.txt` — and both are +described below. + +## Package structure + +```text +pyproject.toml # `[project]`, `[project.urls]`, `[project.scripts]` and + # `[tool.flit.module]`. NOT ruff, ty, pytest or dependency + # groups: those are the root's, and check (7) refuses them here +compat-requirements.txt # released deps the compat cell needs -- see "Releasing" below +.readthedocs.yaml # this package's RTD project; its paths are REPOSITORY-root relative +AUTHORS · LICENSE · README.rst +design/ # import-commit-map.txt: old hash -> new hash for the 2026-09 import + +src/sphinxcontrib/test_reports/ +├── __init__.py # the lazy `setup` re-export; `sphinxcontrib` is a PEP 420 namespace +├── test_reports.py # the extension entry point: directives, config values, fields +├── cli.py # the `test-reports` converter command +├── pytest_plugin.py # the pytest plugin +├── junitparser.py · jsonparser.py · results.py · identity.py · fields.py +│ # the toolchain-free core: parsers, the result vocabulary, the +│ # deterministic case IDs, the one field table both writers share +├── projectconfig.py # the `[test_reports]` ubproject.toml model and its discovery walk +├── needs_export.py · remote.py · config.py · environment.py · exceptions.py · toolchain.py +├── directives/ # one module per directive, all inheriting TestCommonDirective +├── functions/ # `tr_link`, a sphinx-needs dynamic function +├── css/ · schemas/JUnit.xsd +└── directives/test_report_template.txt # the DEFAULT tr_report_template -- it SHIPS + +tests/ # `tests/__init__.py` is why this path is not in the root testpaths +docs/ # conf.py sits IN the source dir; changelog.rst is stamped by `bump` +``` + +## The things that are true here and nowhere else + +### The module name is DOTTED, and one workspace fence is silent because of it + +This package installs into the `sphinxcontrib` PEP 420 namespace, so its import name is +`sphinxcontrib.test_reports` — not the distribution name with `-` → `_`. It says so in +`[tool.flit.module] name`, and three readers honour that key: `check_workspace.Member.module`, +`tools/src/sn_tools/import_check.py`, and (since this package's import) the `module=` step of +`.github/workflows/release.yaml`. + +**`check_workspace.py` check (5) prints NO line at all for this member, and that is expected +today.** Every other member gets an `OK … __version__ == ` line; this one is absent, +and absence is not something a reader notices — so it is written down here. Two independent +reasons, either of which alone would be enough: + +1. `module_version()` joins `member.module` as ONE path component, so it looks for + `src/sphinxcontrib.test_reports/__init__.py` — a directory that cannot exist. A dotted + name can never resolve. +2. **This package has no `__version__` literal anywhere.** `check_module_version` treats a + module without one as "not an error" by design, so even a non-dotted name would print + nothing until the literal exists. (`test_reports.py` carries a separate, hand-written + `VERSION = "2.0.0"`, which no gate reads.) + +What the gap costs is that `[project] version` and a module literal could drift apart — +which is nil in practice while nothing bumps this member. **Both reasons dissolve together** +when the package is renamed and gains a real `__version__`, which is the release that follows +this import. Until then, do not read check (5)'s silence as a pass. + +### The suite needs no renderer; the DOCS need two + +No test document here carries a rendering directive, so the suite needs neither `java` nor +graphviz's `dot`, and nothing in it copies a jar. (`tests/doc_test/utils/plantuml.jar` used +to sit there, 8.6 MB, and was dead: the three `custom_tr_*` configs pointed at it through +`os.getcwd()`, which under pytest is the rootdir. It left with the import.) + +`uv run poe docs-reports` is the opposite case, and among the three EXTENSION packages it +is the only docs build that renders: **13 `needflow` directives** across `filter.rst`, `functions.rst` and +`examples/index.rst`. It needs `java` and `dot` on `PATH`, and it resolves the jar through +the workspace chain — `PLANTUML_JAR`, then the committed `vendor/plantuml/` jar, then a +`plantuml` executable — written out in `docs/conf.py` rather than imported, because a docs +build must not import a test-only member. `.readthedocs.yaml` therefore keeps +`apt_packages: [default-jdk, graphviz]`, where both siblings' deliberately have none. +(sphinx-needs' own docs render far more than this -- 48 needflow directives -- and its +config installs the same two packages; the contrast is with the two sibling EXTENSIONS.) + +### `poe test-reports` NAMES its path, and that is not a style choice + +The task's command is `pytest tests`, not the `--ignore=` form the sphinx-needs tasks use. +**Eight modules of this package's own source are called `test_*.py`** — `test_reports.py`, +and `directives/test_case.py`, `test_common.py`, `test_env.py`, `test_file.py`, +`test_report.py`, `test_results.py`, `test_suite.py` — so a bare `pytest` from the package +directory collects `src/` and tries to import the extension as a test module. + +The cost is poe's documented passthrough behaviour: trailing words are APPENDED, so +`poe test-reports tests/test_cli_convert.py` runs that file *in addition to* the suite rather +than instead of it. `-k` and `-m` behave as expected. + +The short name is **`reports`**, not `test-reports`: the naming rule takes the distribution +name minus its `sphinx-` prefix, which here would collide with the task verb and give +`test-test-reports`. + +### One test drives an in-process pytest session, and the default environment breaks it + +`tests/test_pytest_plugin.py`'s `NESTED` fixture starts a `pytest.main()` *inside* a +`pytester` session. In a developer's default `.venv` that process has every installed plugin +loaded, and **pytest-playwright** — from the root `js` group, which the default `dev` group +includes — keeps a module-global soft-assertion scope, so the nested session dies with +*nested soft assertion scopes are not supported*. Every CI cell syncs +`--no-default-groups --group test --group sphinx-N`, where the plugin is absent. The fixture +therefore passes `-p no:playwright`, and **that line has to stay one line**: a sibling test +builds its own fixture from the same string by replacing the literal `str(inner)]) == 0`. + +This is the shape to remember: **run the suite in the default `.venv` AND in a cell.** Green +in one proves nothing about the other. + +### `tests/doc_test/utils/*.xml` contain the string `sphinxcontrib/` — leave them alone + +Three fixture files carry paths like `file="sphinxcontrib/test_reports/junitparser.py"`. +They are **test data** describing a historical pytest run, not paths anything opens. A +`src/`-move `sed` over the tree would corrupt them silently. `grep -rn 'sphinxcontrib/'` here +finds them; that is expected. + +### The `ubproject.toml` discovery boundary inside a monorepo + +`projectconfig.find_project_config()` walks UP from the start directory and stops at the +first `ubproject.toml`, else at the project boundary — `.git`, and only where no `.git` +exists anywhere above, `pyproject.toml`. **A `pyproject.toml` on the way up never ends the +walk inside a repository**, deliberately, so a member at `packages//pyproject.toml` +is understood to sit inside the project whose shared file is at the repository root. So the +behaviour is identical before and after the import. Two consequences: a repository-root +`ubproject.toml` (there is none today) would be picked up by every consumer under +`packages/`, and the boundary tests are unaffected because they build under `tmp_path`, +outside any repository. + +## Testing + +`uv run poe test-reports`, and `test-reports-sphinx7/8/9` for one matrix cell each. No +`--` before pytest arguments — poe forwards it and pytest reads the next word as a path. + +The suite spawns Sphinx builds in three places, and all three go through +`sphinx_needs_testkit.sphinx_build_command`, never the bare command resolved on `PATH`. +`tests/test_subprocess_fence.py` is what keeps that true; it reads SOURCE, because a site +that spawns the bare word passes in every environment where `PATH` happens to be right. + +**`toolchain-free` (a CI job in `ci.yaml`, not a cell) is the fence that keeps the converter +and the plugin importable with no documentation toolchain.** It cannot be a `uv sync` cell, +structurally: the root's `[project] dependencies` name every member, those are installed in +every environment, and sphinx-needs declares sphinx at runtime — so every environment this +root can produce has Sphinx in it. The job builds one outside the project with +`uv pip install --no-sources "packages/sphinx-test-reports[pytest]"`, asserts `sphinx`, +`sphinx_needs` and `docutils` are all absent, and runs the ten toolchain-free modules with +`-m "not toolchain"`. The `toolchain` marker itself lives in the ROOT's `markers` list. + +## Releasing + +`compat-requirements.txt` names `sphinx` and `sphinx-needs`, and unlike both siblings' it +covers the package's **own runtime** requirements rather than a test-only need — because they +are optional. The compat cell installs a bare wheel path with no extras, so without that file +the `import_check` walk fails `6 of 25 modules` on `sphinx_needs` before pytest even starts. + +## What the move into this workspace cost, deliberately + +Recorded here because none of it is visible in a diff: + +- **The sphinx-needs test axis went from five versions to one.** The retired `noxfile.py` + ran 6.0.1, 6.3.0, 7.0.0, 8.0.0 and 8.5.0; the workspace tests against the sibling in the + tree, and the published floor narrowed from `>=6.0.1` to `>=8.5.0,<9` with it. +- **Five ruff rule families left**: `FURB`, `PERF`, `PGH`, `PIE`, `SLF`, which this package + enabled and the root's shared set does not. All five are at zero violations today, which + is exactly why the loss would otherwise be silent. +- **`plugin_floor`** — the plugin against the oldest pytest of each Python — has no + replacement yet. It returns with the release that makes the plugin a shipped surface. +- **mypy left for ty**, with the whole package checked rather than the 15-entry `exclude` + the mypy configuration carried. +- **Beyond those five families, the root `extend-ignore`s `B904`, `ICN001`, `ISC004` and + `N818`**, which this package enabled and did not ignore. All four are at zero violations + today, so it costs nothing now. +- **`linkcheck` retired with no replacement.** The retired CI ran one; the workspace's + `docs.yaml` is scoped `paths: [packages/sphinx-needs/docs/**]` and runs in that + directory, so **these docs are link-checked nowhere** -- which is worth knowing given the + import repointed three stale links. Widening `docs.yaml` is a follow-up, not this import. +- **Three prek hooks retired with it**: `end-of-file-fixer`, `trailing-whitespace` and + `pretty-format-json`. The root config has no `pre-commit-hooks` repository at all. + +The docs still use `sphinx_immaterial` and the vendored `docs/ub_theme/`, where the rest of +the workspace uses furo. Keeping it costs nothing in the lock (sphinx-immaterial is already +there through sphinx-needs' `theme-im` extra); converging is a visible change to a live site +with 41 Read the Docs versions and has an issue of its own. + +## History + +Imported from `useblocks/sphinx-test-reports` in 2026-09 with its full history, rewritten so +that every historical commit already places its files under `packages/sphinx-test-reports/`. +So `git log ` works with **no `--follow`**, and `design/import-commit-map.txt` maps +every old hash to its hash here, for links into the archived old repository. + +**The import is not byte-for-byte faithful in exactly one respect**, and the commit map's +header records it: three PlantUML jar blobs (19.97 MB, 94% of the import's weight) were +stripped from every historical tree. A stripped historical checkout still installs, imports +and runs its suite; what it cannot do is render a diagram in a docs build of a 2020-era tree. diff --git a/packages/sphinx-test-reports/CLAUDE.md b/packages/sphinx-test-reports/CLAUDE.md new file mode 100644 index 000000000..43c994c2d --- /dev/null +++ b/packages/sphinx-test-reports/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md From f4075034171a3539e8753c58e27182f840b6f303 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:12:00 +0200 Subject: [PATCH 157/159] =?UTF-8?q?=F0=9F=93=9A=20Changelog:=20the=20move,?= =?UTF-8?q?=20what=20it=20costs,=20and=20what=20is=20NOT=20fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **R16.** The entry says what the import COSTS, not merely that the package moved, because none of it is visible in a diff and the CI diff is a poor place to learn it. * **The Sphinx-Needs axis goes from five tested versions to one.** The retired noxfile ran 6.0.1, 6.3.0, 7.0.0, 8.0.0 and 8.5.0; the workspace tests against the sibling in the tree, varying the Sphinx series instead. The declared floor narrows with it, from `sphinx-needs>=6.0.1` to `sphinx-needs>=8.5.0,<9`. Users on an older Sphinx-Needs keep 2.0.0; they do not silently get a package that no longer supports them. * Five ruff families, plus four more rules the shared set ignores (`B904`, `ICN001`, `ISC004`, `N818`); `plugin_floor`; **`linkcheck`, which retires with no replacement** because the workspace's link-check job is scoped to Sphinx-Needs' own docs; three formatting hooks; and mypy's fifteen-module `exclude`. **The shipped-template bullet does not claim a user-facing fix, because there is not one.** `literalinclude` resolves against the document doing the including, which for a user is somewhere in their own docs tree -- so no path written in the shipped template can be right for both that user and this repository. What this pull request fixed is this package's own documentation build. The bullet says exactly that, says the self-include is tracked separately, and points at the workaround: copy the template, which is what `tr_report_template` is for, and remove the `literalinclude` directive at its end -- both of its lines, or the whole Template section, since removing only the first leaves a stray `language: rst` field list. An earlier draft of this entry said "the path is fixed", which would have told users a bug was closed that is still open for them. The entry also carries the three bug fixes this pull request does make -- the `test-env` branch that raised `TypeError` without `:data:`, a directive written without `:file:` that raised `TypeError` instead of a readable error, and this repository's own template path -- and one deprecation cleanup, the second argument to docutils' `Text()`, which is deliberately NOT filed as a bug: docutils ignores that argument and removes it only in Docutils 2.0, so on every supported version the old call works. The entry also gives the four facts a user of the old repository needs: the new repository, where issues go, the prefixed tags, and that **the published package does not change** (same distribution, same import name, same command). `poe docs-reports` still builds clean with it. --- .../sphinx-test-reports/docs/changelog.rst | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/packages/sphinx-test-reports/docs/changelog.rst b/packages/sphinx-test-reports/docs/changelog.rst index 2abd30785..860c524d6 100644 --- a/packages/sphinx-test-reports/docs/changelog.rst +++ b/packages/sphinx-test-reports/docs/changelog.rst @@ -6,6 +6,83 @@ Changelog Unreleased ---------- +New and Improved +................ + +- 🔧 Sphinx-Test-Reports now lives in the Sphinx-Needs repository, as + `packages/sphinx-test-reports `__. + + The whole of ``useblocks/sphinx-test-reports``' history came with it, rewritten so that + every historical commit already places its files under that directory: ``git log`` and + ``git blame`` read the full history there with no ``--follow``, and + ``packages/sphinx-test-reports/design/import-commit-map.txt`` maps every hash the old + repository had to its hash in the new one. + + - **The repository** is now https://github.com/useblocks/sphinx-needs. Pull requests and + branches are opened there, under ``packages/sphinx-test-reports/``. + - **Issues** move with it. New ones carry the ``pkg: sphinx-test-reports`` label, which + the issue forms' "Package" dropdown sets. + - **Release tags** are prefixed: ``sphinx-test-reports-v2.0.0`` rather than ``2.0.0``. + Six of the ten historical bare names collided with existing Sphinx-Needs releases, so + the prefix is load-bearing rather than tidy. + - **The published package does not change.** The distribution is still + ``sphinx-test-reports``, the import is still ``sphinxcontrib.test_reports``, and the + ``test-reports`` command is still the same command. + +- 🔧 The shipped default ``tr_report_template`` ends with a ``literalinclude`` of itself, + by a path relative to the including document. **That is still broken for your project** + and this release does not fix it: ``literalinclude`` resolves against the document doing + the including, which for you is somewhere in your own docs tree, so no path written here + can be right for both. What changed is that this package's own documentation build + resolves it again after the move into the Sphinx-Needs workspace. The shipped template's + self-include is tracked separately; until it is resolved, a project that wants the + warning gone can copy the template -- which is what ``tr_report_template`` is for -- and + remove the ``literalinclude`` directive at its end, BOTH of its lines (the directive and + its ``:language: rst`` option), or the whole *Template* section. Removing only the first + line silences the warning but publishes a stray ``language: rst`` field list. + +- 🐛 A ``test-env`` directive written with ``:raw:`` and ``:env:`` but no ``:data:`` raised + ``TypeError`` instead of rendering: that branch iterated the data-option list outside the + guard its sibling branch keeps it inside. + +- 👌 The error node for a missing test file no longer passes a second argument to + ``docutils``' ``Text()``. That argument (``rawsource``) is ignored, deprecated, and due to + be removed in Docutils 2.0; on every docutils this package supports it still works, so + this was never a visible bug -- only a ``DeprecationWarning`` on each missing-file error. + +- 🐛 A directive written without a ``:file:`` option raised an unhandled ``TypeError`` + instead of a readable error. The check that was meant to catch it could never run: it sat + two lines below a slice of the missing value, which raised first. It now raises + ``TestReportFileNotSetError`` like every other configuration mistake. + +What the move costs, stated rather than left to the CI diff +............................................................ + +- **Sphinx-Needs is now tested at ONE version, not five.** The retired ``noxfile.py`` ran the + suite against Sphinx-Needs 6.0.1, 6.3.0, 7.0.0, 8.0.0 and 8.5.0; in the workspace the + suite runs against the sibling in the tree, across Sphinx 7.4, 8.2 and 9.1 instead. With + it, **the declared floor narrows from** ``sphinx-needs>=6.0.1`` **to** + ``sphinx-needs>=8.5.0,<9`` in the ``sphinx`` extra (and from ``>=6`` in ``docs``). That is + the workspace's tight-tracking policy for a dependency on a sibling, and it is enforced; + it means this release supports a narrower range of Sphinx-Needs than 2.0.0 did. +- **Five ruff rule families are no longer enforced here** -- ``FURB``, ``PERF``, ``PGH``, + ``PIE`` and ``SLF`` -- because the workspace has one shared rule set and they are not in + it. All five were at zero violations, so nothing changed in the code; what changed is that + a new violation would no longer be caught. +- **The** ``plugin_floor`` **lane is gone for now**: the pytest plugin is no longer tested + against the oldest pytest of each Python. The ``toolchain_free`` lane survives, as a CI + job that installs the package with no documentation toolchain at all and asserts it. +- **mypy is replaced by ty**, which checks the whole package -- the mypy configuration + excluded fifteen modules. +- **Beyond those five families, four rules this package enabled are now ignored** + (``B904``, ``ICN001``, ``ISC004``, ``N818``) because the shared set ignores them. All + four are at zero violations, so nothing in the code changed. +- **The documentation is no longer link-checked.** The retired CI ran ``linkcheck``; the + workspace's link-check job is scoped to Sphinx-Needs' own documentation. Tracked as a + follow-up. +- **Three formatting hooks retired with the old pre-commit configuration**: + ``end-of-file-fixer``, ``trailing-whitespace`` and ``pretty-format-json``. + .. _`release:2.0.0`: 2.0.0 From d68d10dffaa8fcca7af8a61baa592416183e9a70 Mon Sep 17 00:00:00 2001 From: Chris Sewell Date: Tue, 15 Sep 2026 18:27:52 +0200 Subject: [PATCH 158/159] =?UTF-8?q?=F0=9F=A7=AA=20Make=20two=20sphinx-test?= =?UTF-8?q?-reports=20loader=20tests=20portable=20to=20Windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Extensions windows-latest cell, this suite's first run on Windows, failed two tests in `tests/test_project_config.py::TestLoader`. Both are POSIX assumptions in tests added with useblocks/sphinx-test-reports#145, whose CI only ever ran on ubuntu-latest. Neither is a product bug: * `test_unreadable_file_is_a_config_error` makes its file unreadable with `chmod(0o000)`. On Windows `os.chmod` only sets the read-only attribute, so the file stays readable and nothing raises ("DID NOT RAISE TomlConfigError"). Its existing skip covered only root on POSIX; it now also skips on win32, with that reason. The behaviour it covers, wrapping an `OSError` from the open as a `TomlConfigError`, is platform-independent code. * `test_absolute_paths_stay_untouched` wrote `tmp_path` into a TOML basic string. A Windows path's backslashes are escape sequences there -- `\U` starts a unicode escape -- so the file was invalid TOML ("Invalid hex value (at line 2, column 16)"), which the loader correctly reported. The value is now a TOML literal string, which processes no escapes, so the test checks the same thing on every platform. Measured locally: a Windows-shaped path in a basic string reproduces CI's exact `TOMLDecodeError`, and the same path in a literal string parses equal to itself. The module passes 78 and the package suite 426 on macOS; the Windows cell is the proof for both changes. --- packages/sphinx-test-reports/tests/test_project_config.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/sphinx-test-reports/tests/test_project_config.py b/packages/sphinx-test-reports/tests/test_project_config.py index dfc4183f9..31f798234 100644 --- a/packages/sphinx-test-reports/tests/test_project_config.py +++ b/packages/sphinx-test-reports/tests/test_project_config.py @@ -309,6 +309,10 @@ def test_json_mapping_nesting_stays_free_form(self, tmp_path): hasattr(os, "geteuid") and os.geteuid() == 0, reason="root reads unreadable files", ) + @pytest.mark.skipif( + sys.platform == "win32", + reason="os.chmod on Windows only sets the read-only attribute; the file stays readable", + ) def test_unreadable_file_is_a_config_error(self, tmp_path): # is_file() succeeding does not mean the open will; an unwrapped # OSError would surface as a traceback instead of a config error. @@ -453,7 +457,9 @@ def test_relative_paths_anchor_to_the_toml_directory(self, tmp_path): assert config["report_template"] == str(subdir / "templates" / "report.txt") def test_absolute_paths_stay_untouched(self, tmp_path): - _write(tmp_path, f'[test_reports]\nrootdir = "{tmp_path}"\n') + # a TOML literal string: in a basic string a Windows path's backslashes + # are escape sequences ("\U" starts a unicode escape) and the file is invalid + _write(tmp_path, f"[test_reports]\nrootdir = '{tmp_path}'\n") config = load_project_config(tmp_path / DEFAULT_TOML_FILENAME) assert config["rootdir"] == str(tmp_path) From 687b38f69bf7ada0ae37dab7f22fa74c1af3ab25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 23:02:53 +0200 Subject: [PATCH 159/159] =?UTF-8?q?=F0=9F=94=A7=20Bump=20astral-sh/setup-u?= =?UTF-8?q?v=20from=2010.0.1=20to=2010.1.0=20(#1933)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 10.0.1 to 10.1.0.
Release notes

Sourced from astral-sh/setup-uv's releases.

v10.1.0 🌈 New output python-runtime-idand respect NO_PROXY

Changes

This release adds more bheind the scene security improvements and also 2 small improvements.

NO_PROXY

This action now respects no_proxy/NO_PROXY environment variables which were previously ignored.

New output python-runtime-id

The new output python-runtime-id can be used to know which python version exactly was installed if you use activate-environment. See pyca/cryptography#15572 for details on why this can be useful.

🐛 Bug fixes

🚀 Enhancements

🧰 Maintenance

📚 Documentation

⬆️ Dependency updates

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=astral-sh/setup-uv&package-manager=github_actions&previous-version=10.0.1&new-version=10.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/benchmark.yaml | 2 +- .github/workflows/ci.yaml | 16 ++++++++-------- .github/workflows/copilot-setup-steps.yml | 2 +- .github/workflows/docs.yaml | 2 +- .github/workflows/prek-update.yaml | 2 +- .github/workflows/release.yaml | 6 +++--- .github/workflows/test-extensions.yaml | 2 +- .github/workflows/test-package.yaml | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/benchmark.yaml b/.github/workflows/benchmark.yaml index 2521e797f..9a66604f8 100644 --- a/.github/workflows/benchmark.yaml +++ b/.github/workflows/benchmark.yaml @@ -9,7 +9,7 @@ jobs: runs-on: "ubuntu-latest" steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # 3.12+: on 3.11 the lock resolves sphinx 8.2, and this job wants the newest sphinx diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4056ecad3..0851a95fd 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # the pinned interpreter (root `.python-version`) is not on the runner image, so @@ -254,7 +254,7 @@ jobs: sphinx-group: "sphinx-9" steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: ${{ matrix.python-version }}-${{ matrix.sphinx-group }} @@ -285,7 +285,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # 3.12+: on 3.11 the lock resolves sphinx 8.2, and this job wants the newest sphinx @@ -383,7 +383,7 @@ jobs: # history, so the default shallow checkout is enough -- but it does need `.git`, # so this job must not be given `fetch-depth: 0`-free surprises like a # `sparse-checkout` that omits it - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: docs-codelinks @@ -425,7 +425,7 @@ jobs: # precisely the change that breaks a docs build. steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: docs-reports @@ -483,7 +483,7 @@ jobs: # surface of its own. steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: toolchain-free @@ -529,7 +529,7 @@ jobs: - uses: actions/checkout@v7 - name: Install graphviz run: sudo apt-get install graphviz - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: bazel @@ -570,7 +570,7 @@ jobs: - uses: actions/checkout@v7 - name: Install graphviz run: sudo apt-get install graphviz - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # the declared `requires-python` floor: the throwaway environment the wheel is diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 5267a4f7c..ab0d22d62 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -27,7 +27,7 @@ jobs: - name: Checkout code uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # 3.12+: on 3.11 the lock resolves sphinx 8.2, and this job wants the newest sphinx diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 29ebc5915..01606c613 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # 3.12+: on 3.11 the lock resolves sphinx 8.2, and this job wants the newest sphinx diff --git a/.github/workflows/prek-update.yaml b/.github/workflows/prek-update.yaml index b6f99fa57..930253683 100644 --- a/.github/workflows/prek-update.yaml +++ b/.github/workflows/prek-update.yaml @@ -27,7 +27,7 @@ jobs: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true # no `python-version` input, so uv reads the root `.python-version`; cache that diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d4edf3df4..cf82deb06 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -49,7 +49,7 @@ jobs: # for the default depth-1 -- 14 seconds on a workflow whose compat cell takes # minutes, and the alternative is a check that cannot run fetch-depth: 0 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 # `--no-project`: this fence reads the manifests, so it must not need an environment # built from them. It is also the only thing between a mistyped tag and an # unprotected environment, so it runs before anything else is built. @@ -73,7 +73,7 @@ jobs: # skip without `dot`. This mirrors the core test cells in ci.yaml; java, which the # vendored plantuml jar needs, is already on the ubuntu runner image run: sudo apt-get install graphviz - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: # no `enable-cache`: setup-uv's own default is `auto`, which caches on # GitHub-hosted runners EXCEPT for release, tag push and a few other events -- @@ -222,7 +222,7 @@ jobs: with: name: dist path: dist/ - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 # `always`, not `automatic`: `automatic` falls back to unauthenticated, and even a # dry run then exits 0 -- so a missing OIDC token would look like success. # `--no-attestations` only suppresses uploading attestation FILES that already sit diff --git a/.github/workflows/test-extensions.yaml b/.github/workflows/test-extensions.yaml index 76ce7446f..911ed7206 100644 --- a/.github/workflows/test-extensions.yaml +++ b/.github/workflows/test-extensions.yaml @@ -57,7 +57,7 @@ jobs: contents: read steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: ${{ inputs.cache-suffix }} diff --git a/.github/workflows/test-package.yaml b/.github/workflows/test-package.yaml index f26aaab9b..9612642f1 100644 --- a/.github/workflows/test-package.yaml +++ b/.github/workflows/test-package.yaml @@ -104,7 +104,7 @@ jobs: contents: read steps: - uses: actions/checkout@v7 - - uses: astral-sh/setup-uv@v10.0.1 + - uses: astral-sh/setup-uv@v10.1.0 with: enable-cache: true cache-suffix: ${{ inputs.cache-suffix }}