Merge branch '3.x' into 7964_tuple_in_signature

This commit is contained in:
Takeshi KOMIYA 2020-10-04 11:53:41 +09:00 committed by GitHub
commit 3096b71c1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
102 changed files with 399 additions and 216 deletions

View File

@ -34,14 +34,18 @@ Bugs fixed
by string not ending with blank lines
* #8142: autodoc: Wrong constructor signature for the class derived from
typing.Generic
* #8157: autodoc: TypeError is raised when annotation has invalid __args__
* #7964: autodoc: Tuple in default value is wrongly rendered
* #8192: napoleon: description is disappeared when it contains inline literals
* #8142: napoleon: Potential of regex denial of service in google style docs
* #8169: LaTeX: pxjahyper loaded even when latex_engine is not platex
* #8175: intersphinx: Potential of regex denial of service by broken inventory
* #8277: sphinx-build: missing and redundant spacing (and etc) for console
output on building
* #8093: The highlight warning has wrong location in some builders (LaTeX,
singlehtml and so on)
* #8239: Failed to refer a token in productionlist if it is indented
* #8268: linkcheck: Report HTTP errors when ``linkcheck_anchors`` is ``True``
Testing
--------
@ -172,7 +176,7 @@ Bugs fixed
contains a hyperlink target
* #7469: autosummary: "Module attributes" header is not translatable
* #7940: apidoc: An extra newline is generated at the end of the rst file if a
module has submodules
module has submodules
* #4258: napoleon: decorated special methods are not shown
* #7799: napoleon: parameters are not escaped for combined params in numpydoc
* #7780: napoleon: multiple paramaters declaration in numpydoc was wrongly
@ -339,7 +343,7 @@ Features added
* #7543: html theme: Add top and bottom margins to tables
* #7695: html theme: Add viewport meta tag for basic theme
* #7721: html theme: classic: default codetextcolor/codebgcolor doesn't override
Pygments
Pygments
* C and C++: allow semicolon in the end of declarations.
* C++, parse parameterized noexcept specifiers.
* #7294: C++, parse expressions with user-defined literals.

View File

