py2docfx 0.1.10.dev1859594__py3-none-any.whl → 0.1.10.dev1870645__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- py2docfx/__main__.py +112 -15
- py2docfx/convert_prepare/environment.py +44 -4
- py2docfx/convert_prepare/generate_document.py +19 -5
- py2docfx/convert_prepare/get_source.py +19 -3
- py2docfx/convert_prepare/pip_utils.py +10 -0
- py2docfx/convert_prepare/sphinx_caller.py +7 -3
- py2docfx/convert_prepare/tests/test_generate_document.py +0 -1
- py2docfx/docfx_yaml/tests/roots/test-writer-uri/code_with_uri.py +0 -7
- py2docfx/docfx_yaml/tests/test_writer_uri.py +0 -4
- py2docfx/docfx_yaml/writer.py +1 -13
- py2docfx/venv/venv0/Lib/site-packages/_distutils_hack/__init__.py +240 -0
- py2docfx/venv/venv0/Lib/site-packages/_distutils_hack/override.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/_yaml/__init__.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/alabaster/__init__.py +35 -0
- py2docfx/venv/venv0/Lib/site-packages/alabaster/support.py +89 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/__init__.py +37 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/core.py +1300 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/dates.py +1925 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/languages.py +72 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/lists.py +123 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/localedata.py +278 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/localtime/__init__.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/localtime/_fallback.py +44 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/localtime/_helpers.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/localtime/_unix.py +98 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/localtime/_win32.py +98 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/__init__.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/_compat.py +34 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/catalog.py +952 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/checkers.py +168 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/extract.py +843 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/frontend.py +1203 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/jslexer.py +203 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/mofile.py +212 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/plurals.py +257 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/pofile.py +675 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/messages/setuptools_frontend.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/numbers.py +1573 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/plural.py +640 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/support.py +726 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/units.py +343 -0
- py2docfx/venv/venv0/Lib/site-packages/babel/util.py +269 -0
- py2docfx/venv/venv0/Lib/site-packages/certifi/__init__.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/certifi/__main__.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/certifi/core.py +114 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/__init__.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/__main__.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/api.py +626 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/cd.py +395 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/cli/__init__.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/cli/__main__.py +296 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/constant.py +1995 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/legacy.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/md.py +615 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/models.py +340 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/utils.py +421 -0
- py2docfx/venv/venv0/Lib/site-packages/charset_normalizer/version.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/__init__.py +7 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/ansi.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/ansitowin32.py +277 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/initialise.py +121 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/ansi_test.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/ansitowin32_test.py +294 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/initialise_test.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/isatty_test.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/utils.py +49 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/tests/winterm_test.py +131 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/win32.py +180 -0
- py2docfx/venv/venv0/Lib/site-packages/colorama/winterm.py +195 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/__init__.py +284 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/__main__.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/core.py +714 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/examples.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/frontend.py +951 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/io.py +611 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/__init__.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/af.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/ar.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/ca.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/cs.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/da.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/de.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/en.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/eo.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/es.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/fa.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/fi.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/fr.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/gl.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/he.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/it.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/ja.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/ko.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/lt.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/lv.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/nl.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/pl.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/pt_br.py +60 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/ru.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/sk.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/sv.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/zh_cn.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/languages/zh_tw.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/nodes.py +2314 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/__init__.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/commonmark_wrapper.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/null.py +20 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/recommonmark_wrapper.py +136 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/__init__.py +414 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/__init__.py +460 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/admonitions.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/body.py +304 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/html.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/images.py +163 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/misc.py +635 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/parts.py +126 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/references.py +29 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/directives/tables.py +513 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/__init__.py +40 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/af.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/ar.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/ca.py +126 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/cs.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/da.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/de.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/en.py +111 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/eo.py +118 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/es.py +122 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/fa.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/fi.py +98 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/fr.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/gl.py +111 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/he.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/it.py +98 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/ja.py +119 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/ko.py +111 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/lt.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/lv.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/nl.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/pl.py +100 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/pt_br.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/ru.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/sk.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/sv.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/zh_cn.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/languages/zh_tw.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/roles.py +439 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/states.py +3135 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/parsers/rst/tableparser.py +539 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/readers/__init__.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/readers/doctree.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/readers/pep.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/readers/standalone.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/statemachine.py +1525 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/__init__.py +174 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/components.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/frontmatter.py +545 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/misc.py +144 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/parts.py +176 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/peps.py +308 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/references.py +919 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/universal.py +338 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/transforms/writer_aux.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/__init__.py +821 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/code_analyzer.py +138 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/error_reporting.py +222 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/math/__init__.py +52 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/math/latex2mathml.py +1430 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/math/math2html.py +3171 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/math/tex2mathml_extern.py +152 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/math/tex2unichar.py +704 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/math/unichar2tex.py +808 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/punctuation_chars.py +122 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/roman.py +86 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/smartquotes.py +991 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/utils/urischemes.py +138 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/__init__.py +151 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/_html_base.py +1781 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/docutils_xml.py +188 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/html4css1/__init__.py +947 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/html5_polyglot/__init__.py +454 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/latex2e/__init__.py +3295 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/manpage.py +1181 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/null.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/odf_odt/__init__.py +3468 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/odf_odt/pygmentsformatter.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/pep_html/__init__.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/pseudoxml.py +40 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/s5_html/__init__.py +352 -0
- py2docfx/venv/venv0/Lib/site-packages/docutils/writers/xetex/__init__.py +149 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/__init__.py +45 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/codec.py +122 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/compat.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/core.py +437 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/idnadata.py +4243 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/intranges.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/package_data.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/idna/uts46data.py +8681 -0
- py2docfx/venv/venv0/Lib/site-packages/imagesize/__init__.py +5 -0
- py2docfx/venv/venv0/Lib/site-packages/imagesize/imagesize.py +376 -0
- py2docfx/venv/venv0/Lib/site-packages/imagesize.py +383 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/__init__.py +45 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/_identifier.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/async_utils.py +75 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/bccache.py +364 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/compiler.py +1957 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/constants.py +20 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/debug.py +259 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/defaults.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/environment.py +1661 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/exceptions.py +166 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/ext.py +879 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/filters.py +1824 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/idtracking.py +318 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/lexer.py +869 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/loaders.py +652 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/meta.py +111 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/nativetypes.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/nodes.py +1204 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/optimizer.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/parser.py +1040 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/runtime.py +1104 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/sandbox.py +428 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/tests.py +255 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/utils.py +854 -0
- py2docfx/venv/venv0/Lib/site-packages/jinja2/visitor.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/markupsafe/__init__.py +332 -0
- py2docfx/venv/venv0/Lib/site-packages/markupsafe/_native.py +63 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/__init__.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/_elffile.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/_manylinux.py +262 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/_musllinux.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/_parser.py +354 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/_structures.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/_tokenizer.py +194 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/markers.py +325 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/metadata.py +804 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/requirements.py +91 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/specifiers.py +1009 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/tags.py +568 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/utils.py +174 -0
- py2docfx/venv/venv0/Lib/site-packages/packaging/version.py +563 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/__init__.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/__main__.py +24 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/__pip-runner__.py +50 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/__init__.py +18 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/build_env.py +311 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cache.py +290 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/__init__.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/autocompletion.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/base_command.py +236 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1074 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/command_context.py +27 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/main.py +79 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/parser.py +294 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/progress_bars.py +68 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/req_command.py +505 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/spinners.py +159 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/__init__.py +132 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/cache.py +225 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/check.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/completion.py +130 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/configuration.py +280 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/debug.py +201 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/download.py +147 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/freeze.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/hash.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/help.py +41 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/index.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/install.py +774 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/list.py +368 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/search.py +174 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/show.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/commands/wheel.py +183 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/configuration.py +383 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/distributions/base.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/distributions/installed.py +29 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/distributions/sdist.py +156 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/distributions/wheel.py +40 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/exceptions.py +728 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/index/__init__.py +2 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/index/collector.py +507 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/index/package_finder.py +1027 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/index/sources.py +285 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/locations/__init__.py +467 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/locations/_distutils.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/locations/_sysconfig.py +213 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/locations/base.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/main.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/__init__.py +128 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/_json.py +84 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/base.py +702 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +55 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +227 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +278 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/__init__.py +2 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/candidate.py +30 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/direct_url.py +235 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/index.py +28 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/installation_report.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/link.py +579 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/scheme.py +31 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/search_scope.py +132 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/selection_prefs.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/models/wheel.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/__init__.py +2 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/auth.py +561 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/cache.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/download.py +186 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/lazy_wheel.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/session.py +520 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/utils.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/network/xmlrpc.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/metadata.py +39 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +74 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/wheel.py +37 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/check.py +187 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/freeze.py +255 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/install/__init__.py +2 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/install/wheel.py +734 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/operations/prepare.py +730 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/pyproject.py +179 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/req/__init__.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/req/constructors.py +576 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/req/req_file.py +554 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/req/req_install.py +923 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/req/req_set.py +119 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/req/req_uninstall.py +649 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +141 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +597 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +812 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +155 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +255 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +80 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +166 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +317 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/self_outdated_check.py +248 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/compat.py +63 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +165 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/datetime.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/deprecation.py +120 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/egg_link.py +80 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/encoding.py +36 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/entrypoints.py +84 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/filesystem.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/filetypes.py +27 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/glibc.py +88 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/hashes.py +151 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/logging.py +348 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/misc.py +783 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/models.py +39 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/packaging.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/setuptools_build.py +146 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/subprocess.py +260 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/temp_dir.py +296 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/unpacking.py +257 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/urls.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/virtualenv.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/utils/wheel.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/vcs/bazaar.py +112 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/vcs/git.py +526 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/vcs/mercurial.py +163 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/vcs/subversion.py +324 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +705 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_internal/wheel_builder.py +354 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/__init__.py +121 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +28 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +161 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +74 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +181 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +494 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +154 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +206 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/certifi/core.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/__init__.py +115 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +261 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +147 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +112 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/codingstatemachinedict.py +19 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/enums.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/escprober.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/escsm.py +261 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +196 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +388 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +284 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +316 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/johabfreq.py +2382 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/johabprober.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +238 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +4649 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +4397 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +4380 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +4649 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +5725 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +4380 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +4380 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +147 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/macromanprober.py +162 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +95 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +661 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +352 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/resultdict.py +16 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +162 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +88 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +105 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +362 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/utf1632prober.py +225 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/chardet/version.py +9 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/__init__.py +7 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/ansi.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +277 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/initialise.py +121 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/ansi_test.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py +294 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/initialise_test.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/isatty_test.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/utils.py +49 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/tests/winterm_test.py +131 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/win32.py +180 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/colorama/winterm.py +195 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/compat.py +1138 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/database.py +1359 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/index.py +508 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/locators.py +1303 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/manifest.py +384 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/markers.py +167 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/metadata.py +1068 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/scripts.py +452 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/util.py +2025 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/version.py +751 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distlib/wheel.py +1099 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/distro/distro.py +1399 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/__init__.py +44 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/codec.py +112 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/compat.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/core.py +400 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/idnadata.py +2151 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/intranges.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/package_data.py +2 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/idna/uts46data.py +8600 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/msgpack/__init__.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/msgpack/ext.py +193 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/msgpack/fallback.py +1010 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/__about__.py +26 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/__init__.py +25 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +301 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +136 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/markers.py +304 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/requirements.py +146 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/specifiers.py +802 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/tags.py +487 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/utils.py +136 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/packaging/version.py +504 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3361 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +566 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +53 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/android.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/api.py +223 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/macos.py +91 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/unix.py +223 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/version.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/platformdirs/windows.py +255 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/cmdline.py +668 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/filter.py +71 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatter.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +158 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py +170 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/html.py +989 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/img.py +645 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py +154 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py +521 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/other.py +161 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py +146 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py +188 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py +127 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py +338 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/lexer.py +943 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +559 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1198 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/plugin.py +88 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +217 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/style.py +197 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/token.py +213 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pygments/util.py +330 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/__init__.py +322 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/actions.py +217 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/common.py +432 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/core.py +6115 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py +656 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py +299 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/helpers.py +1100 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/results.py +796 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/testing.py +331 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/unicode.py +361 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyparsing/util.py +284 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyproject_hooks/_compat.py +8 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +330 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +18 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +353 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/__init__.py +182 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/adapters.py +538 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/auth.py +315 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/certs.py +24 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/compat.py +67 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/exceptions.py +141 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/help.py +131 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/models.py +1034 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/packages.py +16 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/sessions.py +833 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/requests/utils.py +1094 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/providers.py +133 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +547 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/resolvelib/structs.py +170 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/__main__.py +274 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +451 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_inspect.py +270 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_ratio.py +160 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_win32_console.py +662 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_windows.py +72 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/_wrap.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/align.py +311 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/ansi.py +240 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/bar.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/box.py +517 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/cells.py +154 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/color.py +622 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/console.py +2633 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/control.py +225 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/default_styles.py +190 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/diagnose.py +37 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/emoji.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/filesize.py +89 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/json.py +140 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/layout.py +443 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/live.py +375 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/live_render.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/logging.py +289 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/markup.py +246 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/panel.py +308 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/pretty.py +994 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/progress.py +1702 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/progress_bar.py +224 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/prompt.py +376 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/segment.py +739 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/spinner.py +137 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/status.py +132 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/style.py +796 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/syntax.py +948 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/table.py +1002 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/text.py +1307 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/traceback.py +756 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/rich/tree.py +251 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/six.py +998 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/__init__.py +608 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/_utils.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/after.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/before.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +71 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/nap.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/retry.py +272 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/stop.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tenacity/wait.py +228 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tomli/__init__.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tomli/_parser.py +691 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tomli/_re.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/truststore/__init__.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/truststore/_api.py +302 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/truststore/_macos.py +501 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/truststore/_openssl.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/truststore/_windows.py +554 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/typing_extensions.py +3072 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1132 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +921 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +537 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +620 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +495 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/webencodings/labels.py +231 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/webencodings/tests.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/__init__.py +3725 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +7 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/test_find_distributions.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/test_markers.py +8 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +427 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/test_resources.py +869 -0
- py2docfx/venv/venv0/Lib/site-packages/pkg_resources/tests/test_working_set.py +501 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/__init__.py +82 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/__main__.py +17 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/cmdline.py +668 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/console.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/filter.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/filters/__init__.py +940 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatter.py +129 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/__init__.py +157 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/_mapping.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/bbcode.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/groff.py +170 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/html.py +987 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/img.py +685 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/irc.py +154 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/latex.py +518 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/other.py +160 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/pangomarkup.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/rtf.py +349 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/svg.py +185 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/terminal.py +127 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/formatters/terminal256.py +338 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexer.py +961 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/__init__.py +362 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_ada_builtins.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_asy_builtins.py +1644 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_cl_builtins.py +231 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_cocoa_builtins.py +75 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_csound_builtins.py +1780 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_css_builtins.py +558 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_julia_builtins.py +411 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_lasso_builtins.py +5326 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_lilypond_builtins.py +4932 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_lua_builtins.py +285 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_luau_builtins.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_mapping.py +589 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_mql_builtins.py +1171 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_mysql_builtins.py +1335 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_openedge_builtins.py +2600 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_php_builtins.py +3325 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_postgres_builtins.py +739 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_qlik_builtins.py +666 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_scheme_builtins.py +1609 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_scilab_builtins.py +3093 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_sourcemod_builtins.py +1151 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_stan_builtins.py +648 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_stata_builtins.py +457 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_tsql_builtins.py +1003 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_usd_builtins.py +112 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_vbscript_builtins.py +279 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/_vim_builtins.py +1938 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/actionscript.py +243 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ada.py +144 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/agile.py +25 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/algebra.py +298 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ambient.py +75 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/amdgpu.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ampl.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/apdlexer.py +593 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/apl.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/archetype.py +315 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/arrow.py +116 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/arturo.py +249 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/asc.py +55 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/asm.py +1050 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/asn1.py +178 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/automation.py +379 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/bare.py +101 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/basic.py +656 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/bdd.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/berry.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/bibtex.py +159 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/blueprint.py +173 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/boa.py +97 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/bqn.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/business.py +625 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/c_cpp.py +414 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/c_like.py +738 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/capnproto.py +74 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/carbon.py +95 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/cddl.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/chapel.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/clean.py +180 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/comal.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/compiled.py +35 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/configs.py +1424 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/console.py +114 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/cplint.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/crystal.py +364 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/csound.py +466 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/css.py +602 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/d.py +259 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/dalvik.py +126 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/data.py +763 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/dax.py +135 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/devicetree.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/diff.py +169 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/dns.py +109 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/dotnet.py +846 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/dsls.py +970 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/dylan.py +279 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ecl.py +144 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/eiffel.py +68 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/elm.py +123 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/elpi.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/email.py +132 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/erlang.py +526 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/esoteric.py +300 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ezhil.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/factor.py +363 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/fantom.py +251 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/felix.py +275 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/fift.py +68 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/floscript.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/forth.py +178 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/fortran.py +212 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/foxpro.py +427 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/freefem.py +893 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/func.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/functional.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/futhark.py +105 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/gcodelexer.py +35 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/gdscript.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/go.py +97 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/grammar_notation.py +262 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/graph.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/graphics.py +794 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/graphql.py +176 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/graphviz.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/gsql.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/haskell.py +866 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/haxe.py +935 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/hdl.py +466 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/hexdump.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/html.py +626 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/idl.py +284 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/igor.py +435 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/inferno.py +95 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/installers.py +325 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/int_fiction.py +1370 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/iolang.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/j.py +151 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/javascript.py +1587 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/jmespath.py +69 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/jslt.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/jsonnet.py +169 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/jsx.py +75 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/julia.py +293 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/jvm.py +1802 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/kuin.py +332 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/kusto.py +93 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ldap.py +155 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/lean.py +241 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/lilypond.py +225 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/lisp.py +3146 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/macaulay2.py +1788 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/make.py +212 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/markup.py +1654 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/math.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/matlab.py +3306 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/maxima.py +84 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/meson.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/mime.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/minecraft.py +391 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/mips.py +130 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ml.py +958 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/modeling.py +366 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/modula2.py +1579 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/mojo.py +704 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/monte.py +203 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/mosel.py +447 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ncl.py +894 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/nimrod.py +199 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/nit.py +63 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/nix.py +144 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/oberon.py +120 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/objective.py +513 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ooc.py +84 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/openscad.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/other.py +41 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/parasail.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/parsers.py +798 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/pascal.py +644 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/pawn.py +202 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/perl.py +733 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/phix.py +363 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/php.py +334 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/pointless.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/pony.py +93 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/praat.py +303 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/procfile.py +41 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/prolog.py +318 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/promql.py +176 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/prql.py +251 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ptx.py +119 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/python.py +1198 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/q.py +187 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/qlik.py +117 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/qvt.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/r.py +192 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/rdf.py +468 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/rebol.py +419 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/resource.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ride.py +138 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/rita.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/rnc.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/roboconf.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/robotframework.py +551 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ruby.py +518 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/rust.py +222 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/sas.py +227 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/savi.py +171 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/scdoc.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/scripting.py +1598 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/sgf.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/shell.py +898 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/sieve.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/slash.py +183 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/smalltalk.py +194 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/smithy.py +77 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/smv.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/snobol.py +82 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/solidity.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/soong.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/sophia.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/special.py +121 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/spice.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/sql.py +1033 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/srcinfo.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/stata.py +170 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/supercollider.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/tact.py +303 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/tal.py +77 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/tcl.py +148 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/teal.py +88 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/templates.py +2355 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/teraterm.py +325 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/testing.py +209 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/text.py +27 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/textedit.py +205 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/textfmts.py +436 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/theorem.py +410 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/thingsdb.py +140 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/tlb.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/tls.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/tnt.py +270 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/trafficscript.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/typoscript.py +216 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/typst.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/ul4.py +309 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/unicon.py +413 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/urbi.py +145 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/usd.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/varnish.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/verification.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/verifpal.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/vip.py +150 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/vyper.py +140 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/web.py +24 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/webassembly.py +119 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/webidl.py +298 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/webmisc.py +1006 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/wgsl.py +406 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/whiley.py +115 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/wowtoc.py +120 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/wren.py +98 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/x10.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/xorg.py +38 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/yang.py +103 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/yara.py +69 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/lexers/zig.py +125 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/modeline.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/plugin.py +72 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/regexopt.py +91 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/scanner.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/sphinxext.py +247 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/style.py +203 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/__init__.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/_mapping.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/abap.py +32 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/algol.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/algol_nu.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/arduino.py +100 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/autumn.py +67 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/borland.py +53 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/bw.py +52 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/coffee.py +80 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/colorful.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/default.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/dracula.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/emacs.py +75 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/friendly.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/friendly_grayscale.py +80 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/fruity.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/gh_dark.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/gruvbox.py +118 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/igor.py +32 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/inkpot.py +72 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/lightbulb.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/lilypond.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/lovelace.py +100 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/manni.py +79 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/material.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/monokai.py +112 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/murphy.py +82 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/native.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/nord.py +156 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/onedark.py +63 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/paraiso_dark.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/paraiso_light.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/pastie.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/perldoc.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/rainbow_dash.py +95 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/rrt.py +39 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/sas.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/solarized.py +144 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/staroffice.py +31 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/stata_dark.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/stata_light.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/tango.py +143 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/trac.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/vim.py +67 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/vs.py +41 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/xcode.py +53 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/styles/zenburn.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/token.py +214 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/unistring.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/pygments/util.py +324 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/__init__.py +184 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/__version__.py +14 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/_internal_utils.py +50 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/adapters.py +719 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/api.py +157 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/auth.py +314 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/certs.py +17 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/compat.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/cookies.py +561 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/exceptions.py +151 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/help.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/hooks.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/models.py +1037 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/packages.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/sessions.py +831 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/status_codes.py +128 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/structures.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/requests/utils.py +1096 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/__init__.py +290 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_core_metadata.py +286 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/__init__.py +14 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/_log.py +3 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/_modified.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +604 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/archive_util.py +264 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/ccompiler.py +1256 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/cmd.py +439 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/__init__.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/bdist.py +155 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +140 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +597 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/build.py +156 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/build_clib.py +208 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/build_ext.py +796 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/build_py.py +406 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +170 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/check.py +154 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/clean.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/config.py +369 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/install.py +811 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/install_data.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/install_headers.py +44 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/install_lib.py +234 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/command/sdist.py +515 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/compat/__init__.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/compat/py38.py +34 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/compat/py39.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/core.py +286 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +339 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/dep_util.py +14 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/dir_util.py +249 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/dist.py +1288 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/errors.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/extension.py +247 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +469 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/file_util.py +236 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/filelist.py +369 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/log.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/spawn.py +117 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/sysconfig.py +583 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/__init__.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/compat/py38.py +50 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/support.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_archive_util.py +353 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_bdist.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_bdist_dumb.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_bdist_rpm.py +128 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_build.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_build_clib.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +563 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_build_py.py +196 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_build_scripts.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_ccompiler.py +91 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_check.py +194 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_clean.py +45 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_cmd.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_config_cmd.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_core.py +130 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_cygwinccompiler.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +112 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_dist.py +545 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_extension.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_file_util.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_filelist.py +336 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_install.py +245 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_install_data.py +74 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_install_headers.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_install_lib.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_install_scripts.py +52 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_log.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_mingwccompiler.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_modified.py +126 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_msvccompiler.py +137 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +470 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_spawn.py +131 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_sysconfig.py +319 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_text_file.py +127 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_unixccompiler.py +351 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_util.py +243 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_version.py +80 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/test_versionpredicate.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/tests/unix_compat.py +17 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/text_file.py +286 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/unixccompiler.py +402 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/util.py +505 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/version.py +349 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_distutils/zosccompiler.py +229 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_entry_points.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_imp.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_importlib.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_itertools.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_normalization.py +144 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_path.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_reqs.py +41 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/autocommand/__init__.py +27 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/autocommand/autoasync.py +142 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/autocommand/autocommand.py +70 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/autocommand/automain.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/autocommand/autoparse.py +333 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/autocommand/errors.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/backports/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/backports/tarfile/__init__.py +2937 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/backports/tarfile/__main__.py +5 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py +24 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1083 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +67 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py +22 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py +36 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_metadata/diagnose.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +36 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +168 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +38 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +171 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +95 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +194 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +56 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +18 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +104 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +117 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +242 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +89 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +97 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +145 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +241 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +164 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +32 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/inflect/__init__.py +3986 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/inflect/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/inflect/compat/py38.py +7 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/collections/__init__.py +1091 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/context.py +361 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.py +633 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +624 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/text/layouts.py +25 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/text/show-newlines.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/text/strip-prefix.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/text/to-dvorak.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/jaraco/text/to-qwerty.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +4806 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +1046 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +262 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/_parser.py +354 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/_tokenizer.py +194 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/markers.py +325 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +804 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +91 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +1009 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/tags.py +568 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/utils.py +174 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/packaging/version.py +563 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/__init__.py +627 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/__main__.py +55 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/android.py +249 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/api.py +292 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/macos.py +130 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/unix.py +275 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/version.py +16 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/platformdirs/windows.py +272 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/__init__.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_checkers.py +993 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_config.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_decorators.py +235 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_exceptions.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_functions.py +308 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_importhook.py +213 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_memo.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_pytest_plugin.py +127 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_suppression.py +86 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_transformer.py +1229 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_union_transformer.py +55 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typeguard/_utils.py +173 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/typing_extensions.py +3641 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +3 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/__main__.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +26 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +595 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +155 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +273 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/cli/pack.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/cli/tags.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/cli/unpack.py +30 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +469 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +180 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/util.py +26 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_elffile.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py +260 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_parser.py +356 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_structures.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py +192 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/markers.py +253 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/requirements.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/specifiers.py +1011 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/tags.py +571 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/utils.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/version.py +561 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +196 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/zipp/__init__.py +501 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/zipp/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/zipp/compat/py310.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/_vendor/zipp/glob.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/archive_util.py +217 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/build_meta.py +530 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/__init__.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/_requirestxt.py +131 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/alias.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/bdist_egg.py +465 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/bdist_rpm.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/bdist_wheel.py +635 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/build.py +135 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/build_clib.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/build_ext.py +468 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/build_py.py +404 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/develop.py +195 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/dist_info.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/easy_install.py +2388 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/editable_wheel.py +927 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/egg_info.py +717 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/install.py +165 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/install_egg_info.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/install_lib.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/install_scripts.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/rotate.py +65 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/saveopts.py +21 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/sdist.py +216 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/setopt.py +141 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/command/test.py +45 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/compat/py310.py +9 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/compat/py311.py +27 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/compat/py312.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/compat/py39.py +9 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/__init__.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +457 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +336 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +52 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1319 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +375 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/expand.py +443 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/pyprojecttoml.py +466 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/config/setupcfg.py +780 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/depends.py +166 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/discovery.py +607 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/dist.py +955 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/errors.py +72 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/extension.py +165 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/glob.py +165 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/installer.py +145 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/launch.py +36 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/logging.py +40 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/modified.py +8 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/monkey.py +126 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/msvc.py +1515 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/namespaces.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/package_index.py +1148 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/sandbox.py +529 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/__init__.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/compat/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/compat/py39.py +3 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +57 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/downloads/preload.py +18 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +511 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/test_expand.py +221 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +396 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +99 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +969 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/contexts.py +145 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/environment.py +95 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/fixtures.py +157 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/integration/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/integration/helpers.py +77 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +224 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/mod_with_constant.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/namespaces.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/script-with-bom.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/server.py +86 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_archive_util.py +36 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py +28 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_bdist_egg.py +69 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +621 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_build.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_build_clib.py +84 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_build_ext.py +291 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_build_meta.py +970 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_build_py.py +480 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_config_discovery.py +647 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_core_metadata.py +389 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_depends.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_develop.py +175 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_dist.py +280 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_dist_info.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +159 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_easy_install.py +1468 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_editable_install.py +1285 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_egg_info.py +1285 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_extern.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_find_packages.py +218 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_find_py_modules.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_glob.py +45 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_install_scripts.py +89 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_logging.py +76 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_manifest.py +631 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_namespaces.py +138 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_packageindex.py +278 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_sandbox.py +134 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_sdist.py +975 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_setopt.py +40 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_setuptools.py +289 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_unicode_utils.py +10 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_virtualenv.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_warnings.py +106 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_wheel.py +707 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +259 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/text.py +4 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/tests/textwrap.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/unicode_utils.py +102 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/version.py +6 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/warnings.py +107 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/wheel.py +236 -0
- py2docfx/venv/venv0/Lib/site-packages/setuptools/windows_support.py +30 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/__init__.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/among.py +13 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/arabic_stemmer.py +1199 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/armenian_stemmer.py +316 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/basestemmer.py +323 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/basque_stemmer.py +683 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/catalan_stemmer.py +784 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/danish_stemmer.py +221 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/dutch_stemmer.py +468 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/english_stemmer.py +731 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/finnish_stemmer.py +548 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/french_stemmer.py +967 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/german_stemmer.py +415 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/greek_stemmer.py +2271 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/hindi_stemmer.py +173 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/hungarian_stemmer.py +520 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/indonesian_stemmer.py +319 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/irish_stemmer.py +276 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/italian_stemmer.py +715 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/lithuanian_stemmer.py +469 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/nepali_stemmer.py +274 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/norwegian_stemmer.py +191 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/porter_stemmer.py +506 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/portuguese_stemmer.py +659 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/romanian_stemmer.py +633 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/russian_stemmer.py +492 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/serbian_stemmer.py +3497 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/spanish_stemmer.py +708 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/swedish_stemmer.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/tamil_stemmer.py +1788 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/turkish_stemmer.py +1803 -0
- py2docfx/venv/venv0/Lib/site-packages/snowballstemmer/yiddish_stemmer.py +855 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/__init__.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/__main__.py +5 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/addnodes.py +564 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/application.py +1344 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/__init__.py +671 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/_epub_base.py +708 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/changes.py +159 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/dirhtml.py +51 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/dummy.py +46 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/epub3.py +293 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/gettext.py +306 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/html/__init__.py +1419 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/html/transforms.py +84 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/latex/__init__.py +546 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/latex/constants.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/latex/nodes.py +37 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/latex/theming.py +132 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/latex/transforms.py +632 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/latex/util.py +48 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/linkcheck.py +598 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/manpage.py +125 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/singlehtml.py +194 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/texinfo.py +224 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/text.py +89 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/builders/xml.py +117 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/cmd/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/cmd/build.py +324 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/cmd/make_mode.py +161 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/cmd/quickstart.py +609 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/config.py +520 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/deprecation.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/directives/__init__.py +340 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/directives/code.py +483 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/directives/other.py +393 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/directives/patches.py +189 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/__init__.py +403 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/c.py +3880 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/changeset.py +160 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/citation.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/cpp.py +8162 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/index.py +122 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/javascript.py +499 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/math.py +150 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/python.py +1521 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/rst.py +303 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/domains/std.py +1155 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/__init__.py +730 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/adapters/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/adapters/asset.py +15 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/adapters/indexentries.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/adapters/toctree.py +340 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/collectors/__init__.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/collectors/asset.py +141 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/collectors/dependencies.py +54 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/collectors/metadata.py +68 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/collectors/title.py +59 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/environment/collectors/toctree.py +350 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/errors.py +127 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/events.py +120 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/apidoc.py +470 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/__init__.py +2793 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/directive.py +148 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/importer.py +307 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/mock.py +195 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/preserve_defaults.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/type_comment.py +131 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autodoc/typehints.py +216 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autosectionlabel.py +66 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autosummary/__init__.py +837 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/autosummary/generate.py +646 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/coverage.py +315 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/doctest.py +561 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/duration.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/extlinks.py +120 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/githubpages.py +31 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/graphviz.py +416 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/ifconfig.py +78 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/imgconverter.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/imgmath.py +390 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/inheritance_diagram.py +474 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/intersphinx.py +684 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/linkcode.py +73 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/mathjax.py +122 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/napoleon/__init__.py +474 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/napoleon/docstring.py +1356 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/napoleon/iterators.py +235 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/todo.py +243 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/ext/viewcode.py +341 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/extension.py +82 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/highlighting.py +184 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/io.py +221 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/jinja2glue.py +217 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/locale/__init__.py +261 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/parsers.py +96 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/project.py +94 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/pycode/__init__.py +171 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/pycode/ast.py +211 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/pycode/parser.py +573 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/pygments_styles.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/registry.py +513 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/roles.py +428 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/__init__.py +593 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/da.py +120 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/de.py +303 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/en.py +220 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/es.py +363 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/fi.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/fr.py +199 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/hu.py +226 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/it.py +316 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/ja.py +536 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/nl.py +127 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/no.py +202 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/pt.py +261 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/ro.py +22 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/ru.py +251 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/sv.py +140 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/tr.py +22 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/search/zh.py +262 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/setup_command.py +192 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/testing/__init__.py +7 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/testing/comparer.py +97 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/testing/fixtures.py +250 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/testing/path.py +210 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/testing/restructuredtext.py +27 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/testing/util.py +206 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/theming.py +230 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/__init__.py +419 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/compact_bullet_list.py +88 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/i18n.py +528 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/post_transforms/__init__.py +279 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/post_transforms/code.py +136 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/post_transforms/images.py +271 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/transforms/references.py +47 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/__init__.py +407 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/build_phase.py +12 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/cfamily.py +462 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/console.py +129 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/display.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/docfields.py +368 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/docstrings.py +88 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/docutils.py +621 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/exceptions.py +67 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/fileutil.py +97 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/http_date.py +20 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/i18n.py +262 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/images.py +113 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/inspect.py +811 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/inventory.py +170 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/jsdump.py +201 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/logging.py +603 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/matching.py +166 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/math.py +58 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/nodes.py +629 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/osutil.py +221 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/parallel.py +151 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/png.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/requests.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/rst.py +110 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/stemmer/__init__.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/tags.py +81 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/template.py +132 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/texescape.py +153 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/util/typing.py +352 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/versioning.py +176 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/__init__.py +1 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/_html4.py +858 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/html.py +45 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/html5.py +824 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/latex.py +2116 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/manpage.py +459 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/texinfo.py +1562 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/text.py +1182 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinx/writers/xml.py +49 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/applehelp/__init__.py +276 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/devhelp/__init__.py +143 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/htmlhelp/__init__.py +340 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/jsmath/__init__.py +92 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/jsmath/version.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/qthelp/__init__.py +266 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/serializinghtml/__init__.py +180 -0
- py2docfx/venv/venv0/Lib/site-packages/sphinxcontrib/serializinghtml/jsonimpl.py +33 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/__init__.py +211 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/_base_connection.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/_collections.py +483 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/_request_methods.py +278 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/_version.py +16 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/connection.py +1033 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/connectionpool.py +1182 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/emscripten/__init__.py +16 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/emscripten/connection.py +254 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +418 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/emscripten/request.py +22 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/emscripten/response.py +285 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/pyopenssl.py +552 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/contrib/socks.py +228 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/exceptions.py +321 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/fields.py +341 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/filepost.py +89 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/http2/__init__.py +53 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/http2/connection.py +356 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/http2/probe.py +87 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/poolmanager.py +637 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/response.py +1265 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/__init__.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/connection.py +137 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/proxy.py +43 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/request.py +256 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/response.py +101 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/retry.py +533 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/ssl_.py +513 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/ssl_match_hostname.py +159 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/ssltransport.py +276 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/timeout.py +275 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/url.py +471 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/util.py +42 -0
- py2docfx/venv/venv0/Lib/site-packages/urllib3/util/wait.py +124 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/__init__.py +3 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/__main__.py +23 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/_bdist_wheel.py +604 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/_setuptools_logging.py +26 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/bdist_wheel.py +11 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/cli/__init__.py +155 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/cli/convert.py +273 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/cli/pack.py +85 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/cli/tags.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/cli/unpack.py +30 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/macosx_libfile.py +482 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/metadata.py +183 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/util.py +26 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/__init__.py +0 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/_elffile.py +108 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/_manylinux.py +260 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/_musllinux.py +83 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/_parser.py +356 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/_structures.py +61 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/_tokenizer.py +192 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/markers.py +253 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/requirements.py +90 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/specifiers.py +1011 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/tags.py +571 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/utils.py +172 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/vendored/packaging/version.py +561 -0
- py2docfx/venv/venv0/Lib/site-packages/wheel/wheelfile.py +227 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/__init__.py +390 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/composer.py +139 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/constructor.py +748 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/cyaml.py +101 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/dumper.py +62 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/emitter.py +1137 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/error.py +75 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/events.py +86 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/loader.py +63 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/nodes.py +49 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/parser.py +589 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/reader.py +185 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/representer.py +389 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/resolver.py +227 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/scanner.py +1435 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/serializer.py +111 -0
- py2docfx/venv/venv0/Lib/site-packages/yaml/tokens.py +104 -0
- py2docfx/venv/venv0/Scripts/rst2html.py +23 -0
- py2docfx/venv/venv0/Scripts/rst2html4.py +26 -0
- py2docfx/venv/venv0/Scripts/rst2html5.py +33 -0
- py2docfx/venv/venv0/Scripts/rst2latex.py +26 -0
- py2docfx/venv/venv0/Scripts/rst2man.py +27 -0
- py2docfx/venv/venv0/Scripts/rst2odt.py +28 -0
- py2docfx/venv/venv0/Scripts/rst2odt_prepstyles.py +65 -0
- py2docfx/venv/venv0/Scripts/rst2pseudoxml.py +23 -0
- py2docfx/venv/venv0/Scripts/rst2s5.py +24 -0
- py2docfx/venv/venv0/Scripts/rst2xetex.py +27 -0
- py2docfx/venv/venv0/Scripts/rst2xml.py +23 -0
- py2docfx/venv/venv0/Scripts/rstpep2html.py +25 -0
- {py2docfx-0.1.10.dev1859594.dist-info → py2docfx-0.1.10.dev1870645.dist-info}/METADATA +1 -1
- py2docfx-0.1.10.dev1870645.dist-info/RECORD +1888 -0
- py2docfx-0.1.10.dev1859594.dist-info/RECORD +0 -129
- {py2docfx-0.1.10.dev1859594.dist-info → py2docfx-0.1.10.dev1870645.dist-info}/WHEEL +0 -0
- {py2docfx-0.1.10.dev1859594.dist-info → py2docfx-0.1.10.dev1870645.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,2793 @@
|
|
1
|
+
"""Extension to create automatic documentation from code docstrings.
|
2
|
+
|
3
|
+
Automatically insert docstrings for functions, classes or whole modules into
|
4
|
+
the doctree, thus avoiding duplication between docstrings and documentation
|
5
|
+
for those who like elaborate docstrings.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from __future__ import annotations
|
9
|
+
|
10
|
+
import re
|
11
|
+
import sys
|
12
|
+
from inspect import Parameter, Signature
|
13
|
+
from types import ModuleType
|
14
|
+
from typing import (TYPE_CHECKING, Any, Callable, Iterator, List, Sequence, Tuple, TypeVar,
|
15
|
+
Union)
|
16
|
+
|
17
|
+
from docutils.statemachine import StringList
|
18
|
+
|
19
|
+
import sphinx
|
20
|
+
from sphinx.application import Sphinx
|
21
|
+
from sphinx.config import ENUM, Config
|
22
|
+
from sphinx.environment import BuildEnvironment
|
23
|
+
from sphinx.ext.autodoc.importer import get_class_members, import_module, import_object
|
24
|
+
from sphinx.ext.autodoc.mock import ismock, mock, undecorate
|
25
|
+
from sphinx.locale import _, __
|
26
|
+
from sphinx.pycode import ModuleAnalyzer, PycodeError
|
27
|
+
from sphinx.util import inspect, logging
|
28
|
+
from sphinx.util.docstrings import prepare_docstring, separate_metadata
|
29
|
+
from sphinx.util.inspect import (evaluate_signature, getdoc, object_description, safe_getattr,
|
30
|
+
stringify_signature)
|
31
|
+
from sphinx.util.typing import OptionSpec, get_type_hints, restify, stringify_annotation
|
32
|
+
|
33
|
+
if TYPE_CHECKING:
|
34
|
+
from sphinx.ext.autodoc.directive import DocumenterBridge
|
35
|
+
|
36
|
+
logger = logging.getLogger(__name__)
|
37
|
+
|
38
|
+
|
39
|
+
# This type isn't exposed directly in any modules, but can be found
|
40
|
+
# here in most Python versions
|
41
|
+
MethodDescriptorType = type(type.__subclasses__)
|
42
|
+
|
43
|
+
|
44
|
+
#: extended signature RE: with explicit module name separated by ::
|
45
|
+
py_ext_sig_re = re.compile(
|
46
|
+
r'''^ ([\w.]+::)? # explicit module name
|
47
|
+
([\w.]+\.)? # module and/or class name(s)
|
48
|
+
(\w+) \s* # thing name
|
49
|
+
(?: \((.*)\) # optional: arguments
|
50
|
+
(?:\s* -> \s* (.*))? # return annotation
|
51
|
+
)? $ # and nothing more
|
52
|
+
''', re.VERBOSE)
|
53
|
+
special_member_re = re.compile(r'^__\S+__$')
|
54
|
+
|
55
|
+
|
56
|
+
def identity(x: Any) -> Any:
|
57
|
+
return x
|
58
|
+
|
59
|
+
|
60
|
+
class _All:
|
61
|
+
"""A special value for :*-members: that matches to any member."""
|
62
|
+
|
63
|
+
def __contains__(self, item: Any) -> bool:
|
64
|
+
return True
|
65
|
+
|
66
|
+
def append(self, item: Any) -> None:
|
67
|
+
pass # nothing
|
68
|
+
|
69
|
+
|
70
|
+
class _Empty:
|
71
|
+
"""A special value for :exclude-members: that never matches to any member."""
|
72
|
+
|
73
|
+
def __contains__(self, item: Any) -> bool:
|
74
|
+
return False
|
75
|
+
|
76
|
+
|
77
|
+
ALL = _All()
|
78
|
+
EMPTY = _Empty()
|
79
|
+
UNINITIALIZED_ATTR = object()
|
80
|
+
INSTANCEATTR = object()
|
81
|
+
SLOTSATTR = object()
|
82
|
+
|
83
|
+
|
84
|
+
def members_option(arg: Any) -> object | list[str]:
|
85
|
+
"""Used to convert the :members: option to auto directives."""
|
86
|
+
if arg in (None, True):
|
87
|
+
return ALL
|
88
|
+
elif arg is False:
|
89
|
+
return None
|
90
|
+
else:
|
91
|
+
return [x.strip() for x in arg.split(',') if x.strip()]
|
92
|
+
|
93
|
+
|
94
|
+
def exclude_members_option(arg: Any) -> object | set[str]:
|
95
|
+
"""Used to convert the :exclude-members: option."""
|
96
|
+
if arg in (None, True):
|
97
|
+
return EMPTY
|
98
|
+
return {x.strip() for x in arg.split(',') if x.strip()}
|
99
|
+
|
100
|
+
|
101
|
+
def inherited_members_option(arg: Any) -> set[str]:
|
102
|
+
"""Used to convert the :inherited-members: option to auto directives."""
|
103
|
+
if arg in (None, True):
|
104
|
+
return {'object'}
|
105
|
+
elif arg:
|
106
|
+
return {x.strip() for x in arg.split(',')}
|
107
|
+
else:
|
108
|
+
return set()
|
109
|
+
|
110
|
+
|
111
|
+
def member_order_option(arg: Any) -> str | None:
|
112
|
+
"""Used to convert the :member-order: option to auto directives."""
|
113
|
+
if arg in (None, True):
|
114
|
+
return None
|
115
|
+
elif arg in ('alphabetical', 'bysource', 'groupwise'):
|
116
|
+
return arg
|
117
|
+
else:
|
118
|
+
raise ValueError(__('invalid value for member-order option: %s') % arg)
|
119
|
+
|
120
|
+
|
121
|
+
def class_doc_from_option(arg: Any) -> str | None:
|
122
|
+
"""Used to convert the :class-doc-from: option to autoclass directives."""
|
123
|
+
if arg in ('both', 'class', 'init'):
|
124
|
+
return arg
|
125
|
+
else:
|
126
|
+
raise ValueError(__('invalid value for class-doc-from option: %s') % arg)
|
127
|
+
|
128
|
+
|
129
|
+
SUPPRESS = object()
|
130
|
+
|
131
|
+
|
132
|
+
def annotation_option(arg: Any) -> Any:
|
133
|
+
if arg in (None, True):
|
134
|
+
# suppress showing the representation of the object
|
135
|
+
return SUPPRESS
|
136
|
+
else:
|
137
|
+
return arg
|
138
|
+
|
139
|
+
|
140
|
+
def bool_option(arg: Any) -> bool:
|
141
|
+
"""Used to convert flag options to auto directives. (Instead of
|
142
|
+
directives.flag(), which returns None).
|
143
|
+
"""
|
144
|
+
return True
|
145
|
+
|
146
|
+
|
147
|
+
def merge_members_option(options: dict) -> None:
|
148
|
+
"""Merge :private-members: and :special-members: options to the
|
149
|
+
:members: option.
|
150
|
+
"""
|
151
|
+
if options.get('members') is ALL:
|
152
|
+
# merging is not needed when members: ALL
|
153
|
+
return
|
154
|
+
|
155
|
+
members = options.setdefault('members', [])
|
156
|
+
for key in {'private-members', 'special-members'}:
|
157
|
+
if key in options and options[key] not in (ALL, None):
|
158
|
+
for member in options[key]:
|
159
|
+
if member not in members:
|
160
|
+
members.append(member)
|
161
|
+
|
162
|
+
|
163
|
+
# Some useful event listener factories for autodoc-process-docstring.
|
164
|
+
|
165
|
+
def cut_lines(pre: int, post: int = 0, what: str | None = None) -> Callable:
|
166
|
+
"""Return a listener that removes the first *pre* and last *post*
|
167
|
+
lines of every docstring. If *what* is a sequence of strings,
|
168
|
+
only docstrings of a type in *what* will be processed.
|
169
|
+
|
170
|
+
Use like this (e.g. in the ``setup()`` function of :file:`conf.py`)::
|
171
|
+
|
172
|
+
from sphinx.ext.autodoc import cut_lines
|
173
|
+
app.connect('autodoc-process-docstring', cut_lines(4, what=['module']))
|
174
|
+
|
175
|
+
This can (and should) be used in place of :confval:`automodule_skip_lines`.
|
176
|
+
"""
|
177
|
+
def process(app: Sphinx, what_: str, name: str, obj: Any, options: Any, lines: list[str]
|
178
|
+
) -> None:
|
179
|
+
if what and what_ not in what:
|
180
|
+
return
|
181
|
+
del lines[:pre]
|
182
|
+
if post:
|
183
|
+
# remove one trailing blank line.
|
184
|
+
if lines and not lines[-1]:
|
185
|
+
lines.pop(-1)
|
186
|
+
del lines[-post:]
|
187
|
+
# make sure there is a blank line at the end
|
188
|
+
if lines and lines[-1]:
|
189
|
+
lines.append('')
|
190
|
+
return process
|
191
|
+
|
192
|
+
|
193
|
+
def between(
|
194
|
+
marker: str,
|
195
|
+
what: Sequence[str] | None = None,
|
196
|
+
keepempty: bool = False,
|
197
|
+
exclude: bool = False
|
198
|
+
) -> Callable:
|
199
|
+
"""Return a listener that either keeps, or if *exclude* is True excludes,
|
200
|
+
lines between lines that match the *marker* regular expression. If no line
|
201
|
+
matches, the resulting docstring would be empty, so no change will be made
|
202
|
+
unless *keepempty* is true.
|
203
|
+
|
204
|
+
If *what* is a sequence of strings, only docstrings of a type in *what* will
|
205
|
+
be processed.
|
206
|
+
"""
|
207
|
+
marker_re = re.compile(marker)
|
208
|
+
|
209
|
+
def process(app: Sphinx, what_: str, name: str, obj: Any, options: Any, lines: list[str]
|
210
|
+
) -> None:
|
211
|
+
if what and what_ not in what:
|
212
|
+
return
|
213
|
+
deleted = 0
|
214
|
+
delete = not exclude
|
215
|
+
orig_lines = lines[:]
|
216
|
+
for i, line in enumerate(orig_lines):
|
217
|
+
if delete:
|
218
|
+
lines.pop(i - deleted)
|
219
|
+
deleted += 1
|
220
|
+
if marker_re.match(line):
|
221
|
+
delete = not delete
|
222
|
+
if delete:
|
223
|
+
lines.pop(i - deleted)
|
224
|
+
deleted += 1
|
225
|
+
if not lines and not keepempty:
|
226
|
+
lines[:] = orig_lines
|
227
|
+
# make sure there is a blank line at the end
|
228
|
+
if lines and lines[-1]:
|
229
|
+
lines.append('')
|
230
|
+
return process
|
231
|
+
|
232
|
+
|
233
|
+
# This class is used only in ``sphinx.ext.autodoc.directive``,
|
234
|
+
# But we define this class here to keep compatibility (see #4538)
|
235
|
+
class Options(dict):
|
236
|
+
"""A dict/attribute hybrid that returns None on nonexisting keys."""
|
237
|
+
def copy(self) -> Options:
|
238
|
+
return Options(super().copy())
|
239
|
+
|
240
|
+
def __getattr__(self, name: str) -> Any:
|
241
|
+
try:
|
242
|
+
return self[name.replace('_', '-')]
|
243
|
+
except KeyError:
|
244
|
+
return None
|
245
|
+
|
246
|
+
|
247
|
+
class ObjectMember(tuple):
|
248
|
+
"""A member of object.
|
249
|
+
|
250
|
+
This is used for the result of `Documenter.get_module_members()` to
|
251
|
+
represent each member of the object.
|
252
|
+
|
253
|
+
.. Note::
|
254
|
+
|
255
|
+
An instance of this class behaves as a tuple of (name, object)
|
256
|
+
for compatibility to old Sphinx. The behavior will be dropped
|
257
|
+
in the future. Therefore extensions should not use the tuple
|
258
|
+
interface.
|
259
|
+
"""
|
260
|
+
|
261
|
+
def __new__(cls, name: str, obj: Any, **kwargs: Any) -> Any:
|
262
|
+
return super().__new__(cls, (name, obj)) # type: ignore
|
263
|
+
|
264
|
+
def __init__(self, name: str, obj: Any, docstring: str | None = None,
|
265
|
+
class_: Any = None, skipped: bool = False) -> None:
|
266
|
+
self.__name__ = name
|
267
|
+
self.object = obj
|
268
|
+
self.docstring = docstring
|
269
|
+
self.skipped = skipped
|
270
|
+
self.class_ = class_
|
271
|
+
|
272
|
+
|
273
|
+
ObjectMembers = Union[List[ObjectMember], List[Tuple[str, Any]]]
|
274
|
+
|
275
|
+
|
276
|
+
class Documenter:
|
277
|
+
"""
|
278
|
+
A Documenter knows how to autodocument a single object type. When
|
279
|
+
registered with the AutoDirective, it will be used to document objects
|
280
|
+
of that type when needed by autodoc.
|
281
|
+
|
282
|
+
Its *objtype* attribute selects what auto directive it is assigned to
|
283
|
+
(the directive name is 'auto' + objtype), and what directive it generates
|
284
|
+
by default, though that can be overridden by an attribute called
|
285
|
+
*directivetype*.
|
286
|
+
|
287
|
+
A Documenter has an *option_spec* that works like a docutils directive's;
|
288
|
+
in fact, it will be used to parse an auto directive's options that matches
|
289
|
+
the Documenter.
|
290
|
+
"""
|
291
|
+
#: name by which the directive is called (auto...) and the default
|
292
|
+
#: generated directive name
|
293
|
+
objtype = 'object'
|
294
|
+
#: indentation by which to indent the directive content
|
295
|
+
content_indent = ' '
|
296
|
+
#: priority if multiple documenters return True from can_document_member
|
297
|
+
priority = 0
|
298
|
+
#: order if autodoc_member_order is set to 'groupwise'
|
299
|
+
member_order = 0
|
300
|
+
#: true if the generated content may contain titles
|
301
|
+
titles_allowed = False
|
302
|
+
|
303
|
+
option_spec: OptionSpec = {
|
304
|
+
'noindex': bool_option
|
305
|
+
}
|
306
|
+
|
307
|
+
def get_attr(self, obj: Any, name: str, *defargs: Any) -> Any:
|
308
|
+
"""getattr() override for types such as Zope interfaces."""
|
309
|
+
return autodoc_attrgetter(self.env.app, obj, name, *defargs)
|
310
|
+
|
311
|
+
@classmethod
|
312
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
313
|
+
) -> bool:
|
314
|
+
"""Called to see if a member can be documented by this Documenter."""
|
315
|
+
raise NotImplementedError('must be implemented in subclasses')
|
316
|
+
|
317
|
+
def __init__(self, directive: DocumenterBridge, name: str, indent: str = '') -> None:
|
318
|
+
self.directive = directive
|
319
|
+
self.config: Config = directive.env.config
|
320
|
+
self.env: BuildEnvironment = directive.env
|
321
|
+
self.options = directive.genopt
|
322
|
+
self.name = name
|
323
|
+
self.indent = indent
|
324
|
+
# the module and object path within the module, and the fully
|
325
|
+
# qualified name (all set after resolve_name succeeds)
|
326
|
+
self.modname: str = None
|
327
|
+
self.module: ModuleType = None
|
328
|
+
self.objpath: list[str] = None
|
329
|
+
self.fullname: str = None
|
330
|
+
# extra signature items (arguments and return annotation,
|
331
|
+
# also set after resolve_name succeeds)
|
332
|
+
self.args: str = None
|
333
|
+
self.retann: str = None
|
334
|
+
# the object to document (set after import_object succeeds)
|
335
|
+
self.object: Any = None
|
336
|
+
self.object_name: str = None
|
337
|
+
# the parent/owner of the object to document
|
338
|
+
self.parent: Any = None
|
339
|
+
# the module analyzer to get at attribute docs, or None
|
340
|
+
self.analyzer: ModuleAnalyzer = None
|
341
|
+
|
342
|
+
@property
|
343
|
+
def documenters(self) -> dict[str, type[Documenter]]:
|
344
|
+
"""Returns registered Documenter classes"""
|
345
|
+
return self.env.app.registry.documenters
|
346
|
+
|
347
|
+
def add_line(self, line: str, source: str, *lineno: int) -> None:
|
348
|
+
"""Append one line of generated reST to the output."""
|
349
|
+
if line.strip(): # not a blank line
|
350
|
+
self.directive.result.append(self.indent + line, source, *lineno)
|
351
|
+
else:
|
352
|
+
self.directive.result.append('', source, *lineno)
|
353
|
+
|
354
|
+
def resolve_name(self, modname: str, parents: Any, path: str, base: Any
|
355
|
+
) -> tuple[str, list[str]]:
|
356
|
+
"""Resolve the module and name of the object to document given by the
|
357
|
+
arguments and the current module/class.
|
358
|
+
|
359
|
+
Must return a pair of the module name and a chain of attributes; for
|
360
|
+
example, it would return ``('zipfile', ['ZipFile', 'open'])`` for the
|
361
|
+
``zipfile.ZipFile.open`` method.
|
362
|
+
"""
|
363
|
+
raise NotImplementedError('must be implemented in subclasses')
|
364
|
+
|
365
|
+
def parse_name(self) -> bool:
|
366
|
+
"""Determine what module to import and what attribute to document.
|
367
|
+
|
368
|
+
Returns True and sets *self.modname*, *self.objpath*, *self.fullname*,
|
369
|
+
*self.args* and *self.retann* if parsing and resolving was successful.
|
370
|
+
"""
|
371
|
+
# first, parse the definition -- auto directives for classes and
|
372
|
+
# functions can contain a signature which is then used instead of
|
373
|
+
# an autogenerated one
|
374
|
+
try:
|
375
|
+
matched = py_ext_sig_re.match(self.name)
|
376
|
+
explicit_modname, path, base, args, retann = matched.groups()
|
377
|
+
except AttributeError:
|
378
|
+
logger.warning(__('invalid signature for auto%s (%r)') % (self.objtype, self.name),
|
379
|
+
type='autodoc')
|
380
|
+
return False
|
381
|
+
|
382
|
+
# support explicit module and class name separation via ::
|
383
|
+
if explicit_modname is not None:
|
384
|
+
modname = explicit_modname[:-2]
|
385
|
+
parents = path.rstrip('.').split('.') if path else []
|
386
|
+
else:
|
387
|
+
modname = None
|
388
|
+
parents = []
|
389
|
+
|
390
|
+
with mock(self.config.autodoc_mock_imports):
|
391
|
+
self.modname, self.objpath = self.resolve_name(modname, parents, path, base)
|
392
|
+
|
393
|
+
if not self.modname:
|
394
|
+
return False
|
395
|
+
|
396
|
+
self.args = args
|
397
|
+
self.retann = retann
|
398
|
+
self.fullname = ((self.modname or '') +
|
399
|
+
('.' + '.'.join(self.objpath) if self.objpath else ''))
|
400
|
+
return True
|
401
|
+
|
402
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
403
|
+
"""Import the object given by *self.modname* and *self.objpath* and set
|
404
|
+
it as *self.object*.
|
405
|
+
|
406
|
+
Returns True if successful, False if an error occurred.
|
407
|
+
"""
|
408
|
+
with mock(self.config.autodoc_mock_imports):
|
409
|
+
try:
|
410
|
+
ret = import_object(self.modname, self.objpath, self.objtype,
|
411
|
+
attrgetter=self.get_attr,
|
412
|
+
warningiserror=self.config.autodoc_warningiserror)
|
413
|
+
self.module, self.parent, self.object_name, self.object = ret
|
414
|
+
if ismock(self.object):
|
415
|
+
self.object = undecorate(self.object)
|
416
|
+
return True
|
417
|
+
except ImportError as exc:
|
418
|
+
if raiseerror:
|
419
|
+
raise
|
420
|
+
else:
|
421
|
+
logger.warning(exc.args[0], type='autodoc', subtype='import_object')
|
422
|
+
self.env.note_reread()
|
423
|
+
return False
|
424
|
+
|
425
|
+
def get_real_modname(self) -> str:
|
426
|
+
"""Get the real module name of an object to document.
|
427
|
+
|
428
|
+
It can differ from the name of the module through which the object was
|
429
|
+
imported.
|
430
|
+
"""
|
431
|
+
return self.get_attr(self.object, '__module__', None) or self.modname
|
432
|
+
|
433
|
+
def check_module(self) -> bool:
|
434
|
+
"""Check if *self.object* is really defined in the module given by
|
435
|
+
*self.modname*.
|
436
|
+
"""
|
437
|
+
if self.options.imported_members:
|
438
|
+
return True
|
439
|
+
|
440
|
+
subject = inspect.unpartial(self.object)
|
441
|
+
modname = self.get_attr(subject, '__module__', None)
|
442
|
+
if modname and modname != self.modname:
|
443
|
+
return False
|
444
|
+
return True
|
445
|
+
|
446
|
+
def format_args(self, **kwargs: Any) -> str | None:
|
447
|
+
"""Format the argument signature of *self.object*.
|
448
|
+
|
449
|
+
Should return None if the object does not have a signature.
|
450
|
+
"""
|
451
|
+
return None
|
452
|
+
|
453
|
+
def format_name(self) -> str:
|
454
|
+
"""Format the name of *self.object*.
|
455
|
+
|
456
|
+
This normally should be something that can be parsed by the generated
|
457
|
+
directive, but doesn't need to be (Sphinx will display it unparsed
|
458
|
+
then).
|
459
|
+
"""
|
460
|
+
# normally the name doesn't contain the module (except for module
|
461
|
+
# directives of course)
|
462
|
+
return '.'.join(self.objpath) or self.modname
|
463
|
+
|
464
|
+
def _call_format_args(self, **kwargs: Any) -> str | None:
|
465
|
+
if kwargs:
|
466
|
+
try:
|
467
|
+
return self.format_args(**kwargs)
|
468
|
+
except TypeError:
|
469
|
+
# avoid chaining exceptions, by putting nothing here
|
470
|
+
pass
|
471
|
+
|
472
|
+
# retry without arguments for old documenters
|
473
|
+
return self.format_args()
|
474
|
+
|
475
|
+
def format_signature(self, **kwargs: Any) -> str:
|
476
|
+
"""Format the signature (arguments and return annotation) of the object.
|
477
|
+
|
478
|
+
Let the user process it via the ``autodoc-process-signature`` event.
|
479
|
+
"""
|
480
|
+
if self.args is not None:
|
481
|
+
# signature given explicitly
|
482
|
+
args = "(%s)" % self.args
|
483
|
+
retann = self.retann
|
484
|
+
else:
|
485
|
+
# try to introspect the signature
|
486
|
+
try:
|
487
|
+
retann = None
|
488
|
+
args = self._call_format_args(**kwargs)
|
489
|
+
if args:
|
490
|
+
matched = re.match(r'^(\(.*\))\s+->\s+(.*)$', args)
|
491
|
+
if matched:
|
492
|
+
args = matched.group(1)
|
493
|
+
retann = matched.group(2)
|
494
|
+
except Exception as exc:
|
495
|
+
logger.warning(__('error while formatting arguments for %s: %s'),
|
496
|
+
self.fullname, exc, type='autodoc')
|
497
|
+
args = None
|
498
|
+
|
499
|
+
result = self.env.events.emit_firstresult('autodoc-process-signature',
|
500
|
+
self.objtype, self.fullname,
|
501
|
+
self.object, self.options, args, retann)
|
502
|
+
if result:
|
503
|
+
args, retann = result
|
504
|
+
|
505
|
+
if args is not None:
|
506
|
+
return args + ((' -> %s' % retann) if retann else '')
|
507
|
+
else:
|
508
|
+
return ''
|
509
|
+
|
510
|
+
def add_directive_header(self, sig: str) -> None:
|
511
|
+
"""Add the directive header and options to the generated content."""
|
512
|
+
domain = getattr(self, 'domain', 'py')
|
513
|
+
directive = getattr(self, 'directivetype', self.objtype)
|
514
|
+
name = self.format_name()
|
515
|
+
sourcename = self.get_sourcename()
|
516
|
+
|
517
|
+
# one signature per line, indented by column
|
518
|
+
prefix = f'.. {domain}:{directive}:: '
|
519
|
+
for i, sig_line in enumerate(sig.split("\n")):
|
520
|
+
self.add_line(f'{prefix}{name}{sig_line}',
|
521
|
+
sourcename)
|
522
|
+
if i == 0:
|
523
|
+
prefix = " " * len(prefix)
|
524
|
+
|
525
|
+
if self.options.noindex:
|
526
|
+
self.add_line(' :noindex:', sourcename)
|
527
|
+
if self.objpath:
|
528
|
+
# Be explicit about the module, this is necessary since .. class::
|
529
|
+
# etc. don't support a prepended module name
|
530
|
+
self.add_line(' :module: %s' % self.modname, sourcename)
|
531
|
+
|
532
|
+
def get_doc(self) -> list[list[str]] | None:
|
533
|
+
"""Decode and return lines of the docstring(s) for the object.
|
534
|
+
|
535
|
+
When it returns None, autodoc-process-docstring will not be called for this
|
536
|
+
object.
|
537
|
+
"""
|
538
|
+
docstring = getdoc(self.object, self.get_attr, self.config.autodoc_inherit_docstrings,
|
539
|
+
self.parent, self.object_name)
|
540
|
+
if docstring:
|
541
|
+
tab_width = self.directive.state.document.settings.tab_width
|
542
|
+
return [prepare_docstring(docstring, tab_width)]
|
543
|
+
return []
|
544
|
+
|
545
|
+
def process_doc(self, docstrings: list[list[str]]) -> Iterator[str]:
|
546
|
+
"""Let the user process the docstrings before adding them."""
|
547
|
+
for docstringlines in docstrings:
|
548
|
+
if self.env.app:
|
549
|
+
# let extensions preprocess docstrings
|
550
|
+
self.env.app.emit('autodoc-process-docstring',
|
551
|
+
self.objtype, self.fullname, self.object,
|
552
|
+
self.options, docstringlines)
|
553
|
+
|
554
|
+
if docstringlines and docstringlines[-1] != '':
|
555
|
+
# append a blank line to the end of the docstring
|
556
|
+
docstringlines.append('')
|
557
|
+
|
558
|
+
yield from docstringlines
|
559
|
+
|
560
|
+
def get_sourcename(self) -> str:
|
561
|
+
if (inspect.safe_getattr(self.object, '__module__', None) and
|
562
|
+
inspect.safe_getattr(self.object, '__qualname__', None)):
|
563
|
+
# Get the correct location of docstring from self.object
|
564
|
+
# to support inherited methods
|
565
|
+
fullname = f'{self.object.__module__}.{self.object.__qualname__}'
|
566
|
+
else:
|
567
|
+
fullname = self.fullname
|
568
|
+
|
569
|
+
if self.analyzer:
|
570
|
+
return f'{self.analyzer.srcname}:docstring of {fullname}'
|
571
|
+
else:
|
572
|
+
return 'docstring of %s' % fullname
|
573
|
+
|
574
|
+
def add_content(self, more_content: StringList | None) -> None:
|
575
|
+
"""Add content from docstrings, attribute documentation and user."""
|
576
|
+
docstring = True
|
577
|
+
|
578
|
+
# set sourcename and add content from attribute documentation
|
579
|
+
sourcename = self.get_sourcename()
|
580
|
+
if self.analyzer:
|
581
|
+
attr_docs = self.analyzer.find_attr_docs()
|
582
|
+
if self.objpath:
|
583
|
+
key = ('.'.join(self.objpath[:-1]), self.objpath[-1])
|
584
|
+
if key in attr_docs:
|
585
|
+
docstring = False
|
586
|
+
# make a copy of docstring for attributes to avoid cache
|
587
|
+
# the change of autodoc-process-docstring event.
|
588
|
+
docstrings = [list(attr_docs[key])]
|
589
|
+
|
590
|
+
for i, line in enumerate(self.process_doc(docstrings)):
|
591
|
+
self.add_line(line, sourcename, i)
|
592
|
+
|
593
|
+
# add content from docstrings
|
594
|
+
if docstring:
|
595
|
+
docstrings = self.get_doc()
|
596
|
+
if docstrings is None:
|
597
|
+
# Do not call autodoc-process-docstring on get_doc() returns None.
|
598
|
+
pass
|
599
|
+
else:
|
600
|
+
if not docstrings:
|
601
|
+
# append at least a dummy docstring, so that the event
|
602
|
+
# autodoc-process-docstring is fired and can add some
|
603
|
+
# content if desired
|
604
|
+
docstrings.append([])
|
605
|
+
for i, line in enumerate(self.process_doc(docstrings)):
|
606
|
+
self.add_line(line, sourcename, i)
|
607
|
+
|
608
|
+
# add additional content (e.g. from document), if present
|
609
|
+
if more_content:
|
610
|
+
for line, src in zip(more_content.data, more_content.items):
|
611
|
+
self.add_line(line, src[0], src[1])
|
612
|
+
|
613
|
+
def get_object_members(self, want_all: bool) -> tuple[bool, ObjectMembers]:
|
614
|
+
"""Return `(members_check_module, members)` where `members` is a
|
615
|
+
list of `(membername, member)` pairs of the members of *self.object*.
|
616
|
+
|
617
|
+
If *want_all* is True, return all members. Else, only return those
|
618
|
+
members given by *self.options.members* (which may also be None).
|
619
|
+
"""
|
620
|
+
raise NotImplementedError('must be implemented in subclasses')
|
621
|
+
|
622
|
+
def filter_members(self, members: ObjectMembers, want_all: bool
|
623
|
+
) -> list[tuple[str, Any, bool]]:
|
624
|
+
"""Filter the given member list.
|
625
|
+
|
626
|
+
Members are skipped if
|
627
|
+
|
628
|
+
- they are private (except if given explicitly or the private-members
|
629
|
+
option is set)
|
630
|
+
- they are special methods (except if given explicitly or the
|
631
|
+
special-members option is set)
|
632
|
+
- they are undocumented (except if the undoc-members option is set)
|
633
|
+
|
634
|
+
The user can override the skipping decision by connecting to the
|
635
|
+
``autodoc-skip-member`` event.
|
636
|
+
"""
|
637
|
+
def is_filtered_inherited_member(name: str, obj: Any) -> bool:
|
638
|
+
inherited_members = self.options.inherited_members or set()
|
639
|
+
|
640
|
+
if inspect.isclass(self.object):
|
641
|
+
for cls in self.object.__mro__:
|
642
|
+
if cls.__name__ in inherited_members and cls != self.object:
|
643
|
+
# given member is a member of specified *super class*
|
644
|
+
return True
|
645
|
+
elif name in cls.__dict__:
|
646
|
+
return False
|
647
|
+
elif name in self.get_attr(cls, '__annotations__', {}):
|
648
|
+
return False
|
649
|
+
elif isinstance(obj, ObjectMember) and obj.class_ is cls:
|
650
|
+
return False
|
651
|
+
|
652
|
+
return False
|
653
|
+
|
654
|
+
ret = []
|
655
|
+
|
656
|
+
# search for members in source code too
|
657
|
+
namespace = '.'.join(self.objpath) # will be empty for modules
|
658
|
+
|
659
|
+
if self.analyzer:
|
660
|
+
attr_docs = self.analyzer.find_attr_docs()
|
661
|
+
else:
|
662
|
+
attr_docs = {}
|
663
|
+
|
664
|
+
# process members and determine which to skip
|
665
|
+
for obj in members:
|
666
|
+
try:
|
667
|
+
membername, member = obj
|
668
|
+
# if isattr is True, the member is documented as an attribute
|
669
|
+
if member is INSTANCEATTR:
|
670
|
+
isattr = True
|
671
|
+
elif (namespace, membername) in attr_docs:
|
672
|
+
isattr = True
|
673
|
+
else:
|
674
|
+
isattr = False
|
675
|
+
|
676
|
+
doc = getdoc(member, self.get_attr, self.config.autodoc_inherit_docstrings,
|
677
|
+
self.object, membername)
|
678
|
+
if not isinstance(doc, str):
|
679
|
+
# Ignore non-string __doc__
|
680
|
+
doc = None
|
681
|
+
|
682
|
+
# if the member __doc__ is the same as self's __doc__, it's just
|
683
|
+
# inherited and therefore not the member's doc
|
684
|
+
cls = self.get_attr(member, '__class__', None)
|
685
|
+
if cls:
|
686
|
+
cls_doc = self.get_attr(cls, '__doc__', None)
|
687
|
+
if cls_doc == doc:
|
688
|
+
doc = None
|
689
|
+
|
690
|
+
if isinstance(obj, ObjectMember) and obj.docstring:
|
691
|
+
# hack for ClassDocumenter to inject docstring via ObjectMember
|
692
|
+
doc = obj.docstring
|
693
|
+
|
694
|
+
doc, metadata = separate_metadata(doc)
|
695
|
+
has_doc = bool(doc)
|
696
|
+
|
697
|
+
if 'private' in metadata:
|
698
|
+
# consider a member private if docstring has "private" metadata
|
699
|
+
isprivate = True
|
700
|
+
elif 'public' in metadata:
|
701
|
+
# consider a member public if docstring has "public" metadata
|
702
|
+
isprivate = False
|
703
|
+
else:
|
704
|
+
isprivate = membername.startswith('_')
|
705
|
+
|
706
|
+
keep = False
|
707
|
+
if ismock(member) and (namespace, membername) not in attr_docs:
|
708
|
+
# mocked module or object
|
709
|
+
pass
|
710
|
+
elif (self.options.exclude_members and
|
711
|
+
membername in self.options.exclude_members):
|
712
|
+
# remove members given by exclude-members
|
713
|
+
keep = False
|
714
|
+
elif want_all and special_member_re.match(membername):
|
715
|
+
# special __methods__
|
716
|
+
if (self.options.special_members and
|
717
|
+
membername in self.options.special_members):
|
718
|
+
if membername == '__doc__':
|
719
|
+
keep = False
|
720
|
+
elif is_filtered_inherited_member(membername, obj):
|
721
|
+
keep = False
|
722
|
+
else:
|
723
|
+
keep = has_doc or self.options.undoc_members
|
724
|
+
else:
|
725
|
+
keep = False
|
726
|
+
elif (namespace, membername) in attr_docs:
|
727
|
+
if want_all and isprivate:
|
728
|
+
if self.options.private_members is None:
|
729
|
+
keep = False
|
730
|
+
else:
|
731
|
+
keep = membername in self.options.private_members
|
732
|
+
else:
|
733
|
+
# keep documented attributes
|
734
|
+
keep = True
|
735
|
+
elif want_all and isprivate:
|
736
|
+
if has_doc or self.options.undoc_members:
|
737
|
+
if self.options.private_members is None:
|
738
|
+
keep = False
|
739
|
+
elif is_filtered_inherited_member(membername, obj):
|
740
|
+
keep = False
|
741
|
+
else:
|
742
|
+
keep = membername in self.options.private_members
|
743
|
+
else:
|
744
|
+
keep = False
|
745
|
+
else:
|
746
|
+
if (self.options.members is ALL and
|
747
|
+
is_filtered_inherited_member(membername, obj)):
|
748
|
+
keep = False
|
749
|
+
else:
|
750
|
+
# ignore undocumented members if :undoc-members: is not given
|
751
|
+
keep = has_doc or self.options.undoc_members
|
752
|
+
|
753
|
+
if isinstance(obj, ObjectMember) and obj.skipped:
|
754
|
+
# forcedly skipped member (ex. a module attribute not defined in __all__)
|
755
|
+
keep = False
|
756
|
+
|
757
|
+
# give the user a chance to decide whether this member
|
758
|
+
# should be skipped
|
759
|
+
if self.env.app:
|
760
|
+
# let extensions preprocess docstrings
|
761
|
+
skip_user = self.env.app.emit_firstresult(
|
762
|
+
'autodoc-skip-member', self.objtype, membername, member,
|
763
|
+
not keep, self.options)
|
764
|
+
if skip_user is not None:
|
765
|
+
keep = not skip_user
|
766
|
+
except Exception as exc:
|
767
|
+
logger.warning(__('autodoc: failed to determine %s.%s (%r) to be documented, '
|
768
|
+
'the following exception was raised:\n%s'),
|
769
|
+
self.name, membername, member, exc, type='autodoc')
|
770
|
+
keep = False
|
771
|
+
|
772
|
+
if keep:
|
773
|
+
ret.append((membername, member, isattr))
|
774
|
+
|
775
|
+
return ret
|
776
|
+
|
777
|
+
def document_members(self, all_members: bool = False) -> None:
|
778
|
+
"""Generate reST for member documentation.
|
779
|
+
|
780
|
+
If *all_members* is True, document all members, else those given by
|
781
|
+
*self.options.members*.
|
782
|
+
"""
|
783
|
+
# set current namespace for finding members
|
784
|
+
self.env.temp_data['autodoc:module'] = self.modname
|
785
|
+
if self.objpath:
|
786
|
+
self.env.temp_data['autodoc:class'] = self.objpath[0]
|
787
|
+
|
788
|
+
want_all = (all_members or
|
789
|
+
self.options.inherited_members or
|
790
|
+
self.options.members is ALL)
|
791
|
+
# find out which members are documentable
|
792
|
+
members_check_module, members = self.get_object_members(want_all)
|
793
|
+
|
794
|
+
# document non-skipped members
|
795
|
+
memberdocumenters: list[tuple[Documenter, bool]] = []
|
796
|
+
for (mname, member, isattr) in self.filter_members(members, want_all):
|
797
|
+
classes = [cls for cls in self.documenters.values()
|
798
|
+
if cls.can_document_member(member, mname, isattr, self)]
|
799
|
+
if not classes:
|
800
|
+
# don't know how to document this member
|
801
|
+
continue
|
802
|
+
# prefer the documenter with the highest priority
|
803
|
+
classes.sort(key=lambda cls: cls.priority)
|
804
|
+
# give explicitly separated module name, so that members
|
805
|
+
# of inner classes can be documented
|
806
|
+
full_mname = self.modname + '::' + '.'.join(self.objpath + [mname])
|
807
|
+
documenter = classes[-1](self.directive, full_mname, self.indent)
|
808
|
+
memberdocumenters.append((documenter, isattr))
|
809
|
+
|
810
|
+
member_order = self.options.member_order or self.config.autodoc_member_order
|
811
|
+
memberdocumenters = self.sort_members(memberdocumenters, member_order)
|
812
|
+
|
813
|
+
for documenter, isattr in memberdocumenters:
|
814
|
+
documenter.generate(
|
815
|
+
all_members=True, real_modname=self.real_modname,
|
816
|
+
check_module=members_check_module and not isattr)
|
817
|
+
|
818
|
+
# reset current objects
|
819
|
+
self.env.temp_data['autodoc:module'] = None
|
820
|
+
self.env.temp_data['autodoc:class'] = None
|
821
|
+
|
822
|
+
def sort_members(self, documenters: list[tuple[Documenter, bool]],
|
823
|
+
order: str) -> list[tuple[Documenter, bool]]:
|
824
|
+
"""Sort the given member list."""
|
825
|
+
if order == 'groupwise':
|
826
|
+
# sort by group; alphabetically within groups
|
827
|
+
documenters.sort(key=lambda e: (e[0].member_order, e[0].name))
|
828
|
+
elif order == 'bysource':
|
829
|
+
# By default, member discovery order matches source order,
|
830
|
+
# as dicts are insertion-ordered from Python 3.7.
|
831
|
+
if self.analyzer:
|
832
|
+
# sort by source order, by virtue of the module analyzer
|
833
|
+
tagorder = self.analyzer.tagorder
|
834
|
+
|
835
|
+
def keyfunc(entry: tuple[Documenter, bool]) -> int:
|
836
|
+
fullname = entry[0].name.split('::')[1]
|
837
|
+
return tagorder.get(fullname, len(tagorder))
|
838
|
+
documenters.sort(key=keyfunc)
|
839
|
+
else: # alphabetical
|
840
|
+
documenters.sort(key=lambda e: e[0].name)
|
841
|
+
|
842
|
+
return documenters
|
843
|
+
|
844
|
+
def generate(
|
845
|
+
self,
|
846
|
+
more_content: StringList | None = None,
|
847
|
+
real_modname: str | None = None,
|
848
|
+
check_module: bool = False,
|
849
|
+
all_members: bool = False
|
850
|
+
) -> None:
|
851
|
+
"""Generate reST for the object given by *self.name*, and possibly for
|
852
|
+
its members.
|
853
|
+
|
854
|
+
If *more_content* is given, include that content. If *real_modname* is
|
855
|
+
given, use that module name to find attribute docs. If *check_module* is
|
856
|
+
True, only generate if the object is defined in the module name it is
|
857
|
+
imported from. If *all_members* is True, document all members.
|
858
|
+
"""
|
859
|
+
if not self.parse_name():
|
860
|
+
# need a module to import
|
861
|
+
logger.warning(
|
862
|
+
__('don\'t know which module to import for autodocumenting '
|
863
|
+
'%r (try placing a "module" or "currentmodule" directive '
|
864
|
+
'in the document, or giving an explicit module name)') %
|
865
|
+
self.name, type='autodoc')
|
866
|
+
return
|
867
|
+
|
868
|
+
# now, import the module and get object to document
|
869
|
+
if not self.import_object():
|
870
|
+
return
|
871
|
+
|
872
|
+
# If there is no real module defined, figure out which to use.
|
873
|
+
# The real module is used in the module analyzer to look up the module
|
874
|
+
# where the attribute documentation would actually be found in.
|
875
|
+
# This is used for situations where you have a module that collects the
|
876
|
+
# functions and classes of internal submodules.
|
877
|
+
guess_modname = self.get_real_modname()
|
878
|
+
self.real_modname: str = real_modname or guess_modname
|
879
|
+
|
880
|
+
# try to also get a source code analyzer for attribute docs
|
881
|
+
try:
|
882
|
+
self.analyzer = ModuleAnalyzer.for_module(self.real_modname)
|
883
|
+
# parse right now, to get PycodeErrors on parsing (results will
|
884
|
+
# be cached anyway)
|
885
|
+
self.analyzer.find_attr_docs()
|
886
|
+
except PycodeError as exc:
|
887
|
+
logger.debug('[autodoc] module analyzer failed: %s', exc)
|
888
|
+
# no source file -- e.g. for builtin and C modules
|
889
|
+
self.analyzer = None
|
890
|
+
# at least add the module.__file__ as a dependency
|
891
|
+
if hasattr(self.module, '__file__') and self.module.__file__:
|
892
|
+
self.directive.record_dependencies.add(self.module.__file__)
|
893
|
+
else:
|
894
|
+
self.directive.record_dependencies.add(self.analyzer.srcname)
|
895
|
+
|
896
|
+
if self.real_modname != guess_modname:
|
897
|
+
# Add module to dependency list if target object is defined in other module.
|
898
|
+
try:
|
899
|
+
analyzer = ModuleAnalyzer.for_module(guess_modname)
|
900
|
+
self.directive.record_dependencies.add(analyzer.srcname)
|
901
|
+
except PycodeError:
|
902
|
+
pass
|
903
|
+
|
904
|
+
docstrings: list[str] = sum(self.get_doc() or [], [])
|
905
|
+
if ismock(self.object) and not docstrings:
|
906
|
+
logger.warning(__('A mocked object is detected: %r'),
|
907
|
+
self.name, type='autodoc')
|
908
|
+
|
909
|
+
# check __module__ of object (for members not given explicitly)
|
910
|
+
if check_module:
|
911
|
+
if not self.check_module():
|
912
|
+
return
|
913
|
+
|
914
|
+
sourcename = self.get_sourcename()
|
915
|
+
|
916
|
+
# make sure that the result starts with an empty line. This is
|
917
|
+
# necessary for some situations where another directive preprocesses
|
918
|
+
# reST and no starting newline is present
|
919
|
+
self.add_line('', sourcename)
|
920
|
+
|
921
|
+
# format the object's signature, if any
|
922
|
+
try:
|
923
|
+
sig = self.format_signature()
|
924
|
+
except Exception as exc:
|
925
|
+
logger.warning(__('error while formatting signature for %s: %s'),
|
926
|
+
self.fullname, exc, type='autodoc')
|
927
|
+
return
|
928
|
+
|
929
|
+
# generate the directive header and options, if applicable
|
930
|
+
self.add_directive_header(sig)
|
931
|
+
self.add_line('', sourcename)
|
932
|
+
|
933
|
+
# e.g. the module directive doesn't have content
|
934
|
+
self.indent += self.content_indent
|
935
|
+
|
936
|
+
# add all content (from docstrings, attribute docs etc.)
|
937
|
+
self.add_content(more_content)
|
938
|
+
|
939
|
+
# document members, if possible
|
940
|
+
self.document_members(all_members)
|
941
|
+
|
942
|
+
|
943
|
+
class ModuleDocumenter(Documenter):
|
944
|
+
"""
|
945
|
+
Specialized Documenter subclass for modules.
|
946
|
+
"""
|
947
|
+
objtype = 'module'
|
948
|
+
content_indent = ''
|
949
|
+
titles_allowed = True
|
950
|
+
_extra_indent = ' '
|
951
|
+
|
952
|
+
option_spec: OptionSpec = {
|
953
|
+
'members': members_option, 'undoc-members': bool_option,
|
954
|
+
'noindex': bool_option, 'inherited-members': inherited_members_option,
|
955
|
+
'show-inheritance': bool_option, 'synopsis': identity,
|
956
|
+
'platform': identity, 'deprecated': bool_option,
|
957
|
+
'member-order': member_order_option, 'exclude-members': exclude_members_option,
|
958
|
+
'private-members': members_option, 'special-members': members_option,
|
959
|
+
'imported-members': bool_option, 'ignore-module-all': bool_option,
|
960
|
+
'no-value': bool_option,
|
961
|
+
}
|
962
|
+
|
963
|
+
def __init__(self, *args: Any) -> None:
|
964
|
+
super().__init__(*args)
|
965
|
+
merge_members_option(self.options)
|
966
|
+
self.__all__: Sequence[str] | None = None
|
967
|
+
|
968
|
+
def add_content(self, more_content: StringList | None) -> None:
|
969
|
+
old_indent = self.indent
|
970
|
+
self.indent += self._extra_indent
|
971
|
+
super().add_content(None)
|
972
|
+
self.indent = old_indent
|
973
|
+
if more_content:
|
974
|
+
for line, src in zip(more_content.data, more_content.items):
|
975
|
+
self.add_line(line, src[0], src[1])
|
976
|
+
|
977
|
+
@classmethod
|
978
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
979
|
+
) -> bool:
|
980
|
+
# don't document submodules automatically
|
981
|
+
return False
|
982
|
+
|
983
|
+
def resolve_name(self, modname: str, parents: Any, path: str, base: Any
|
984
|
+
) -> tuple[str, list[str]]:
|
985
|
+
if modname is not None:
|
986
|
+
logger.warning(__('"::" in automodule name doesn\'t make sense'),
|
987
|
+
type='autodoc')
|
988
|
+
return (path or '') + base, []
|
989
|
+
|
990
|
+
def parse_name(self) -> bool:
|
991
|
+
ret = super().parse_name()
|
992
|
+
if self.args or self.retann:
|
993
|
+
logger.warning(__('signature arguments or return annotation '
|
994
|
+
'given for automodule %s') % self.fullname,
|
995
|
+
type='autodoc')
|
996
|
+
return ret
|
997
|
+
|
998
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
999
|
+
ret = super().import_object(raiseerror)
|
1000
|
+
|
1001
|
+
try:
|
1002
|
+
if not self.options.ignore_module_all:
|
1003
|
+
self.__all__ = inspect.getall(self.object)
|
1004
|
+
except ValueError as exc:
|
1005
|
+
# invalid __all__ found.
|
1006
|
+
logger.warning(__('__all__ should be a list of strings, not %r '
|
1007
|
+
'(in module %s) -- ignoring __all__') %
|
1008
|
+
(exc.args[0], self.fullname), type='autodoc')
|
1009
|
+
|
1010
|
+
return ret
|
1011
|
+
|
1012
|
+
def add_directive_header(self, sig: str) -> None:
|
1013
|
+
Documenter.add_directive_header(self, sig)
|
1014
|
+
|
1015
|
+
sourcename = self.get_sourcename()
|
1016
|
+
|
1017
|
+
# add some module-specific options
|
1018
|
+
if self.options.synopsis:
|
1019
|
+
self.add_line(' :synopsis: ' + self.options.synopsis, sourcename)
|
1020
|
+
if self.options.platform:
|
1021
|
+
self.add_line(' :platform: ' + self.options.platform, sourcename)
|
1022
|
+
if self.options.deprecated:
|
1023
|
+
self.add_line(' :deprecated:', sourcename)
|
1024
|
+
|
1025
|
+
def get_module_members(self) -> dict[str, ObjectMember]:
|
1026
|
+
"""Get members of target module."""
|
1027
|
+
if self.analyzer:
|
1028
|
+
attr_docs = self.analyzer.attr_docs
|
1029
|
+
else:
|
1030
|
+
attr_docs = {}
|
1031
|
+
|
1032
|
+
members: dict[str, ObjectMember] = {}
|
1033
|
+
for name in dir(self.object):
|
1034
|
+
try:
|
1035
|
+
value = safe_getattr(self.object, name, None)
|
1036
|
+
if ismock(value):
|
1037
|
+
value = undecorate(value)
|
1038
|
+
docstring = attr_docs.get(('', name), [])
|
1039
|
+
members[name] = ObjectMember(name, value, docstring="\n".join(docstring))
|
1040
|
+
except AttributeError:
|
1041
|
+
continue
|
1042
|
+
|
1043
|
+
# annotation only member (ex. attr: int)
|
1044
|
+
for name in inspect.getannotations(self.object):
|
1045
|
+
if name not in members:
|
1046
|
+
docstring = attr_docs.get(('', name), [])
|
1047
|
+
members[name] = ObjectMember(name, INSTANCEATTR,
|
1048
|
+
docstring="\n".join(docstring))
|
1049
|
+
|
1050
|
+
return members
|
1051
|
+
|
1052
|
+
def get_object_members(self, want_all: bool) -> tuple[bool, ObjectMembers]:
|
1053
|
+
members = self.get_module_members()
|
1054
|
+
if want_all:
|
1055
|
+
if self.__all__ is None:
|
1056
|
+
# for implicit module members, check __module__ to avoid
|
1057
|
+
# documenting imported objects
|
1058
|
+
return True, list(members.values())
|
1059
|
+
else:
|
1060
|
+
for member in members.values():
|
1061
|
+
if member.__name__ not in self.__all__:
|
1062
|
+
member.skipped = True
|
1063
|
+
|
1064
|
+
return False, list(members.values())
|
1065
|
+
else:
|
1066
|
+
memberlist = self.options.members or []
|
1067
|
+
ret = []
|
1068
|
+
for name in memberlist:
|
1069
|
+
if name in members:
|
1070
|
+
ret.append(members[name])
|
1071
|
+
else:
|
1072
|
+
logger.warning(__('missing attribute mentioned in :members: option: '
|
1073
|
+
'module %s, attribute %s') %
|
1074
|
+
(safe_getattr(self.object, '__name__', '???'), name),
|
1075
|
+
type='autodoc')
|
1076
|
+
return False, ret
|
1077
|
+
|
1078
|
+
def sort_members(self, documenters: list[tuple[Documenter, bool]],
|
1079
|
+
order: str) -> list[tuple[Documenter, bool]]:
|
1080
|
+
if order == 'bysource' and self.__all__:
|
1081
|
+
# Sort alphabetically first (for members not listed on the __all__)
|
1082
|
+
documenters.sort(key=lambda e: e[0].name)
|
1083
|
+
|
1084
|
+
# Sort by __all__
|
1085
|
+
def keyfunc(entry: tuple[Documenter, bool]) -> int:
|
1086
|
+
name = entry[0].name.split('::')[1]
|
1087
|
+
if self.__all__ and name in self.__all__:
|
1088
|
+
return self.__all__.index(name)
|
1089
|
+
else:
|
1090
|
+
return len(self.__all__)
|
1091
|
+
documenters.sort(key=keyfunc)
|
1092
|
+
|
1093
|
+
return documenters
|
1094
|
+
else:
|
1095
|
+
return super().sort_members(documenters, order)
|
1096
|
+
|
1097
|
+
|
1098
|
+
class ModuleLevelDocumenter(Documenter):
|
1099
|
+
"""
|
1100
|
+
Specialized Documenter subclass for objects on module level (functions,
|
1101
|
+
classes, data/constants).
|
1102
|
+
"""
|
1103
|
+
def resolve_name(self, modname: str, parents: Any, path: str, base: Any
|
1104
|
+
) -> tuple[str, list[str]]:
|
1105
|
+
if modname is None:
|
1106
|
+
if path:
|
1107
|
+
modname = path.rstrip('.')
|
1108
|
+
else:
|
1109
|
+
# if documenting a toplevel object without explicit module,
|
1110
|
+
# it can be contained in another auto directive ...
|
1111
|
+
modname = self.env.temp_data.get('autodoc:module')
|
1112
|
+
# ... or in the scope of a module directive
|
1113
|
+
if not modname:
|
1114
|
+
modname = self.env.ref_context.get('py:module')
|
1115
|
+
# ... else, it stays None, which means invalid
|
1116
|
+
return modname, parents + [base]
|
1117
|
+
|
1118
|
+
|
1119
|
+
class ClassLevelDocumenter(Documenter):
|
1120
|
+
"""
|
1121
|
+
Specialized Documenter subclass for objects on class level (methods,
|
1122
|
+
attributes).
|
1123
|
+
"""
|
1124
|
+
def resolve_name(self, modname: str, parents: Any, path: str, base: Any
|
1125
|
+
) -> tuple[str, list[str]]:
|
1126
|
+
if modname is None:
|
1127
|
+
if path:
|
1128
|
+
mod_cls = path.rstrip('.')
|
1129
|
+
else:
|
1130
|
+
mod_cls = None
|
1131
|
+
# if documenting a class-level object without path,
|
1132
|
+
# there must be a current class, either from a parent
|
1133
|
+
# auto directive ...
|
1134
|
+
mod_cls = self.env.temp_data.get('autodoc:class')
|
1135
|
+
# ... or from a class directive
|
1136
|
+
if mod_cls is None:
|
1137
|
+
mod_cls = self.env.ref_context.get('py:class')
|
1138
|
+
# ... if still None, there's no way to know
|
1139
|
+
if mod_cls is None:
|
1140
|
+
return None, []
|
1141
|
+
modname, sep, cls = mod_cls.rpartition('.')
|
1142
|
+
parents = [cls]
|
1143
|
+
# if the module name is still missing, get it like above
|
1144
|
+
if not modname:
|
1145
|
+
modname = self.env.temp_data.get('autodoc:module')
|
1146
|
+
if not modname:
|
1147
|
+
modname = self.env.ref_context.get('py:module')
|
1148
|
+
# ... else, it stays None, which means invalid
|
1149
|
+
return modname, parents + [base]
|
1150
|
+
|
1151
|
+
|
1152
|
+
class DocstringSignatureMixin:
|
1153
|
+
"""
|
1154
|
+
Mixin for FunctionDocumenter and MethodDocumenter to provide the
|
1155
|
+
feature of reading the signature from the docstring.
|
1156
|
+
"""
|
1157
|
+
_new_docstrings: list[list[str]] = None
|
1158
|
+
_signatures: list[str] = None
|
1159
|
+
|
1160
|
+
def _find_signature(self) -> tuple[str | None, str | None]:
|
1161
|
+
# candidates of the object name
|
1162
|
+
valid_names = [self.objpath[-1]] # type: ignore
|
1163
|
+
if isinstance(self, ClassDocumenter):
|
1164
|
+
valid_names.append('__init__')
|
1165
|
+
if hasattr(self.object, '__mro__'):
|
1166
|
+
valid_names.extend(cls.__name__ for cls in self.object.__mro__)
|
1167
|
+
|
1168
|
+
docstrings = self.get_doc()
|
1169
|
+
if docstrings is None:
|
1170
|
+
return None, None
|
1171
|
+
self._new_docstrings = docstrings[:]
|
1172
|
+
self._signatures = []
|
1173
|
+
result = None
|
1174
|
+
for i, doclines in enumerate(docstrings):
|
1175
|
+
for j, line in enumerate(doclines):
|
1176
|
+
if not line:
|
1177
|
+
# no lines in docstring, no match
|
1178
|
+
break
|
1179
|
+
|
1180
|
+
if line.endswith('\\'):
|
1181
|
+
line = line.rstrip('\\').rstrip()
|
1182
|
+
|
1183
|
+
# match first line of docstring against signature RE
|
1184
|
+
match = py_ext_sig_re.match(line)
|
1185
|
+
if not match:
|
1186
|
+
break
|
1187
|
+
exmod, path, base, args, retann = match.groups()
|
1188
|
+
|
1189
|
+
# the base name must match ours
|
1190
|
+
if base not in valid_names:
|
1191
|
+
break
|
1192
|
+
|
1193
|
+
# re-prepare docstring to ignore more leading indentation
|
1194
|
+
tab_width = self.directive.state.document.settings.tab_width # type: ignore
|
1195
|
+
self._new_docstrings[i] = prepare_docstring('\n'.join(doclines[j + 1:]),
|
1196
|
+
tab_width)
|
1197
|
+
|
1198
|
+
if result is None:
|
1199
|
+
# first signature
|
1200
|
+
result = args, retann
|
1201
|
+
else:
|
1202
|
+
# subsequent signatures
|
1203
|
+
self._signatures.append(f"({args}) -> {retann}")
|
1204
|
+
|
1205
|
+
if result:
|
1206
|
+
# finish the loop when signature found
|
1207
|
+
break
|
1208
|
+
|
1209
|
+
return result
|
1210
|
+
|
1211
|
+
def get_doc(self) -> list[list[str]]:
|
1212
|
+
if self._new_docstrings is not None:
|
1213
|
+
return self._new_docstrings
|
1214
|
+
return super().get_doc() # type: ignore[misc]
|
1215
|
+
|
1216
|
+
def format_signature(self, **kwargs: Any) -> str:
|
1217
|
+
if self.args is None and self.config.autodoc_docstring_signature: # type: ignore
|
1218
|
+
# only act if a signature is not explicitly given already, and if
|
1219
|
+
# the feature is enabled
|
1220
|
+
result = self._find_signature()
|
1221
|
+
if result is not None:
|
1222
|
+
self.args, self.retann = result
|
1223
|
+
sig = super().format_signature(**kwargs) # type: ignore
|
1224
|
+
if self._signatures:
|
1225
|
+
return "\n".join([sig] + self._signatures)
|
1226
|
+
else:
|
1227
|
+
return sig
|
1228
|
+
|
1229
|
+
|
1230
|
+
class DocstringStripSignatureMixin(DocstringSignatureMixin):
|
1231
|
+
"""
|
1232
|
+
Mixin for AttributeDocumenter to provide the
|
1233
|
+
feature of stripping any function signature from the docstring.
|
1234
|
+
"""
|
1235
|
+
def format_signature(self, **kwargs: Any) -> str:
|
1236
|
+
if (
|
1237
|
+
self.args is None
|
1238
|
+
and self.config.autodoc_docstring_signature # type: ignore[attr-defined]
|
1239
|
+
):
|
1240
|
+
# only act if a signature is not explicitly given already, and if
|
1241
|
+
# the feature is enabled
|
1242
|
+
result = self._find_signature()
|
1243
|
+
if result is not None:
|
1244
|
+
# Discarding _args is a only difference with
|
1245
|
+
# DocstringSignatureMixin.format_signature.
|
1246
|
+
# Documenter.format_signature use self.args value to format.
|
1247
|
+
_args, self.retann = result
|
1248
|
+
return super().format_signature(**kwargs)
|
1249
|
+
|
1250
|
+
|
1251
|
+
class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type: ignore
|
1252
|
+
"""
|
1253
|
+
Specialized Documenter subclass for functions.
|
1254
|
+
"""
|
1255
|
+
objtype = 'function'
|
1256
|
+
member_order = 30
|
1257
|
+
|
1258
|
+
@classmethod
|
1259
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
1260
|
+
) -> bool:
|
1261
|
+
# supports functions, builtins and bound methods exported at the module level
|
1262
|
+
return (inspect.isfunction(member) or inspect.isbuiltin(member) or
|
1263
|
+
(inspect.isroutine(member) and isinstance(parent, ModuleDocumenter)))
|
1264
|
+
|
1265
|
+
def format_args(self, **kwargs: Any) -> str | None:
|
1266
|
+
if self.config.autodoc_typehints in ('none', 'description'):
|
1267
|
+
kwargs.setdefault('show_annotation', False)
|
1268
|
+
if self.config.autodoc_typehints_format == "short":
|
1269
|
+
kwargs.setdefault('unqualified_typehints', True)
|
1270
|
+
|
1271
|
+
try:
|
1272
|
+
self.env.app.emit('autodoc-before-process-signature', self.object, False)
|
1273
|
+
sig = inspect.signature(self.object, type_aliases=self.config.autodoc_type_aliases)
|
1274
|
+
args = stringify_signature(sig, **kwargs)
|
1275
|
+
except TypeError as exc:
|
1276
|
+
logger.warning(__("Failed to get a function signature for %s: %s"),
|
1277
|
+
self.fullname, exc)
|
1278
|
+
return None
|
1279
|
+
except ValueError:
|
1280
|
+
args = ''
|
1281
|
+
|
1282
|
+
if self.config.strip_signature_backslash:
|
1283
|
+
# escape backslashes for reST
|
1284
|
+
args = args.replace('\\', '\\\\')
|
1285
|
+
return args
|
1286
|
+
|
1287
|
+
def document_members(self, all_members: bool = False) -> None:
|
1288
|
+
pass
|
1289
|
+
|
1290
|
+
def add_directive_header(self, sig: str) -> None:
|
1291
|
+
sourcename = self.get_sourcename()
|
1292
|
+
super().add_directive_header(sig)
|
1293
|
+
|
1294
|
+
if inspect.iscoroutinefunction(self.object) or inspect.isasyncgenfunction(self.object):
|
1295
|
+
self.add_line(' :async:', sourcename)
|
1296
|
+
|
1297
|
+
def format_signature(self, **kwargs: Any) -> str:
|
1298
|
+
if self.config.autodoc_typehints_format == "short":
|
1299
|
+
kwargs.setdefault('unqualified_typehints', True)
|
1300
|
+
|
1301
|
+
sigs = []
|
1302
|
+
if (self.analyzer and
|
1303
|
+
'.'.join(self.objpath) in self.analyzer.overloads and
|
1304
|
+
self.config.autodoc_typehints != 'none'):
|
1305
|
+
# Use signatures for overloaded functions instead of the implementation function.
|
1306
|
+
overloaded = True
|
1307
|
+
else:
|
1308
|
+
overloaded = False
|
1309
|
+
sig = super().format_signature(**kwargs)
|
1310
|
+
sigs.append(sig)
|
1311
|
+
|
1312
|
+
if inspect.is_singledispatch_function(self.object):
|
1313
|
+
# append signature of singledispatch'ed functions
|
1314
|
+
for typ, func in self.object.registry.items():
|
1315
|
+
if typ is object:
|
1316
|
+
pass # default implementation. skipped.
|
1317
|
+
else:
|
1318
|
+
dispatchfunc = self.annotate_to_first_argument(func, typ)
|
1319
|
+
if dispatchfunc:
|
1320
|
+
documenter = FunctionDocumenter(self.directive, '')
|
1321
|
+
documenter.object = dispatchfunc
|
1322
|
+
documenter.objpath = [None]
|
1323
|
+
sigs.append(documenter.format_signature())
|
1324
|
+
if overloaded:
|
1325
|
+
actual = inspect.signature(self.object,
|
1326
|
+
type_aliases=self.config.autodoc_type_aliases)
|
1327
|
+
__globals__ = safe_getattr(self.object, '__globals__', {})
|
1328
|
+
for overload in self.analyzer.overloads.get('.'.join(self.objpath)):
|
1329
|
+
overload = self.merge_default_value(actual, overload)
|
1330
|
+
overload = evaluate_signature(overload, __globals__,
|
1331
|
+
self.config.autodoc_type_aliases)
|
1332
|
+
|
1333
|
+
sig = stringify_signature(overload, **kwargs)
|
1334
|
+
sigs.append(sig)
|
1335
|
+
|
1336
|
+
return "\n".join(sigs)
|
1337
|
+
|
1338
|
+
def merge_default_value(self, actual: Signature, overload: Signature) -> Signature:
|
1339
|
+
"""Merge default values of actual implementation to the overload variants."""
|
1340
|
+
parameters = list(overload.parameters.values())
|
1341
|
+
for i, param in enumerate(parameters):
|
1342
|
+
actual_param = actual.parameters.get(param.name)
|
1343
|
+
if actual_param and param.default == '...':
|
1344
|
+
parameters[i] = param.replace(default=actual_param.default)
|
1345
|
+
|
1346
|
+
return overload.replace(parameters=parameters)
|
1347
|
+
|
1348
|
+
def annotate_to_first_argument(self, func: Callable, typ: type) -> Callable | None:
|
1349
|
+
"""Annotate type hint to the first argument of function if needed."""
|
1350
|
+
try:
|
1351
|
+
sig = inspect.signature(func, type_aliases=self.config.autodoc_type_aliases)
|
1352
|
+
except TypeError as exc:
|
1353
|
+
logger.warning(__("Failed to get a function signature for %s: %s"),
|
1354
|
+
self.fullname, exc)
|
1355
|
+
return None
|
1356
|
+
except ValueError:
|
1357
|
+
return None
|
1358
|
+
|
1359
|
+
if len(sig.parameters) == 0:
|
1360
|
+
return None
|
1361
|
+
|
1362
|
+
def dummy():
|
1363
|
+
pass
|
1364
|
+
|
1365
|
+
params = list(sig.parameters.values())
|
1366
|
+
if params[0].annotation is Parameter.empty:
|
1367
|
+
params[0] = params[0].replace(annotation=typ)
|
1368
|
+
try:
|
1369
|
+
dummy.__signature__ = sig.replace(parameters=params) # type: ignore
|
1370
|
+
return dummy
|
1371
|
+
except (AttributeError, TypeError):
|
1372
|
+
# failed to update signature (ex. built-in or extension types)
|
1373
|
+
return None
|
1374
|
+
|
1375
|
+
return func
|
1376
|
+
|
1377
|
+
|
1378
|
+
class DecoratorDocumenter(FunctionDocumenter):
|
1379
|
+
"""
|
1380
|
+
Specialized Documenter subclass for decorator functions.
|
1381
|
+
"""
|
1382
|
+
objtype = 'decorator'
|
1383
|
+
|
1384
|
+
# must be lower than FunctionDocumenter
|
1385
|
+
priority = -1
|
1386
|
+
|
1387
|
+
def format_args(self, **kwargs: Any) -> Any:
|
1388
|
+
args = super().format_args(**kwargs)
|
1389
|
+
if ',' in args:
|
1390
|
+
return args
|
1391
|
+
else:
|
1392
|
+
return None
|
1393
|
+
|
1394
|
+
|
1395
|
+
# Types which have confusing metaclass signatures it would be best not to show.
|
1396
|
+
# These are listed by name, rather than storing the objects themselves, to avoid
|
1397
|
+
# needing to import the modules.
|
1398
|
+
_METACLASS_CALL_BLACKLIST = [
|
1399
|
+
'enum.EnumMeta.__call__',
|
1400
|
+
]
|
1401
|
+
|
1402
|
+
|
1403
|
+
# Types whose __new__ signature is a pass-through.
|
1404
|
+
_CLASS_NEW_BLACKLIST = [
|
1405
|
+
'typing.Generic.__new__',
|
1406
|
+
]
|
1407
|
+
|
1408
|
+
|
1409
|
+
class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type: ignore
|
1410
|
+
"""
|
1411
|
+
Specialized Documenter subclass for classes.
|
1412
|
+
"""
|
1413
|
+
objtype = 'class'
|
1414
|
+
member_order = 20
|
1415
|
+
option_spec: OptionSpec = {
|
1416
|
+
'members': members_option, 'undoc-members': bool_option,
|
1417
|
+
'noindex': bool_option, 'inherited-members': inherited_members_option,
|
1418
|
+
'show-inheritance': bool_option, 'member-order': member_order_option,
|
1419
|
+
'exclude-members': exclude_members_option,
|
1420
|
+
'private-members': members_option, 'special-members': members_option,
|
1421
|
+
'class-doc-from': class_doc_from_option,
|
1422
|
+
}
|
1423
|
+
|
1424
|
+
# Must be higher than FunctionDocumenter, ClassDocumenter, and
|
1425
|
+
# AttributeDocumenter as NewType can be an attribute and is a class
|
1426
|
+
# after Python 3.10. Before 3.10 it is a kind of function object
|
1427
|
+
priority = 15
|
1428
|
+
|
1429
|
+
_signature_class: Any = None
|
1430
|
+
_signature_method_name: str = None
|
1431
|
+
|
1432
|
+
def __init__(self, *args: Any) -> None:
|
1433
|
+
super().__init__(*args)
|
1434
|
+
|
1435
|
+
if self.config.autodoc_class_signature == 'separated':
|
1436
|
+
self.options = self.options.copy()
|
1437
|
+
|
1438
|
+
# show __init__() method
|
1439
|
+
if self.options.special_members is None:
|
1440
|
+
self.options['special-members'] = ['__new__', '__init__']
|
1441
|
+
else:
|
1442
|
+
self.options.special_members.append('__new__')
|
1443
|
+
self.options.special_members.append('__init__')
|
1444
|
+
|
1445
|
+
merge_members_option(self.options)
|
1446
|
+
|
1447
|
+
@classmethod
|
1448
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
1449
|
+
) -> bool:
|
1450
|
+
return isinstance(member, type) or (
|
1451
|
+
isattr and (inspect.isNewType(member) or isinstance(member, TypeVar)))
|
1452
|
+
|
1453
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
1454
|
+
ret = super().import_object(raiseerror)
|
1455
|
+
# if the class is documented under another name, document it
|
1456
|
+
# as data/attribute
|
1457
|
+
if ret:
|
1458
|
+
if hasattr(self.object, '__name__'):
|
1459
|
+
self.doc_as_attr = (self.objpath[-1] != self.object.__name__)
|
1460
|
+
else:
|
1461
|
+
self.doc_as_attr = True
|
1462
|
+
if inspect.isNewType(self.object) or isinstance(self.object, TypeVar):
|
1463
|
+
modname = getattr(self.object, '__module__', self.modname)
|
1464
|
+
if modname != self.modname and self.modname.startswith(modname):
|
1465
|
+
bases = self.modname[len(modname):].strip('.').split('.')
|
1466
|
+
self.objpath = bases + self.objpath
|
1467
|
+
self.modname = modname
|
1468
|
+
return ret
|
1469
|
+
|
1470
|
+
def _get_signature(self) -> tuple[Any | None, str | None, Signature | None]:
|
1471
|
+
if inspect.isNewType(self.object) or isinstance(self.object, TypeVar):
|
1472
|
+
# Supress signature
|
1473
|
+
return None, None, None
|
1474
|
+
|
1475
|
+
def get_user_defined_function_or_method(obj: Any, attr: str) -> Any:
|
1476
|
+
""" Get the `attr` function or method from `obj`, if it is user-defined. """
|
1477
|
+
if inspect.is_builtin_class_method(obj, attr):
|
1478
|
+
return None
|
1479
|
+
attr = self.get_attr(obj, attr, None)
|
1480
|
+
if not (inspect.ismethod(attr) or inspect.isfunction(attr)):
|
1481
|
+
return None
|
1482
|
+
return attr
|
1483
|
+
|
1484
|
+
# This sequence is copied from inspect._signature_from_callable.
|
1485
|
+
# ValueError means that no signature could be found, so we keep going.
|
1486
|
+
|
1487
|
+
# First, we check the obj has a __signature__ attribute
|
1488
|
+
if (hasattr(self.object, '__signature__') and
|
1489
|
+
isinstance(self.object.__signature__, Signature)):
|
1490
|
+
return None, None, self.object.__signature__
|
1491
|
+
|
1492
|
+
# Next, let's see if it has an overloaded __call__ defined
|
1493
|
+
# in its metaclass
|
1494
|
+
call = get_user_defined_function_or_method(type(self.object), '__call__')
|
1495
|
+
|
1496
|
+
if call is not None:
|
1497
|
+
if f"{call.__module__}.{call.__qualname__}" in _METACLASS_CALL_BLACKLIST:
|
1498
|
+
call = None
|
1499
|
+
|
1500
|
+
if call is not None:
|
1501
|
+
self.env.app.emit('autodoc-before-process-signature', call, True)
|
1502
|
+
try:
|
1503
|
+
sig = inspect.signature(call, bound_method=True,
|
1504
|
+
type_aliases=self.config.autodoc_type_aliases)
|
1505
|
+
return type(self.object), '__call__', sig
|
1506
|
+
except ValueError:
|
1507
|
+
pass
|
1508
|
+
|
1509
|
+
# Now we check if the 'obj' class has a '__new__' method
|
1510
|
+
new = get_user_defined_function_or_method(self.object, '__new__')
|
1511
|
+
|
1512
|
+
if new is not None:
|
1513
|
+
if f"{new.__module__}.{new.__qualname__}" in _CLASS_NEW_BLACKLIST:
|
1514
|
+
new = None
|
1515
|
+
|
1516
|
+
if new is not None:
|
1517
|
+
self.env.app.emit('autodoc-before-process-signature', new, True)
|
1518
|
+
try:
|
1519
|
+
sig = inspect.signature(new, bound_method=True,
|
1520
|
+
type_aliases=self.config.autodoc_type_aliases)
|
1521
|
+
return self.object, '__new__', sig
|
1522
|
+
except ValueError:
|
1523
|
+
pass
|
1524
|
+
|
1525
|
+
# Finally, we should have at least __init__ implemented
|
1526
|
+
init = get_user_defined_function_or_method(self.object, '__init__')
|
1527
|
+
if init is not None:
|
1528
|
+
self.env.app.emit('autodoc-before-process-signature', init, True)
|
1529
|
+
try:
|
1530
|
+
sig = inspect.signature(init, bound_method=True,
|
1531
|
+
type_aliases=self.config.autodoc_type_aliases)
|
1532
|
+
return self.object, '__init__', sig
|
1533
|
+
except ValueError:
|
1534
|
+
pass
|
1535
|
+
|
1536
|
+
# None of the attributes are user-defined, so fall back to let inspect
|
1537
|
+
# handle it.
|
1538
|
+
# We don't know the exact method that inspect.signature will read
|
1539
|
+
# the signature from, so just pass the object itself to our hook.
|
1540
|
+
self.env.app.emit('autodoc-before-process-signature', self.object, False)
|
1541
|
+
try:
|
1542
|
+
sig = inspect.signature(self.object, bound_method=False,
|
1543
|
+
type_aliases=self.config.autodoc_type_aliases)
|
1544
|
+
return None, None, sig
|
1545
|
+
except ValueError:
|
1546
|
+
pass
|
1547
|
+
|
1548
|
+
# Still no signature: happens e.g. for old-style classes
|
1549
|
+
# with __init__ in C and no `__text_signature__`.
|
1550
|
+
return None, None, None
|
1551
|
+
|
1552
|
+
def format_args(self, **kwargs: Any) -> str | None:
|
1553
|
+
if self.config.autodoc_typehints in ('none', 'description'):
|
1554
|
+
kwargs.setdefault('show_annotation', False)
|
1555
|
+
if self.config.autodoc_typehints_format == "short":
|
1556
|
+
kwargs.setdefault('unqualified_typehints', True)
|
1557
|
+
|
1558
|
+
try:
|
1559
|
+
self._signature_class, self._signature_method_name, sig = self._get_signature()
|
1560
|
+
except TypeError as exc:
|
1561
|
+
# __signature__ attribute contained junk
|
1562
|
+
logger.warning(__("Failed to get a constructor signature for %s: %s"),
|
1563
|
+
self.fullname, exc)
|
1564
|
+
return None
|
1565
|
+
|
1566
|
+
if sig is None:
|
1567
|
+
return None
|
1568
|
+
|
1569
|
+
return stringify_signature(sig, show_return_annotation=False, **kwargs)
|
1570
|
+
|
1571
|
+
def _find_signature(self) -> tuple[str, str]:
|
1572
|
+
result = super()._find_signature()
|
1573
|
+
if result is not None:
|
1574
|
+
# Strip a return value from signature of constructor in docstring (first entry)
|
1575
|
+
result = (result[0], None)
|
1576
|
+
|
1577
|
+
for i, sig in enumerate(self._signatures):
|
1578
|
+
if sig.endswith(' -> None'):
|
1579
|
+
# Strip a return value from signatures of constructor in docstring (subsequent
|
1580
|
+
# entries)
|
1581
|
+
self._signatures[i] = sig[:-8]
|
1582
|
+
|
1583
|
+
return result
|
1584
|
+
|
1585
|
+
def format_signature(self, **kwargs: Any) -> str:
|
1586
|
+
if self.doc_as_attr:
|
1587
|
+
return ''
|
1588
|
+
if self.config.autodoc_class_signature == 'separated':
|
1589
|
+
# do not show signatures
|
1590
|
+
return ''
|
1591
|
+
|
1592
|
+
if self.config.autodoc_typehints_format == "short":
|
1593
|
+
kwargs.setdefault('unqualified_typehints', True)
|
1594
|
+
|
1595
|
+
sig = super().format_signature()
|
1596
|
+
sigs = []
|
1597
|
+
|
1598
|
+
overloads = self.get_overloaded_signatures()
|
1599
|
+
if overloads and self.config.autodoc_typehints != 'none':
|
1600
|
+
# Use signatures for overloaded methods instead of the implementation method.
|
1601
|
+
method = safe_getattr(self._signature_class, self._signature_method_name, None)
|
1602
|
+
__globals__ = safe_getattr(method, '__globals__', {})
|
1603
|
+
for overload in overloads:
|
1604
|
+
overload = evaluate_signature(overload, __globals__,
|
1605
|
+
self.config.autodoc_type_aliases)
|
1606
|
+
|
1607
|
+
parameters = list(overload.parameters.values())
|
1608
|
+
overload = overload.replace(parameters=parameters[1:],
|
1609
|
+
return_annotation=Parameter.empty)
|
1610
|
+
sig = stringify_signature(overload, **kwargs)
|
1611
|
+
sigs.append(sig)
|
1612
|
+
else:
|
1613
|
+
sigs.append(sig)
|
1614
|
+
|
1615
|
+
return "\n".join(sigs)
|
1616
|
+
|
1617
|
+
def get_overloaded_signatures(self) -> list[Signature]:
|
1618
|
+
if self._signature_class and self._signature_method_name:
|
1619
|
+
for cls in self._signature_class.__mro__:
|
1620
|
+
try:
|
1621
|
+
analyzer = ModuleAnalyzer.for_module(cls.__module__)
|
1622
|
+
analyzer.analyze()
|
1623
|
+
qualname = '.'.join([cls.__qualname__, self._signature_method_name])
|
1624
|
+
if qualname in analyzer.overloads:
|
1625
|
+
return analyzer.overloads.get(qualname, [])
|
1626
|
+
elif qualname in analyzer.tagorder:
|
1627
|
+
# the constructor is defined in the class, but not overridden.
|
1628
|
+
return []
|
1629
|
+
except PycodeError:
|
1630
|
+
pass
|
1631
|
+
|
1632
|
+
return []
|
1633
|
+
|
1634
|
+
def get_canonical_fullname(self) -> str | None:
|
1635
|
+
__modname__ = safe_getattr(self.object, '__module__', self.modname)
|
1636
|
+
__qualname__ = safe_getattr(self.object, '__qualname__', None)
|
1637
|
+
if __qualname__ is None:
|
1638
|
+
__qualname__ = safe_getattr(self.object, '__name__', None)
|
1639
|
+
if __qualname__ and '<locals>' in __qualname__:
|
1640
|
+
# No valid qualname found if the object is defined as locals
|
1641
|
+
__qualname__ = None
|
1642
|
+
|
1643
|
+
if __modname__ and __qualname__:
|
1644
|
+
return '.'.join([__modname__, __qualname__])
|
1645
|
+
else:
|
1646
|
+
return None
|
1647
|
+
|
1648
|
+
def add_directive_header(self, sig: str) -> None:
|
1649
|
+
sourcename = self.get_sourcename()
|
1650
|
+
|
1651
|
+
if self.doc_as_attr:
|
1652
|
+
self.directivetype = 'attribute'
|
1653
|
+
super().add_directive_header(sig)
|
1654
|
+
|
1655
|
+
if inspect.isNewType(self.object) or isinstance(self.object, TypeVar):
|
1656
|
+
return
|
1657
|
+
|
1658
|
+
if self.analyzer and '.'.join(self.objpath) in self.analyzer.finals:
|
1659
|
+
self.add_line(' :final:', sourcename)
|
1660
|
+
|
1661
|
+
canonical_fullname = self.get_canonical_fullname()
|
1662
|
+
if (not self.doc_as_attr and not inspect.isNewType(self.object)
|
1663
|
+
and canonical_fullname and self.fullname != canonical_fullname):
|
1664
|
+
self.add_line(' :canonical: %s' % canonical_fullname, sourcename)
|
1665
|
+
|
1666
|
+
# add inheritance info, if wanted
|
1667
|
+
if not self.doc_as_attr and self.options.show_inheritance:
|
1668
|
+
if inspect.getorigbases(self.object):
|
1669
|
+
# A subclass of generic types
|
1670
|
+
# refs: PEP-560 <https://peps.python.org/pep-0560/>
|
1671
|
+
bases = list(self.object.__orig_bases__)
|
1672
|
+
elif hasattr(self.object, '__bases__') and len(self.object.__bases__):
|
1673
|
+
# A normal class
|
1674
|
+
bases = list(self.object.__bases__)
|
1675
|
+
else:
|
1676
|
+
bases = []
|
1677
|
+
|
1678
|
+
self.env.events.emit('autodoc-process-bases',
|
1679
|
+
self.fullname, self.object, self.options, bases)
|
1680
|
+
|
1681
|
+
if self.config.autodoc_typehints_format == "short":
|
1682
|
+
base_classes = [restify(cls, "smart") for cls in bases]
|
1683
|
+
else:
|
1684
|
+
base_classes = [restify(cls) for cls in bases]
|
1685
|
+
|
1686
|
+
sourcename = self.get_sourcename()
|
1687
|
+
self.add_line('', sourcename)
|
1688
|
+
self.add_line(' ' + _('Bases: %s') % ', '.join(base_classes), sourcename)
|
1689
|
+
|
1690
|
+
def get_object_members(self, want_all: bool) -> tuple[bool, ObjectMembers]:
|
1691
|
+
members = get_class_members(self.object, self.objpath, self.get_attr,
|
1692
|
+
self.config.autodoc_inherit_docstrings)
|
1693
|
+
if not want_all:
|
1694
|
+
if not self.options.members:
|
1695
|
+
return False, [] # type: ignore
|
1696
|
+
# specific members given
|
1697
|
+
selected = []
|
1698
|
+
for name in self.options.members:
|
1699
|
+
if name in members:
|
1700
|
+
selected.append(members[name])
|
1701
|
+
else:
|
1702
|
+
logger.warning(__('missing attribute %s in object %s') %
|
1703
|
+
(name, self.fullname), type='autodoc')
|
1704
|
+
return False, selected
|
1705
|
+
elif self.options.inherited_members:
|
1706
|
+
return False, list(members.values())
|
1707
|
+
else:
|
1708
|
+
return False, [m for m in members.values() if m.class_ == self.object]
|
1709
|
+
|
1710
|
+
def get_doc(self) -> list[list[str]] | None:
|
1711
|
+
if isinstance(self.object, TypeVar):
|
1712
|
+
if self.object.__doc__ == TypeVar.__doc__:
|
1713
|
+
return []
|
1714
|
+
if sys.version_info[:2] < (3, 10):
|
1715
|
+
if inspect.isNewType(self.object) or isinstance(self.object, TypeVar):
|
1716
|
+
parts = self.modname.strip('.').split('.')
|
1717
|
+
orig_objpath = self.objpath
|
1718
|
+
for i in range(len(parts)):
|
1719
|
+
new_modname = '.'.join(parts[:len(parts) - i])
|
1720
|
+
new_objpath = parts[len(parts) - i:] + orig_objpath
|
1721
|
+
try:
|
1722
|
+
analyzer = ModuleAnalyzer.for_module(new_modname)
|
1723
|
+
analyzer.analyze()
|
1724
|
+
key = ('', new_objpath[-1])
|
1725
|
+
comment = list(analyzer.attr_docs.get(key, []))
|
1726
|
+
if comment:
|
1727
|
+
self.objpath = new_objpath
|
1728
|
+
self.modname = new_modname
|
1729
|
+
return [comment]
|
1730
|
+
except PycodeError:
|
1731
|
+
pass
|
1732
|
+
if self.doc_as_attr:
|
1733
|
+
# Don't show the docstring of the class when it is an alias.
|
1734
|
+
comment = self.get_variable_comment()
|
1735
|
+
if comment:
|
1736
|
+
return []
|
1737
|
+
else:
|
1738
|
+
return None
|
1739
|
+
|
1740
|
+
lines = getattr(self, '_new_docstrings', None)
|
1741
|
+
if lines is not None:
|
1742
|
+
return lines
|
1743
|
+
|
1744
|
+
classdoc_from = self.options.get('class-doc-from', self.config.autoclass_content)
|
1745
|
+
|
1746
|
+
docstrings = []
|
1747
|
+
attrdocstring = getdoc(self.object, self.get_attr)
|
1748
|
+
if attrdocstring:
|
1749
|
+
docstrings.append(attrdocstring)
|
1750
|
+
|
1751
|
+
# for classes, what the "docstring" is can be controlled via a
|
1752
|
+
# config value; the default is only the class docstring
|
1753
|
+
if classdoc_from in ('both', 'init'):
|
1754
|
+
__init__ = self.get_attr(self.object, '__init__', None)
|
1755
|
+
initdocstring = getdoc(__init__, self.get_attr,
|
1756
|
+
self.config.autodoc_inherit_docstrings,
|
1757
|
+
self.object, '__init__')
|
1758
|
+
# for new-style classes, no __init__ means default __init__
|
1759
|
+
if (initdocstring is not None and
|
1760
|
+
(initdocstring == object.__init__.__doc__ or # for pypy
|
1761
|
+
initdocstring.strip() == object.__init__.__doc__)): # for !pypy
|
1762
|
+
initdocstring = None
|
1763
|
+
if not initdocstring:
|
1764
|
+
# try __new__
|
1765
|
+
__new__ = self.get_attr(self.object, '__new__', None)
|
1766
|
+
initdocstring = getdoc(__new__, self.get_attr,
|
1767
|
+
self.config.autodoc_inherit_docstrings,
|
1768
|
+
self.object, '__new__')
|
1769
|
+
# for new-style classes, no __new__ means default __new__
|
1770
|
+
if (initdocstring is not None and
|
1771
|
+
(initdocstring == object.__new__.__doc__ or # for pypy
|
1772
|
+
initdocstring.strip() == object.__new__.__doc__)): # for !pypy
|
1773
|
+
initdocstring = None
|
1774
|
+
if initdocstring:
|
1775
|
+
if classdoc_from == 'init':
|
1776
|
+
docstrings = [initdocstring]
|
1777
|
+
else:
|
1778
|
+
docstrings.append(initdocstring)
|
1779
|
+
|
1780
|
+
tab_width = self.directive.state.document.settings.tab_width
|
1781
|
+
return [prepare_docstring(docstring, tab_width) for docstring in docstrings]
|
1782
|
+
|
1783
|
+
def get_variable_comment(self) -> list[str] | None:
|
1784
|
+
try:
|
1785
|
+
key = ('', '.'.join(self.objpath))
|
1786
|
+
if self.doc_as_attr:
|
1787
|
+
analyzer = ModuleAnalyzer.for_module(self.modname)
|
1788
|
+
else:
|
1789
|
+
analyzer = ModuleAnalyzer.for_module(self.get_real_modname())
|
1790
|
+
analyzer.analyze()
|
1791
|
+
return list(analyzer.attr_docs.get(key, []))
|
1792
|
+
except PycodeError:
|
1793
|
+
return None
|
1794
|
+
|
1795
|
+
def add_content(self, more_content: StringList | None) -> None:
|
1796
|
+
if inspect.isNewType(self.object):
|
1797
|
+
if self.config.autodoc_typehints_format == "short":
|
1798
|
+
supertype = restify(self.object.__supertype__, "smart")
|
1799
|
+
else:
|
1800
|
+
supertype = restify(self.object.__supertype__)
|
1801
|
+
|
1802
|
+
more_content = StringList([_('alias of %s') % supertype, ''], source='')
|
1803
|
+
if isinstance(self.object, TypeVar):
|
1804
|
+
attrs = [repr(self.object.__name__)]
|
1805
|
+
for constraint in self.object.__constraints__:
|
1806
|
+
if self.config.autodoc_typehints_format == "short":
|
1807
|
+
attrs.append(stringify_annotation(constraint, "smart"))
|
1808
|
+
else:
|
1809
|
+
attrs.append(stringify_annotation(constraint))
|
1810
|
+
if self.object.__bound__:
|
1811
|
+
if self.config.autodoc_typehints_format == "short":
|
1812
|
+
bound = restify(self.object.__bound__, "smart")
|
1813
|
+
else:
|
1814
|
+
bound = restify(self.object.__bound__)
|
1815
|
+
attrs.append(r"bound=\ " + bound)
|
1816
|
+
if self.object.__covariant__:
|
1817
|
+
attrs.append("covariant=True")
|
1818
|
+
if self.object.__contravariant__:
|
1819
|
+
attrs.append("contravariant=True")
|
1820
|
+
|
1821
|
+
more_content = StringList(
|
1822
|
+
[_('alias of TypeVar(%s)') % ", ".join(attrs), ''],
|
1823
|
+
source=''
|
1824
|
+
)
|
1825
|
+
if self.doc_as_attr and self.modname != self.get_real_modname():
|
1826
|
+
try:
|
1827
|
+
# override analyzer to obtain doccomment around its definition.
|
1828
|
+
self.analyzer = ModuleAnalyzer.for_module(self.modname)
|
1829
|
+
self.analyzer.analyze()
|
1830
|
+
except PycodeError:
|
1831
|
+
pass
|
1832
|
+
|
1833
|
+
if self.doc_as_attr and not self.get_variable_comment():
|
1834
|
+
try:
|
1835
|
+
if self.config.autodoc_typehints_format == "short":
|
1836
|
+
alias = restify(self.object, "smart")
|
1837
|
+
else:
|
1838
|
+
alias = restify(self.object)
|
1839
|
+
more_content = StringList([_('alias of %s') % alias], source='')
|
1840
|
+
except AttributeError:
|
1841
|
+
pass # Invalid class object is passed.
|
1842
|
+
|
1843
|
+
super().add_content(more_content)
|
1844
|
+
|
1845
|
+
def document_members(self, all_members: bool = False) -> None:
|
1846
|
+
if self.doc_as_attr:
|
1847
|
+
return
|
1848
|
+
super().document_members(all_members)
|
1849
|
+
|
1850
|
+
def generate(
|
1851
|
+
self,
|
1852
|
+
more_content: StringList | None = None,
|
1853
|
+
real_modname: str | None = None,
|
1854
|
+
check_module: bool = False,
|
1855
|
+
all_members: bool = False
|
1856
|
+
) -> None:
|
1857
|
+
# Do not pass real_modname and use the name from the __module__
|
1858
|
+
# attribute of the class.
|
1859
|
+
# If a class gets imported into the module real_modname
|
1860
|
+
# the analyzer won't find the source of the class, if
|
1861
|
+
# it looks in real_modname.
|
1862
|
+
return super().generate(more_content=more_content,
|
1863
|
+
check_module=check_module,
|
1864
|
+
all_members=all_members)
|
1865
|
+
|
1866
|
+
|
1867
|
+
class ExceptionDocumenter(ClassDocumenter):
|
1868
|
+
"""
|
1869
|
+
Specialized ClassDocumenter subclass for exceptions.
|
1870
|
+
"""
|
1871
|
+
objtype = 'exception'
|
1872
|
+
member_order = 10
|
1873
|
+
|
1874
|
+
# needs a higher priority than ClassDocumenter
|
1875
|
+
priority = ClassDocumenter.priority + 5
|
1876
|
+
|
1877
|
+
@classmethod
|
1878
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
1879
|
+
) -> bool:
|
1880
|
+
return isinstance(member, type) and issubclass(member, BaseException)
|
1881
|
+
|
1882
|
+
|
1883
|
+
class DataDocumenterMixinBase:
|
1884
|
+
# define types of instance variables
|
1885
|
+
config: Config = None
|
1886
|
+
env: BuildEnvironment = None
|
1887
|
+
modname: str = None
|
1888
|
+
parent: Any = None
|
1889
|
+
object: Any = None
|
1890
|
+
objpath: list[str] = None
|
1891
|
+
|
1892
|
+
def should_suppress_directive_header(self) -> bool:
|
1893
|
+
"""Check directive header should be suppressed."""
|
1894
|
+
return False
|
1895
|
+
|
1896
|
+
def should_suppress_value_header(self) -> bool:
|
1897
|
+
"""Check :value: header should be suppressed."""
|
1898
|
+
return False
|
1899
|
+
|
1900
|
+
def update_content(self, more_content: StringList) -> None:
|
1901
|
+
"""Update docstring, for example with TypeVar variance."""
|
1902
|
+
pass
|
1903
|
+
|
1904
|
+
|
1905
|
+
class GenericAliasMixin(DataDocumenterMixinBase):
|
1906
|
+
"""
|
1907
|
+
Mixin for DataDocumenter and AttributeDocumenter to provide the feature for
|
1908
|
+
supporting GenericAliases.
|
1909
|
+
"""
|
1910
|
+
|
1911
|
+
def should_suppress_directive_header(self) -> bool:
|
1912
|
+
return (inspect.isgenericalias(self.object) or
|
1913
|
+
super().should_suppress_directive_header())
|
1914
|
+
|
1915
|
+
def update_content(self, more_content: StringList) -> None:
|
1916
|
+
if inspect.isgenericalias(self.object):
|
1917
|
+
if self.config.autodoc_typehints_format == "short":
|
1918
|
+
alias = restify(self.object, "smart")
|
1919
|
+
else:
|
1920
|
+
alias = restify(self.object)
|
1921
|
+
|
1922
|
+
more_content.append(_('alias of %s') % alias, '')
|
1923
|
+
more_content.append('', '')
|
1924
|
+
|
1925
|
+
super().update_content(more_content)
|
1926
|
+
|
1927
|
+
|
1928
|
+
class UninitializedGlobalVariableMixin(DataDocumenterMixinBase):
|
1929
|
+
"""
|
1930
|
+
Mixin for DataDocumenter to provide the feature for supporting uninitialized
|
1931
|
+
(type annotation only) global variables.
|
1932
|
+
"""
|
1933
|
+
|
1934
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
1935
|
+
try:
|
1936
|
+
return super().import_object(raiseerror=True) # type: ignore
|
1937
|
+
except ImportError as exc:
|
1938
|
+
# annotation only instance variable (PEP-526)
|
1939
|
+
try:
|
1940
|
+
with mock(self.config.autodoc_mock_imports):
|
1941
|
+
parent = import_module(self.modname, self.config.autodoc_warningiserror)
|
1942
|
+
annotations = get_type_hints(parent, None,
|
1943
|
+
self.config.autodoc_type_aliases)
|
1944
|
+
if self.objpath[-1] in annotations:
|
1945
|
+
self.object = UNINITIALIZED_ATTR
|
1946
|
+
self.parent = parent
|
1947
|
+
return True
|
1948
|
+
except ImportError:
|
1949
|
+
pass
|
1950
|
+
|
1951
|
+
if raiseerror:
|
1952
|
+
raise
|
1953
|
+
else:
|
1954
|
+
logger.warning(exc.args[0], type='autodoc', subtype='import_object')
|
1955
|
+
self.env.note_reread()
|
1956
|
+
return False
|
1957
|
+
|
1958
|
+
def should_suppress_value_header(self) -> bool:
|
1959
|
+
return (self.object is UNINITIALIZED_ATTR or
|
1960
|
+
super().should_suppress_value_header())
|
1961
|
+
|
1962
|
+
def get_doc(self) -> list[list[str]] | None:
|
1963
|
+
if self.object is UNINITIALIZED_ATTR:
|
1964
|
+
return []
|
1965
|
+
else:
|
1966
|
+
return super().get_doc() # type: ignore
|
1967
|
+
|
1968
|
+
|
1969
|
+
class DataDocumenter(GenericAliasMixin,
|
1970
|
+
UninitializedGlobalVariableMixin, ModuleLevelDocumenter):
|
1971
|
+
"""
|
1972
|
+
Specialized Documenter subclass for data items.
|
1973
|
+
"""
|
1974
|
+
objtype = 'data'
|
1975
|
+
member_order = 40
|
1976
|
+
priority = -10
|
1977
|
+
option_spec: OptionSpec = dict(ModuleLevelDocumenter.option_spec)
|
1978
|
+
option_spec["annotation"] = annotation_option
|
1979
|
+
option_spec["no-value"] = bool_option
|
1980
|
+
|
1981
|
+
@classmethod
|
1982
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
1983
|
+
) -> bool:
|
1984
|
+
return isinstance(parent, ModuleDocumenter) and isattr
|
1985
|
+
|
1986
|
+
def update_annotations(self, parent: Any) -> None:
|
1987
|
+
"""Update __annotations__ to support type_comment and so on."""
|
1988
|
+
annotations = dict(inspect.getannotations(parent))
|
1989
|
+
parent.__annotations__ = annotations
|
1990
|
+
|
1991
|
+
try:
|
1992
|
+
analyzer = ModuleAnalyzer.for_module(self.modname)
|
1993
|
+
analyzer.analyze()
|
1994
|
+
for (classname, attrname), annotation in analyzer.annotations.items():
|
1995
|
+
if classname == '' and attrname not in annotations:
|
1996
|
+
annotations[attrname] = annotation
|
1997
|
+
except PycodeError:
|
1998
|
+
pass
|
1999
|
+
|
2000
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2001
|
+
ret = super().import_object(raiseerror)
|
2002
|
+
if self.parent:
|
2003
|
+
self.update_annotations(self.parent)
|
2004
|
+
|
2005
|
+
return ret
|
2006
|
+
|
2007
|
+
def should_suppress_value_header(self) -> bool:
|
2008
|
+
if super().should_suppress_value_header():
|
2009
|
+
return True
|
2010
|
+
else:
|
2011
|
+
doc = self.get_doc()
|
2012
|
+
docstring, metadata = separate_metadata('\n'.join(sum(doc, [])))
|
2013
|
+
if 'hide-value' in metadata:
|
2014
|
+
return True
|
2015
|
+
|
2016
|
+
return False
|
2017
|
+
|
2018
|
+
def add_directive_header(self, sig: str) -> None:
|
2019
|
+
super().add_directive_header(sig)
|
2020
|
+
sourcename = self.get_sourcename()
|
2021
|
+
if self.options.annotation is SUPPRESS or self.should_suppress_directive_header():
|
2022
|
+
pass
|
2023
|
+
elif self.options.annotation:
|
2024
|
+
self.add_line(' :annotation: %s' % self.options.annotation,
|
2025
|
+
sourcename)
|
2026
|
+
else:
|
2027
|
+
if self.config.autodoc_typehints != 'none':
|
2028
|
+
# obtain annotation for this data
|
2029
|
+
annotations = get_type_hints(self.parent, None,
|
2030
|
+
self.config.autodoc_type_aliases)
|
2031
|
+
if self.objpath[-1] in annotations:
|
2032
|
+
if self.config.autodoc_typehints_format == "short":
|
2033
|
+
objrepr = stringify_annotation(annotations.get(self.objpath[-1]),
|
2034
|
+
"smart")
|
2035
|
+
else:
|
2036
|
+
objrepr = stringify_annotation(annotations.get(self.objpath[-1]),
|
2037
|
+
"fully-qualified-except-typing")
|
2038
|
+
self.add_line(' :type: ' + objrepr, sourcename)
|
2039
|
+
|
2040
|
+
try:
|
2041
|
+
if (self.options.no_value or self.should_suppress_value_header() or
|
2042
|
+
ismock(self.object)):
|
2043
|
+
pass
|
2044
|
+
else:
|
2045
|
+
objrepr = object_description(self.object)
|
2046
|
+
self.add_line(' :value: ' + objrepr, sourcename)
|
2047
|
+
except ValueError:
|
2048
|
+
pass
|
2049
|
+
|
2050
|
+
def document_members(self, all_members: bool = False) -> None:
|
2051
|
+
pass
|
2052
|
+
|
2053
|
+
def get_real_modname(self) -> str:
|
2054
|
+
real_modname = self.get_attr(self.parent or self.object, '__module__', None)
|
2055
|
+
return real_modname or self.modname
|
2056
|
+
|
2057
|
+
def get_module_comment(self, attrname: str) -> list[str] | None:
|
2058
|
+
try:
|
2059
|
+
analyzer = ModuleAnalyzer.for_module(self.modname)
|
2060
|
+
analyzer.analyze()
|
2061
|
+
key = ('', attrname)
|
2062
|
+
if key in analyzer.attr_docs:
|
2063
|
+
return list(analyzer.attr_docs[key])
|
2064
|
+
except PycodeError:
|
2065
|
+
pass
|
2066
|
+
|
2067
|
+
return None
|
2068
|
+
|
2069
|
+
def get_doc(self) -> list[list[str]] | None:
|
2070
|
+
# Check the variable has a docstring-comment
|
2071
|
+
comment = self.get_module_comment(self.objpath[-1])
|
2072
|
+
if comment:
|
2073
|
+
return [comment]
|
2074
|
+
else:
|
2075
|
+
return super().get_doc()
|
2076
|
+
|
2077
|
+
def add_content(self, more_content: StringList | None) -> None:
|
2078
|
+
# Disable analyzing variable comment on Documenter.add_content() to control it on
|
2079
|
+
# DataDocumenter.add_content()
|
2080
|
+
self.analyzer = None
|
2081
|
+
|
2082
|
+
if not more_content:
|
2083
|
+
more_content = StringList()
|
2084
|
+
|
2085
|
+
self.update_content(more_content)
|
2086
|
+
super().add_content(more_content)
|
2087
|
+
|
2088
|
+
|
2089
|
+
class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type: ignore
|
2090
|
+
"""
|
2091
|
+
Specialized Documenter subclass for methods (normal, static and class).
|
2092
|
+
"""
|
2093
|
+
objtype = 'method'
|
2094
|
+
directivetype = 'method'
|
2095
|
+
member_order = 50
|
2096
|
+
priority = 1 # must be more than FunctionDocumenter
|
2097
|
+
|
2098
|
+
@classmethod
|
2099
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
2100
|
+
) -> bool:
|
2101
|
+
return inspect.isroutine(member) and not isinstance(parent, ModuleDocumenter)
|
2102
|
+
|
2103
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2104
|
+
ret = super().import_object(raiseerror)
|
2105
|
+
if not ret:
|
2106
|
+
return ret
|
2107
|
+
|
2108
|
+
# to distinguish classmethod/staticmethod
|
2109
|
+
obj = self.parent.__dict__.get(self.object_name)
|
2110
|
+
if obj is None:
|
2111
|
+
obj = self.object
|
2112
|
+
|
2113
|
+
if (inspect.isclassmethod(obj) or
|
2114
|
+
inspect.isstaticmethod(obj, cls=self.parent, name=self.object_name)):
|
2115
|
+
# document class and static members before ordinary ones
|
2116
|
+
self.member_order = self.member_order - 1
|
2117
|
+
|
2118
|
+
return ret
|
2119
|
+
|
2120
|
+
def format_args(self, **kwargs: Any) -> str | None:
|
2121
|
+
if self.config.autodoc_typehints in ('none', 'description'):
|
2122
|
+
kwargs.setdefault('show_annotation', False)
|
2123
|
+
if self.config.autodoc_typehints_format == "short":
|
2124
|
+
kwargs.setdefault('unqualified_typehints', True)
|
2125
|
+
|
2126
|
+
try:
|
2127
|
+
if self.object == object.__init__ and self.parent != object:
|
2128
|
+
# Classes not having own __init__() method are shown as no arguments.
|
2129
|
+
#
|
2130
|
+
# Note: The signature of object.__init__() is (self, /, *args, **kwargs).
|
2131
|
+
# But it makes users confused.
|
2132
|
+
args = '()'
|
2133
|
+
else:
|
2134
|
+
if inspect.isstaticmethod(self.object, cls=self.parent, name=self.object_name):
|
2135
|
+
self.env.app.emit('autodoc-before-process-signature', self.object, False)
|
2136
|
+
sig = inspect.signature(self.object, bound_method=False,
|
2137
|
+
type_aliases=self.config.autodoc_type_aliases)
|
2138
|
+
else:
|
2139
|
+
self.env.app.emit('autodoc-before-process-signature', self.object, True)
|
2140
|
+
sig = inspect.signature(self.object, bound_method=True,
|
2141
|
+
type_aliases=self.config.autodoc_type_aliases)
|
2142
|
+
args = stringify_signature(sig, **kwargs)
|
2143
|
+
except TypeError as exc:
|
2144
|
+
logger.warning(__("Failed to get a method signature for %s: %s"),
|
2145
|
+
self.fullname, exc)
|
2146
|
+
return None
|
2147
|
+
except ValueError:
|
2148
|
+
args = ''
|
2149
|
+
|
2150
|
+
if self.config.strip_signature_backslash:
|
2151
|
+
# escape backslashes for reST
|
2152
|
+
args = args.replace('\\', '\\\\')
|
2153
|
+
return args
|
2154
|
+
|
2155
|
+
def add_directive_header(self, sig: str) -> None:
|
2156
|
+
super().add_directive_header(sig)
|
2157
|
+
|
2158
|
+
sourcename = self.get_sourcename()
|
2159
|
+
obj = self.parent.__dict__.get(self.object_name, self.object)
|
2160
|
+
if inspect.isabstractmethod(obj):
|
2161
|
+
self.add_line(' :abstractmethod:', sourcename)
|
2162
|
+
if inspect.iscoroutinefunction(obj) or inspect.isasyncgenfunction(obj):
|
2163
|
+
self.add_line(' :async:', sourcename)
|
2164
|
+
if inspect.isclassmethod(obj):
|
2165
|
+
self.add_line(' :classmethod:', sourcename)
|
2166
|
+
if inspect.isstaticmethod(obj, cls=self.parent, name=self.object_name):
|
2167
|
+
self.add_line(' :staticmethod:', sourcename)
|
2168
|
+
if self.analyzer and '.'.join(self.objpath) in self.analyzer.finals:
|
2169
|
+
self.add_line(' :final:', sourcename)
|
2170
|
+
|
2171
|
+
def document_members(self, all_members: bool = False) -> None:
|
2172
|
+
pass
|
2173
|
+
|
2174
|
+
def format_signature(self, **kwargs: Any) -> str:
|
2175
|
+
if self.config.autodoc_typehints_format == "short":
|
2176
|
+
kwargs.setdefault('unqualified_typehints', True)
|
2177
|
+
|
2178
|
+
sigs = []
|
2179
|
+
if (self.analyzer and
|
2180
|
+
'.'.join(self.objpath) in self.analyzer.overloads and
|
2181
|
+
self.config.autodoc_typehints != 'none'):
|
2182
|
+
# Use signatures for overloaded methods instead of the implementation method.
|
2183
|
+
overloaded = True
|
2184
|
+
else:
|
2185
|
+
overloaded = False
|
2186
|
+
sig = super().format_signature(**kwargs)
|
2187
|
+
sigs.append(sig)
|
2188
|
+
|
2189
|
+
meth = self.parent.__dict__.get(self.objpath[-1])
|
2190
|
+
if inspect.is_singledispatch_method(meth):
|
2191
|
+
# append signature of singledispatch'ed functions
|
2192
|
+
for typ, func in meth.dispatcher.registry.items():
|
2193
|
+
if typ is object:
|
2194
|
+
pass # default implementation. skipped.
|
2195
|
+
else:
|
2196
|
+
dispatchmeth = self.annotate_to_first_argument(func, typ)
|
2197
|
+
if dispatchmeth:
|
2198
|
+
documenter = MethodDocumenter(self.directive, '')
|
2199
|
+
documenter.parent = self.parent
|
2200
|
+
documenter.object = dispatchmeth
|
2201
|
+
documenter.objpath = [None]
|
2202
|
+
sigs.append(documenter.format_signature())
|
2203
|
+
if overloaded:
|
2204
|
+
if inspect.isstaticmethod(self.object, cls=self.parent, name=self.object_name):
|
2205
|
+
actual = inspect.signature(self.object, bound_method=False,
|
2206
|
+
type_aliases=self.config.autodoc_type_aliases)
|
2207
|
+
else:
|
2208
|
+
actual = inspect.signature(self.object, bound_method=True,
|
2209
|
+
type_aliases=self.config.autodoc_type_aliases)
|
2210
|
+
|
2211
|
+
__globals__ = safe_getattr(self.object, '__globals__', {})
|
2212
|
+
for overload in self.analyzer.overloads.get('.'.join(self.objpath)):
|
2213
|
+
overload = self.merge_default_value(actual, overload)
|
2214
|
+
overload = evaluate_signature(overload, __globals__,
|
2215
|
+
self.config.autodoc_type_aliases)
|
2216
|
+
|
2217
|
+
if not inspect.isstaticmethod(self.object, cls=self.parent,
|
2218
|
+
name=self.object_name):
|
2219
|
+
parameters = list(overload.parameters.values())
|
2220
|
+
overload = overload.replace(parameters=parameters[1:])
|
2221
|
+
sig = stringify_signature(overload, **kwargs)
|
2222
|
+
sigs.append(sig)
|
2223
|
+
|
2224
|
+
return "\n".join(sigs)
|
2225
|
+
|
2226
|
+
def merge_default_value(self, actual: Signature, overload: Signature) -> Signature:
|
2227
|
+
"""Merge default values of actual implementation to the overload variants."""
|
2228
|
+
parameters = list(overload.parameters.values())
|
2229
|
+
for i, param in enumerate(parameters):
|
2230
|
+
actual_param = actual.parameters.get(param.name)
|
2231
|
+
if actual_param and param.default == '...':
|
2232
|
+
parameters[i] = param.replace(default=actual_param.default)
|
2233
|
+
|
2234
|
+
return overload.replace(parameters=parameters)
|
2235
|
+
|
2236
|
+
def annotate_to_first_argument(self, func: Callable, typ: type) -> Callable | None:
|
2237
|
+
"""Annotate type hint to the first argument of function if needed."""
|
2238
|
+
try:
|
2239
|
+
sig = inspect.signature(func, type_aliases=self.config.autodoc_type_aliases)
|
2240
|
+
except TypeError as exc:
|
2241
|
+
logger.warning(__("Failed to get a method signature for %s: %s"),
|
2242
|
+
self.fullname, exc)
|
2243
|
+
return None
|
2244
|
+
except ValueError:
|
2245
|
+
return None
|
2246
|
+
|
2247
|
+
if len(sig.parameters) == 1:
|
2248
|
+
return None
|
2249
|
+
|
2250
|
+
def dummy():
|
2251
|
+
pass
|
2252
|
+
|
2253
|
+
params = list(sig.parameters.values())
|
2254
|
+
if params[1].annotation is Parameter.empty:
|
2255
|
+
params[1] = params[1].replace(annotation=typ)
|
2256
|
+
try:
|
2257
|
+
dummy.__signature__ = sig.replace(parameters=params) # type: ignore
|
2258
|
+
return dummy
|
2259
|
+
except (AttributeError, TypeError):
|
2260
|
+
# failed to update signature (ex. built-in or extension types)
|
2261
|
+
return None
|
2262
|
+
|
2263
|
+
return func
|
2264
|
+
|
2265
|
+
def get_doc(self) -> list[list[str]] | None:
|
2266
|
+
if self._new_docstrings is not None:
|
2267
|
+
# docstring already returned previously, then modified by
|
2268
|
+
# `DocstringSignatureMixin`. Just return the previously-computed
|
2269
|
+
# result, so that we don't lose the processing done by
|
2270
|
+
# `DocstringSignatureMixin`.
|
2271
|
+
return self._new_docstrings
|
2272
|
+
if self.objpath[-1] == '__init__':
|
2273
|
+
docstring = getdoc(self.object, self.get_attr,
|
2274
|
+
self.config.autodoc_inherit_docstrings,
|
2275
|
+
self.parent, self.object_name)
|
2276
|
+
if (docstring is not None and
|
2277
|
+
(docstring == object.__init__.__doc__ or # for pypy
|
2278
|
+
docstring.strip() == object.__init__.__doc__)): # for !pypy
|
2279
|
+
docstring = None
|
2280
|
+
if docstring:
|
2281
|
+
tab_width = self.directive.state.document.settings.tab_width
|
2282
|
+
return [prepare_docstring(docstring, tabsize=tab_width)]
|
2283
|
+
else:
|
2284
|
+
return []
|
2285
|
+
elif self.objpath[-1] == '__new__':
|
2286
|
+
docstring = getdoc(self.object, self.get_attr,
|
2287
|
+
self.config.autodoc_inherit_docstrings,
|
2288
|
+
self.parent, self.object_name)
|
2289
|
+
if (docstring is not None and
|
2290
|
+
(docstring == object.__new__.__doc__ or # for pypy
|
2291
|
+
docstring.strip() == object.__new__.__doc__)): # for !pypy
|
2292
|
+
docstring = None
|
2293
|
+
if docstring:
|
2294
|
+
tab_width = self.directive.state.document.settings.tab_width
|
2295
|
+
return [prepare_docstring(docstring, tabsize=tab_width)]
|
2296
|
+
else:
|
2297
|
+
return []
|
2298
|
+
else:
|
2299
|
+
return super().get_doc()
|
2300
|
+
|
2301
|
+
|
2302
|
+
class NonDataDescriptorMixin(DataDocumenterMixinBase):
|
2303
|
+
"""
|
2304
|
+
Mixin for AttributeDocumenter to provide the feature for supporting non
|
2305
|
+
data-descriptors.
|
2306
|
+
|
2307
|
+
.. note:: This mix-in must be inherited after other mix-ins. Otherwise, docstring
|
2308
|
+
and :value: header will be suppressed unexpectedly.
|
2309
|
+
"""
|
2310
|
+
|
2311
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2312
|
+
ret = super().import_object(raiseerror) # type: ignore
|
2313
|
+
if ret and not inspect.isattributedescriptor(self.object):
|
2314
|
+
self.non_data_descriptor = True
|
2315
|
+
else:
|
2316
|
+
self.non_data_descriptor = False
|
2317
|
+
|
2318
|
+
return ret
|
2319
|
+
|
2320
|
+
def should_suppress_value_header(self) -> bool:
|
2321
|
+
return (not getattr(self, 'non_data_descriptor', False) or
|
2322
|
+
super().should_suppress_directive_header())
|
2323
|
+
|
2324
|
+
def get_doc(self) -> list[list[str]] | None:
|
2325
|
+
if getattr(self, 'non_data_descriptor', False):
|
2326
|
+
# the docstring of non datadescriptor is very probably the wrong thing
|
2327
|
+
# to display
|
2328
|
+
return None
|
2329
|
+
else:
|
2330
|
+
return super().get_doc() # type: ignore
|
2331
|
+
|
2332
|
+
|
2333
|
+
class SlotsMixin(DataDocumenterMixinBase):
|
2334
|
+
"""
|
2335
|
+
Mixin for AttributeDocumenter to provide the feature for supporting __slots__.
|
2336
|
+
"""
|
2337
|
+
|
2338
|
+
def isslotsattribute(self) -> bool:
|
2339
|
+
"""Check the subject is an attribute in __slots__."""
|
2340
|
+
try:
|
2341
|
+
__slots__ = inspect.getslots(self.parent)
|
2342
|
+
return bool(__slots__) and self.objpath[-1] in __slots__
|
2343
|
+
except (ValueError, TypeError):
|
2344
|
+
return False
|
2345
|
+
|
2346
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2347
|
+
ret = super().import_object(raiseerror) # type: ignore
|
2348
|
+
if self.isslotsattribute():
|
2349
|
+
self.object = SLOTSATTR
|
2350
|
+
|
2351
|
+
return ret
|
2352
|
+
|
2353
|
+
def should_suppress_value_header(self) -> bool:
|
2354
|
+
if self.object is SLOTSATTR:
|
2355
|
+
return True
|
2356
|
+
else:
|
2357
|
+
return super().should_suppress_value_header()
|
2358
|
+
|
2359
|
+
def get_doc(self) -> list[list[str]] | None:
|
2360
|
+
if self.object is SLOTSATTR:
|
2361
|
+
try:
|
2362
|
+
__slots__ = inspect.getslots(self.parent)
|
2363
|
+
if __slots__ and __slots__.get(self.objpath[-1]):
|
2364
|
+
docstring = prepare_docstring(__slots__[self.objpath[-1]])
|
2365
|
+
return [docstring]
|
2366
|
+
else:
|
2367
|
+
return []
|
2368
|
+
except ValueError as exc:
|
2369
|
+
logger.warning(__('Invalid __slots__ found on %s. Ignored.'),
|
2370
|
+
(self.parent.__qualname__, exc), type='autodoc')
|
2371
|
+
return []
|
2372
|
+
else:
|
2373
|
+
return super().get_doc() # type: ignore
|
2374
|
+
|
2375
|
+
|
2376
|
+
class RuntimeInstanceAttributeMixin(DataDocumenterMixinBase):
|
2377
|
+
"""
|
2378
|
+
Mixin for AttributeDocumenter to provide the feature for supporting runtime
|
2379
|
+
instance attributes (that are defined in __init__() methods with doc-comments).
|
2380
|
+
|
2381
|
+
Example:
|
2382
|
+
|
2383
|
+
class Foo:
|
2384
|
+
def __init__(self):
|
2385
|
+
self.attr = None #: This is a target of this mix-in.
|
2386
|
+
"""
|
2387
|
+
|
2388
|
+
RUNTIME_INSTANCE_ATTRIBUTE = object()
|
2389
|
+
|
2390
|
+
def is_runtime_instance_attribute(self, parent: Any) -> bool:
|
2391
|
+
"""Check the subject is an attribute defined in __init__()."""
|
2392
|
+
# An instance variable defined in __init__().
|
2393
|
+
if self.get_attribute_comment(parent, self.objpath[-1]): # type: ignore
|
2394
|
+
return True
|
2395
|
+
elif self.is_runtime_instance_attribute_not_commented(parent):
|
2396
|
+
return True
|
2397
|
+
else:
|
2398
|
+
return False
|
2399
|
+
|
2400
|
+
def is_runtime_instance_attribute_not_commented(self, parent: Any) -> bool:
|
2401
|
+
"""Check the subject is an attribute defined in __init__() without comment."""
|
2402
|
+
for cls in inspect.getmro(parent):
|
2403
|
+
try:
|
2404
|
+
module = safe_getattr(cls, '__module__')
|
2405
|
+
qualname = safe_getattr(cls, '__qualname__')
|
2406
|
+
|
2407
|
+
analyzer = ModuleAnalyzer.for_module(module)
|
2408
|
+
analyzer.analyze()
|
2409
|
+
if qualname and self.objpath:
|
2410
|
+
key = '.'.join([qualname, self.objpath[-1]])
|
2411
|
+
if key in analyzer.tagorder:
|
2412
|
+
return True
|
2413
|
+
except (AttributeError, PycodeError):
|
2414
|
+
pass
|
2415
|
+
|
2416
|
+
return None
|
2417
|
+
|
2418
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2419
|
+
"""Check the existence of runtime instance attribute after failing to import the
|
2420
|
+
attribute."""
|
2421
|
+
try:
|
2422
|
+
return super().import_object(raiseerror=True) # type: ignore
|
2423
|
+
except ImportError as exc:
|
2424
|
+
try:
|
2425
|
+
with mock(self.config.autodoc_mock_imports):
|
2426
|
+
ret = import_object(self.modname, self.objpath[:-1], 'class',
|
2427
|
+
attrgetter=self.get_attr, # type: ignore
|
2428
|
+
warningiserror=self.config.autodoc_warningiserror)
|
2429
|
+
parent = ret[3]
|
2430
|
+
if self.is_runtime_instance_attribute(parent):
|
2431
|
+
self.object = self.RUNTIME_INSTANCE_ATTRIBUTE
|
2432
|
+
self.parent = parent
|
2433
|
+
return True
|
2434
|
+
except ImportError:
|
2435
|
+
pass
|
2436
|
+
|
2437
|
+
if raiseerror:
|
2438
|
+
raise
|
2439
|
+
else:
|
2440
|
+
logger.warning(exc.args[0], type='autodoc', subtype='import_object')
|
2441
|
+
self.env.note_reread()
|
2442
|
+
return False
|
2443
|
+
|
2444
|
+
def should_suppress_value_header(self) -> bool:
|
2445
|
+
return (self.object is self.RUNTIME_INSTANCE_ATTRIBUTE or
|
2446
|
+
super().should_suppress_value_header())
|
2447
|
+
|
2448
|
+
def get_doc(self) -> list[list[str]] | None:
|
2449
|
+
if (self.object is self.RUNTIME_INSTANCE_ATTRIBUTE and
|
2450
|
+
self.is_runtime_instance_attribute_not_commented(self.parent)):
|
2451
|
+
return None
|
2452
|
+
else:
|
2453
|
+
return super().get_doc() # type: ignore
|
2454
|
+
|
2455
|
+
|
2456
|
+
class UninitializedInstanceAttributeMixin(DataDocumenterMixinBase):
|
2457
|
+
"""
|
2458
|
+
Mixin for AttributeDocumenter to provide the feature for supporting uninitialized
|
2459
|
+
instance attributes (PEP-526 styled, annotation only attributes).
|
2460
|
+
|
2461
|
+
Example:
|
2462
|
+
|
2463
|
+
class Foo:
|
2464
|
+
attr: int #: This is a target of this mix-in.
|
2465
|
+
"""
|
2466
|
+
|
2467
|
+
def is_uninitialized_instance_attribute(self, parent: Any) -> bool:
|
2468
|
+
"""Check the subject is an annotation only attribute."""
|
2469
|
+
annotations = get_type_hints(parent, None, self.config.autodoc_type_aliases)
|
2470
|
+
return self.objpath[-1] in annotations
|
2471
|
+
|
2472
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2473
|
+
"""Check the exisitence of uninitialized instance attribute when failed to import
|
2474
|
+
the attribute."""
|
2475
|
+
try:
|
2476
|
+
return super().import_object(raiseerror=True) # type: ignore
|
2477
|
+
except ImportError as exc:
|
2478
|
+
try:
|
2479
|
+
ret = import_object(self.modname, self.objpath[:-1], 'class',
|
2480
|
+
attrgetter=self.get_attr, # type: ignore
|
2481
|
+
warningiserror=self.config.autodoc_warningiserror)
|
2482
|
+
parent = ret[3]
|
2483
|
+
if self.is_uninitialized_instance_attribute(parent):
|
2484
|
+
self.object = UNINITIALIZED_ATTR
|
2485
|
+
self.parent = parent
|
2486
|
+
return True
|
2487
|
+
except ImportError:
|
2488
|
+
pass
|
2489
|
+
|
2490
|
+
if raiseerror:
|
2491
|
+
raise
|
2492
|
+
else:
|
2493
|
+
logger.warning(exc.args[0], type='autodoc', subtype='import_object')
|
2494
|
+
self.env.note_reread()
|
2495
|
+
return False
|
2496
|
+
|
2497
|
+
def should_suppress_value_header(self) -> bool:
|
2498
|
+
return (self.object is UNINITIALIZED_ATTR or
|
2499
|
+
super().should_suppress_value_header())
|
2500
|
+
|
2501
|
+
def get_doc(self) -> list[list[str]] | None:
|
2502
|
+
if self.object is UNINITIALIZED_ATTR:
|
2503
|
+
return None
|
2504
|
+
else:
|
2505
|
+
return super().get_doc() # type: ignore
|
2506
|
+
|
2507
|
+
|
2508
|
+
class AttributeDocumenter(GenericAliasMixin, SlotsMixin, # type: ignore
|
2509
|
+
RuntimeInstanceAttributeMixin,
|
2510
|
+
UninitializedInstanceAttributeMixin, NonDataDescriptorMixin,
|
2511
|
+
DocstringStripSignatureMixin, ClassLevelDocumenter):
|
2512
|
+
"""
|
2513
|
+
Specialized Documenter subclass for attributes.
|
2514
|
+
"""
|
2515
|
+
objtype = 'attribute'
|
2516
|
+
member_order = 60
|
2517
|
+
option_spec: OptionSpec = dict(ModuleLevelDocumenter.option_spec)
|
2518
|
+
option_spec["annotation"] = annotation_option
|
2519
|
+
option_spec["no-value"] = bool_option
|
2520
|
+
|
2521
|
+
# must be higher than the MethodDocumenter, else it will recognize
|
2522
|
+
# some non-data descriptors as methods
|
2523
|
+
priority = 10
|
2524
|
+
|
2525
|
+
@staticmethod
|
2526
|
+
def is_function_or_method(obj: Any) -> bool:
|
2527
|
+
return inspect.isfunction(obj) or inspect.isbuiltin(obj) or inspect.ismethod(obj)
|
2528
|
+
|
2529
|
+
@classmethod
|
2530
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
2531
|
+
) -> bool:
|
2532
|
+
if isinstance(parent, ModuleDocumenter):
|
2533
|
+
return False
|
2534
|
+
elif inspect.isattributedescriptor(member):
|
2535
|
+
return True
|
2536
|
+
elif not inspect.isroutine(member) and not isinstance(member, type):
|
2537
|
+
return True
|
2538
|
+
else:
|
2539
|
+
return False
|
2540
|
+
|
2541
|
+
def document_members(self, all_members: bool = False) -> None:
|
2542
|
+
pass
|
2543
|
+
|
2544
|
+
def update_annotations(self, parent: Any) -> None:
|
2545
|
+
"""Update __annotations__ to support type_comment and so on."""
|
2546
|
+
try:
|
2547
|
+
annotations = dict(inspect.getannotations(parent))
|
2548
|
+
parent.__annotations__ = annotations
|
2549
|
+
|
2550
|
+
for cls in inspect.getmro(parent):
|
2551
|
+
try:
|
2552
|
+
module = safe_getattr(cls, '__module__')
|
2553
|
+
qualname = safe_getattr(cls, '__qualname__')
|
2554
|
+
|
2555
|
+
analyzer = ModuleAnalyzer.for_module(module)
|
2556
|
+
analyzer.analyze()
|
2557
|
+
for (classname, attrname), annotation in analyzer.annotations.items():
|
2558
|
+
if classname == qualname and attrname not in annotations:
|
2559
|
+
annotations[attrname] = annotation
|
2560
|
+
except (AttributeError, PycodeError):
|
2561
|
+
pass
|
2562
|
+
except (AttributeError, TypeError):
|
2563
|
+
# Failed to set __annotations__ (built-in, extensions, etc.)
|
2564
|
+
pass
|
2565
|
+
|
2566
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2567
|
+
ret = super().import_object(raiseerror)
|
2568
|
+
if inspect.isenumattribute(self.object):
|
2569
|
+
self.object = self.object.value
|
2570
|
+
if self.parent:
|
2571
|
+
self.update_annotations(self.parent)
|
2572
|
+
|
2573
|
+
return ret
|
2574
|
+
|
2575
|
+
def get_real_modname(self) -> str:
|
2576
|
+
real_modname = self.get_attr(self.parent or self.object, '__module__', None)
|
2577
|
+
return real_modname or self.modname
|
2578
|
+
|
2579
|
+
def should_suppress_value_header(self) -> bool:
|
2580
|
+
if super().should_suppress_value_header():
|
2581
|
+
return True
|
2582
|
+
else:
|
2583
|
+
doc = self.get_doc()
|
2584
|
+
if doc:
|
2585
|
+
docstring, metadata = separate_metadata('\n'.join(sum(doc, [])))
|
2586
|
+
if 'hide-value' in metadata:
|
2587
|
+
return True
|
2588
|
+
|
2589
|
+
return False
|
2590
|
+
|
2591
|
+
def add_directive_header(self, sig: str) -> None:
|
2592
|
+
super().add_directive_header(sig)
|
2593
|
+
sourcename = self.get_sourcename()
|
2594
|
+
if self.options.annotation is SUPPRESS or self.should_suppress_directive_header():
|
2595
|
+
pass
|
2596
|
+
elif self.options.annotation:
|
2597
|
+
self.add_line(' :annotation: %s' % self.options.annotation, sourcename)
|
2598
|
+
else:
|
2599
|
+
if self.config.autodoc_typehints != 'none':
|
2600
|
+
# obtain type annotation for this attribute
|
2601
|
+
annotations = get_type_hints(self.parent, None,
|
2602
|
+
self.config.autodoc_type_aliases)
|
2603
|
+
if self.objpath[-1] in annotations:
|
2604
|
+
if self.config.autodoc_typehints_format == "short":
|
2605
|
+
objrepr = stringify_annotation(annotations.get(self.objpath[-1]),
|
2606
|
+
"smart")
|
2607
|
+
else:
|
2608
|
+
objrepr = stringify_annotation(annotations.get(self.objpath[-1]),
|
2609
|
+
"fully-qualified-except-typing")
|
2610
|
+
self.add_line(' :type: ' + objrepr, sourcename)
|
2611
|
+
|
2612
|
+
try:
|
2613
|
+
if (self.options.no_value or self.should_suppress_value_header() or
|
2614
|
+
ismock(self.object)):
|
2615
|
+
pass
|
2616
|
+
else:
|
2617
|
+
objrepr = object_description(self.object)
|
2618
|
+
self.add_line(' :value: ' + objrepr, sourcename)
|
2619
|
+
except ValueError:
|
2620
|
+
pass
|
2621
|
+
|
2622
|
+
def get_attribute_comment(self, parent: Any, attrname: str) -> list[str] | None:
|
2623
|
+
for cls in inspect.getmro(parent):
|
2624
|
+
try:
|
2625
|
+
module = safe_getattr(cls, '__module__')
|
2626
|
+
qualname = safe_getattr(cls, '__qualname__')
|
2627
|
+
|
2628
|
+
analyzer = ModuleAnalyzer.for_module(module)
|
2629
|
+
analyzer.analyze()
|
2630
|
+
if qualname and self.objpath:
|
2631
|
+
key = (qualname, attrname)
|
2632
|
+
if key in analyzer.attr_docs:
|
2633
|
+
return list(analyzer.attr_docs[key])
|
2634
|
+
except (AttributeError, PycodeError):
|
2635
|
+
pass
|
2636
|
+
|
2637
|
+
return None
|
2638
|
+
|
2639
|
+
def get_doc(self) -> list[list[str]] | None:
|
2640
|
+
# Check the attribute has a docstring-comment
|
2641
|
+
comment = self.get_attribute_comment(self.parent, self.objpath[-1])
|
2642
|
+
if comment:
|
2643
|
+
return [comment]
|
2644
|
+
|
2645
|
+
try:
|
2646
|
+
# Disable `autodoc_inherit_docstring` temporarily to avoid to obtain
|
2647
|
+
# a docstring from the value which descriptor returns unexpectedly.
|
2648
|
+
# ref: https://github.com/sphinx-doc/sphinx/issues/7805
|
2649
|
+
orig = self.config.autodoc_inherit_docstrings
|
2650
|
+
self.config.autodoc_inherit_docstrings = False # type: ignore
|
2651
|
+
return super().get_doc()
|
2652
|
+
finally:
|
2653
|
+
self.config.autodoc_inherit_docstrings = orig # type: ignore
|
2654
|
+
|
2655
|
+
def add_content(self, more_content: StringList | None) -> None:
|
2656
|
+
# Disable analyzing attribute comment on Documenter.add_content() to control it on
|
2657
|
+
# AttributeDocumenter.add_content()
|
2658
|
+
self.analyzer = None
|
2659
|
+
|
2660
|
+
if more_content is None:
|
2661
|
+
more_content = StringList()
|
2662
|
+
self.update_content(more_content)
|
2663
|
+
super().add_content(more_content)
|
2664
|
+
|
2665
|
+
|
2666
|
+
class PropertyDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): # type: ignore
|
2667
|
+
"""
|
2668
|
+
Specialized Documenter subclass for properties.
|
2669
|
+
"""
|
2670
|
+
objtype = 'property'
|
2671
|
+
member_order = 60
|
2672
|
+
|
2673
|
+
# before AttributeDocumenter
|
2674
|
+
priority = AttributeDocumenter.priority + 1
|
2675
|
+
|
2676
|
+
@classmethod
|
2677
|
+
def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: Any
|
2678
|
+
) -> bool:
|
2679
|
+
if isinstance(parent, ClassDocumenter):
|
2680
|
+
if inspect.isproperty(member):
|
2681
|
+
return True
|
2682
|
+
else:
|
2683
|
+
__dict__ = safe_getattr(parent.object, '__dict__', {})
|
2684
|
+
obj = __dict__.get(membername)
|
2685
|
+
return isinstance(obj, classmethod) and inspect.isproperty(obj.__func__)
|
2686
|
+
else:
|
2687
|
+
return False
|
2688
|
+
|
2689
|
+
def import_object(self, raiseerror: bool = False) -> bool:
|
2690
|
+
"""Check the exisitence of uninitialized instance attribute when failed to import
|
2691
|
+
the attribute."""
|
2692
|
+
ret = super().import_object(raiseerror)
|
2693
|
+
if ret and not inspect.isproperty(self.object):
|
2694
|
+
__dict__ = safe_getattr(self.parent, '__dict__', {})
|
2695
|
+
obj = __dict__.get(self.objpath[-1])
|
2696
|
+
if isinstance(obj, classmethod) and inspect.isproperty(obj.__func__):
|
2697
|
+
self.object = obj.__func__
|
2698
|
+
self.isclassmethod = True
|
2699
|
+
return True
|
2700
|
+
else:
|
2701
|
+
return False
|
2702
|
+
|
2703
|
+
self.isclassmethod = False
|
2704
|
+
return ret
|
2705
|
+
|
2706
|
+
def document_members(self, all_members: bool = False) -> None:
|
2707
|
+
pass
|
2708
|
+
|
2709
|
+
def get_real_modname(self) -> str:
|
2710
|
+
real_modname = self.get_attr(self.parent or self.object, '__module__', None)
|
2711
|
+
return real_modname or self.modname
|
2712
|
+
|
2713
|
+
def add_directive_header(self, sig: str) -> None:
|
2714
|
+
super().add_directive_header(sig)
|
2715
|
+
sourcename = self.get_sourcename()
|
2716
|
+
if inspect.isabstractmethod(self.object):
|
2717
|
+
self.add_line(' :abstractmethod:', sourcename)
|
2718
|
+
if self.isclassmethod:
|
2719
|
+
self.add_line(' :classmethod:', sourcename)
|
2720
|
+
|
2721
|
+
if safe_getattr(self.object, 'fget', None): # property
|
2722
|
+
func = self.object.fget
|
2723
|
+
elif safe_getattr(self.object, 'func', None): # cached_property
|
2724
|
+
func = self.object.func
|
2725
|
+
else:
|
2726
|
+
func = None
|
2727
|
+
|
2728
|
+
if func and self.config.autodoc_typehints != 'none':
|
2729
|
+
try:
|
2730
|
+
signature = inspect.signature(func,
|
2731
|
+
type_aliases=self.config.autodoc_type_aliases)
|
2732
|
+
if signature.return_annotation is not Parameter.empty:
|
2733
|
+
if self.config.autodoc_typehints_format == "short":
|
2734
|
+
objrepr = stringify_annotation(signature.return_annotation, "smart")
|
2735
|
+
else:
|
2736
|
+
objrepr = stringify_annotation(signature.return_annotation,
|
2737
|
+
"fully-qualified-except-typing")
|
2738
|
+
self.add_line(' :type: ' + objrepr, sourcename)
|
2739
|
+
except TypeError as exc:
|
2740
|
+
logger.warning(__("Failed to get a function signature for %s: %s"),
|
2741
|
+
self.fullname, exc)
|
2742
|
+
return None
|
2743
|
+
except ValueError:
|
2744
|
+
return None
|
2745
|
+
|
2746
|
+
|
2747
|
+
def autodoc_attrgetter(app: Sphinx, obj: Any, name: str, *defargs: Any) -> Any:
|
2748
|
+
"""Alternative getattr() for types"""
|
2749
|
+
for typ, func in app.registry.autodoc_attrgettrs.items():
|
2750
|
+
if isinstance(obj, typ):
|
2751
|
+
return func(obj, name, *defargs)
|
2752
|
+
|
2753
|
+
return safe_getattr(obj, name, *defargs)
|
2754
|
+
|
2755
|
+
|
2756
|
+
def setup(app: Sphinx) -> dict[str, Any]:
|
2757
|
+
app.add_autodocumenter(ModuleDocumenter)
|
2758
|
+
app.add_autodocumenter(ClassDocumenter)
|
2759
|
+
app.add_autodocumenter(ExceptionDocumenter)
|
2760
|
+
app.add_autodocumenter(DataDocumenter)
|
2761
|
+
app.add_autodocumenter(FunctionDocumenter)
|
2762
|
+
app.add_autodocumenter(DecoratorDocumenter)
|
2763
|
+
app.add_autodocumenter(MethodDocumenter)
|
2764
|
+
app.add_autodocumenter(AttributeDocumenter)
|
2765
|
+
app.add_autodocumenter(PropertyDocumenter)
|
2766
|
+
|
2767
|
+
app.add_config_value('autoclass_content', 'class', True, ENUM('both', 'class', 'init'))
|
2768
|
+
app.add_config_value('autodoc_member_order', 'alphabetical', True,
|
2769
|
+
ENUM('alphabetical', 'bysource', 'groupwise'))
|
2770
|
+
app.add_config_value('autodoc_class_signature', 'mixed', True, ENUM('mixed', 'separated'))
|
2771
|
+
app.add_config_value('autodoc_default_options', {}, True)
|
2772
|
+
app.add_config_value('autodoc_docstring_signature', True, True)
|
2773
|
+
app.add_config_value('autodoc_mock_imports', [], True)
|
2774
|
+
app.add_config_value('autodoc_typehints', "signature", True,
|
2775
|
+
ENUM("signature", "description", "none", "both"))
|
2776
|
+
app.add_config_value('autodoc_typehints_description_target', 'all', True,
|
2777
|
+
ENUM('all', 'documented', 'documented_params'))
|
2778
|
+
app.add_config_value('autodoc_type_aliases', {}, True)
|
2779
|
+
app.add_config_value('autodoc_typehints_format', "short", 'env',
|
2780
|
+
ENUM("fully-qualified", "short"))
|
2781
|
+
app.add_config_value('autodoc_warningiserror', True, True)
|
2782
|
+
app.add_config_value('autodoc_inherit_docstrings', True, True)
|
2783
|
+
app.add_event('autodoc-before-process-signature')
|
2784
|
+
app.add_event('autodoc-process-docstring')
|
2785
|
+
app.add_event('autodoc-process-signature')
|
2786
|
+
app.add_event('autodoc-skip-member')
|
2787
|
+
app.add_event('autodoc-process-bases')
|
2788
|
+
|
2789
|
+
app.setup_extension('sphinx.ext.autodoc.preserve_defaults')
|
2790
|
+
app.setup_extension('sphinx.ext.autodoc.type_comment')
|
2791
|
+
app.setup_extension('sphinx.ext.autodoc.typehints')
|
2792
|
+
|
2793
|
+
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
|