py2docfx 0.1.16rc2051518__py3-none-any.whl → 0.1.17__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/docfx_yaml/miss_reference.py +1 -1
- py2docfx/docfx_yaml/parameter_utils.py +58 -6
- py2docfx/docfx_yaml/tests/roots/test-translator-typing/code_with_typing.py +14 -0
- py2docfx/docfx_yaml/tests/roots/test-translator-typing/conf.py +18 -0
- py2docfx/docfx_yaml/tests/test_translator_typing.py +39 -0
- py2docfx/docfx_yaml/utils.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/babel/py.typed +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/certifi/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/certifi/core.py +1 -32
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/cli/__main__.py +62 -2
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/constant.py +17 -0
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/legacy.py +1 -3
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/md.py +19 -14
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/utils.py +6 -0
- py2docfx/venv/basevenv/Lib/site-packages/charset_normalizer/version.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/markupsafe/_speedups.pyi +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/markupsafe/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_elffile.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_manylinux.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_parser.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_tokenizer.py +5 -4
- py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/packaging/markers.py +53 -22
- py2docfx/venv/basevenv/Lib/site-packages/packaging/metadata.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/specifiers.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/tags.py +39 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/chardet/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/pyparsing/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/tenacity/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pip/py.typed +4 -0
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +6 -7
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/pygments/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/_sql_builtins.py +106 -0
- py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/scripting.py +5 -3
- py2docfx/venv/basevenv/Lib/site-packages/pygments/lexers/sql.py +24 -118
- py2docfx/venv/basevenv/Lib/site-packages/requests/__version__.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/requests/compat.py +12 -0
- py2docfx/venv/basevenv/Lib/site-packages/requests/models.py +3 -1
- py2docfx/venv/basevenv/Lib/site-packages/requests/utils.py +6 -16
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/__init__.py +0 -38
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_discovery.py +33 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +63 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +5 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_entry_points.py +4 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_normalization.py +0 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py +12 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_scripts.py +361 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py +6 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/build_meta.py +25 -37
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py +9 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py +29 -28
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/develop.py +39 -179
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/easy_install.py +17 -2352
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +14 -31
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/egg_info.py +0 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +3 -55
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_scripts.py +5 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/sdist.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/compat/py310.py +11 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +10 -12
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/installer.py +34 -29
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/contexts.py +0 -14
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/fixtures.py +235 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +0 -24
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_develop.py +1 -64
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +0 -63
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py +15 -41
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +3 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_wheel.py +12 -36
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/wheel.py +49 -24
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/__init__.py +6 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/arabic_stemmer.py +798 -797
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/armenian_stemmer.py +212 -213
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/basestemmer.py +20 -54
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/basque_stemmer.py +202 -228
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/catalan_stemmer.py +370 -375
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/danish_stemmer.py +63 -61
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/dutch_porter_stemmer.py +466 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/dutch_stemmer.py +1217 -343
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/english_stemmer.py +295 -264
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/esperanto_stemmer.py +588 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/estonian_stemmer.py +850 -0
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/finnish_stemmer.py +144 -143
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/french_stemmer.py +308 -246
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/german_stemmer.py +224 -167
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/greek_stemmer.py +1314 -1313
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/hindi_stemmer.py +39 -38
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/hungarian_stemmer.py +231 -256
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/indonesian_stemmer.py +61 -64
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/irish_stemmer.py +101 -106
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/italian_stemmer.py +272 -272
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/lithuanian_stemmer.py +233 -240
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/nepali_stemmer.py +108 -134
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/norwegian_stemmer.py +108 -63
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/porter_stemmer.py +101 -108
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/portuguese_stemmer.py +241 -250
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/romanian_stemmer.py +332 -296
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/russian_stemmer.py +178 -179
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/serbian_stemmer.py +2331 -2332
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/spanish_stemmer.py +254 -259
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/swedish_stemmer.py +143 -70
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/tamil_stemmer.py +638 -1491
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/turkish_stemmer.py +326 -292
- py2docfx/venv/basevenv/Lib/site-packages/snowballstemmer/yiddish_stemmer.py +245 -246
- py2docfx/venv/basevenv/Lib/site-packages/sphinx/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/applehelp/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/htmlhelp/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/qthelp/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/sphinxcontrib/serializinghtml/py.typed +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/_version.py +9 -4
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/connection.py +87 -38
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +20 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/emscripten/response.py +8 -16
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/contrib/pyopenssl.py +10 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/exceptions.py +12 -4
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/http2/connection.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/poolmanager.py +17 -1
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/py.typed +2 -0
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/response.py +53 -24
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/request.py +12 -4
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/ssl_.py +22 -2
- py2docfx/venv/basevenv/Lib/site-packages/urllib3/util/ssl_match_hostname.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/wheel/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/wheel/__main__.py +7 -5
- py2docfx/venv/{venv1/Lib/site-packages/wheel/cli → basevenv/Lib/site-packages/wheel/_commands}/__init__.py +3 -5
- py2docfx/venv/{venv1/Lib/site-packages/wheel/cli → basevenv/Lib/site-packages/wheel/_commands}/convert.py +14 -9
- py2docfx/venv/{venv1/Lib/site-packages/wheel/cli → basevenv/Lib/site-packages/wheel/_commands}/pack.py +1 -2
- py2docfx/venv/basevenv/Lib/site-packages/wheel/{cli → _commands}/tags.py +4 -3
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_metadata.py +184 -0
- py2docfx/venv/basevenv/Lib/site-packages/wheel/bdist_wheel.py +12 -23
- py2docfx/venv/basevenv/Lib/site-packages/wheel/macosx_libfile.py +4 -0
- py2docfx/venv/basevenv/Lib/site-packages/wheel/metadata.py +17 -183
- py2docfx/venv/basevenv/Lib/site-packages/wheel/wheelfile.py +30 -16
- py2docfx/venv/venv1/Lib/site-packages/azure/core/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/credentials.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/instrumentation.py +67 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base_async.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_tools.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication_async.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_distributed_tracing.py +152 -29
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect_async.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry.py +3 -10
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry_async.py +3 -8
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_universal.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_aiohttp.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base_async.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_asyncio.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/base_polling.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_aiohttp.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_http_response_impl_async.py +3 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_requests_asyncio.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_rest_py3.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/settings.py +27 -21
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/__init__.py +3 -7
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_abstract_span.py +2 -35
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_models.py +71 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/common.py +12 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator.py +66 -13
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator_async.py +62 -23
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/opentelemetry.py +256 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_connection_string_parser.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_messaging_shared.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared_async.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_utils.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_constants.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/default.py +23 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/environment.py +12 -16
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/service_fabric.py +22 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/user_password.py +10 -6
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/vscode.py +13 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py +3 -5
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_client.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_persistent_cache.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azd_cli.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_cli.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_powershell.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/chained.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/default.py +22 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/environment.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/service_fabric.py +17 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/vscode.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/certifi/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/certifi/core.py +1 -32
- py2docfx/venv/venv1/Lib/site-packages/certifi/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__main__.py +62 -2
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/constant.py +17 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/legacy.py +1 -3
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/md.py +19 -14
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/utils.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__init__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/fernet.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/_oid.py +35 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/backends/openssl/backend.py +33 -10
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi +37 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi +8 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi +7 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi +17 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi +117 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi +75 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +107 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi +38 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi +18 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi +51 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi +52 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi +28 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +22 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +49 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi +34 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +15 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi +55 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi +52 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi +50 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi +23 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi +313 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py +9 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/bindings/openssl/binding.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py +5 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py +4 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/_serialization.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py +16 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py +47 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py +16 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py +16 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +14 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py +14 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py +14 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +6 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/base.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/modes.py +18 -18
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/hashes.py +5 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py +7 -4
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/padding.py +7 -121
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/__init__.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py +21 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py +48 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/ssh.py +68 -18
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/totp.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/utils.py +15 -3
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/__init__.py +3 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/base.py +39 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/extensions.py +100 -49
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/name.py +27 -15
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/ocsp.py +60 -25
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/oid.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/verification.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/annotations_pb2.pyi +24 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/auth_pb2.pyi +120 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/backend_pb2.pyi +102 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/billing_pb2.pyi +50 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/client_pb2.pyi +405 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/config_change_pb2.pyi +65 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/consumer_pb2.pyi +62 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/context_pb2.pyi +60 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/control_pb2.pyi +43 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/distribution_pb2.pyi +144 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/documentation_pb2.pyi +86 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/endpoint_pb2.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/error_reason_pb2.pyi +90 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/field_behavior_pb2.pyi +45 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/field_info_pb2.pyi +60 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/http_pb2.pyi +94 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/httpbody_pb2.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/label_pb2.pyi +47 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/launch_stage_pb2.pyi +40 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/log_pb2.pyi +47 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/logging_pb2.pyi +57 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/metric_pb2.pyi +186 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/monitored_resource_pb2.pyi +104 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/monitoring_pb2.pyi +57 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/policy_pb2.pyi +57 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/quota_pb2.pyi +116 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/resource_pb2.pyi +93 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/routing_pb2.pyi +49 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/service_pb2.pyi +170 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/source_info_pb2.pyi +34 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/system_parameter_pb2.pyi +60 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/usage_pb2.pyi +55 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api/visibility_pb2.pyi +56 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/bidi.py +17 -4
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/client_info.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/gapic_v1/client_info.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_base.py +13 -4
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_streaming.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_streaming_async.py +8 -5
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_unary.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/retry/retry_unary_async.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/_default.py +2 -36
- py2docfx/venv/venv1/Lib/site-packages/google/auth/_helpers.py +240 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/aio/_helpers.py +62 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/aio/transport/aiohttp.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/_metadata.py +5 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/credentials.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/identity_pool.py +91 -2
- py2docfx/venv/venv1/Lib/site-packages/google/auth/impersonated_credentials.py +75 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/__init__.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_aiohttp_requests.py +8 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_http_client.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/requests.py +4 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/urllib3.py +15 -5
- py2docfx/venv/venv1/Lib/site-packages/google/auth/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/cloud/extended_operations_pb2.pyi +45 -0
- py2docfx/venv/venv1/Lib/site-packages/google/cloud/location/locations_pb2.pyi +96 -0
- py2docfx/venv/venv1/Lib/site-packages/google/gapic/metadata/gapic_metadata_pb2.pyi +118 -0
- py2docfx/venv/venv1/Lib/site-packages/google/logging/type/http_request_pb2.pyi +91 -0
- py2docfx/venv/venv1/Lib/site-packages/google/logging/type/log_severity_pb2.pyi +42 -0
- py2docfx/venv/venv1/Lib/site-packages/google/longrunning/operations_proto_pb2.pyi +126 -0
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/id_token.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/webauthn_types.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any.py +15 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor.py +15 -2
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +258 -113
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pool.py +22 -8
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/decoder.py +106 -23
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/field_mask.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_edition_defaults.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +21 -18
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/testing_refleaks.py +8 -2
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +60 -43
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/json_format.py +4 -5
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/message_factory.py +16 -0
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +11 -7
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/code_pb2.pyi +58 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/context/attribute_context_pb2.pyi +309 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/context/audit_context_pb2.pyi +51 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/error_details_pb2.py +29 -23
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/error_details_pb2.pyi +246 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/http_pb2.pyi +71 -0
- py2docfx/venv/venv1/Lib/site-packages/google/rpc/status_pb2.pyi +41 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/calendar_period_pb2.pyi +40 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/color_pb2.pyi +42 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/date_pb2.pyi +36 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/datetime_pb2.pyi +77 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/dayofweek_pb2.pyi +40 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/decimal_pb2.pyi +27 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/expr_pb2.pyi +39 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/fraction_pb2.pyi +31 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/interval_pb2.pyi +36 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/latlng_pb2.pyi +31 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/localized_text_pb2.pyi +31 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/money_pb2.pyi +36 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/month_pb2.pyi +50 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/phone_number_pb2.pyi +48 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/postal_address_pb2.pyi +74 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/quaternion_pb2.pyi +39 -0
- py2docfx/venv/venv1/Lib/site-packages/google/type/timeofday_pb2.pyi +39 -0
- py2docfx/venv/venv1/Lib/site-packages/idna/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/jwt/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/msal/application.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/msal/individual_cache.py +9 -5
- py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +4 -5
- py2docfx/venv/venv1/Lib/site-packages/msal/sku.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/msal/throttled_http_client.py +58 -30
- py2docfx/venv/venv1/Lib/site-packages/opencensus/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/__init__.py +138 -138
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/exporter.py +93 -93
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/processor.py +63 -63
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/protocol.py +206 -206
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/storage.py +205 -205
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/transport.py +355 -355
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/utils.py +79 -79
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/common/version.py +15 -15
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/log_exporter/__init__.py +314 -314
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/__init__.py +190 -190
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/__init__.py +62 -62
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/cpu.py +50 -50
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/http_requests.py +176 -176
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/memory.py +42 -42
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/metrics_exporter/standard_metrics/process.py +87 -87
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/state.py +50 -50
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/statsbeat.py +100 -100
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/statsbeat/statsbeat_metrics.py +480 -480
- py2docfx/venv/venv1/Lib/site-packages/opencensus/ext/azure/trace_exporter/__init__.py +236 -236
- py2docfx/venv/venv1/Lib/site-packages/packaging/__init__.py +15 -0
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/_elffile.py +10 -9
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/_manylinux.py +13 -11
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/_musllinux.py +5 -3
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/_parser.py +12 -15
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/_tokenizer.py +15 -12
- py2docfx/venv/venv1/Lib/site-packages/packaging/licenses/__init__.py +145 -0
- py2docfx/venv/venv1/Lib/site-packages/packaging/licenses/_spdx.py +759 -0
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/markers.py +148 -39
- py2docfx/venv/venv1/Lib/site-packages/packaging/metadata.py +862 -0
- py2docfx/venv/venv1/Lib/site-packages/packaging/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/requirements.py +5 -4
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/specifiers.py +41 -33
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/tags.py +135 -50
- py2docfx/venv/venv1/Lib/site-packages/{wheel/vendored/packaging → packaging}/utils.py +39 -48
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/version.py +53 -32
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/chardet/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/pyparsing/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/tenacity/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/pip/py.typed +4 -0
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +6 -7
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/requests/__version__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/requests/compat.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/requests/models.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/requests/utils.py +6 -16
- py2docfx/venv/venv1/Lib/site-packages/rsa/__init__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/rsa/asn1.py +52 -52
- py2docfx/venv/venv1/Lib/site-packages/rsa/cli.py +321 -321
- py2docfx/venv/venv1/Lib/site-packages/rsa/common.py +184 -184
- py2docfx/venv/venv1/Lib/site-packages/rsa/core.py +53 -53
- py2docfx/venv/venv1/Lib/site-packages/rsa/key.py +858 -858
- py2docfx/venv/venv1/Lib/site-packages/rsa/parallel.py +96 -96
- py2docfx/venv/venv1/Lib/site-packages/rsa/pem.py +134 -134
- py2docfx/venv/venv1/Lib/site-packages/rsa/pkcs1.py +485 -485
- py2docfx/venv/venv1/Lib/site-packages/rsa/pkcs1_v2.py +100 -100
- py2docfx/venv/venv1/Lib/site-packages/rsa/prime.py +198 -198
- py2docfx/venv/venv1/Lib/site-packages/rsa/py.typed +1 -0
- py2docfx/venv/venv1/Lib/site-packages/rsa/randnum.py +95 -95
- py2docfx/venv/venv1/Lib/site-packages/rsa/transform.py +72 -72
- py2docfx/venv/venv1/Lib/site-packages/rsa/util.py +97 -97
- py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +0 -38
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_discovery.py +33 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/command/config.py +0 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +63 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +5 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_entry_points.py +4 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_normalization.py +0 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +12 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_scripts.py +361 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +6 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +25 -37
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +9 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +29 -28
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +39 -179
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +17 -2352
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +14 -31
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +0 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +3 -55
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +5 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/compat/py310.py +11 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +10 -12
- py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +34 -29
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/contexts.py +0 -14
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/fixtures.py +235 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +0 -24
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_develop.py +1 -64
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +0 -63
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +15 -41
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +12 -36
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +49 -24
- py2docfx/venv/venv1/Lib/site-packages/typing_extensions.py +380 -708
- py2docfx/venv/venv1/Lib/site-packages/urllib3/_version.py +9 -4
- py2docfx/venv/venv1/Lib/site-packages/urllib3/connection.py +87 -38
- py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +20 -0
- py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/emscripten/response.py +8 -16
- py2docfx/venv/venv1/Lib/site-packages/urllib3/contrib/pyopenssl.py +10 -0
- py2docfx/venv/venv1/Lib/site-packages/urllib3/exceptions.py +12 -4
- py2docfx/venv/venv1/Lib/site-packages/urllib3/http2/connection.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/urllib3/poolmanager.py +17 -1
- py2docfx/venv/venv1/Lib/site-packages/urllib3/py.typed +2 -0
- py2docfx/venv/venv1/Lib/site-packages/urllib3/response.py +53 -24
- py2docfx/venv/venv1/Lib/site-packages/urllib3/util/request.py +12 -4
- py2docfx/venv/venv1/Lib/site-packages/urllib3/util/ssl_.py +22 -2
- py2docfx/venv/venv1/Lib/site-packages/urllib3/util/ssl_match_hostname.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/wheel/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/wheel/__main__.py +7 -5
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/cli → venv1/Lib/site-packages/wheel/_commands}/__init__.py +3 -5
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/cli → venv1/Lib/site-packages/wheel/_commands}/convert.py +14 -9
- py2docfx/venv/{basevenv/Lib/site-packages/wheel/cli → venv1/Lib/site-packages/wheel/_commands}/pack.py +1 -2
- py2docfx/venv/venv1/Lib/site-packages/wheel/{cli → _commands}/tags.py +4 -3
- py2docfx/venv/venv1/Lib/site-packages/wheel/_metadata.py +184 -0
- py2docfx/venv/venv1/Lib/site-packages/wheel/bdist_wheel.py +12 -23
- py2docfx/venv/venv1/Lib/site-packages/wheel/macosx_libfile.py +4 -0
- py2docfx/venv/venv1/Lib/site-packages/wheel/metadata.py +17 -183
- py2docfx/venv/venv1/Lib/site-packages/wheel/wheelfile.py +30 -16
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/METADATA +2 -3
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/RECORD +588 -427
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/WHEEL +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/package_index.py +0 -1137
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/sandbox.py +0 -536
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/server.py +0 -86
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +0 -1476
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_packageindex.py +0 -267
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_sandbox.py +0 -134
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_bdist_wheel.py +0 -613
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_setuptools_logging.py +0 -26
- py2docfx/venv/basevenv/Lib/site-packages/wheel/util.py +0 -17
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/_manylinux.py +0 -260
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/_parser.py +0 -356
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/_tokenizer.py +0 -192
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/markers.py +0 -253
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/requirements.py +0 -90
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/specifiers.py +0 -1011
- py2docfx/venv/basevenv/Lib/site-packages/wheel/vendored/packaging/utils.py +0 -172
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/application.py +0 -119
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/application.py +0 -121
- py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +0 -1137
- py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +0 -536
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/server.py +0 -86
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +0 -1476
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +0 -267
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_sandbox.py +0 -134
- py2docfx/venv/venv1/Lib/site-packages/wheel/_bdist_wheel.py +0 -613
- py2docfx/venv/venv1/Lib/site-packages/wheel/_setuptools_logging.py +0 -26
- py2docfx/venv/venv1/Lib/site-packages/wheel/util.py +0 -17
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/_elffile.py +0 -108
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/_musllinux.py +0 -83
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/_structures.py +0 -61
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/tags.py +0 -571
- py2docfx/venv/venv1/Lib/site-packages/wheel/vendored/packaging/version.py +0 -561
- /py2docfx/venv/basevenv/Lib/site-packages/{wheel/vendored/__init__.py → certifi/py.typed} +0 -0
- /py2docfx/venv/basevenv/Lib/site-packages/{wheel/vendored/packaging/__init__.py → charset_normalizer/py.typed} +0 -0
- /py2docfx/venv/{venv1/Lib/site-packages/wheel/vendored/__init__.py → basevenv/Lib/site-packages/idna/py.typed} +0 -0
- /py2docfx/venv/{venv1/Lib/site-packages/wheel/vendored/packaging/__init__.py → basevenv/Lib/site-packages/jinja2/py.typed} +0 -0
- /py2docfx/venv/basevenv/Lib/site-packages/wheel/{cli → _commands}/unpack.py +0 -0
- /py2docfx/venv/{basevenv/Lib/site-packages/wheel/vendored → venv1/Lib/site-packages}/packaging/_structures.py +0 -0
- /py2docfx/venv/venv1/Lib/site-packages/wheel/{cli → _commands}/unpack.py +0 -0
- {py2docfx-0.1.16rc2051518.dist-info → py2docfx-0.1.17.dist-info}/top_level.txt +0 -0
@@ -1,1476 +0,0 @@
|
|
1
|
-
"""Easy install Tests"""
|
2
|
-
|
3
|
-
import contextlib
|
4
|
-
import io
|
5
|
-
import itertools
|
6
|
-
import logging
|
7
|
-
import os
|
8
|
-
import pathlib
|
9
|
-
import re
|
10
|
-
import site
|
11
|
-
import subprocess
|
12
|
-
import sys
|
13
|
-
import tarfile
|
14
|
-
import tempfile
|
15
|
-
import time
|
16
|
-
import warnings
|
17
|
-
import zipfile
|
18
|
-
from pathlib import Path
|
19
|
-
from typing import NamedTuple
|
20
|
-
from unittest import mock
|
21
|
-
|
22
|
-
import pytest
|
23
|
-
from jaraco import path
|
24
|
-
|
25
|
-
import pkg_resources
|
26
|
-
import setuptools.command.easy_install as ei
|
27
|
-
from pkg_resources import Distribution as PRDistribution, normalize_path, working_set
|
28
|
-
from setuptools import sandbox
|
29
|
-
from setuptools._normalization import safer_name
|
30
|
-
from setuptools.command.easy_install import PthDistributions
|
31
|
-
from setuptools.dist import Distribution
|
32
|
-
from setuptools.sandbox import run_setup
|
33
|
-
from setuptools.tests import fail_on_ascii
|
34
|
-
from setuptools.tests.server import MockServer, path_to_url
|
35
|
-
|
36
|
-
from . import contexts
|
37
|
-
from .textwrap import DALS
|
38
|
-
|
39
|
-
import distutils.errors
|
40
|
-
|
41
|
-
|
42
|
-
@pytest.fixture(autouse=True)
|
43
|
-
def pip_disable_index(monkeypatch):
|
44
|
-
"""
|
45
|
-
Important: Disable the default index for pip to avoid
|
46
|
-
querying packages in the index and potentially resolving
|
47
|
-
and installing packages there.
|
48
|
-
"""
|
49
|
-
monkeypatch.setenv('PIP_NO_INDEX', 'true')
|
50
|
-
|
51
|
-
|
52
|
-
class FakeDist:
|
53
|
-
def get_entry_map(self, group):
|
54
|
-
if group != 'console_scripts':
|
55
|
-
return {}
|
56
|
-
return {'name': 'ep'}
|
57
|
-
|
58
|
-
def as_requirement(self):
|
59
|
-
return 'spec'
|
60
|
-
|
61
|
-
|
62
|
-
SETUP_PY = DALS(
|
63
|
-
"""
|
64
|
-
from setuptools import setup
|
65
|
-
|
66
|
-
setup()
|
67
|
-
"""
|
68
|
-
)
|
69
|
-
|
70
|
-
|
71
|
-
class TestEasyInstallTest:
|
72
|
-
def test_get_script_args(self):
|
73
|
-
header = ei.CommandSpec.best().from_environment().as_header()
|
74
|
-
dist = FakeDist()
|
75
|
-
args = next(ei.ScriptWriter.get_args(dist))
|
76
|
-
_name, script = itertools.islice(args, 2)
|
77
|
-
assert script.startswith(header)
|
78
|
-
assert "'spec'" in script
|
79
|
-
assert "'console_scripts'" in script
|
80
|
-
assert "'name'" in script
|
81
|
-
assert re.search('^# EASY-INSTALL-ENTRY-SCRIPT', script, flags=re.MULTILINE)
|
82
|
-
|
83
|
-
def test_no_find_links(self):
|
84
|
-
# new option '--no-find-links', that blocks find-links added at
|
85
|
-
# the project level
|
86
|
-
dist = Distribution()
|
87
|
-
cmd = ei.easy_install(dist)
|
88
|
-
cmd.check_pth_processing = lambda: True
|
89
|
-
cmd.no_find_links = True
|
90
|
-
cmd.find_links = ['link1', 'link2']
|
91
|
-
cmd.install_dir = os.path.join(tempfile.mkdtemp(), 'ok')
|
92
|
-
cmd.args = ['ok']
|
93
|
-
cmd.ensure_finalized()
|
94
|
-
assert cmd.package_index.scanned_urls == {}
|
95
|
-
|
96
|
-
# let's try without it (default behavior)
|
97
|
-
cmd = ei.easy_install(dist)
|
98
|
-
cmd.check_pth_processing = lambda: True
|
99
|
-
cmd.find_links = ['link1', 'link2']
|
100
|
-
cmd.install_dir = os.path.join(tempfile.mkdtemp(), 'ok')
|
101
|
-
cmd.args = ['ok']
|
102
|
-
cmd.ensure_finalized()
|
103
|
-
keys = sorted(cmd.package_index.scanned_urls.keys())
|
104
|
-
assert keys == ['link1', 'link2']
|
105
|
-
|
106
|
-
def test_write_exception(self):
|
107
|
-
"""
|
108
|
-
Test that `cant_write_to_target` is rendered as a DistutilsError.
|
109
|
-
"""
|
110
|
-
dist = Distribution()
|
111
|
-
cmd = ei.easy_install(dist)
|
112
|
-
cmd.install_dir = os.getcwd()
|
113
|
-
with pytest.raises(distutils.errors.DistutilsError):
|
114
|
-
cmd.cant_write_to_target()
|
115
|
-
|
116
|
-
def test_all_site_dirs(self, monkeypatch):
|
117
|
-
"""
|
118
|
-
get_site_dirs should always return site dirs reported by
|
119
|
-
site.getsitepackages.
|
120
|
-
"""
|
121
|
-
path = normalize_path('/setuptools/test/site-packages')
|
122
|
-
|
123
|
-
def mock_gsp():
|
124
|
-
return [path]
|
125
|
-
|
126
|
-
monkeypatch.setattr(site, 'getsitepackages', mock_gsp, raising=False)
|
127
|
-
assert path in ei.get_site_dirs()
|
128
|
-
|
129
|
-
def test_all_site_dirs_works_without_getsitepackages(self, monkeypatch):
|
130
|
-
monkeypatch.delattr(site, 'getsitepackages', raising=False)
|
131
|
-
assert ei.get_site_dirs()
|
132
|
-
|
133
|
-
@pytest.fixture
|
134
|
-
def sdist_unicode(self, tmpdir):
|
135
|
-
files = [
|
136
|
-
(
|
137
|
-
'setup.py',
|
138
|
-
DALS(
|
139
|
-
"""
|
140
|
-
import setuptools
|
141
|
-
setuptools.setup(
|
142
|
-
name="setuptools-test-unicode",
|
143
|
-
version="1.0",
|
144
|
-
packages=["mypkg"],
|
145
|
-
include_package_data=True,
|
146
|
-
)
|
147
|
-
"""
|
148
|
-
),
|
149
|
-
),
|
150
|
-
(
|
151
|
-
'mypkg/__init__.py',
|
152
|
-
"",
|
153
|
-
),
|
154
|
-
(
|
155
|
-
'mypkg/☃.txt',
|
156
|
-
"",
|
157
|
-
),
|
158
|
-
]
|
159
|
-
sdist_name = 'setuptools-test-unicode-1.0.zip'
|
160
|
-
sdist = tmpdir / sdist_name
|
161
|
-
# can't use make_sdist, because the issue only occurs
|
162
|
-
# with zip sdists.
|
163
|
-
sdist_zip = zipfile.ZipFile(str(sdist), 'w')
|
164
|
-
for filename, content in files:
|
165
|
-
sdist_zip.writestr(filename, content)
|
166
|
-
sdist_zip.close()
|
167
|
-
return str(sdist)
|
168
|
-
|
169
|
-
@fail_on_ascii
|
170
|
-
def test_unicode_filename_in_sdist(self, sdist_unicode, tmpdir, monkeypatch):
|
171
|
-
"""
|
172
|
-
The install command should execute correctly even if
|
173
|
-
the package has unicode filenames.
|
174
|
-
"""
|
175
|
-
dist = Distribution({'script_args': ['easy_install']})
|
176
|
-
target = (tmpdir / 'target').ensure_dir()
|
177
|
-
cmd = ei.easy_install(
|
178
|
-
dist,
|
179
|
-
install_dir=str(target),
|
180
|
-
args=['x'],
|
181
|
-
)
|
182
|
-
monkeypatch.setitem(os.environ, 'PYTHONPATH', str(target))
|
183
|
-
cmd.ensure_finalized()
|
184
|
-
cmd.easy_install(sdist_unicode)
|
185
|
-
|
186
|
-
@pytest.fixture
|
187
|
-
def sdist_unicode_in_script(self, tmpdir):
|
188
|
-
files = [
|
189
|
-
(
|
190
|
-
"setup.py",
|
191
|
-
DALS(
|
192
|
-
"""
|
193
|
-
import setuptools
|
194
|
-
setuptools.setup(
|
195
|
-
name="setuptools-test-unicode",
|
196
|
-
version="1.0",
|
197
|
-
packages=["mypkg"],
|
198
|
-
include_package_data=True,
|
199
|
-
scripts=['mypkg/unicode_in_script'],
|
200
|
-
)
|
201
|
-
"""
|
202
|
-
),
|
203
|
-
),
|
204
|
-
("mypkg/__init__.py", ""),
|
205
|
-
(
|
206
|
-
"mypkg/unicode_in_script",
|
207
|
-
DALS(
|
208
|
-
"""
|
209
|
-
#!/bin/sh
|
210
|
-
# á
|
211
|
-
|
212
|
-
non_python_fn() {
|
213
|
-
}
|
214
|
-
"""
|
215
|
-
),
|
216
|
-
),
|
217
|
-
]
|
218
|
-
sdist_name = "setuptools-test-unicode-script-1.0.zip"
|
219
|
-
sdist = tmpdir / sdist_name
|
220
|
-
# can't use make_sdist, because the issue only occurs
|
221
|
-
# with zip sdists.
|
222
|
-
sdist_zip = zipfile.ZipFile(str(sdist), "w")
|
223
|
-
for filename, content in files:
|
224
|
-
sdist_zip.writestr(filename, content.encode('utf-8'))
|
225
|
-
sdist_zip.close()
|
226
|
-
return str(sdist)
|
227
|
-
|
228
|
-
@fail_on_ascii
|
229
|
-
def test_unicode_content_in_sdist(
|
230
|
-
self, sdist_unicode_in_script, tmpdir, monkeypatch
|
231
|
-
):
|
232
|
-
"""
|
233
|
-
The install command should execute correctly even if
|
234
|
-
the package has unicode in scripts.
|
235
|
-
"""
|
236
|
-
dist = Distribution({"script_args": ["easy_install"]})
|
237
|
-
target = (tmpdir / "target").ensure_dir()
|
238
|
-
cmd = ei.easy_install(dist, install_dir=str(target), args=["x"])
|
239
|
-
monkeypatch.setitem(os.environ, "PYTHONPATH", str(target))
|
240
|
-
cmd.ensure_finalized()
|
241
|
-
cmd.easy_install(sdist_unicode_in_script)
|
242
|
-
|
243
|
-
@pytest.fixture
|
244
|
-
def sdist_script(self, tmpdir):
|
245
|
-
files = [
|
246
|
-
(
|
247
|
-
'setup.py',
|
248
|
-
DALS(
|
249
|
-
"""
|
250
|
-
import setuptools
|
251
|
-
setuptools.setup(
|
252
|
-
name="setuptools-test-script",
|
253
|
-
version="1.0",
|
254
|
-
scripts=["mypkg_script"],
|
255
|
-
)
|
256
|
-
"""
|
257
|
-
),
|
258
|
-
),
|
259
|
-
(
|
260
|
-
'mypkg_script',
|
261
|
-
DALS(
|
262
|
-
"""
|
263
|
-
#/usr/bin/python
|
264
|
-
print('mypkg_script')
|
265
|
-
"""
|
266
|
-
),
|
267
|
-
),
|
268
|
-
]
|
269
|
-
sdist_name = 'setuptools-test-script-1.0.zip'
|
270
|
-
sdist = str(tmpdir / sdist_name)
|
271
|
-
make_sdist(sdist, files)
|
272
|
-
return sdist
|
273
|
-
|
274
|
-
@pytest.mark.skipif(
|
275
|
-
not sys.platform.startswith('linux'), reason="Test can only be run on Linux"
|
276
|
-
)
|
277
|
-
def test_script_install(self, sdist_script, tmpdir, monkeypatch):
|
278
|
-
"""
|
279
|
-
Check scripts are installed.
|
280
|
-
"""
|
281
|
-
dist = Distribution({'script_args': ['easy_install']})
|
282
|
-
target = (tmpdir / 'target').ensure_dir()
|
283
|
-
cmd = ei.easy_install(
|
284
|
-
dist,
|
285
|
-
install_dir=str(target),
|
286
|
-
args=['x'],
|
287
|
-
)
|
288
|
-
monkeypatch.setitem(os.environ, 'PYTHONPATH', str(target))
|
289
|
-
cmd.ensure_finalized()
|
290
|
-
cmd.easy_install(sdist_script)
|
291
|
-
assert (target / 'mypkg_script').exists()
|
292
|
-
|
293
|
-
|
294
|
-
@pytest.mark.filterwarnings('ignore:Unbuilt egg')
|
295
|
-
class TestPTHFileWriter:
|
296
|
-
def test_add_from_cwd_site_sets_dirty(self):
|
297
|
-
"""a pth file manager should set dirty
|
298
|
-
if a distribution is in site but also the cwd
|
299
|
-
"""
|
300
|
-
pth = PthDistributions('does-not_exist', [os.getcwd()])
|
301
|
-
assert not pth.dirty
|
302
|
-
pth.add(PRDistribution(os.getcwd()))
|
303
|
-
assert pth.dirty
|
304
|
-
|
305
|
-
def test_add_from_site_is_ignored(self):
|
306
|
-
location = '/test/location/does-not-have-to-exist'
|
307
|
-
# PthDistributions expects all locations to be normalized
|
308
|
-
location = pkg_resources.normalize_path(location)
|
309
|
-
pth = PthDistributions(
|
310
|
-
'does-not_exist',
|
311
|
-
[
|
312
|
-
location,
|
313
|
-
],
|
314
|
-
)
|
315
|
-
assert not pth.dirty
|
316
|
-
pth.add(PRDistribution(location))
|
317
|
-
assert not pth.dirty
|
318
|
-
|
319
|
-
def test_many_pth_distributions_merge_together(self, tmpdir):
|
320
|
-
"""
|
321
|
-
If the pth file is modified under the hood, then PthDistribution
|
322
|
-
will refresh its content before saving, merging contents when
|
323
|
-
necessary.
|
324
|
-
"""
|
325
|
-
# putting the pth file in a dedicated sub-folder,
|
326
|
-
pth_subdir = tmpdir.join("pth_subdir")
|
327
|
-
pth_subdir.mkdir()
|
328
|
-
pth_path = str(pth_subdir.join("file1.pth"))
|
329
|
-
pth1 = PthDistributions(pth_path)
|
330
|
-
pth2 = PthDistributions(pth_path)
|
331
|
-
assert pth1.paths == pth2.paths == [], (
|
332
|
-
"unless there would be some default added at some point"
|
333
|
-
)
|
334
|
-
# and so putting the src_subdir in folder distinct than the pth one,
|
335
|
-
# so to keep it absolute by PthDistributions
|
336
|
-
new_src_path = tmpdir.join("src_subdir")
|
337
|
-
new_src_path.mkdir() # must exist to be accounted
|
338
|
-
new_src_path_str = str(new_src_path)
|
339
|
-
pth1.paths.append(new_src_path_str)
|
340
|
-
pth1.save()
|
341
|
-
assert pth1.paths, (
|
342
|
-
"the new_src_path added must still be present/valid in pth1 after save"
|
343
|
-
)
|
344
|
-
# now,
|
345
|
-
assert new_src_path_str not in pth2.paths, (
|
346
|
-
"right before we save the entry should still not be present"
|
347
|
-
)
|
348
|
-
pth2.save()
|
349
|
-
assert new_src_path_str in pth2.paths, (
|
350
|
-
"the new_src_path entry should have been added by pth2 with its save() call"
|
351
|
-
)
|
352
|
-
assert pth2.paths[-1] == new_src_path, (
|
353
|
-
"and it should match exactly on the last entry actually "
|
354
|
-
"given we append to it in save()"
|
355
|
-
)
|
356
|
-
# finally,
|
357
|
-
assert PthDistributions(pth_path).paths == pth2.paths, (
|
358
|
-
"and we should have the exact same list at the end "
|
359
|
-
"with a fresh PthDistributions instance"
|
360
|
-
)
|
361
|
-
|
362
|
-
|
363
|
-
@pytest.fixture
|
364
|
-
def setup_context(tmpdir):
|
365
|
-
with (tmpdir / 'setup.py').open('w', encoding="utf-8") as f:
|
366
|
-
f.write(SETUP_PY)
|
367
|
-
with tmpdir.as_cwd():
|
368
|
-
yield tmpdir
|
369
|
-
|
370
|
-
|
371
|
-
@pytest.mark.usefixtures("user_override")
|
372
|
-
@pytest.mark.usefixtures("setup_context")
|
373
|
-
class TestUserInstallTest:
|
374
|
-
# prevent check that site-packages is writable. easy_install
|
375
|
-
# shouldn't be writing to system site-packages during finalize
|
376
|
-
# options, but while it does, bypass the behavior.
|
377
|
-
prev_sp_write = mock.patch(
|
378
|
-
'setuptools.command.easy_install.easy_install.check_site_dir',
|
379
|
-
mock.Mock(),
|
380
|
-
)
|
381
|
-
|
382
|
-
# simulate setuptools installed in user site packages
|
383
|
-
@mock.patch('setuptools.command.easy_install.__file__', site.USER_SITE)
|
384
|
-
@mock.patch('site.ENABLE_USER_SITE', True)
|
385
|
-
@prev_sp_write
|
386
|
-
def test_user_install_not_implied_user_site_enabled(self):
|
387
|
-
self.assert_not_user_site()
|
388
|
-
|
389
|
-
@mock.patch('site.ENABLE_USER_SITE', False)
|
390
|
-
@prev_sp_write
|
391
|
-
def test_user_install_not_implied_user_site_disabled(self):
|
392
|
-
self.assert_not_user_site()
|
393
|
-
|
394
|
-
@staticmethod
|
395
|
-
def assert_not_user_site():
|
396
|
-
# create a finalized easy_install command
|
397
|
-
dist = Distribution()
|
398
|
-
dist.script_name = 'setup.py'
|
399
|
-
cmd = ei.easy_install(dist)
|
400
|
-
cmd.args = ['py']
|
401
|
-
cmd.ensure_finalized()
|
402
|
-
assert not cmd.user, 'user should not be implied'
|
403
|
-
|
404
|
-
def test_multiproc_atexit(self):
|
405
|
-
pytest.importorskip('multiprocessing')
|
406
|
-
|
407
|
-
log = logging.getLogger('test_easy_install')
|
408
|
-
logging.basicConfig(level=logging.INFO, stream=sys.stderr)
|
409
|
-
log.info('this should not break')
|
410
|
-
|
411
|
-
@pytest.fixture
|
412
|
-
def foo_package(self, tmpdir):
|
413
|
-
egg_file = tmpdir / 'foo-1.0.egg-info'
|
414
|
-
with egg_file.open('w') as f:
|
415
|
-
f.write('Name: foo\n')
|
416
|
-
return str(tmpdir)
|
417
|
-
|
418
|
-
@pytest.fixture
|
419
|
-
def install_target(self, tmpdir):
|
420
|
-
target = str(tmpdir)
|
421
|
-
with mock.patch('sys.path', sys.path + [target]):
|
422
|
-
python_path = os.path.pathsep.join(sys.path)
|
423
|
-
with mock.patch.dict(os.environ, PYTHONPATH=python_path):
|
424
|
-
yield target
|
425
|
-
|
426
|
-
def test_local_index(self, foo_package, install_target):
|
427
|
-
"""
|
428
|
-
The local index must be used when easy_install locates installed
|
429
|
-
packages.
|
430
|
-
"""
|
431
|
-
dist = Distribution()
|
432
|
-
dist.script_name = 'setup.py'
|
433
|
-
cmd = ei.easy_install(dist)
|
434
|
-
cmd.install_dir = install_target
|
435
|
-
cmd.args = ['foo']
|
436
|
-
cmd.ensure_finalized()
|
437
|
-
cmd.local_index.scan([foo_package])
|
438
|
-
res = cmd.easy_install('foo')
|
439
|
-
actual = os.path.normcase(os.path.realpath(res.location))
|
440
|
-
expected = os.path.normcase(os.path.realpath(foo_package))
|
441
|
-
assert actual == expected
|
442
|
-
|
443
|
-
@contextlib.contextmanager
|
444
|
-
def user_install_setup_context(self, *args, **kwargs):
|
445
|
-
"""
|
446
|
-
Wrap sandbox.setup_context to patch easy_install in that context to
|
447
|
-
appear as user-installed.
|
448
|
-
"""
|
449
|
-
with self.orig_context(*args, **kwargs):
|
450
|
-
import setuptools.command.easy_install as ei
|
451
|
-
|
452
|
-
ei.__file__ = site.USER_SITE
|
453
|
-
yield
|
454
|
-
|
455
|
-
def patched_setup_context(self):
|
456
|
-
self.orig_context = sandbox.setup_context
|
457
|
-
|
458
|
-
return mock.patch(
|
459
|
-
'setuptools.sandbox.setup_context',
|
460
|
-
self.user_install_setup_context,
|
461
|
-
)
|
462
|
-
|
463
|
-
|
464
|
-
@pytest.fixture
|
465
|
-
def distutils_package():
|
466
|
-
distutils_setup_py = SETUP_PY.replace(
|
467
|
-
'from setuptools import setup',
|
468
|
-
'from distutils.core import setup',
|
469
|
-
)
|
470
|
-
with contexts.tempdir(cd=os.chdir):
|
471
|
-
with open('setup.py', 'w', encoding="utf-8") as f:
|
472
|
-
f.write(distutils_setup_py)
|
473
|
-
yield
|
474
|
-
|
475
|
-
|
476
|
-
@pytest.mark.usefixtures("distutils_package")
|
477
|
-
class TestDistutilsPackage:
|
478
|
-
def test_bdist_egg_available_on_distutils_pkg(self):
|
479
|
-
run_setup('setup.py', ['bdist_egg'])
|
480
|
-
|
481
|
-
|
482
|
-
@pytest.fixture
|
483
|
-
def mock_index():
|
484
|
-
# set up a server which will simulate an alternate package index.
|
485
|
-
p_index = MockServer()
|
486
|
-
if p_index.server_port == 0:
|
487
|
-
# Some platforms (Jython) don't find a port to which to bind,
|
488
|
-
# so skip test for them.
|
489
|
-
pytest.skip("could not find a valid port")
|
490
|
-
p_index.start()
|
491
|
-
return p_index
|
492
|
-
|
493
|
-
|
494
|
-
class TestInstallRequires:
|
495
|
-
def test_setup_install_includes_dependencies(self, tmp_path, mock_index):
|
496
|
-
"""
|
497
|
-
When ``python setup.py install`` is called directly, it will use easy_install
|
498
|
-
to fetch dependencies.
|
499
|
-
"""
|
500
|
-
# TODO: Remove these tests once `setup.py install` is completely removed
|
501
|
-
project_root = tmp_path / "project"
|
502
|
-
project_root.mkdir(exist_ok=True)
|
503
|
-
install_root = tmp_path / "install"
|
504
|
-
install_root.mkdir(exist_ok=True)
|
505
|
-
|
506
|
-
self.create_project(project_root)
|
507
|
-
cmd = [
|
508
|
-
sys.executable,
|
509
|
-
'-c',
|
510
|
-
'__import__("setuptools").setup()',
|
511
|
-
'install',
|
512
|
-
'--install-base',
|
513
|
-
str(install_root),
|
514
|
-
'--install-lib',
|
515
|
-
str(install_root),
|
516
|
-
'--install-headers',
|
517
|
-
str(install_root),
|
518
|
-
'--install-scripts',
|
519
|
-
str(install_root),
|
520
|
-
'--install-data',
|
521
|
-
str(install_root),
|
522
|
-
'--install-purelib',
|
523
|
-
str(install_root),
|
524
|
-
'--install-platlib',
|
525
|
-
str(install_root),
|
526
|
-
]
|
527
|
-
env = {**os.environ, "__EASYINSTALL_INDEX": mock_index.url}
|
528
|
-
cp = subprocess.run(
|
529
|
-
cmd,
|
530
|
-
cwd=str(project_root),
|
531
|
-
env=env,
|
532
|
-
stdout=subprocess.PIPE,
|
533
|
-
stderr=subprocess.STDOUT,
|
534
|
-
text=True,
|
535
|
-
encoding="utf-8",
|
536
|
-
)
|
537
|
-
assert cp.returncode != 0
|
538
|
-
try:
|
539
|
-
assert '/does-not-exist/' in {r.path for r in mock_index.requests}
|
540
|
-
assert next(
|
541
|
-
line
|
542
|
-
for line in cp.stdout.splitlines()
|
543
|
-
if "not find suitable distribution for" in line
|
544
|
-
and "does-not-exist" in line
|
545
|
-
)
|
546
|
-
except Exception:
|
547
|
-
if "failed to get random numbers" in cp.stdout:
|
548
|
-
pytest.xfail(f"{sys.platform} failure - {cp.stdout}")
|
549
|
-
raise
|
550
|
-
|
551
|
-
def create_project(self, root):
|
552
|
-
config = """
|
553
|
-
[metadata]
|
554
|
-
name = project
|
555
|
-
version = 42
|
556
|
-
|
557
|
-
[options]
|
558
|
-
install_requires = does-not-exist
|
559
|
-
py_modules = mod
|
560
|
-
"""
|
561
|
-
(root / 'setup.cfg').write_text(DALS(config), encoding="utf-8")
|
562
|
-
(root / 'mod.py').touch()
|
563
|
-
|
564
|
-
|
565
|
-
class TestSetupRequires:
|
566
|
-
def test_setup_requires_honors_fetch_params(self, mock_index, monkeypatch):
|
567
|
-
"""
|
568
|
-
When easy_install installs a source distribution which specifies
|
569
|
-
setup_requires, it should honor the fetch parameters (such as
|
570
|
-
index-url, and find-links).
|
571
|
-
"""
|
572
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
573
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
574
|
-
monkeypatch.setenv('PIP_NO_INDEX', 'false')
|
575
|
-
with contexts.quiet():
|
576
|
-
# create an sdist that has a build-time dependency.
|
577
|
-
with TestSetupRequires.create_sdist() as dist_file:
|
578
|
-
with contexts.tempdir() as temp_install_dir:
|
579
|
-
with contexts.environment(PYTHONPATH=temp_install_dir):
|
580
|
-
cmd = [
|
581
|
-
sys.executable,
|
582
|
-
'-c',
|
583
|
-
'__import__("setuptools").setup()',
|
584
|
-
'easy_install',
|
585
|
-
'--index-url',
|
586
|
-
mock_index.url,
|
587
|
-
'--exclude-scripts',
|
588
|
-
'--install-dir',
|
589
|
-
temp_install_dir,
|
590
|
-
dist_file,
|
591
|
-
]
|
592
|
-
subprocess.Popen(cmd).wait()
|
593
|
-
# there should have been one requests to the server
|
594
|
-
assert [r.path for r in mock_index.requests] == ['/does-not-exist/']
|
595
|
-
|
596
|
-
@staticmethod
|
597
|
-
@contextlib.contextmanager
|
598
|
-
def create_sdist():
|
599
|
-
"""
|
600
|
-
Return an sdist with a setup_requires dependency (of something that
|
601
|
-
doesn't exist)
|
602
|
-
"""
|
603
|
-
with contexts.tempdir() as dir:
|
604
|
-
dist_path = os.path.join(dir, 'setuptools-test-fetcher-1.0.tar.gz')
|
605
|
-
make_sdist(
|
606
|
-
dist_path,
|
607
|
-
[
|
608
|
-
(
|
609
|
-
'setup.py',
|
610
|
-
DALS(
|
611
|
-
"""
|
612
|
-
import setuptools
|
613
|
-
setuptools.setup(
|
614
|
-
name="setuptools-test-fetcher",
|
615
|
-
version="1.0",
|
616
|
-
setup_requires = ['does-not-exist'],
|
617
|
-
)
|
618
|
-
"""
|
619
|
-
),
|
620
|
-
),
|
621
|
-
('setup.cfg', ''),
|
622
|
-
],
|
623
|
-
)
|
624
|
-
yield dist_path
|
625
|
-
|
626
|
-
use_setup_cfg = (
|
627
|
-
(),
|
628
|
-
('dependency_links',),
|
629
|
-
('setup_requires',),
|
630
|
-
('dependency_links', 'setup_requires'),
|
631
|
-
)
|
632
|
-
|
633
|
-
@pytest.mark.parametrize('use_setup_cfg', use_setup_cfg)
|
634
|
-
def test_setup_requires_overrides_version_conflict(self, use_setup_cfg):
|
635
|
-
"""
|
636
|
-
Regression test for distribution issue 323:
|
637
|
-
https://bitbucket.org/tarek/distribute/issues/323
|
638
|
-
|
639
|
-
Ensures that a distribution's setup_requires requirements can still be
|
640
|
-
installed and used locally even if a conflicting version of that
|
641
|
-
requirement is already on the path.
|
642
|
-
"""
|
643
|
-
|
644
|
-
fake_dist = PRDistribution(
|
645
|
-
'does-not-matter', project_name='foobar', version='0.0'
|
646
|
-
)
|
647
|
-
working_set.add(fake_dist)
|
648
|
-
|
649
|
-
with contexts.save_pkg_resources_state():
|
650
|
-
with contexts.tempdir() as temp_dir:
|
651
|
-
test_pkg = create_setup_requires_package(
|
652
|
-
temp_dir, use_setup_cfg=use_setup_cfg
|
653
|
-
)
|
654
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
655
|
-
with contexts.quiet() as (stdout, _stderr):
|
656
|
-
# Don't even need to install the package, just
|
657
|
-
# running the setup.py at all is sufficient
|
658
|
-
run_setup(test_setup_py, ['--name'])
|
659
|
-
|
660
|
-
lines = stdout.readlines()
|
661
|
-
assert len(lines) > 0
|
662
|
-
assert lines[-1].strip() == 'test_pkg'
|
663
|
-
|
664
|
-
@pytest.mark.parametrize('use_setup_cfg', use_setup_cfg)
|
665
|
-
def test_setup_requires_override_nspkg(self, use_setup_cfg):
|
666
|
-
"""
|
667
|
-
Like ``test_setup_requires_overrides_version_conflict`` but where the
|
668
|
-
``setup_requires`` package is part of a namespace package that has
|
669
|
-
*already* been imported.
|
670
|
-
"""
|
671
|
-
|
672
|
-
with contexts.save_pkg_resources_state():
|
673
|
-
with contexts.tempdir() as temp_dir:
|
674
|
-
foobar_1_archive = os.path.join(temp_dir, 'foo_bar-0.1.tar.gz')
|
675
|
-
make_nspkg_sdist(foobar_1_archive, 'foo.bar', '0.1')
|
676
|
-
# Now actually go ahead an extract to the temp dir and add the
|
677
|
-
# extracted path to sys.path so foo.bar v0.1 is importable
|
678
|
-
foobar_1_dir = os.path.join(temp_dir, 'foo_bar-0.1')
|
679
|
-
os.mkdir(foobar_1_dir)
|
680
|
-
with tarfile.open(foobar_1_archive) as tf:
|
681
|
-
tf.extraction_filter = lambda member, path: member
|
682
|
-
tf.extractall(foobar_1_dir)
|
683
|
-
sys.path.insert(1, foobar_1_dir)
|
684
|
-
|
685
|
-
dist = PRDistribution(
|
686
|
-
foobar_1_dir, project_name='foo.bar', version='0.1'
|
687
|
-
)
|
688
|
-
working_set.add(dist)
|
689
|
-
|
690
|
-
template = DALS(
|
691
|
-
"""\
|
692
|
-
import foo # Even with foo imported first the
|
693
|
-
# setup_requires package should override
|
694
|
-
import setuptools
|
695
|
-
setuptools.setup(**%r)
|
696
|
-
|
697
|
-
if not (hasattr(foo, '__path__') and
|
698
|
-
len(foo.__path__) == 2):
|
699
|
-
print('FAIL')
|
700
|
-
|
701
|
-
if 'foo_bar-0.2' not in foo.__path__[0]:
|
702
|
-
print('FAIL')
|
703
|
-
"""
|
704
|
-
)
|
705
|
-
|
706
|
-
test_pkg = create_setup_requires_package(
|
707
|
-
temp_dir,
|
708
|
-
'foo.bar',
|
709
|
-
'0.2',
|
710
|
-
make_nspkg_sdist,
|
711
|
-
template,
|
712
|
-
use_setup_cfg=use_setup_cfg,
|
713
|
-
)
|
714
|
-
|
715
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
716
|
-
|
717
|
-
with contexts.quiet() as (stdout, _stderr):
|
718
|
-
try:
|
719
|
-
# Don't even need to install the package, just
|
720
|
-
# running the setup.py at all is sufficient
|
721
|
-
run_setup(test_setup_py, ['--name'])
|
722
|
-
except pkg_resources.VersionConflict: # pragma: nocover
|
723
|
-
pytest.fail(
|
724
|
-
'Installing setup.py requirements caused a VersionConflict'
|
725
|
-
)
|
726
|
-
|
727
|
-
assert 'FAIL' not in stdout.getvalue()
|
728
|
-
lines = stdout.readlines()
|
729
|
-
assert len(lines) > 0
|
730
|
-
assert lines[-1].strip() == 'test_pkg'
|
731
|
-
|
732
|
-
@pytest.mark.parametrize('use_setup_cfg', use_setup_cfg)
|
733
|
-
def test_setup_requires_with_attr_version(self, use_setup_cfg):
|
734
|
-
def make_dependency_sdist(dist_path, distname, version):
|
735
|
-
files = [
|
736
|
-
(
|
737
|
-
'setup.py',
|
738
|
-
DALS(
|
739
|
-
f"""
|
740
|
-
import setuptools
|
741
|
-
setuptools.setup(
|
742
|
-
name={distname!r},
|
743
|
-
version={version!r},
|
744
|
-
py_modules=[{distname!r}],
|
745
|
-
)
|
746
|
-
"""
|
747
|
-
),
|
748
|
-
),
|
749
|
-
(
|
750
|
-
distname + '.py',
|
751
|
-
DALS(
|
752
|
-
"""
|
753
|
-
version = 42
|
754
|
-
"""
|
755
|
-
),
|
756
|
-
),
|
757
|
-
]
|
758
|
-
make_sdist(dist_path, files)
|
759
|
-
|
760
|
-
with contexts.save_pkg_resources_state():
|
761
|
-
with contexts.tempdir() as temp_dir:
|
762
|
-
test_pkg = create_setup_requires_package(
|
763
|
-
temp_dir,
|
764
|
-
setup_attrs=dict(version='attr: foobar.version'),
|
765
|
-
make_package=make_dependency_sdist,
|
766
|
-
use_setup_cfg=use_setup_cfg + ('version',),
|
767
|
-
)
|
768
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
769
|
-
with contexts.quiet() as (stdout, _stderr):
|
770
|
-
run_setup(test_setup_py, ['--version'])
|
771
|
-
lines = stdout.readlines()
|
772
|
-
assert len(lines) > 0
|
773
|
-
assert lines[-1].strip() == '42'
|
774
|
-
|
775
|
-
def test_setup_requires_honors_pip_env(self, mock_index, monkeypatch):
|
776
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
777
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
778
|
-
monkeypatch.setenv('PIP_NO_INDEX', 'false')
|
779
|
-
monkeypatch.setenv('PIP_INDEX_URL', mock_index.url)
|
780
|
-
with contexts.save_pkg_resources_state():
|
781
|
-
with contexts.tempdir() as temp_dir:
|
782
|
-
test_pkg = create_setup_requires_package(
|
783
|
-
temp_dir,
|
784
|
-
'python-xlib',
|
785
|
-
'0.19',
|
786
|
-
setup_attrs=dict(dependency_links=[]),
|
787
|
-
)
|
788
|
-
test_setup_cfg = os.path.join(test_pkg, 'setup.cfg')
|
789
|
-
with open(test_setup_cfg, 'w', encoding="utf-8") as fp:
|
790
|
-
fp.write(
|
791
|
-
DALS(
|
792
|
-
"""
|
793
|
-
[easy_install]
|
794
|
-
index_url = https://pypi.org/legacy/
|
795
|
-
"""
|
796
|
-
)
|
797
|
-
)
|
798
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
799
|
-
with pytest.raises(distutils.errors.DistutilsError):
|
800
|
-
run_setup(test_setup_py, ['--version'])
|
801
|
-
assert len(mock_index.requests) == 1
|
802
|
-
assert mock_index.requests[0].path == '/python-xlib/'
|
803
|
-
|
804
|
-
def test_setup_requires_with_pep508_url(self, mock_index, monkeypatch):
|
805
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
806
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
807
|
-
monkeypatch.setenv('PIP_INDEX_URL', mock_index.url)
|
808
|
-
with contexts.save_pkg_resources_state():
|
809
|
-
with contexts.tempdir() as temp_dir:
|
810
|
-
dep_sdist = os.path.join(temp_dir, 'dep.tar.gz')
|
811
|
-
make_trivial_sdist(dep_sdist, 'dependency', '42')
|
812
|
-
dep_url = path_to_url(dep_sdist, authority='localhost')
|
813
|
-
test_pkg = create_setup_requires_package(
|
814
|
-
temp_dir,
|
815
|
-
# Ignored (overridden by setup_attrs)
|
816
|
-
'python-xlib',
|
817
|
-
'0.19',
|
818
|
-
setup_attrs=dict(setup_requires=f'dependency @ {dep_url}'),
|
819
|
-
)
|
820
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
821
|
-
run_setup(test_setup_py, ['--version'])
|
822
|
-
assert len(mock_index.requests) == 0
|
823
|
-
|
824
|
-
def test_setup_requires_with_allow_hosts(self, mock_index):
|
825
|
-
"""The `allow-hosts` option in not supported anymore."""
|
826
|
-
files = {
|
827
|
-
'test_pkg': {
|
828
|
-
'setup.py': DALS(
|
829
|
-
"""
|
830
|
-
from setuptools import setup
|
831
|
-
setup(setup_requires='python-xlib')
|
832
|
-
"""
|
833
|
-
),
|
834
|
-
'setup.cfg': DALS(
|
835
|
-
"""
|
836
|
-
[easy_install]
|
837
|
-
allow_hosts = *
|
838
|
-
"""
|
839
|
-
),
|
840
|
-
}
|
841
|
-
}
|
842
|
-
with contexts.save_pkg_resources_state():
|
843
|
-
with contexts.tempdir() as temp_dir:
|
844
|
-
path.build(files, prefix=temp_dir)
|
845
|
-
setup_py = str(pathlib.Path(temp_dir, 'test_pkg', 'setup.py'))
|
846
|
-
with pytest.raises(distutils.errors.DistutilsError):
|
847
|
-
run_setup(setup_py, ['--version'])
|
848
|
-
assert len(mock_index.requests) == 0
|
849
|
-
|
850
|
-
def test_setup_requires_with_python_requires(self, monkeypatch, tmpdir):
|
851
|
-
"""Check `python_requires` is honored."""
|
852
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
853
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
854
|
-
monkeypatch.setenv('PIP_NO_INDEX', '1')
|
855
|
-
monkeypatch.setenv('PIP_VERBOSE', '1')
|
856
|
-
dep_1_0_sdist = 'dep-1.0.tar.gz'
|
857
|
-
dep_1_0_url = path_to_url(str(tmpdir / dep_1_0_sdist))
|
858
|
-
dep_1_0_python_requires = '>=2.7'
|
859
|
-
make_python_requires_sdist(
|
860
|
-
str(tmpdir / dep_1_0_sdist), 'dep', '1.0', dep_1_0_python_requires
|
861
|
-
)
|
862
|
-
dep_2_0_sdist = 'dep-2.0.tar.gz'
|
863
|
-
dep_2_0_url = path_to_url(str(tmpdir / dep_2_0_sdist))
|
864
|
-
dep_2_0_python_requires = (
|
865
|
-
f'!={sys.version_info.major}.{sys.version_info.minor}.*'
|
866
|
-
)
|
867
|
-
make_python_requires_sdist(
|
868
|
-
str(tmpdir / dep_2_0_sdist), 'dep', '2.0', dep_2_0_python_requires
|
869
|
-
)
|
870
|
-
index = tmpdir / 'index.html'
|
871
|
-
index.write_text(
|
872
|
-
DALS(
|
873
|
-
"""
|
874
|
-
<!DOCTYPE html>
|
875
|
-
<html><head><title>Links for dep</title></head>
|
876
|
-
<body>
|
877
|
-
<h1>Links for dep</h1>
|
878
|
-
<a href="{dep_1_0_url}"\
|
879
|
-
data-requires-python="{dep_1_0_python_requires}">{dep_1_0_sdist}</a><br/>
|
880
|
-
<a href="{dep_2_0_url}"\
|
881
|
-
data-requires-python="{dep_2_0_python_requires}">{dep_2_0_sdist}</a><br/>
|
882
|
-
</body>
|
883
|
-
</html>
|
884
|
-
"""
|
885
|
-
).format(
|
886
|
-
dep_1_0_url=dep_1_0_url,
|
887
|
-
dep_1_0_sdist=dep_1_0_sdist,
|
888
|
-
dep_1_0_python_requires=dep_1_0_python_requires,
|
889
|
-
dep_2_0_url=dep_2_0_url,
|
890
|
-
dep_2_0_sdist=dep_2_0_sdist,
|
891
|
-
dep_2_0_python_requires=dep_2_0_python_requires,
|
892
|
-
),
|
893
|
-
'utf-8',
|
894
|
-
)
|
895
|
-
index_url = path_to_url(str(index))
|
896
|
-
with contexts.save_pkg_resources_state():
|
897
|
-
test_pkg = create_setup_requires_package(
|
898
|
-
str(tmpdir),
|
899
|
-
'python-xlib',
|
900
|
-
'0.19', # Ignored (overridden by setup_attrs).
|
901
|
-
setup_attrs=dict(setup_requires='dep', dependency_links=[index_url]),
|
902
|
-
)
|
903
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
904
|
-
run_setup(test_setup_py, ['--version'])
|
905
|
-
eggs = list(
|
906
|
-
map(str, pkg_resources.find_distributions(os.path.join(test_pkg, '.eggs')))
|
907
|
-
)
|
908
|
-
assert eggs == ['dep 1.0']
|
909
|
-
|
910
|
-
@pytest.mark.parametrize('with_dependency_links_in_setup_py', (False, True))
|
911
|
-
def test_setup_requires_with_find_links_in_setup_cfg(
|
912
|
-
self, monkeypatch, with_dependency_links_in_setup_py
|
913
|
-
):
|
914
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
915
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
916
|
-
with contexts.save_pkg_resources_state():
|
917
|
-
with contexts.tempdir() as temp_dir:
|
918
|
-
make_trivial_sdist(
|
919
|
-
os.path.join(temp_dir, 'python-xlib-42.tar.gz'), 'python-xlib', '42'
|
920
|
-
)
|
921
|
-
test_pkg = os.path.join(temp_dir, 'test_pkg')
|
922
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
923
|
-
test_setup_cfg = os.path.join(test_pkg, 'setup.cfg')
|
924
|
-
os.mkdir(test_pkg)
|
925
|
-
with open(test_setup_py, 'w', encoding="utf-8") as fp:
|
926
|
-
if with_dependency_links_in_setup_py:
|
927
|
-
dependency_links = [os.path.join(temp_dir, 'links')]
|
928
|
-
else:
|
929
|
-
dependency_links = []
|
930
|
-
fp.write(
|
931
|
-
DALS(
|
932
|
-
"""
|
933
|
-
from setuptools import installer, setup
|
934
|
-
setup(setup_requires='python-xlib==42',
|
935
|
-
dependency_links={dependency_links!r})
|
936
|
-
"""
|
937
|
-
).format(dependency_links=dependency_links)
|
938
|
-
)
|
939
|
-
with open(test_setup_cfg, 'w', encoding="utf-8") as fp:
|
940
|
-
fp.write(
|
941
|
-
DALS(
|
942
|
-
"""
|
943
|
-
[easy_install]
|
944
|
-
index_url = {index_url}
|
945
|
-
find_links = {find_links}
|
946
|
-
"""
|
947
|
-
).format(
|
948
|
-
index_url=os.path.join(temp_dir, 'index'),
|
949
|
-
find_links=temp_dir,
|
950
|
-
)
|
951
|
-
)
|
952
|
-
run_setup(test_setup_py, ['--version'])
|
953
|
-
|
954
|
-
def test_setup_requires_with_transitive_extra_dependency(self, monkeypatch):
|
955
|
-
"""
|
956
|
-
Use case: installing a package with a build dependency on
|
957
|
-
an already installed `dep[extra]`, which in turn depends
|
958
|
-
on `extra_dep` (whose is not already installed).
|
959
|
-
"""
|
960
|
-
with contexts.save_pkg_resources_state():
|
961
|
-
with contexts.tempdir() as temp_dir:
|
962
|
-
# Create source distribution for `extra_dep`.
|
963
|
-
make_trivial_sdist(
|
964
|
-
os.path.join(temp_dir, 'extra_dep-1.0.tar.gz'), 'extra_dep', '1.0'
|
965
|
-
)
|
966
|
-
# Create source tree for `dep`.
|
967
|
-
dep_pkg = os.path.join(temp_dir, 'dep')
|
968
|
-
os.mkdir(dep_pkg)
|
969
|
-
path.build(
|
970
|
-
{
|
971
|
-
'setup.py': DALS(
|
972
|
-
"""
|
973
|
-
import setuptools
|
974
|
-
setuptools.setup(
|
975
|
-
name='dep', version='2.0',
|
976
|
-
extras_require={'extra': ['extra_dep']},
|
977
|
-
)
|
978
|
-
"""
|
979
|
-
),
|
980
|
-
'setup.cfg': '',
|
981
|
-
},
|
982
|
-
prefix=dep_pkg,
|
983
|
-
)
|
984
|
-
# "Install" dep.
|
985
|
-
run_setup(os.path.join(dep_pkg, 'setup.py'), ['dist_info'])
|
986
|
-
working_set.add_entry(dep_pkg)
|
987
|
-
# Create source tree for test package.
|
988
|
-
test_pkg = os.path.join(temp_dir, 'test_pkg')
|
989
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
990
|
-
os.mkdir(test_pkg)
|
991
|
-
with open(test_setup_py, 'w', encoding="utf-8") as fp:
|
992
|
-
fp.write(
|
993
|
-
DALS(
|
994
|
-
"""
|
995
|
-
from setuptools import installer, setup
|
996
|
-
setup(setup_requires='dep[extra]')
|
997
|
-
"""
|
998
|
-
)
|
999
|
-
)
|
1000
|
-
# Check...
|
1001
|
-
monkeypatch.setenv('PIP_FIND_LINKS', str(temp_dir))
|
1002
|
-
monkeypatch.setenv('PIP_NO_INDEX', '1')
|
1003
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
1004
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
1005
|
-
run_setup(test_setup_py, ['--version'])
|
1006
|
-
|
1007
|
-
def test_setup_requires_with_distutils_command_dep(self, monkeypatch):
|
1008
|
-
"""
|
1009
|
-
Use case: ensure build requirements' extras
|
1010
|
-
are properly installed and activated.
|
1011
|
-
"""
|
1012
|
-
with contexts.save_pkg_resources_state():
|
1013
|
-
with contexts.tempdir() as temp_dir:
|
1014
|
-
# Create source distribution for `extra_dep`.
|
1015
|
-
make_sdist(
|
1016
|
-
os.path.join(temp_dir, 'extra_dep-1.0.tar.gz'),
|
1017
|
-
[
|
1018
|
-
(
|
1019
|
-
'setup.py',
|
1020
|
-
DALS(
|
1021
|
-
"""
|
1022
|
-
import setuptools
|
1023
|
-
setuptools.setup(
|
1024
|
-
name='extra_dep',
|
1025
|
-
version='1.0',
|
1026
|
-
py_modules=['extra_dep'],
|
1027
|
-
)
|
1028
|
-
"""
|
1029
|
-
),
|
1030
|
-
),
|
1031
|
-
('setup.cfg', ''),
|
1032
|
-
('extra_dep.py', ''),
|
1033
|
-
],
|
1034
|
-
)
|
1035
|
-
# Create source tree for `epdep`.
|
1036
|
-
dep_pkg = os.path.join(temp_dir, 'epdep')
|
1037
|
-
os.mkdir(dep_pkg)
|
1038
|
-
path.build(
|
1039
|
-
{
|
1040
|
-
'setup.py': DALS(
|
1041
|
-
"""
|
1042
|
-
import setuptools
|
1043
|
-
setuptools.setup(
|
1044
|
-
name='dep', version='2.0',
|
1045
|
-
py_modules=['epcmd'],
|
1046
|
-
extras_require={'extra': ['extra_dep']},
|
1047
|
-
entry_points='''
|
1048
|
-
[distutils.commands]
|
1049
|
-
epcmd = epcmd:epcmd [extra]
|
1050
|
-
''',
|
1051
|
-
)
|
1052
|
-
"""
|
1053
|
-
),
|
1054
|
-
'setup.cfg': '',
|
1055
|
-
'epcmd.py': DALS(
|
1056
|
-
"""
|
1057
|
-
from distutils.command.build_py import build_py
|
1058
|
-
|
1059
|
-
import extra_dep
|
1060
|
-
|
1061
|
-
class epcmd(build_py):
|
1062
|
-
pass
|
1063
|
-
"""
|
1064
|
-
),
|
1065
|
-
},
|
1066
|
-
prefix=dep_pkg,
|
1067
|
-
)
|
1068
|
-
# "Install" dep.
|
1069
|
-
run_setup(os.path.join(dep_pkg, 'setup.py'), ['dist_info'])
|
1070
|
-
working_set.add_entry(dep_pkg)
|
1071
|
-
# Create source tree for test package.
|
1072
|
-
test_pkg = os.path.join(temp_dir, 'test_pkg')
|
1073
|
-
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
1074
|
-
os.mkdir(test_pkg)
|
1075
|
-
with open(test_setup_py, 'w', encoding="utf-8") as fp:
|
1076
|
-
fp.write(
|
1077
|
-
DALS(
|
1078
|
-
"""
|
1079
|
-
from setuptools import installer, setup
|
1080
|
-
setup(setup_requires='dep[extra]')
|
1081
|
-
"""
|
1082
|
-
)
|
1083
|
-
)
|
1084
|
-
# Check...
|
1085
|
-
monkeypatch.setenv('PIP_FIND_LINKS', str(temp_dir))
|
1086
|
-
monkeypatch.setenv('PIP_NO_INDEX', '1')
|
1087
|
-
monkeypatch.setenv('PIP_RETRIES', '0')
|
1088
|
-
monkeypatch.setenv('PIP_TIMEOUT', '0')
|
1089
|
-
run_setup(test_setup_py, ['epcmd'])
|
1090
|
-
|
1091
|
-
|
1092
|
-
def make_trivial_sdist(dist_path, distname, version):
|
1093
|
-
"""
|
1094
|
-
Create a simple sdist tarball at dist_path, containing just a simple
|
1095
|
-
setup.py.
|
1096
|
-
"""
|
1097
|
-
|
1098
|
-
make_sdist(
|
1099
|
-
dist_path,
|
1100
|
-
[
|
1101
|
-
(
|
1102
|
-
'setup.py',
|
1103
|
-
DALS(
|
1104
|
-
f"""\
|
1105
|
-
import setuptools
|
1106
|
-
setuptools.setup(
|
1107
|
-
name={distname!r},
|
1108
|
-
version={version!r}
|
1109
|
-
)
|
1110
|
-
"""
|
1111
|
-
),
|
1112
|
-
),
|
1113
|
-
('setup.cfg', ''),
|
1114
|
-
],
|
1115
|
-
)
|
1116
|
-
|
1117
|
-
|
1118
|
-
def make_nspkg_sdist(dist_path, distname, version):
|
1119
|
-
"""
|
1120
|
-
Make an sdist tarball with distname and version which also contains one
|
1121
|
-
package with the same name as distname. The top-level package is
|
1122
|
-
designated a namespace package).
|
1123
|
-
"""
|
1124
|
-
# Assert that the distname contains at least one period
|
1125
|
-
assert '.' in distname
|
1126
|
-
|
1127
|
-
parts = distname.split('.')
|
1128
|
-
nspackage = parts[0]
|
1129
|
-
|
1130
|
-
packages = ['.'.join(parts[:idx]) for idx in range(1, len(parts) + 1)]
|
1131
|
-
|
1132
|
-
setup_py = DALS(
|
1133
|
-
f"""\
|
1134
|
-
import setuptools
|
1135
|
-
setuptools.setup(
|
1136
|
-
name={distname!r},
|
1137
|
-
version={version!r},
|
1138
|
-
packages={packages!r},
|
1139
|
-
namespace_packages=[{nspackage!r}]
|
1140
|
-
)
|
1141
|
-
"""
|
1142
|
-
)
|
1143
|
-
|
1144
|
-
init = "__import__('pkg_resources').declare_namespace(__name__)"
|
1145
|
-
|
1146
|
-
files = [('setup.py', setup_py), (os.path.join(nspackage, '__init__.py'), init)]
|
1147
|
-
for package in packages[1:]:
|
1148
|
-
filename = os.path.join(*(package.split('.') + ['__init__.py']))
|
1149
|
-
files.append((filename, ''))
|
1150
|
-
|
1151
|
-
make_sdist(dist_path, files)
|
1152
|
-
|
1153
|
-
|
1154
|
-
def make_python_requires_sdist(dist_path, distname, version, python_requires):
|
1155
|
-
make_sdist(
|
1156
|
-
dist_path,
|
1157
|
-
[
|
1158
|
-
(
|
1159
|
-
'setup.py',
|
1160
|
-
DALS(
|
1161
|
-
"""\
|
1162
|
-
import setuptools
|
1163
|
-
setuptools.setup(
|
1164
|
-
name={name!r},
|
1165
|
-
version={version!r},
|
1166
|
-
python_requires={python_requires!r},
|
1167
|
-
)
|
1168
|
-
"""
|
1169
|
-
).format(
|
1170
|
-
name=distname, version=version, python_requires=python_requires
|
1171
|
-
),
|
1172
|
-
),
|
1173
|
-
('setup.cfg', ''),
|
1174
|
-
],
|
1175
|
-
)
|
1176
|
-
|
1177
|
-
|
1178
|
-
def make_sdist(dist_path, files):
|
1179
|
-
"""
|
1180
|
-
Create a simple sdist tarball at dist_path, containing the files
|
1181
|
-
listed in ``files`` as ``(filename, content)`` tuples.
|
1182
|
-
"""
|
1183
|
-
|
1184
|
-
# Distributions with only one file don't play well with pip.
|
1185
|
-
assert len(files) > 1
|
1186
|
-
with tarfile.open(dist_path, 'w:gz') as dist:
|
1187
|
-
for filename, content in files:
|
1188
|
-
file_bytes = io.BytesIO(content.encode('utf-8'))
|
1189
|
-
file_info = tarfile.TarInfo(name=filename)
|
1190
|
-
file_info.size = len(file_bytes.getvalue())
|
1191
|
-
file_info.mtime = int(time.time())
|
1192
|
-
dist.addfile(file_info, fileobj=file_bytes)
|
1193
|
-
|
1194
|
-
|
1195
|
-
def create_setup_requires_package(
|
1196
|
-
path,
|
1197
|
-
distname='foobar',
|
1198
|
-
version='0.1',
|
1199
|
-
make_package=make_trivial_sdist,
|
1200
|
-
setup_py_template=None,
|
1201
|
-
setup_attrs=None,
|
1202
|
-
use_setup_cfg=(),
|
1203
|
-
):
|
1204
|
-
"""Creates a source tree under path for a trivial test package that has a
|
1205
|
-
single requirement in setup_requires--a tarball for that requirement is
|
1206
|
-
also created and added to the dependency_links argument.
|
1207
|
-
|
1208
|
-
``distname`` and ``version`` refer to the name/version of the package that
|
1209
|
-
the test package requires via ``setup_requires``. The name of the test
|
1210
|
-
package itself is just 'test_pkg'.
|
1211
|
-
"""
|
1212
|
-
|
1213
|
-
normalized_distname = safer_name(distname)
|
1214
|
-
test_setup_attrs = {
|
1215
|
-
'name': 'test_pkg',
|
1216
|
-
'version': '0.0',
|
1217
|
-
'setup_requires': [f'{normalized_distname}=={version}'],
|
1218
|
-
'dependency_links': [os.path.abspath(path)],
|
1219
|
-
}
|
1220
|
-
if setup_attrs:
|
1221
|
-
test_setup_attrs.update(setup_attrs)
|
1222
|
-
|
1223
|
-
test_pkg = os.path.join(path, 'test_pkg')
|
1224
|
-
os.mkdir(test_pkg)
|
1225
|
-
|
1226
|
-
# setup.cfg
|
1227
|
-
if use_setup_cfg:
|
1228
|
-
options = []
|
1229
|
-
metadata = []
|
1230
|
-
for name in use_setup_cfg:
|
1231
|
-
value = test_setup_attrs.pop(name)
|
1232
|
-
if name in 'name version'.split():
|
1233
|
-
section = metadata
|
1234
|
-
else:
|
1235
|
-
section = options
|
1236
|
-
if isinstance(value, (tuple, list)):
|
1237
|
-
value = ';'.join(value)
|
1238
|
-
section.append(f'{name}: {value}')
|
1239
|
-
test_setup_cfg_contents = DALS(
|
1240
|
-
"""
|
1241
|
-
[metadata]
|
1242
|
-
{metadata}
|
1243
|
-
[options]
|
1244
|
-
{options}
|
1245
|
-
"""
|
1246
|
-
).format(
|
1247
|
-
options='\n'.join(options),
|
1248
|
-
metadata='\n'.join(metadata),
|
1249
|
-
)
|
1250
|
-
else:
|
1251
|
-
test_setup_cfg_contents = ''
|
1252
|
-
with open(os.path.join(test_pkg, 'setup.cfg'), 'w', encoding="utf-8") as f:
|
1253
|
-
f.write(test_setup_cfg_contents)
|
1254
|
-
|
1255
|
-
# setup.py
|
1256
|
-
if setup_py_template is None:
|
1257
|
-
setup_py_template = DALS(
|
1258
|
-
"""\
|
1259
|
-
import setuptools
|
1260
|
-
setuptools.setup(**%r)
|
1261
|
-
"""
|
1262
|
-
)
|
1263
|
-
with open(os.path.join(test_pkg, 'setup.py'), 'w', encoding="utf-8") as f:
|
1264
|
-
f.write(setup_py_template % test_setup_attrs)
|
1265
|
-
|
1266
|
-
foobar_path = os.path.join(path, f'{normalized_distname}-{version}.tar.gz')
|
1267
|
-
make_package(foobar_path, distname, version)
|
1268
|
-
|
1269
|
-
return test_pkg
|
1270
|
-
|
1271
|
-
|
1272
|
-
@pytest.mark.skipif(
|
1273
|
-
sys.platform.startswith('java') and ei.is_sh(sys.executable),
|
1274
|
-
reason="Test cannot run under java when executable is sh",
|
1275
|
-
)
|
1276
|
-
class TestScriptHeader:
|
1277
|
-
non_ascii_exe = '/Users/José/bin/python'
|
1278
|
-
exe_with_spaces = r'C:\Program Files\Python36\python.exe'
|
1279
|
-
|
1280
|
-
def test_get_script_header(self):
|
1281
|
-
expected = f'#!{ei.nt_quote_arg(os.path.normpath(sys.executable))}\n'
|
1282
|
-
actual = ei.ScriptWriter.get_header('#!/usr/local/bin/python')
|
1283
|
-
assert actual == expected
|
1284
|
-
|
1285
|
-
def test_get_script_header_args(self):
|
1286
|
-
expected = f'#!{ei.nt_quote_arg(os.path.normpath(sys.executable))} -x\n'
|
1287
|
-
actual = ei.ScriptWriter.get_header('#!/usr/bin/python -x')
|
1288
|
-
assert actual == expected
|
1289
|
-
|
1290
|
-
def test_get_script_header_non_ascii_exe(self):
|
1291
|
-
actual = ei.ScriptWriter.get_header(
|
1292
|
-
'#!/usr/bin/python', executable=self.non_ascii_exe
|
1293
|
-
)
|
1294
|
-
expected = f'#!{self.non_ascii_exe} -x\n'
|
1295
|
-
assert actual == expected
|
1296
|
-
|
1297
|
-
def test_get_script_header_exe_with_spaces(self):
|
1298
|
-
actual = ei.ScriptWriter.get_header(
|
1299
|
-
'#!/usr/bin/python', executable='"' + self.exe_with_spaces + '"'
|
1300
|
-
)
|
1301
|
-
expected = f'#!"{self.exe_with_spaces}"\n'
|
1302
|
-
assert actual == expected
|
1303
|
-
|
1304
|
-
|
1305
|
-
class TestCommandSpec:
|
1306
|
-
def test_custom_launch_command(self):
|
1307
|
-
"""
|
1308
|
-
Show how a custom CommandSpec could be used to specify a #! executable
|
1309
|
-
which takes parameters.
|
1310
|
-
"""
|
1311
|
-
cmd = ei.CommandSpec(['/usr/bin/env', 'python3'])
|
1312
|
-
assert cmd.as_header() == '#!/usr/bin/env python3\n'
|
1313
|
-
|
1314
|
-
def test_from_param_for_CommandSpec_is_passthrough(self):
|
1315
|
-
"""
|
1316
|
-
from_param should return an instance of a CommandSpec
|
1317
|
-
"""
|
1318
|
-
cmd = ei.CommandSpec(['python'])
|
1319
|
-
cmd_new = ei.CommandSpec.from_param(cmd)
|
1320
|
-
assert cmd is cmd_new
|
1321
|
-
|
1322
|
-
@mock.patch('sys.executable', TestScriptHeader.exe_with_spaces)
|
1323
|
-
@mock.patch.dict(os.environ)
|
1324
|
-
def test_from_environment_with_spaces_in_executable(self):
|
1325
|
-
os.environ.pop('__PYVENV_LAUNCHER__', None)
|
1326
|
-
cmd = ei.CommandSpec.from_environment()
|
1327
|
-
assert len(cmd) == 1
|
1328
|
-
assert cmd.as_header().startswith('#!"')
|
1329
|
-
|
1330
|
-
def test_from_simple_string_uses_shlex(self):
|
1331
|
-
"""
|
1332
|
-
In order to support `executable = /usr/bin/env my-python`, make sure
|
1333
|
-
from_param invokes shlex on that input.
|
1334
|
-
"""
|
1335
|
-
cmd = ei.CommandSpec.from_param('/usr/bin/env my-python')
|
1336
|
-
assert len(cmd) == 2
|
1337
|
-
assert '"' not in cmd.as_header()
|
1338
|
-
|
1339
|
-
def test_from_param_raises_expected_error(self) -> None:
|
1340
|
-
"""
|
1341
|
-
from_param should raise its own TypeError when the argument's type is unsupported
|
1342
|
-
"""
|
1343
|
-
with pytest.raises(TypeError) as exc_info:
|
1344
|
-
ei.CommandSpec.from_param(object()) # type: ignore[arg-type] # We want a type error here
|
1345
|
-
assert (
|
1346
|
-
str(exc_info.value) == "Argument has an unsupported type <class 'object'>"
|
1347
|
-
), exc_info.value
|
1348
|
-
|
1349
|
-
|
1350
|
-
class TestWindowsScriptWriter:
|
1351
|
-
def test_header(self):
|
1352
|
-
hdr = ei.WindowsScriptWriter.get_header('')
|
1353
|
-
assert hdr.startswith('#!')
|
1354
|
-
assert hdr.endswith('\n')
|
1355
|
-
hdr = hdr.lstrip('#!')
|
1356
|
-
hdr = hdr.rstrip('\n')
|
1357
|
-
# header should not start with an escaped quote
|
1358
|
-
assert not hdr.startswith('\\"')
|
1359
|
-
|
1360
|
-
|
1361
|
-
class VersionStub(NamedTuple):
|
1362
|
-
major: int
|
1363
|
-
minor: int
|
1364
|
-
micro: int
|
1365
|
-
releaselevel: str
|
1366
|
-
serial: int
|
1367
|
-
|
1368
|
-
|
1369
|
-
def test_use_correct_python_version_string(tmpdir, tmpdir_cwd, monkeypatch):
|
1370
|
-
# In issue #3001, easy_install wrongly uses the `python3.1` directory
|
1371
|
-
# when the interpreter is `python3.10` and the `--user` option is given.
|
1372
|
-
# See pypa/setuptools#3001.
|
1373
|
-
dist = Distribution()
|
1374
|
-
cmd = dist.get_command_obj('easy_install')
|
1375
|
-
cmd.args = ['ok']
|
1376
|
-
cmd.optimize = 0
|
1377
|
-
cmd.user = True
|
1378
|
-
cmd.install_userbase = str(tmpdir)
|
1379
|
-
cmd.install_usersite = None
|
1380
|
-
install_cmd = dist.get_command_obj('install')
|
1381
|
-
install_cmd.install_userbase = str(tmpdir)
|
1382
|
-
install_cmd.install_usersite = None
|
1383
|
-
|
1384
|
-
with monkeypatch.context() as patch, warnings.catch_warnings():
|
1385
|
-
warnings.simplefilter("ignore")
|
1386
|
-
version = '3.10.1 (main, Dec 21 2021, 09:17:12) [GCC 10.2.1 20210110]'
|
1387
|
-
info = VersionStub(3, 10, 1, "final", 0)
|
1388
|
-
patch.setattr('site.ENABLE_USER_SITE', True)
|
1389
|
-
patch.setattr('sys.version', version)
|
1390
|
-
patch.setattr('sys.version_info', info)
|
1391
|
-
patch.setattr(cmd, 'create_home_path', mock.Mock())
|
1392
|
-
cmd.finalize_options()
|
1393
|
-
|
1394
|
-
name = "pypy" if hasattr(sys, 'pypy_version_info') else "python"
|
1395
|
-
install_dir = cmd.install_dir.lower()
|
1396
|
-
|
1397
|
-
# In some platforms (e.g. Windows), install_dir is mostly determined
|
1398
|
-
# via `sysconfig`, which define constants eagerly at module creation.
|
1399
|
-
# This means that monkeypatching `sys.version` to emulate 3.10 for testing
|
1400
|
-
# may have no effect.
|
1401
|
-
# The safest test here is to rely on the fact that 3.1 is no longer
|
1402
|
-
# supported/tested, and make sure that if 'python3.1' ever appears in the string
|
1403
|
-
# it is followed by another digit (e.g. 'python3.10').
|
1404
|
-
if re.search(name + r'3\.?1', install_dir):
|
1405
|
-
assert re.search(name + r'3\.?1\d', install_dir)
|
1406
|
-
|
1407
|
-
# The following "variables" are used for interpolation in distutils
|
1408
|
-
# installation schemes, so it should be fair to treat them as "semi-public",
|
1409
|
-
# or at least public enough so we can have a test to make sure they are correct
|
1410
|
-
assert cmd.config_vars['py_version'] == '3.10.1'
|
1411
|
-
assert cmd.config_vars['py_version_short'] == '3.10'
|
1412
|
-
assert cmd.config_vars['py_version_nodot'] == '310'
|
1413
|
-
|
1414
|
-
|
1415
|
-
@pytest.mark.xfail(
|
1416
|
-
sys.platform == "darwin",
|
1417
|
-
reason="https://github.com/pypa/setuptools/pull/4716#issuecomment-2447624418",
|
1418
|
-
)
|
1419
|
-
def test_editable_user_and_build_isolation(setup_context, monkeypatch, tmp_path):
|
1420
|
-
"""`setup.py develop` should honor `--user` even under build isolation"""
|
1421
|
-
|
1422
|
-
# == Arrange ==
|
1423
|
-
# Pretend that build isolation was enabled
|
1424
|
-
# e.g pip sets the environment variable PYTHONNOUSERSITE=1
|
1425
|
-
monkeypatch.setattr('site.ENABLE_USER_SITE', False)
|
1426
|
-
|
1427
|
-
# Patching $HOME for 2 reasons:
|
1428
|
-
# 1. setuptools/command/easy_install.py:create_home_path
|
1429
|
-
# tries creating directories in $HOME.
|
1430
|
-
# Given::
|
1431
|
-
# self.config_vars['DESTDIRS'] = (
|
1432
|
-
# "/home/user/.pyenv/versions/3.9.10 "
|
1433
|
-
# "/home/user/.pyenv/versions/3.9.10/lib "
|
1434
|
-
# "/home/user/.pyenv/versions/3.9.10/lib/python3.9 "
|
1435
|
-
# "/home/user/.pyenv/versions/3.9.10/lib/python3.9/lib-dynload")
|
1436
|
-
# `create_home_path` will::
|
1437
|
-
# makedirs(
|
1438
|
-
# "/home/user/.pyenv/versions/3.9.10 "
|
1439
|
-
# "/home/user/.pyenv/versions/3.9.10/lib "
|
1440
|
-
# "/home/user/.pyenv/versions/3.9.10/lib/python3.9 "
|
1441
|
-
# "/home/user/.pyenv/versions/3.9.10/lib/python3.9/lib-dynload")
|
1442
|
-
#
|
1443
|
-
# 2. We are going to force `site` to update site.USER_BASE and site.USER_SITE
|
1444
|
-
# To point inside our new home
|
1445
|
-
monkeypatch.setenv('HOME', str(tmp_path / '.home'))
|
1446
|
-
monkeypatch.setenv('USERPROFILE', str(tmp_path / '.home'))
|
1447
|
-
monkeypatch.setenv('APPDATA', str(tmp_path / '.home'))
|
1448
|
-
monkeypatch.setattr('site.USER_BASE', None)
|
1449
|
-
monkeypatch.setattr('site.USER_SITE', None)
|
1450
|
-
user_site = Path(site.getusersitepackages())
|
1451
|
-
user_site.mkdir(parents=True, exist_ok=True)
|
1452
|
-
|
1453
|
-
sys_prefix = tmp_path / '.sys_prefix'
|
1454
|
-
sys_prefix.mkdir(parents=True, exist_ok=True)
|
1455
|
-
monkeypatch.setattr('sys.prefix', str(sys_prefix))
|
1456
|
-
|
1457
|
-
setup_script = (
|
1458
|
-
"__import__('setuptools').setup(name='aproj', version=42, packages=[])\n"
|
1459
|
-
)
|
1460
|
-
(tmp_path / "setup.py").write_text(setup_script, encoding="utf-8")
|
1461
|
-
|
1462
|
-
# == Sanity check ==
|
1463
|
-
assert list(sys_prefix.glob("*")) == []
|
1464
|
-
assert list(user_site.glob("*")) == []
|
1465
|
-
|
1466
|
-
# == Act ==
|
1467
|
-
run_setup('setup.py', ['develop', '--user'])
|
1468
|
-
|
1469
|
-
# == Assert ==
|
1470
|
-
# Should not install to sys.prefix
|
1471
|
-
assert list(sys_prefix.glob("*")) == []
|
1472
|
-
# Should install to user site
|
1473
|
-
installed = {f.name for f in user_site.glob("*")}
|
1474
|
-
# sometimes easy-install.pth is created and sometimes not
|
1475
|
-
installed = installed - {"easy-install.pth"}
|
1476
|
-
assert installed == {'aproj.egg-link'}
|