@ -239,7 +239,7 @@ div.footer a {
/* -- body styles ----------------------------------------------------------- */
p {
p {
margin: 0.8em 0 0.5em 0;
}

View File

@ -515,6 +515,44 @@ There are also config values that you can set:
New option ``'description'`` is added.
.. confval:: autodoc_type_aliases
A dictionary for users defined `type aliases`__ that maps a type name to the
full-qualified object name. It is used to keep type aliases not evaluated in
the document. Defaults to empty (``{}``).
The type aliases are only available if your program enables `Postponed
Evaluation of Annotations (PEP 563)`__ feature via ``from __future__ import
annotations``.
For example, there is code using a type alias::
from __future__ import annotations
AliasType = Union[List[Dict[Tuple[int, str], Set[int]]], Tuple[str, List[str]]]
def f() -> AliasType:
...
If ``autodoc_type_aliases`` is not set, autodoc will generate internal mark-up
from this code as following::
.. py:function:: f() -> Union[List[Dict[Tuple[int, str], Set[int]]], Tuple[str, List[str]]]
...
If you set ``autodoc_type_aliases`` as
``{'AliasType': 'your.module.TypeAlias'}``, it generates a following document
internally::
.. py:function:: f() -> your.module.AliasType:
...
.. __: https://www.python.org/dev/peps/pep-0563/
.. __: https://mypy.readthedocs.io/en/latest/kinds_of_types.html#type-aliases
.. versionadded:: 3.3
.. confval:: autodoc_warningiserror
This value controls the behavior of :option:`sphinx-build -W` during

View File

@ -51,7 +51,7 @@ should check:
.. versionadded:: 1.1
.. confval:: coverage_show_missing_items
.. confval:: coverage_show_missing_items
Print objects that are missing to standard output also.
``False`` by default.

View File

@ -171,7 +171,7 @@ Docker images for Sphinx are published on the `Docker Hub <https://hub.docker.co
- `sphinxdoc/sphinx <https://hub.docker.com/repository/docker/sphinxdoc/sphinx>`_
- `sphinxdoc/sphinx-latexpdf <https://hub.docker.com/repository/docker/sphinxdoc/sphinx-latexpdf>`_
Former one is used for standard usage of Sphinx, and latter one is mainly used for PDF builds using LaTeX.
Former one is used for standard usage of Sphinx, and latter one is mainly used for PDF builds using LaTeX.
Please choose one for your purpose.
.. note::

View File

@ -665,7 +665,7 @@ __ http://pygments.org/docs/lexers
.. note::
If you want to select only ``[second-section]`` of ini file like the
following, you can use ``:start-at: [second-section]`` and
following, you can use ``:start-at: [second-section]`` and
``:end-before: [third-section]``:
.. code-block:: ini
@ -692,7 +692,7 @@ __ http://pygments.org/docs/lexers
# [initialize]
app.start(":8000")
# [initialize]
When lines have been selected in any of the ways described above, the line
numbers in ``emphasize-lines`` refer to those selected lines, counted

View File

@ -641,17 +641,17 @@ class StandaloneHTMLBuilder(Builder):
def gen_additional_pages(self) -> None:
# additional pages from conf.py
for pagename, template in self.config.html_additional_pages.items():
logger.info(' ' + pagename, nonl=True)
logger.info(pagename + ' ', nonl=True)
self.handle_page(pagename, {}, template)
# the search page
if self.search:
logger.info(' search', nonl=True)
logger.info('search ', nonl=True)
self.handle_page('search', {}, 'search.html')
# the opensearch xml file
if self.config.html_use_opensearch and self.search:
logger.info(' opensearch', nonl=True)
logger.info('opensearch ', nonl=True)
fn = path.join(self.outdir, '_static', 'opensearch.xml')
self.handle_page('opensearch', {}, 'opensearch.xml', outfilename=fn)
@ -669,7 +669,7 @@ class StandaloneHTMLBuilder(Builder):
'genindexcounts': indexcounts,
'split_index': self.config.html_split_index,
}
logger.info(' genindex', nonl=True)
logger.info('genindex ', nonl=True)
if self.config.html_split_index:
self.handle_page('genindex', genindexcontext,
@ -691,7 +691,7 @@ class StandaloneHTMLBuilder(Builder):
'content': content,
'collapse_index': collapse,
}
logger.info(' ' + indexname, nonl=True)
logger.info(indexname + ' ', nonl=True)
self.handle_page(indexname, indexcontext, 'domainindex.html')
def copy_image_files(self) -> None:
@ -785,7 +785,7 @@ class StandaloneHTMLBuilder(Builder):
def copy_static_files(self) -> None:
try:
with progress_message(__('copying static files... ')):
with progress_message(__('copying static files')):
ensuredir(path.join(self.outdir, '_static'))
# prepare context for templates

View File

@ -517,7 +517,7 @@ def validate_latex_theme_options(app: Sphinx, config: Config) -> None:
config.latex_theme_options.pop(key)
def install_pakcages_for_ja(app: Sphinx) -> None:
def install_packages_for_ja(app: Sphinx) -> None:
"""Install packages for Japanese."""
if app.config.language == 'ja' and app.config.latex_engine in ('platex', 'uplatex'):
app.add_latex_package('pxjahyper', after_hyperref=True)
@ -570,7 +570,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_builder(LaTeXBuilder)
app.connect('config-inited', validate_config_values, priority=800)
app.connect('config-inited', validate_latex_theme_options, priority=800)
app.connect('builder-inited', install_pakcages_for_ja)
app.connect('builder-inited', install_packages_for_ja)
app.add_config_value('latex_engine', default_latex_engine, None,
ENUM('pdflatex', 'xelatex', 'lualatex', 'platex', 'uplatex'))

View File

@ -166,6 +166,7 @@ class CheckExternalLinksBuilder(Builder):
# Read the whole document and see if #anchor exists
response = requests.get(req_url, stream=True, config=self.app.config,
auth=auth_info, **kwargs)
response.raise_for_status()
found = check_anchor(response, unquote(anchor))
if not found:

View File

@ -1213,7 +1213,8 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
try:
self.env.app.emit('autodoc-before-process-signature', self.object, False)
sig = inspect.signature(self.object, follow_wrapped=True)
sig = inspect.signature(self.object, follow_wrapped=True,
type_aliases=self.env.config.autodoc_type_aliases)
args = stringify_signature(sig, **kwargs)
except TypeError as exc:
logger.warning(__("Failed to get a function signature for %s: %s"),
@ -1262,7 +1263,9 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
if overloaded:
__globals__ = safe_getattr(self.object, '__globals__', {})
for overload in self.analyzer.overloads.get('.'.join(self.objpath)):
overload = evaluate_signature(overload, __globals__)
overload = evaluate_signature(overload, __globals__,
self.env.config.autodoc_type_aliases)
sig = stringify_signature(overload, **kwargs)
sigs.append(sig)
@ -1271,7 +1274,7 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # typ
def annotate_to_first_argument(self, func: Callable, typ: Type) -> None:
"""Annotate type hint to the first argument of function if needed."""
try:
sig = inspect.signature(func)
sig = inspect.signature(func, type_aliases=self.env.config.autodoc_type_aliases)
except TypeError as exc:
logger.warning(__("Failed to get a function signature for %s: %s"),
self.fullname, exc)
@ -1392,7 +1395,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
if call is not None:
self.env.app.emit('autodoc-before-process-signature', call, True)
try:
sig = inspect.signature(call, bound_method=True)
sig = inspect.signature(call, bound_method=True,
type_aliases=self.env.config.autodoc_type_aliases)
return type(self.object), '__call__', sig
except ValueError:
pass
@ -1407,7 +1411,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
if new is not None:
self.env.app.emit('autodoc-before-process-signature', new, True)
try:
sig = inspect.signature(new, bound_method=True)
sig = inspect.signature(new, bound_method=True,
type_aliases=self.env.config.autodoc_type_aliases)
return self.object, '__new__', sig
except ValueError:
pass
@ -1417,7 +1422,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
if init is not None:
self.env.app.emit('autodoc-before-process-signature', init, True)
try:
sig = inspect.signature(init, bound_method=True)
sig = inspect.signature(init, bound_method=True,
type_aliases=self.env.config.autodoc_type_aliases)
return self.object, '__init__', sig
except ValueError:
pass
@ -1428,7 +1434,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
# the signature from, so just pass the object itself to our hook.
self.env.app.emit('autodoc-before-process-signature', self.object, False)
try:
sig = inspect.signature(self.object, bound_method=False)
sig = inspect.signature(self.object, bound_method=False,
type_aliases=self.env.config.autodoc_type_aliases)
return None, None, sig
except ValueError:
pass
@ -1475,7 +1482,8 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type:
method = safe_getattr(self._signature_class, self._signature_method_name, None)
__globals__ = safe_getattr(method, '__globals__', {})
for overload in self.analyzer.overloads.get(qualname):
overload = evaluate_signature(overload, __globals__)
overload = evaluate_signature(overload, __globals__,
self.env.config.autodoc_type_aliases)
parameters = list(overload.parameters.values())
overload = overload.replace(parameters=parameters[1:],
@ -1820,11 +1828,13 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
else:
if inspect.isstaticmethod(self.object, cls=self.parent, name=self.object_name):
self.env.app.emit('autodoc-before-process-signature', self.object, False)
sig = inspect.signature(self.object, bound_method=False)
sig = inspect.signature(self.object, bound_method=False,
type_aliases=self.env.config.autodoc_type_aliases)
else:
self.env.app.emit('autodoc-before-process-signature', self.object, True)
sig = inspect.signature(self.object, bound_method=True,
follow_wrapped=True)
follow_wrapped=True,
type_aliases=self.env.config.autodoc_type_aliases)
args = stringify_signature(sig, **kwargs)
except TypeError as exc:
logger.warning(__("Failed to get a method signature for %s: %s"),
@ -1884,7 +1894,9 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
if overloaded:
__globals__ = safe_getattr(self.object, '__globals__', {})
for overload in self.analyzer.overloads.get('.'.join(self.objpath)):
overload = evaluate_signature(overload, __globals__)
overload = evaluate_signature(overload, __globals__,
self.env.config.autodoc_type_aliases)
if not inspect.isstaticmethod(self.object, cls=self.parent,
name=self.object_name):
parameters = list(overload.parameters.values())
@ -1897,7 +1909,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type:
def annotate_to_first_argument(self, func: Callable, typ: Type) -> None:
"""Annotate type hint to the first argument of function if needed."""
try:
sig = inspect.signature(func)
sig = inspect.signature(func, type_aliases=self.env.config.autodoc_type_aliases)
except TypeError as exc:
logger.warning(__("Failed to get a method signature for %s: %s"),
self.fullname, exc)
@ -2237,6 +2249,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('autodoc_mock_imports', [], True)
app.add_config_value('autodoc_typehints', "signature", True,
ENUM("signature", "description", "none"))
app.add_config_value('autodoc_type_aliases', {}, True)
app.add_config_value('autodoc_warningiserror', True, True)
app.add_config_value('autodoc_inherit_docstrings', True, True)
app.add_event('autodoc-before-process-signature')

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Mohammed Shannaq <sam@ms.per.jo>, 2018
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Julien Malard <julien.malard@mail.mcgill.ca>, 2019
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2008
# Vilibald W. <vilibald.wanca@gmail.com>, 2014-2015

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016
# Geraint Palmer <palmer.geraint@googlemail.com>, 2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# askhl <asklarsen@gmail.com>, 2010-2011
# Jakob Lykke Andersen <jakob@caput.dk>, 2014,2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Georg Brandl <g.brandl@gmx.net>, 2013-2015
# Jean-François B. <jfbu@free.fr>, 2018

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Stelios Vitalis <liberostelios@gmail.com>, 2015
# tzoumakers tzoumakers <tzoumakersx@gmail.com>, 2019

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Dinu Gherman <gherman@darwin.in-berlin.de>, 2014
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Edward Villegas-Pulgarin <cosmoscalibur@gmail.com>, 2018
# Edward Villegas-Pulgarin <cosmoscalibur@gmail.com>, 2019

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Aivar Annamaa <aivar.annamaa@gmail.com>, 2011
# Ivar Smolin <okul at linux ee>, 2012

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Ales Zabala Alava <shagi@gisa-elkartea.org>, 2011
# Asier Iturralde Sarasola <asier.iturralde@gmail.com>, 2018

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2017
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2013,2015

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Ajay Singh <ajaysajay@gmail.com>, 2019
# Purnank H. Ghumalia <me@purnank.in>, 2015-2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Mario Šarić, 2015-2020
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
# Molnár Dénes <denes.molnar2@stud.uni-corvinus.hu>, 2017

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Arif Budiman <arifpedia@gmail.com>, 2016-2017
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Denis Cappellin <denis@cappell.in>, 2018
# Paolo Cavallini <cavallini@faunalia.it>, 2013-2017

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# shirou - しろう <shirou.faw@gmail.com>, 2013
# Akitoshi Ohta <fire.kuma8@gmail.com>, 2011

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Minho Ryang <minhoryang@gmail.com>, 2019
# YT H <dev@theYT.net>, 2019

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# DALIUS DOBRAVOLSKAS <DALIUS@SANDBOX.LT>, 2010
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Vasil Vangelovski <vvangelovski@gmail.com>, 2013
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011
# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Bram Geron, 2017
# brechtm, 2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# m_aciek <maciej.olko@gmail.com>, 2017-2020
# Michael Gielda <michal.gielda@gmail.com>, 2014

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Claudio Rogerio Carvalho Filho <excriptbrasil@gmail.com>, 2016
# FIRST AUTHOR <roger.demetrescu@gmail.com>, 2008

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Pedro Algarvio <pedro@algarvio.me>, 2013
# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Razvan Stefanescu <razvan.stefanescu@gmail.com>, 2015-2017
# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Alex Salikov <Salikvo57@gmail.com>, 2019
# Dmitry Shachnev <mitya57@gmail.com>, 2013

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# callkalpa <callkalpa@gmail.com>, 2013
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# FIRST AUTHOR <EMAIL@ADDRESS>, 2008
# Slavko <linux@slavino.sk>, 2013-2019

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Risto Pejasinovic <risto.pejasinovic@gmail.com>, 2019
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Julien Malard <julien.malard@mail.mcgill.ca>, 2019
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# BouRock, 2020
# Fırat Özgül <ozgulfirat@gmail.com>, 2013-2016

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Petro Sasnyk <petro@sasnyk.name>, 2009
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
msgid ""
msgstr ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Hoat Le Van <hoatlevan@gmail.com>, 2014
msgid ""

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Yinian Chin <yinian1992@live.com>, 2015,2017-2018
# Hsiaoming Yang <me@lepture.com>, 2018

View File

@ -1,7 +1,7 @@
# Translations template for Sphinx.
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
#
#
# Translators:
# Adrian Liaw <adrianliaw2000@gmail.com>, 2018
# Fred Lin <gasolin@gmail.com>, 2008

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -143,7 +143,7 @@ JSX.resetProfileResults = function () {
return $__jsx_profiler.resetResults();
};
JSX.DEBUG = false;
var GeneratorFunction$0 =
var GeneratorFunction$0 =
(function () {
try {
return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
@ -151,7 +151,7 @@ var GeneratorFunction$0 =
return function GeneratorFunction () {};
}
})();
var __jsx_generator_object$0 =
var __jsx_generator_object$0 =
(function () {
function __jsx_generator_object() {
this.__next = 0;

View File

@ -1823,7 +1823,7 @@
% fix a space-gobbling issue due to LaTeX's original \do@noligs
% TODO: using \@noligs as patched by upquote.sty is now unneeded because
% either ` and ' are escaped (non-unicode engines) or they don't build
% ligatures (unicode engines). Thus remove this and unify handling of `, <, >,
% ligatures (unicode engines). Thus remove this and unify handling of `, <, >,
% ' and - with the characters . , ; ? ! / as handled via
% \sphinxbreaksviaactive.
% Hence \sphinx@do@noligs will be removed, or rather replaced with code
@ -1905,7 +1905,7 @@
% Special characters
%
% This definition prevents en-dash and em-dash TeX ligatures.
%
%
% It inserts a potential breakpoint after the hyphen. This is to keep in sync
% with behavior in code-blocks, parsed and inline literals. For a breakpoint
% before the hyphen use \leavevmode\kern\z@- (within \makeatletter/\makeatother)

View File

@ -15,7 +15,7 @@
% https://tex.stackexchange.com/a/460325/
% 159 Cyrillic glyphs as available in X2 TeX 8bit font encoding
% This assumes inputenc loaded with utf8 option, or LaTeX release
% as recent as 2018/04/01 which does it automatically.
% as recent as 2018/04/01 which does it automatically.
\@tfor\next:=%
{Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}%
{К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}%

View File

@ -76,7 +76,7 @@
\endgroup
\noindent\rule{\textwidth}{1pt}\par
\vspace{12pt}%
}
}
\newcommand\sphinxtableofcontentshook{}
\pagenumbering{arabic}

View File

@ -8,11 +8,11 @@
* :license: BSD, see LICENSE for details.
*
*/
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: Arial, sans-serif;
font-size: 100%;
@ -34,18 +34,18 @@ div.bodywrapper {
hr {
border: 1px solid #B1B4B6;
}
div.document {
background-color: #eee;
}
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 30px 30px;
font-size: 0.9em;
}
div.footer {
color: #555;
width: 100%;
@ -53,12 +53,12 @@ div.footer {
text-align: center;
font-size: 75%;
}
div.footer a {
color: #444;
text-decoration: underline;
}
div.related {
background-color: #6BA81E;
line-height: 32px;
@ -66,11 +66,11 @@ div.related {
text-shadow: 0px 1px 0 #444;
font-size: 0.9em;
}
div.related a {
color: #E2F3CC;
}
div.sphinxsidebar {
font-size: 0.75em;
line-height: 1.5em;
@ -79,7 +79,7 @@ div.sphinxsidebar {
div.sphinxsidebarwrapper{
padding: 20px 0;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Arial, sans-serif;
@ -95,30 +95,30 @@ div.sphinxsidebar h4 {
div.sphinxsidebar h4{
font-size: 1.1em;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p {
color: #888;
padding: 5px 20px;
}
div.sphinxsidebar p.topless {
}
div.sphinxsidebar ul {
margin: 10px 20px;
padding: 0;
color: #000;
}
div.sphinxsidebar a {
color: #444;
}
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: sans-serif;
@ -131,17 +131,17 @@ div.sphinxsidebar .searchformwrapper {
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #005B81;
text-decoration: none;
}
a:hover {
color: #E32E00;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
@ -156,30 +156,30 @@ div.body h6 {
padding: 5px 0 5px 10px;
text-shadow: 0px 1px 0 white
}
div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
div.body h2 { font-size: 150%; background-color: #C8D5E3; }
div.body h3 { font-size: 120%; background-color: #D8DEE3; }
div.body h4 { font-size: 110%; background-color: #D8DEE3; }
div.body h5 { font-size: 100%; background-color: #D8DEE3; }
div.body h6 { font-size: 100%; background-color: #D8DEE3; }
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
padding: 0 4px 0 4px;
text-decoration: none;
}
a.headerlink:hover {
background-color: #c60f0f;
color: white;
}
div.body p, div.body dd, div.body li {
line-height: 1.5em;
}
div.admonition p.admonition-title + p {
display: inline;
}
@ -188,29 +188,29 @@ div.note {
background-color: #eee;
border: 1px solid #ccc;
}
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
div.topic {
background-color: #eee;
}
div.warning {
background-color: #ffe4e4;
border: 1px solid #f66;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre {
padding: 10px;
line-height: 1.2em;
@ -220,7 +220,7 @@ pre {
-webkit-box-shadow: 1px 1px 1px #d8d8d8;
-moz-box-shadow: 1px 1px 1px #d8d8d8;
}
code {
background-color: #ecf0f3;
color: #222;

View File

@ -8,11 +8,11 @@
* :license: BSD, see LICENSE for details.
*
*/
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: "Nobile", sans-serif;
font-size: 100%;
@ -34,7 +34,7 @@ div.bodywrapper {
hr {
border: 1px solid #B1B4B6;
}
div.document {
background-color: #eee;
}
@ -59,7 +59,7 @@ div.body {
border-right-style: none;
overflow: auto;
}
div.footer {
color: #ffffff;
width: 100%;
@ -69,7 +69,7 @@ div.footer {
background: transparent;
clear:both;
}
div.footer a {
color: #ffffff;
text-decoration: none;
@ -79,14 +79,14 @@ div.footer a:hover {
color: #e88f00;
text-decoration: underline;
}
div.related {
line-height: 30px;
color: #373839;
font-size: 0.8em;
background-color: #eee;
}
div.related a {
color: #1b61d6;
}
@ -94,7 +94,7 @@ div.related a {
div.related ul {
padding-left: calc({{ theme_sidebarwidth|todim }} + 10px);
}
div.sphinxsidebar {
font-size: 0.75em;
line-height: 1.5em;
@ -103,7 +103,7 @@ div.sphinxsidebar {
div.sphinxsidebarwrapper{
padding: 10px 0;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: "Neuton", sans-serif;
@ -118,30 +118,30 @@ div.sphinxsidebar h4 {
div.sphinxsidebar h4{
font-size: 1.3em;
}
div.sphinxsidebar h3 a {
color: #000000;
}
div.sphinxsidebar p {
color: #888;
padding: 5px 20px;
}
div.sphinxsidebar p.topless {
}
div.sphinxsidebar ul {
margin: 10px 20px;
padding: 0;
color: #373839;
}
div.sphinxsidebar a {
color: #444;
}
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: sans-serif;
@ -171,16 +171,16 @@ p.sidebar-title {
}
/* -- body styles ----------------------------------------------------------- */
a, a .pre {
color: #1b61d6;
text-decoration: none;
}
a:hover, a:hover .pre {
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
@ -194,29 +194,29 @@ div.body h6 {
margin: 30px 0px 10px 0px;
padding: 5px 0;
}
div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
div.body h2 { font-size: 150%; background-color: #ffffff; }
div.body h3 { font-size: 120%; background-color: #ffffff; }
div.body h4 { font-size: 110%; background-color: #ffffff; }
div.body h5 { font-size: 100%; background-color: #ffffff; }
div.body h6 { font-size: 100%; background-color: #ffffff; }
a.headerlink {
color: #1b61d6;
font-size: 0.8em;
padding: 0 4px 0 4px;
text-decoration: none;
}
a.headerlink:hover {
text-decoration: underline;
}
div.body p, div.body dd, div.body li {
line-height: 1.5em;
}
div.admonition p.admonition-title + p {
display: inline;
}
@ -236,7 +236,7 @@ div.note {
padding: 10px 20px 10px 60px;
background: #e1ecfe url(dialog-note.png) no-repeat 10px 8px;
}
div.seealso {
background: #fff6bf url(dialog-seealso.png) no-repeat 10px 8px;
border: 2px solid #ffd324;
@ -244,7 +244,7 @@ div.seealso {
border-right-style: none;
padding: 10px 20px 10px 60px;
}
div.topic {
background: #eeeeee;
border: 2px solid #C6C9CB;
@ -252,7 +252,7 @@ div.topic {
border-right-style: none;
border-left-style: none;
}
div.warning {
background: #fbe3e4 url(dialog-warning.png) no-repeat 10px 8px;
border: 2px solid #fbc2c4;
@ -268,18 +268,18 @@ div.admonition-todo {
border-left-style: none;
padding: 10px 20px 10px 60px;
}
div.note p.admonition-title,
div.warning p.admonition-title,
div.seealso p.admonition-title,
div.admonition-todo p.admonition-title {
display: none;
}
p.admonition-title:after {
content: ":";
}
pre {
padding: 10px;
line-height: 1.2em;
@ -289,7 +289,7 @@ pre {
border-right-style: none;
border-left-style: none;
}
code {
background-color: transparent;
color: #222;

View File

@ -138,7 +138,7 @@ div.footer a {
/* -- body styles ----------------------------------------------------------- */
p {
p {
margin: 0.8em 0 0.5em 0;
}

View File

@ -439,8 +439,8 @@ def _should_unwrap(subject: Callable) -> bool:
return False
def signature(subject: Callable, bound_method: bool = False, follow_wrapped: bool = False
) -> inspect.Signature:
def signature(subject: Callable, bound_method: bool = False, follow_wrapped: bool = False,
type_aliases: Dict = {}) -> inspect.Signature:
"""Return a Signature object for the given *subject*.
:param bound_method: Specify *subject* is a bound method or not
@ -470,7 +470,7 @@ def signature(subject: Callable, bound_method: bool = False, follow_wrapped: boo
try:
# Update unresolved annotations using ``get_type_hints()``.
annotations = typing.get_type_hints(subject)
annotations = typing.get_type_hints(subject, None, type_aliases)
for i, param in enumerate(parameters):
if isinstance(param.annotation, str) and param.name in annotations:
parameters[i] = param.replace(annotation=annotations[param.name])

View File

@ -63,7 +63,11 @@ def is_system_TypeVar(typ: Any) -> bool:
def stringify(annotation: Any) -> str:
"""Stringify type annotation object."""
if isinstance(annotation, str):
return annotation
if annotation.startswith("'") and annotation.endswith("'"):
# might be a double Forward-ref'ed type. Go unquoting.
return annotation[1:-2]
else:
return annotation
elif isinstance(annotation, TypeVar): # type: ignore
return annotation.__name__
elif not annotation:
@ -105,7 +109,10 @@ def _stringify_py37(annotation: Any) -> str:
return repr(annotation)
if getattr(annotation, '__args__', None):
if qualname == 'Union':
if not isinstance(annotation.__args__, (list, tuple)):
# broken __args__ found
pass
elif qualname == 'Union':
if len(annotation.__args__) > 1 and annotation.__args__[-1] is NoneType:
if len(annotation.__args__) > 2:
args = ', '.join(stringify(a) for a in annotation.__args__[:-1])

View File

@ -1 +1 @@
exclude_patterns = ['_build']
exclude_patterns = ['_build']

View File

@ -0,0 +1,25 @@
from __future__ import annotations
from typing import overload
myint = int
def sum(x: myint, y: myint) -> myint:
"""docstring"""
return x + y
@overload
def mult(x: myint, y: myint) -> myint:
...
@overload
def mult(x: float, y: float) -> float:
...
def mult(x, y):
"""docstring"""
return x, y

View File

@ -1,5 +1,5 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C)
# Copyright (C)
# This file is distributed under the same license as the Sphinx intl <Tests> package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#

View File

@ -0,0 +1,2 @@
exclude_patterns = ['_build']
linkcheck_anchors = True

View File

@ -0,0 +1 @@
`local server <http://localhost:7777/#anchor>`_

View File

@ -1 +1 @@
exclude_patterns = ['_build']
exclude_patterns = ['_build']

View File

@ -1,2 +1,2 @@
recursive-include test_theme *.conf
recursive-include test_theme *.conf

View File

@ -1,3 +1,3 @@
html_theme = 'test-theme'
html_theme_path = ['.', 'test_theme']
exclude_patterns = ['_build']
html_theme = 'test-theme'
html_theme_path = ['.', 'test_theme']
exclude_patterns = ['_build']

View File

@ -1,5 +1,5 @@
=======
Theming
=======
=======
Theming
=======

View File

@ -1,11 +1,11 @@
from setuptools import setup, find_packages
setup(
name='test-theme',
packages=find_packages(),
include_package_data=True,
entry_points="""
[sphinx_themes]
path = test_theme:get_path
""",
)
from setuptools import setup, find_packages
setup(
name='test-theme',
packages=find_packages(),
include_package_data=True,
entry_points="""
[sphinx_themes]
path = test_theme:get_path
""",
)

View File

@ -1,5 +1,5 @@
import os
def get_path():
return os.path.dirname(os.path.abspath(__file__))
import os
def get_path():
return os.path.dirname(os.path.abspath(__file__))

View File

@ -8,8 +8,10 @@
:license: BSD, see LICENSE for details.
"""
import http.server
import json
import re
import threading
from unittest import mock
import pytest
@ -106,6 +108,21 @@ def test_anchors_ignored(app, status, warning):
# expect all ok when excluding #top
assert not content
@pytest.mark.sphinx('linkcheck', testroot='linkcheck-localserver', freshenv=True)
def test_raises_for_invalid_status(app, status, warning):
server_thread = HttpServerThread(InternalServerErrorHandler, daemon=True)
server_thread.start()
try:
app.builder.build_all()
finally:
server_thread.terminate()
content = (app.outdir / 'output.txt').read_text()
assert content == (
"index.rst:1: [broken] http://localhost:7777/#anchor: "
"500 Server Error: Internal Server Error "
"for url: http://localhost:7777/\n"
)
@pytest.mark.sphinx(
'linkcheck', testroot='linkcheck', freshenv=True,
@ -160,3 +177,22 @@ def test_linkcheck_request_headers(app, status, warning):
assert headers["X-Secret"] == "open sesami"
else:
assert headers["Accept"] == "text/html,application/xhtml+xml;q=0.9,*/*;q=0.8"
class HttpServerThread(threading.Thread):
def __init__(self, handler, *args, **kwargs):
super().__init__(*args, **kwargs)
self.server = http.server.HTTPServer(("localhost", 7777), handler)
def run(self):
self.server.serve_forever(poll_interval=0.01)
def terminate(self):
self.server.shutdown()
self.server.server_close()
self.join()
class InternalServerErrorHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
self.send_error(500, "Internal Server Error")

View File

@ -642,6 +642,54 @@ def test_autodoc_typehints_description_for_invalid_node(app):
restructuredtext.parse(app, text) # raises no error
@pytest.mark.skipif(sys.version_info < (3, 7), reason='python 3.7+ is required.')
@pytest.mark.sphinx('text', testroot='ext-autodoc')
def test_autodoc_type_aliases(app):
# default
options = {"members": None}
actual = do_autodoc(app, 'module', 'target.annotations', options)
assert list(actual) == [
'',
'.. py:module:: target.annotations',
'',
'',
'.. py:function:: mult(x: int, y: int) -> int',
' mult(x: float, y: float) -> float',
' :module: target.annotations',
'',
' docstring',
'',
'',
'.. py:function:: sum(x: int, y: int) -> int',
' :module: target.annotations',
'',
' docstring',
'',
]
# define aliases
app.config.autodoc_type_aliases = {'myint': 'myint'}
actual = do_autodoc(app, 'module', 'target.annotations', options)
assert list(actual) == [
'',
'.. py:module:: target.annotations',
'',
'',
'.. py:function:: mult(x: myint, y: myint) -> myint',
' mult(x: float, y: float) -> float',
' :module: target.annotations',
'',
' docstring',
'',
'',
'.. py:function:: sum(x: myint, y: myint) -> myint',
' :module: target.annotations',
'',
' docstring',
'',
]
@pytest.mark.sphinx('html', testroot='ext-autodoc')
def test_autodoc_default_options(app):
# no settings

Some files were not shown because too many files have changed in this diff Show More