py2docfx 0.1.9.dev1897607__py3-none-any.whl → 0.1.9.dev1926139__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- py2docfx/__main__.py +77 -22
- py2docfx/convert_prepare/environment.py +59 -19
- py2docfx/convert_prepare/generate_document.py +12 -5
- py2docfx/convert_prepare/get_source.py +5 -1
- py2docfx/convert_prepare/git.py +24 -20
- py2docfx/convert_prepare/package_info.py +15 -9
- py2docfx/convert_prepare/pip_utils.py +29 -8
- py2docfx/convert_prepare/post_process/merge_toc.py +5 -1
- py2docfx/convert_prepare/sphinx_caller.py +31 -14
- py2docfx/convert_prepare/tests/test_generate_document.py +6 -4
- py2docfx/convert_prepare/tests/test_get_source.py +6 -6
- py2docfx/convert_prepare/tests/test_params.py +1 -1
- py2docfx/convert_prepare/tests/test_sphinx_caller.py +5 -3
- py2docfx/convert_prepare/tests/utils.py +11 -0
- py2docfx/docfx_yaml/build_finished.py +11 -3
- py2docfx/docfx_yaml/convert_class.py +4 -2
- py2docfx/docfx_yaml/convert_enum.py +4 -2
- py2docfx/docfx_yaml/convert_module.py +4 -2
- py2docfx/docfx_yaml/convert_package.py +4 -2
- py2docfx/docfx_yaml/logger.py +68 -0
- py2docfx/docfx_yaml/process_doctree.py +6 -4
- py2docfx/docfx_yaml/translator.py +5 -7
- py2docfx/docfx_yaml/writer.py +10 -4
- py2docfx/docfx_yaml/yaml_builder.py +0 -1
- py2docfx/venv/basevenv/Lib/site-packages/_distutils_hack/__init__.py +2 -3
- py2docfx/venv/basevenv/Lib/site-packages/packaging/__init__.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_elffile.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/packaging/_manylinux.py +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/__init__.py +145 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/_spdx.py +759 -0
- py2docfx/venv/basevenv/Lib/site-packages/packaging/markers.py +15 -9
- py2docfx/venv/basevenv/Lib/site-packages/packaging/metadata.py +83 -24
- py2docfx/venv/basevenv/Lib/site-packages/packaging/specifiers.py +19 -8
- py2docfx/venv/basevenv/Lib/site-packages/packaging/tags.py +78 -29
- py2docfx/venv/basevenv/Lib/site-packages/packaging/utils.py +33 -44
- py2docfx/venv/basevenv/Lib/site-packages/packaging/version.py +26 -7
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +27 -32
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
- py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/__init__.py +7 -9
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_importlib.py +1 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py +5 -8
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py +2 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py +53 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/archive_util.py +6 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/build_meta.py +25 -19
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/__init__.py +9 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/alias.py +3 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +43 -84
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build.py +3 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_clib.py +2 -9
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py +15 -14
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_py.py +26 -30
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/develop.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/dist_info.py +3 -7
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/easy_install.py +57 -80
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +21 -23
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/egg_info.py +32 -32
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +31 -13
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_egg_info.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_lib.py +10 -7
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/rotate.py +6 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/saveopts.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/sdist.py +11 -10
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/setopt.py +3 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/expand.py +22 -16
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/pyprojecttoml.py +12 -10
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/depends.py +26 -7
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/discovery.py +21 -14
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +51 -47
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/errors.py +21 -26
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/extension.py +18 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/glob.py +35 -15
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/installer.py +6 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/launch.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/logging.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/modified.py +16 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/monkey.py +5 -5
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/msvc.py +35 -24
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/namespaces.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/package_index.py +42 -43
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/sandbox.py +19 -12
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py +171 -76
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/unicode_utils.py +3 -3
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/warnings.py +5 -2
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/wheel.py +4 -4
- py2docfx/venv/basevenv/Lib/site-packages/wheel/__init__.py +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
- py2docfx/venv/basevenv/Lib/site-packages/wheel/bdist_wheel.py +17 -2
- py2docfx/venv/basevenv/Lib/site-packages/wheel/cli/convert.py +279 -220
- py2docfx/venv/basevenv/Lib/site-packages/wheel/util.py +0 -9
- py2docfx/venv/venv1/Lib/site-packages/_distutils_hack/__init__.py +2 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/_enum_meta.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/_pipeline_client.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/_pipeline_client_async.py +5 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/credentials.py +6 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/exceptions.py +13 -5
- py2docfx/venv/venv1/Lib/site-packages/azure/core/messaging.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/paging.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/__init__.py +16 -5
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base.py +15 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base_async.py +20 -10
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_tools.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication.py +55 -19
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication_async.py +46 -15
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_custom_hook.py +8 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_distributed_tracing.py +9 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect.py +9 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect_async.py +4 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry.py +27 -8
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry_async.py +6 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_sensitive_header_cleanup_policy.py +4 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_universal.py +6 -10
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_utils.py +101 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_aiohttp.py +9 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base_async.py +7 -5
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_asyncio.py +0 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_basic.py +11 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_trio.py +11 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/_async_poller.py +5 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/_poller.py +4 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/async_base_polling.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/base_polling.py +47 -16
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_helpers.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_http_response_impl.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_requests_basic.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/serialization.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/settings.py +15 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_abstract_span.py +15 -5
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/common.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator.py +12 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator_async.py +24 -4
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/__init__.py +119 -110
- py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared_async.py +10 -1
- py2docfx/venv/venv1/Lib/site-packages/google/api/client_pb2.py +41 -39
- py2docfx/venv/venv1/Lib/site-packages/google/api/error_reason_pb2.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/google/api/httpbody_pb2.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/google/api/metric_pb2.py +17 -11
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/client_options.py +17 -13
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/protobuf_helpers.py +1 -3
- py2docfx/venv/venv1/Lib/site-packages/google/api_core/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/_default.py +4 -0
- py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/_metadata.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/iam.py +25 -8
- py2docfx/venv/venv1/Lib/site-packages/google/auth/impersonated_credentials.py +34 -16
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_requests_base.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/requests.py +2 -3
- py2docfx/venv/venv1/Lib/site-packages/google/auth/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/_client.py +10 -2
- py2docfx/venv/venv1/Lib/site-packages/google/oauth2/service_account.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/jwt/__init__.py +3 -2
- py2docfx/venv/venv1/Lib/site-packages/jwt/algorithms.py +31 -16
- py2docfx/venv/venv1/Lib/site-packages/jwt/api_jws.py +19 -8
- py2docfx/venv/venv1/Lib/site-packages/jwt/api_jwt.py +75 -19
- py2docfx/venv/venv1/Lib/site-packages/jwt/exceptions.py +8 -0
- py2docfx/venv/venv1/Lib/site-packages/jwt/help.py +4 -1
- py2docfx/venv/venv1/Lib/site-packages/jwt/jwks_client.py +4 -2
- py2docfx/venv/venv1/Lib/site-packages/jwt/utils.py +7 -10
- py2docfx/venv/venv1/Lib/site-packages/msal/application.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +5 -3
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +27 -32
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
- py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/proto/enums.py +3 -1
- py2docfx/venv/venv1/Lib/site-packages/proto/marshal/collections/repeated.py +7 -2
- py2docfx/venv/venv1/Lib/site-packages/proto/marshal/compat.py +18 -21
- py2docfx/venv/venv1/Lib/site-packages/proto/marshal/rules/message.py +7 -3
- py2docfx/venv/venv1/Lib/site-packages/proto/message.py +6 -35
- py2docfx/venv/venv1/Lib/site-packages/proto/version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +7 -9
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_importlib.py +1 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +5 -8
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +53 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
- py2docfx/venv/venv1/Lib/site-packages/setuptools/archive_util.py +6 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +25 -19
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/__init__.py +9 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/alias.py +3 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +43 -84
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_clib.py +2 -9
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +15 -14
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_py.py +26 -30
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/dist_info.py +3 -7
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +57 -80
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +21 -23
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +32 -32
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +31 -13
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_egg_info.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_lib.py +10 -7
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/rotate.py +6 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/saveopts.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +11 -10
- py2docfx/venv/venv1/Lib/site-packages/setuptools/command/setopt.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
- py2docfx/venv/venv1/Lib/site-packages/setuptools/config/expand.py +22 -16
- py2docfx/venv/venv1/Lib/site-packages/setuptools/config/pyprojecttoml.py +12 -10
- py2docfx/venv/venv1/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
- py2docfx/venv/venv1/Lib/site-packages/setuptools/depends.py +26 -7
- py2docfx/venv/venv1/Lib/site-packages/setuptools/discovery.py +21 -14
- py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +51 -47
- py2docfx/venv/venv1/Lib/site-packages/setuptools/errors.py +21 -26
- py2docfx/venv/venv1/Lib/site-packages/setuptools/extension.py +18 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/glob.py +35 -15
- py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +6 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/launch.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/logging.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/modified.py +16 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/monkey.py +5 -5
- py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +35 -24
- py2docfx/venv/venv1/Lib/site-packages/setuptools/namespaces.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +42 -43
- py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +19 -12
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +171 -76
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
- py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/unicode_utils.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/setuptools/warnings.py +5 -2
- py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/wheel/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
- py2docfx/venv/venv1/Lib/site-packages/wheel/bdist_wheel.py +17 -2
- py2docfx/venv/venv1/Lib/site-packages/wheel/cli/convert.py +279 -220
- py2docfx/venv/venv1/Lib/site-packages/wheel/util.py +0 -9
- {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/METADATA +1 -1
- {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/RECORD +327 -385
- {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/WHEEL +1 -1
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
- py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
- py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
- /py2docfx/convert_prepare/conf_templates/{master_doc.rst_t → root_doc.rst_t} +0 -0
- {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/top_level.txt +0 -0
@@ -1,16 +1,28 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import functools
|
2
4
|
import importlib
|
3
5
|
import io
|
4
6
|
from email import message_from_string
|
7
|
+
from email.generator import Generator
|
8
|
+
from email.message import Message
|
9
|
+
from email.parser import Parser
|
10
|
+
from email.policy import EmailPolicy
|
11
|
+
from pathlib import Path
|
12
|
+
from unittest.mock import Mock
|
5
13
|
|
6
14
|
import pytest
|
7
15
|
from packaging.metadata import Metadata
|
16
|
+
from packaging.requirements import Requirement
|
8
17
|
|
9
18
|
from setuptools import _reqs, sic
|
10
19
|
from setuptools._core_metadata import rfc822_escape, rfc822_unescape
|
11
20
|
from setuptools.command.egg_info import egg_info, write_requirements
|
21
|
+
from setuptools.config import expand, setupcfg
|
12
22
|
from setuptools.dist import Distribution
|
13
23
|
|
24
|
+
from .config.downloads import retrieve_file, urls_from_file
|
25
|
+
|
14
26
|
EXAMPLE_BASE_INFO = dict(
|
15
27
|
name="package",
|
16
28
|
version="0.0.1",
|
@@ -23,7 +35,7 @@ EXAMPLE_BASE_INFO = dict(
|
|
23
35
|
|
24
36
|
|
25
37
|
@pytest.mark.parametrize(
|
26
|
-
|
38
|
+
("content", "result"),
|
27
39
|
(
|
28
40
|
pytest.param(
|
29
41
|
"Just a single line",
|
@@ -154,7 +166,7 @@ def __read_test_cases():
|
|
154
166
|
]
|
155
167
|
|
156
168
|
|
157
|
-
@pytest.mark.parametrize(
|
169
|
+
@pytest.mark.parametrize(("name", "attrs"), __read_test_cases())
|
158
170
|
def test_read_metadata(name, attrs):
|
159
171
|
dist = Distribution(attrs)
|
160
172
|
metadata_out = dist.metadata
|
@@ -263,7 +275,7 @@ def __maintainer_test_cases():
|
|
263
275
|
]
|
264
276
|
|
265
277
|
|
266
|
-
@pytest.mark.parametrize(
|
278
|
+
@pytest.mark.parametrize(("name", "attrs"), __maintainer_test_cases())
|
267
279
|
def test_maintainer_author(name, attrs, tmpdir):
|
268
280
|
tested_keys = {
|
269
281
|
'author': 'Author',
|
@@ -303,85 +315,168 @@ def test_maintainer_author(name, attrs, tmpdir):
|
|
303
315
|
assert line in pkg_lines_set
|
304
316
|
|
305
317
|
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
318
|
+
class TestParityWithMetadataFromPyPaWheel:
|
319
|
+
def base_example(self):
|
320
|
+
attrs = dict(
|
321
|
+
**EXAMPLE_BASE_INFO,
|
322
|
+
# Example with complex requirement definition
|
323
|
+
python_requires=">=3.8",
|
324
|
+
install_requires="""
|
325
|
+
packaging==23.2
|
326
|
+
more-itertools==8.8.0; extra == "other"
|
327
|
+
jaraco.text==3.7.0
|
328
|
+
importlib-resources==5.10.2; python_version<"3.8"
|
329
|
+
importlib-metadata==6.0.0 ; python_version<"3.8"
|
330
|
+
colorama>=0.4.4; sys_platform == "win32"
|
331
|
+
""",
|
332
|
+
extras_require={
|
333
|
+
"testing": """
|
334
|
+
pytest >= 6
|
335
|
+
pytest-checkdocs >= 2.4
|
336
|
+
tomli ; \\
|
337
|
+
# Using stdlib when possible
|
338
|
+
python_version < "3.11"
|
339
|
+
ini2toml[lite]>=0.9
|
340
|
+
""",
|
341
|
+
"other": [],
|
342
|
+
},
|
343
|
+
)
|
344
|
+
# Generate a PKG-INFO file using setuptools
|
345
|
+
return Distribution(attrs)
|
346
|
+
|
347
|
+
def test_requires_dist(self, tmp_path):
|
348
|
+
dist = self.base_example()
|
349
|
+
pkg_info = _get_pkginfo(dist)
|
350
|
+
assert _valid_metadata(pkg_info)
|
351
|
+
|
352
|
+
# Ensure Requires-Dist is present
|
353
|
+
expected = [
|
354
|
+
'Metadata-Version:',
|
355
|
+
'Requires-Python: >=3.8',
|
356
|
+
'Provides-Extra: other',
|
357
|
+
'Provides-Extra: testing',
|
358
|
+
'Requires-Dist: tomli; python_version < "3.11" and extra == "testing"',
|
359
|
+
'Requires-Dist: more-itertools==8.8.0; extra == "other"',
|
360
|
+
'Requires-Dist: ini2toml[lite]>=0.9; extra == "testing"',
|
361
|
+
]
|
362
|
+
for line in expected:
|
363
|
+
assert line in pkg_info
|
364
|
+
|
365
|
+
HERE = Path(__file__).parent
|
366
|
+
EXAMPLES_FILE = HERE / "config/setupcfg_examples.txt"
|
367
|
+
|
368
|
+
@pytest.fixture(params=[None, *urls_from_file(EXAMPLES_FILE)])
|
369
|
+
def dist(self, request, monkeypatch, tmp_path):
|
370
|
+
"""Example of distribution with arbitrary configuration"""
|
371
|
+
monkeypatch.chdir(tmp_path)
|
372
|
+
monkeypatch.setattr(expand, "read_attr", Mock(return_value="0.42"))
|
373
|
+
monkeypatch.setattr(expand, "read_files", Mock(return_value="hello world"))
|
374
|
+
if request.param is None:
|
375
|
+
yield self.base_example()
|
376
|
+
else:
|
377
|
+
# Real-world usage
|
378
|
+
config = retrieve_file(request.param)
|
379
|
+
yield setupcfg.apply_configuration(Distribution({}), config)
|
380
|
+
|
381
|
+
@pytest.mark.uses_network
|
382
|
+
def test_equivalent_output(self, tmp_path, dist):
|
383
|
+
"""Ensure output from setuptools is equivalent to the one from `pypa/wheel`"""
|
384
|
+
# Generate a METADATA file using pypa/wheel for comparison
|
385
|
+
wheel_metadata = importlib.import_module("wheel.metadata")
|
386
|
+
pkginfo_to_metadata = getattr(wheel_metadata, "pkginfo_to_metadata", None)
|
387
|
+
|
388
|
+
if pkginfo_to_metadata is None: # pragma: nocover
|
389
|
+
pytest.xfail(
|
390
|
+
"wheel.metadata.pkginfo_to_metadata is undefined, "
|
391
|
+
"(this is likely to be caused by API changes in pypa/wheel"
|
392
|
+
)
|
393
|
+
|
394
|
+
# Generate an simplified "egg-info" dir for pypa/wheel to convert
|
395
|
+
pkg_info = _get_pkginfo(dist)
|
396
|
+
egg_info_dir = tmp_path / "pkg.egg-info"
|
397
|
+
egg_info_dir.mkdir(parents=True)
|
398
|
+
(egg_info_dir / "PKG-INFO").write_text(pkg_info, encoding="utf-8")
|
399
|
+
write_requirements(egg_info(dist), egg_info_dir, egg_info_dir / "requires.txt")
|
400
|
+
|
401
|
+
# Get pypa/wheel generated METADATA but normalize requirements formatting
|
402
|
+
metadata_msg = pkginfo_to_metadata(egg_info_dir, egg_info_dir / "PKG-INFO")
|
403
|
+
metadata_str = _normalize_metadata(metadata_msg)
|
404
|
+
pkg_info_msg = message_from_string(pkg_info)
|
405
|
+
pkg_info_str = _normalize_metadata(pkg_info_msg)
|
406
|
+
|
407
|
+
# Compare setuptools PKG-INFO x pypa/wheel METADATA
|
408
|
+
assert metadata_str == pkg_info_str
|
409
|
+
|
410
|
+
# Make sure it parses/serializes well in pypa/wheel
|
411
|
+
_assert_roundtrip_message(pkg_info)
|
412
|
+
|
413
|
+
|
414
|
+
def _assert_roundtrip_message(metadata: str) -> None:
|
415
|
+
"""Emulate the way wheel.bdist_wheel parses and regenerates the message,
|
416
|
+
then ensures the metadata generated by setuptools is compatible.
|
417
|
+
"""
|
418
|
+
with io.StringIO(metadata) as buffer:
|
419
|
+
msg = Parser().parse(buffer)
|
420
|
+
|
421
|
+
serialization_policy = EmailPolicy(
|
422
|
+
utf8=True,
|
423
|
+
mangle_from_=False,
|
424
|
+
max_line_length=0,
|
331
425
|
)
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
426
|
+
with io.BytesIO() as buffer:
|
427
|
+
out = io.TextIOWrapper(buffer, encoding="utf-8")
|
428
|
+
Generator(out, policy=serialization_policy).flatten(msg)
|
429
|
+
out.flush()
|
430
|
+
regenerated = buffer.getvalue()
|
431
|
+
|
432
|
+
raw_metadata = bytes(metadata, "utf-8")
|
433
|
+
# Normalise newlines to avoid test errors on Windows:
|
434
|
+
raw_metadata = b"\n".join(raw_metadata.splitlines())
|
435
|
+
regenerated = b"\n".join(regenerated.splitlines())
|
436
|
+
assert regenerated == raw_metadata
|
437
|
+
|
438
|
+
|
439
|
+
def _normalize_metadata(msg: Message) -> str:
|
440
|
+
"""Allow equivalent metadata to be compared directly"""
|
441
|
+
# The main challenge regards the requirements and extras.
|
442
|
+
# Both setuptools and wheel already apply some level of normalization
|
443
|
+
# but they differ regarding which character is chosen, according to the
|
444
|
+
# following spec it should be "-":
|
445
|
+
# https://packaging.python.org/en/latest/specifications/name-normalization/
|
446
|
+
|
447
|
+
# Related issues:
|
448
|
+
# https://github.com/pypa/packaging/issues/845
|
449
|
+
# https://github.com/pypa/packaging/issues/644#issuecomment-2429813968
|
450
|
+
|
451
|
+
extras = {x.replace("_", "-"): x for x in msg.get_all("Provides-Extra", [])}
|
452
|
+
reqs = [
|
453
|
+
_normalize_req(req, extras)
|
454
|
+
for req in _reqs.parse(msg.get_all("Requires-Dist", []))
|
455
|
+
]
|
456
|
+
del msg["Requires-Dist"]
|
457
|
+
del msg["Provides-Extra"]
|
337
458
|
|
338
|
-
|
459
|
+
# Ensure consistent ord
|
460
|
+
for req in sorted(reqs):
|
461
|
+
msg["Requires-Dist"] = req
|
462
|
+
for extra in sorted(extras):
|
463
|
+
msg["Provides-Extra"] = extra
|
339
464
|
|
340
|
-
|
341
|
-
expected = [
|
342
|
-
'Metadata-Version:',
|
343
|
-
'Requires-Python: >=3.8',
|
344
|
-
'Provides-Extra: other',
|
345
|
-
'Provides-Extra: testing',
|
346
|
-
'Requires-Dist: tomli; python_version < "3.11" and extra == "testing"',
|
347
|
-
'Requires-Dist: more-itertools==8.8.0; extra == "other"',
|
348
|
-
'Requires-Dist: ini2toml[lite]>=0.9; extra == "testing"',
|
349
|
-
]
|
350
|
-
for line in expected:
|
351
|
-
assert line in pkg_info
|
465
|
+
return msg.as_string()
|
352
466
|
|
353
|
-
# Generate a METADATA file using pypa/wheel for comparison
|
354
|
-
wheel_metadata = importlib.import_module("wheel.metadata")
|
355
|
-
pkginfo_to_metadata = getattr(wheel_metadata, "pkginfo_to_metadata", None)
|
356
467
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
)
|
468
|
+
def _normalize_req(req: Requirement, extras: dict[str, str]) -> str:
|
469
|
+
"""Allow equivalent requirement objects to be compared directly"""
|
470
|
+
as_str = str(req).replace(req.name, req.name.replace("_", "-"))
|
471
|
+
for norm, orig in extras.items():
|
472
|
+
as_str = as_str.replace(orig, norm)
|
473
|
+
return as_str
|
362
474
|
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
# Get pypa/wheel generated METADATA but normalize requirements formatting
|
370
|
-
metadata_msg = pkginfo_to_metadata(egg_info_dir, egg_info_dir / "PKG-INFO")
|
371
|
-
metadata_deps = set(_reqs.parse(metadata_msg.get_all("Requires-Dist")))
|
372
|
-
metadata_extras = set(metadata_msg.get_all("Provides-Extra"))
|
373
|
-
del metadata_msg["Requires-Dist"]
|
374
|
-
del metadata_msg["Provides-Extra"]
|
375
|
-
pkg_info_msg = message_from_string(pkg_info)
|
376
|
-
pkg_info_deps = set(_reqs.parse(pkg_info_msg.get_all("Requires-Dist")))
|
377
|
-
pkg_info_extras = set(pkg_info_msg.get_all("Provides-Extra"))
|
378
|
-
del pkg_info_msg["Requires-Dist"]
|
379
|
-
del pkg_info_msg["Provides-Extra"]
|
380
|
-
|
381
|
-
# Compare setuptools PKG-INFO x pypa/wheel METADATA
|
382
|
-
assert metadata_msg.as_string() == pkg_info_msg.as_string()
|
383
|
-
assert metadata_deps == pkg_info_deps
|
384
|
-
assert metadata_extras == pkg_info_extras
|
475
|
+
|
476
|
+
def _get_pkginfo(dist: Distribution):
|
477
|
+
with io.StringIO() as fp:
|
478
|
+
dist.metadata.write_pkg_file(fp)
|
479
|
+
return fp.getvalue()
|
385
480
|
|
386
481
|
|
387
482
|
def _valid_metadata(text: str) -> bool:
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import collections
|
2
1
|
import os
|
3
2
|
import re
|
4
3
|
import urllib.parse
|
@@ -72,15 +71,10 @@ EXAMPLE_BASE_INFO = dict(
|
|
72
71
|
|
73
72
|
|
74
73
|
def test_provides_extras_deterministic_order():
|
75
|
-
|
76
|
-
extras['a'] = ['foo']
|
77
|
-
extras['b'] = ['bar']
|
78
|
-
attrs = dict(extras_require=extras)
|
74
|
+
attrs = dict(extras_require=dict(a=['foo'], b=['bar']))
|
79
75
|
dist = Distribution(attrs)
|
80
76
|
assert list(dist.metadata.provides_extras) == ['a', 'b']
|
81
|
-
attrs['extras_require'] =
|
82
|
-
reversed(list(attrs['extras_require'].items()))
|
83
|
-
)
|
77
|
+
attrs['extras_require'] = dict(reversed(attrs['extras_require'].items()))
|
84
78
|
dist = Distribution(attrs)
|
85
79
|
assert list(dist.metadata.provides_extras) == ['b', 'a']
|
86
80
|
|
@@ -135,7 +129,7 @@ CHECK_PACKAGE_DATA_TESTS = (
|
|
135
129
|
)
|
136
130
|
|
137
131
|
|
138
|
-
@pytest.mark.parametrize('package_data, expected_message', CHECK_PACKAGE_DATA_TESTS)
|
132
|
+
@pytest.mark.parametrize(('package_data', 'expected_message'), CHECK_PACKAGE_DATA_TESTS)
|
139
133
|
def test_check_package_data(package_data, expected_message):
|
140
134
|
if expected_message is None:
|
141
135
|
assert check_package_data(None, 'package_data', package_data) is None
|
@@ -150,8 +144,12 @@ def test_check_specifier():
|
|
150
144
|
dist = Distribution(attrs)
|
151
145
|
check_specifier(dist, attrs, attrs['python_requires'])
|
152
146
|
|
153
|
-
# invalid specifier value
|
154
147
|
attrs = {'name': 'foo', 'python_requires': ['>=3.0', '!=3.1']}
|
148
|
+
dist = Distribution(attrs)
|
149
|
+
check_specifier(dist, attrs, attrs['python_requires'])
|
150
|
+
|
151
|
+
# invalid specifier value
|
152
|
+
attrs = {'name': 'foo', 'python_requires': '>=invalid-version'}
|
155
153
|
with pytest.raises(DistutilsSetupError):
|
156
154
|
dist = Distribution(attrs)
|
157
155
|
|
@@ -162,7 +160,7 @@ def test_metadata_name():
|
|
162
160
|
|
163
161
|
|
164
162
|
@pytest.mark.parametrize(
|
165
|
-
|
163
|
+
('dist_name', 'py_module'),
|
166
164
|
[
|
167
165
|
("my.pkg", "my_pkg"),
|
168
166
|
("my-pkg", "my_pkg"),
|
@@ -193,7 +191,7 @@ def test_dist_default_py_modules(tmp_path, dist_name, py_module):
|
|
193
191
|
|
194
192
|
|
195
193
|
@pytest.mark.parametrize(
|
196
|
-
|
194
|
+
('dist_name', 'package_dir', 'package_files', 'packages'),
|
197
195
|
[
|
198
196
|
("my.pkg", None, ["my_pkg/__init__.py", "my_pkg/mod.py"], ["my_pkg"]),
|
199
197
|
("my-pkg", None, ["my_pkg/__init__.py", "my_pkg/mod.py"], ["my_pkg"]),
|
@@ -247,7 +245,7 @@ def test_dist_default_packages(
|
|
247
245
|
|
248
246
|
|
249
247
|
@pytest.mark.parametrize(
|
250
|
-
|
248
|
+
('dist_name', 'package_dir', 'package_files'),
|
251
249
|
[
|
252
250
|
("my.pkg.nested", None, ["my/pkg/nested/__init__.py"]),
|
253
251
|
("my.pkg", None, ["my/pkg/__init__.py", "my/pkg/file.py"]),
|
@@ -169,7 +169,7 @@ class TestWheelCompatibility:
|
|
169
169
|
|
170
170
|
@pytest.mark.parametrize("name", "my-proj my_proj my.proj My.Proj".split())
|
171
171
|
@pytest.mark.parametrize("version", ["0.42.13"])
|
172
|
-
@pytest.mark.parametrize("suffix, cfg", EGG_INFO_OPTS)
|
172
|
+
@pytest.mark.parametrize(("suffix", "cfg"), EGG_INFO_OPTS)
|
173
173
|
def test_dist_info_is_the_same_as_in_wheel(
|
174
174
|
self, name, version, tmp_path, suffix, cfg
|
175
175
|
):
|
@@ -114,8 +114,9 @@ print("success")
|
|
114
114
|
"""
|
115
115
|
|
116
116
|
|
117
|
+
@pytest.mark.usefixtures("tmpdir_cwd")
|
117
118
|
@pytest.mark.parametrize(
|
118
|
-
|
119
|
+
('distutils_version', 'imported_module'),
|
119
120
|
[
|
120
121
|
pytest.param("stdlib", "dir_util", marks=skip_without_stdlib_distutils),
|
121
122
|
pytest.param("stdlib", "file_util", marks=skip_without_stdlib_distutils),
|
@@ -125,9 +126,7 @@ print("success")
|
|
125
126
|
("local", "archive_util"),
|
126
127
|
],
|
127
128
|
)
|
128
|
-
def test_modules_are_not_duplicated_on_import(
|
129
|
-
distutils_version, imported_module, tmpdir_cwd, venv
|
130
|
-
):
|
129
|
+
def test_modules_are_not_duplicated_on_import(distutils_version, imported_module, venv):
|
131
130
|
env = dict(SETUPTOOLS_USE_DISTUTILS=distutils_version)
|
132
131
|
script = ENSURE_IMPORTS_ARE_NOT_DUPLICATED.format(imported_module=imported_module)
|
133
132
|
cmd = ['python', '-c', script]
|
@@ -145,6 +144,7 @@ print("success")
|
|
145
144
|
"""
|
146
145
|
|
147
146
|
|
147
|
+
@pytest.mark.usefixtures("tmpdir_cwd")
|
148
148
|
@pytest.mark.parametrize(
|
149
149
|
"distutils_version",
|
150
150
|
[
|
@@ -152,8 +152,47 @@ print("success")
|
|
152
152
|
pytest.param("stdlib", marks=skip_without_stdlib_distutils),
|
153
153
|
],
|
154
154
|
)
|
155
|
-
def test_log_module_is_not_duplicated_on_import(distutils_version,
|
155
|
+
def test_log_module_is_not_duplicated_on_import(distutils_version, venv):
|
156
156
|
env = dict(SETUPTOOLS_USE_DISTUTILS=distutils_version)
|
157
157
|
cmd = ['python', '-c', ENSURE_LOG_IMPORT_IS_NOT_DUPLICATED]
|
158
158
|
output = venv.run(cmd, env=win_sr(env), **_TEXT_KWARGS).strip()
|
159
159
|
assert output == "success"
|
160
|
+
|
161
|
+
|
162
|
+
ENSURE_CONSISTENT_ERROR_FROM_MODIFIED_PY = r"""
|
163
|
+
from setuptools.modified import newer
|
164
|
+
from {imported_module}.errors import DistutilsError
|
165
|
+
|
166
|
+
# Can't use pytest.raises in this context
|
167
|
+
try:
|
168
|
+
newer("", "")
|
169
|
+
except DistutilsError:
|
170
|
+
print("success")
|
171
|
+
else:
|
172
|
+
raise AssertionError("Expected to raise")
|
173
|
+
"""
|
174
|
+
|
175
|
+
|
176
|
+
@pytest.mark.usefixtures("tmpdir_cwd")
|
177
|
+
@pytest.mark.parametrize(
|
178
|
+
('distutils_version', 'imported_module'),
|
179
|
+
[
|
180
|
+
("local", "distutils"),
|
181
|
+
# Unfortunately we still get ._distutils.errors.DistutilsError with SETUPTOOLS_USE_DISTUTILS=stdlib
|
182
|
+
# But that's a deprecated use-case we don't mind not fully supporting in newer code
|
183
|
+
pytest.param(
|
184
|
+
"stdlib", "setuptools._distutils", marks=skip_without_stdlib_distutils
|
185
|
+
),
|
186
|
+
],
|
187
|
+
)
|
188
|
+
def test_consistent_error_from_modified_py(distutils_version, imported_module, venv):
|
189
|
+
env = dict(SETUPTOOLS_USE_DISTUTILS=distutils_version)
|
190
|
+
cmd = [
|
191
|
+
'python',
|
192
|
+
'-c',
|
193
|
+
ENSURE_CONSISTENT_ERROR_FROM_MODIFIED_PY.format(
|
194
|
+
imported_module=imported_module
|
195
|
+
),
|
196
|
+
]
|
197
|
+
output = venv.run(cmd, env=win_sr(env), **_TEXT_KWARGS).strip()
|
198
|
+
assert output == "success"
|
@@ -72,7 +72,7 @@ class TestEasyInstallTest:
|
|
72
72
|
header = ei.CommandSpec.best().from_environment().as_header()
|
73
73
|
dist = FakeDist()
|
74
74
|
args = next(ei.ScriptWriter.get_args(dist))
|
75
|
-
|
75
|
+
_name, script = itertools.islice(args, 2)
|
76
76
|
assert script.startswith(header)
|
77
77
|
assert "'spec'" in script
|
78
78
|
assert "'console_scripts'" in script
|
@@ -327,9 +327,9 @@ class TestPTHFileWriter:
|
|
327
327
|
pth_path = str(pth_subdir.join("file1.pth"))
|
328
328
|
pth1 = PthDistributions(pth_path)
|
329
329
|
pth2 = PthDistributions(pth_path)
|
330
|
-
assert (
|
331
|
-
|
332
|
-
)
|
330
|
+
assert pth1.paths == pth2.paths == [], (
|
331
|
+
"unless there would be some default added at some point"
|
332
|
+
)
|
333
333
|
# and so putting the src_subdir in folder distinct than the pth one,
|
334
334
|
# so to keep it absolute by PthDistributions
|
335
335
|
new_src_path = tmpdir.join("src_subdir")
|
@@ -337,17 +337,17 @@ class TestPTHFileWriter:
|
|
337
337
|
new_src_path_str = str(new_src_path)
|
338
338
|
pth1.paths.append(new_src_path_str)
|
339
339
|
pth1.save()
|
340
|
-
assert (
|
341
|
-
pth1
|
342
|
-
)
|
340
|
+
assert pth1.paths, (
|
341
|
+
"the new_src_path added must still be present/valid in pth1 after save"
|
342
|
+
)
|
343
343
|
# now,
|
344
|
-
assert (
|
345
|
-
|
346
|
-
)
|
344
|
+
assert new_src_path_str not in pth2.paths, (
|
345
|
+
"right before we save the entry should still not be present"
|
346
|
+
)
|
347
347
|
pth2.save()
|
348
|
-
assert (
|
349
|
-
|
350
|
-
)
|
348
|
+
assert new_src_path_str in pth2.paths, (
|
349
|
+
"the new_src_path entry should have been added by pth2 with its save() call"
|
350
|
+
)
|
351
351
|
assert pth2.paths[-1] == new_src_path, (
|
352
352
|
"and it should match exactly on the last entry actually "
|
353
353
|
"given we append to it in save()"
|
@@ -407,14 +407,14 @@ class TestUserInstallTest:
|
|
407
407
|
logging.basicConfig(level=logging.INFO, stream=sys.stderr)
|
408
408
|
log.info('this should not break')
|
409
409
|
|
410
|
-
@pytest.fixture
|
410
|
+
@pytest.fixture
|
411
411
|
def foo_package(self, tmpdir):
|
412
412
|
egg_file = tmpdir / 'foo-1.0.egg-info'
|
413
413
|
with egg_file.open('w') as f:
|
414
414
|
f.write('Name: foo\n')
|
415
415
|
return str(tmpdir)
|
416
416
|
|
417
|
-
@pytest.fixture
|
417
|
+
@pytest.fixture
|
418
418
|
def install_target(self, tmpdir):
|
419
419
|
target = str(tmpdir)
|
420
420
|
with mock.patch('sys.path', sys.path + [target]):
|
@@ -472,6 +472,12 @@ def distutils_package():
|
|
472
472
|
yield
|
473
473
|
|
474
474
|
|
475
|
+
@pytest.mark.usefixtures("distutils_package")
|
476
|
+
class TestDistutilsPackage:
|
477
|
+
def test_bdist_egg_available_on_distutils_pkg(self):
|
478
|
+
run_setup('setup.py', ['bdist_egg'])
|
479
|
+
|
480
|
+
|
475
481
|
@pytest.fixture
|
476
482
|
def mock_index():
|
477
483
|
# set up a server which will simulate an alternate package index.
|
@@ -484,11 +490,6 @@ def mock_index():
|
|
484
490
|
return p_index
|
485
491
|
|
486
492
|
|
487
|
-
class TestDistutilsPackage:
|
488
|
-
def test_bdist_egg_available_on_distutils_pkg(self, distutils_package):
|
489
|
-
run_setup('setup.py', ['bdist_egg'])
|
490
|
-
|
491
|
-
|
492
493
|
class TestInstallRequires:
|
493
494
|
def test_setup_install_includes_dependencies(self, tmp_path, mock_index):
|
494
495
|
"""
|
@@ -650,7 +651,7 @@ class TestSetupRequires:
|
|
650
651
|
temp_dir, use_setup_cfg=use_setup_cfg
|
651
652
|
)
|
652
653
|
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
653
|
-
with contexts.quiet() as (stdout,
|
654
|
+
with contexts.quiet() as (stdout, _stderr):
|
654
655
|
# Don't even need to install the package, just
|
655
656
|
# running the setup.py at all is sufficient
|
656
657
|
run_setup(test_setup_py, ['--name'])
|
@@ -712,15 +713,14 @@ class TestSetupRequires:
|
|
712
713
|
|
713
714
|
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
714
715
|
|
715
|
-
with contexts.quiet() as (stdout,
|
716
|
+
with contexts.quiet() as (stdout, _stderr):
|
716
717
|
try:
|
717
718
|
# Don't even need to install the package, just
|
718
719
|
# running the setup.py at all is sufficient
|
719
720
|
run_setup(test_setup_py, ['--name'])
|
720
721
|
except pkg_resources.VersionConflict:
|
721
722
|
self.fail(
|
722
|
-
'Installing setup.py requirements '
|
723
|
-
'caused a VersionConflict'
|
723
|
+
'Installing setup.py requirements caused a VersionConflict'
|
724
724
|
)
|
725
725
|
|
726
726
|
assert 'FAIL' not in stdout.getvalue()
|
@@ -765,7 +765,7 @@ class TestSetupRequires:
|
|
765
765
|
use_setup_cfg=use_setup_cfg + ('version',),
|
766
766
|
)
|
767
767
|
test_setup_py = os.path.join(test_pkg, 'setup.py')
|
768
|
-
with contexts.quiet() as (stdout,
|
768
|
+
with contexts.quiet() as (stdout, _stderr):
|
769
769
|
run_setup(test_setup_py, ['--version'])
|
770
770
|
lines = stdout.readlines()
|
771
771
|
assert len(lines) > 0
|
@@ -860,7 +860,9 @@ class TestSetupRequires:
|
|
860
860
|
)
|
861
861
|
dep_2_0_sdist = 'dep-2.0.tar.gz'
|
862
862
|
dep_2_0_url = path_to_url(str(tmpdir / dep_2_0_sdist))
|
863
|
-
dep_2_0_python_requires =
|
863
|
+
dep_2_0_python_requires = (
|
864
|
+
f'!={sys.version_info.major}.{sys.version_info.minor}.*'
|
865
|
+
)
|
864
866
|
make_python_requires_sdist(
|
865
867
|
str(tmpdir / dep_2_0_sdist), 'dep', '2.0', dep_2_0_python_requires
|
866
868
|
)
|
@@ -1408,6 +1410,10 @@ def test_use_correct_python_version_string(tmpdir, tmpdir_cwd, monkeypatch):
|
|
1408
1410
|
assert cmd.config_vars['py_version_nodot'] == '310'
|
1409
1411
|
|
1410
1412
|
|
1413
|
+
@pytest.mark.xfail(
|
1414
|
+
sys.platform == "darwin",
|
1415
|
+
reason="https://github.com/pypa/setuptools/pull/4716#issuecomment-2447624418",
|
1416
|
+
)
|
1411
1417
|
def test_editable_user_and_build_isolation(setup_context, monkeypatch, tmp_path):
|
1412
1418
|
"""`setup.py develop` should honor `--user` even under build isolation"""
|
1413
1419
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import os
|
2
4
|
import platform
|
3
5
|
import stat
|
@@ -8,6 +10,7 @@ from importlib import import_module
|
|
8
10
|
from importlib.machinery import EXTENSION_SUFFIXES
|
9
11
|
from pathlib import Path
|
10
12
|
from textwrap import dedent
|
13
|
+
from typing import Any
|
11
14
|
from unittest.mock import Mock
|
12
15
|
from uuid import uuid4
|
13
16
|
|
@@ -840,7 +843,8 @@ class TestOverallBehaviour:
|
|
840
843
|
version = "3.14159"
|
841
844
|
"""
|
842
845
|
|
843
|
-
|
846
|
+
# Any: Would need a TypedDict. Keep it simple for tests
|
847
|
+
FLAT_LAYOUT: dict[str, Any] = {
|
844
848
|
"pyproject.toml": dedent(PYPROJECT),
|
845
849
|
"MANIFEST.in": EXAMPLE["MANIFEST.in"],
|
846
850
|
"otherfile.py": "",
|
@@ -878,9 +882,9 @@ class TestOverallBehaviour:
|
|
878
882
|
"otherfile.py": "",
|
879
883
|
"mypkg": {
|
880
884
|
"__init__.py": "",
|
881
|
-
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"],
|
885
|
+
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"],
|
882
886
|
},
|
883
|
-
"other": FLAT_LAYOUT["mypkg"]["subpackage"],
|
887
|
+
"other": FLAT_LAYOUT["mypkg"]["subpackage"],
|
884
888
|
},
|
885
889
|
"namespace": {
|
886
890
|
"pyproject.toml": dedent(PYPROJECT),
|
@@ -888,8 +892,8 @@ class TestOverallBehaviour:
|
|
888
892
|
"otherfile.py": "",
|
889
893
|
"src": {
|
890
894
|
"mypkg": {
|
891
|
-
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"],
|
892
|
-
"subpackage": FLAT_LAYOUT["mypkg"]["subpackage"],
|
895
|
+
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"],
|
896
|
+
"subpackage": FLAT_LAYOUT["mypkg"]["subpackage"],
|
893
897
|
},
|
894
898
|
},
|
895
899
|
},
|
@@ -1271,7 +1275,7 @@ def assert_path(pkg, expected):
|
|
1271
1275
|
assert str(Path(path).resolve()) == expected
|
1272
1276
|
|
1273
1277
|
|
1274
|
-
def assert_link_to(file: Path, other: Path):
|
1278
|
+
def assert_link_to(file: Path, other: Path) -> None:
|
1275
1279
|
if file.is_symlink():
|
1276
1280
|
assert str(file.resolve()) == str(other.resolve())
|
1277
1281
|
else:
|