py2docfx 0.1.9.dev1897607__py3-none-any.whl → 0.1.9.dev1917798__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.
Files changed (363) hide show
  1. py2docfx/convert_prepare/environment.py +25 -6
  2. py2docfx/convert_prepare/tests/test_generate_document.py +4 -4
  3. py2docfx/convert_prepare/tests/test_get_source.py +6 -6
  4. py2docfx/convert_prepare/tests/test_params.py +1 -1
  5. py2docfx/convert_prepare/tests/test_sphinx_caller.py +3 -3
  6. py2docfx/venv/basevenv/Lib/site-packages/_distutils_hack/__init__.py +2 -3
  7. py2docfx/venv/basevenv/Lib/site-packages/packaging/__init__.py +2 -2
  8. py2docfx/venv/basevenv/Lib/site-packages/packaging/_elffile.py +4 -4
  9. py2docfx/venv/basevenv/Lib/site-packages/packaging/_manylinux.py +1 -0
  10. py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/__init__.py +145 -0
  11. py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/_spdx.py +759 -0
  12. py2docfx/venv/basevenv/Lib/site-packages/packaging/markers.py +15 -9
  13. py2docfx/venv/basevenv/Lib/site-packages/packaging/metadata.py +83 -24
  14. py2docfx/venv/basevenv/Lib/site-packages/packaging/specifiers.py +19 -8
  15. py2docfx/venv/basevenv/Lib/site-packages/packaging/tags.py +78 -29
  16. py2docfx/venv/basevenv/Lib/site-packages/packaging/utils.py +33 -44
  17. py2docfx/venv/basevenv/Lib/site-packages/packaging/version.py +26 -7
  18. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +27 -32
  19. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
  20. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
  21. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
  22. py2docfx/venv/basevenv/Lib/site-packages/setuptools/__init__.py +7 -9
  23. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
  24. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
  25. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
  26. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_importlib.py +1 -4
  27. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py +5 -8
  28. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py +2 -1
  29. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py +53 -0
  30. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
  31. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
  32. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
  33. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  34. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  35. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
  36. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
  37. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
  38. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
  39. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
  40. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/archive_util.py +6 -4
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/build_meta.py +23 -17
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/__init__.py +9 -1
  44. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
  45. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/alias.py +3 -4
  46. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
  47. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
  48. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +18 -45
  49. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build.py +3 -3
  50. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_clib.py +2 -9
  51. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py +13 -12
  52. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_py.py +17 -16
  53. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/develop.py +4 -4
  54. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/dist_info.py +3 -7
  55. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/easy_install.py +55 -78
  56. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +19 -21
  57. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/egg_info.py +29 -30
  58. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +31 -13
  59. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_egg_info.py +2 -2
  60. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_lib.py +10 -7
  61. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
  62. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/rotate.py +6 -6
  63. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/sdist.py +9 -8
  64. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/setopt.py +2 -2
  65. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
  66. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/expand.py +22 -16
  67. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/pyprojecttoml.py +25 -10
  68. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
  69. py2docfx/venv/basevenv/Lib/site-packages/setuptools/depends.py +26 -7
  70. py2docfx/venv/basevenv/Lib/site-packages/setuptools/discovery.py +21 -14
  71. py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +48 -45
  72. py2docfx/venv/basevenv/Lib/site-packages/setuptools/errors.py +21 -26
  73. py2docfx/venv/basevenv/Lib/site-packages/setuptools/extension.py +18 -6
  74. py2docfx/venv/basevenv/Lib/site-packages/setuptools/glob.py +35 -15
  75. py2docfx/venv/basevenv/Lib/site-packages/setuptools/installer.py +6 -1
  76. py2docfx/venv/basevenv/Lib/site-packages/setuptools/launch.py +1 -1
  77. py2docfx/venv/basevenv/Lib/site-packages/setuptools/logging.py +2 -2
  78. py2docfx/venv/basevenv/Lib/site-packages/setuptools/modified.py +16 -6
  79. py2docfx/venv/basevenv/Lib/site-packages/setuptools/monkey.py +2 -2
  80. py2docfx/venv/basevenv/Lib/site-packages/setuptools/msvc.py +25 -14
  81. py2docfx/venv/basevenv/Lib/site-packages/setuptools/namespaces.py +2 -2
  82. py2docfx/venv/basevenv/Lib/site-packages/setuptools/package_index.py +42 -43
  83. py2docfx/venv/basevenv/Lib/site-packages/setuptools/sandbox.py +19 -12
  84. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
  85. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
  86. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
  87. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +9 -2
  88. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
  89. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
  90. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
  91. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
  92. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
  93. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
  94. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
  95. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
  96. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
  97. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py +3 -4
  98. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
  99. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  100. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
  101. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
  102. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
  103. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
  104. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
  105. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
  106. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
  107. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
  108. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
  109. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  110. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
  111. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
  112. py2docfx/venv/basevenv/Lib/site-packages/setuptools/warnings.py +5 -2
  113. py2docfx/venv/basevenv/Lib/site-packages/setuptools/wheel.py +4 -4
  114. py2docfx/venv/basevenv/Lib/site-packages/wheel/__init__.py +1 -1
  115. py2docfx/venv/basevenv/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
  116. py2docfx/venv/basevenv/Lib/site-packages/wheel/bdist_wheel.py +17 -2
  117. py2docfx/venv/basevenv/Lib/site-packages/wheel/cli/convert.py +280 -220
  118. py2docfx/venv/basevenv/Lib/site-packages/wheel/util.py +0 -9
  119. py2docfx/venv/venv1/Lib/site-packages/_distutils_hack/__init__.py +2 -3
  120. py2docfx/venv/venv1/Lib/site-packages/azure/core/_enum_meta.py +1 -1
  121. py2docfx/venv/venv1/Lib/site-packages/azure/core/_pipeline_client.py +2 -2
  122. py2docfx/venv/venv1/Lib/site-packages/azure/core/_pipeline_client_async.py +5 -3
  123. py2docfx/venv/venv1/Lib/site-packages/azure/core/_version.py +1 -1
  124. py2docfx/venv/venv1/Lib/site-packages/azure/core/credentials.py +6 -1
  125. py2docfx/venv/venv1/Lib/site-packages/azure/core/exceptions.py +13 -5
  126. py2docfx/venv/venv1/Lib/site-packages/azure/core/messaging.py +3 -3
  127. py2docfx/venv/venv1/Lib/site-packages/azure/core/paging.py +1 -1
  128. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/__init__.py +16 -5
  129. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base.py +15 -4
  130. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base_async.py +20 -10
  131. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_tools.py +3 -1
  132. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication.py +55 -19
  133. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication_async.py +46 -15
  134. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_custom_hook.py +8 -3
  135. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_distributed_tracing.py +9 -3
  136. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect.py +9 -2
  137. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect_async.py +4 -1
  138. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry.py +27 -8
  139. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry_async.py +6 -3
  140. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_sensitive_header_cleanup_policy.py +4 -1
  141. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_universal.py +6 -10
  142. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_utils.py +101 -1
  143. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/__init__.py +1 -1
  144. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_aiohttp.py +9 -2
  145. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base.py +1 -1
  146. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base_async.py +7 -5
  147. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_asyncio.py +0 -1
  148. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_basic.py +11 -3
  149. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_trio.py +11 -3
  150. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/_async_poller.py +5 -2
  151. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/_poller.py +4 -1
  152. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/async_base_polling.py +3 -1
  153. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/base_polling.py +47 -16
  154. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_helpers.py +3 -1
  155. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_http_response_impl.py +1 -1
  156. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_requests_basic.py +3 -1
  157. py2docfx/venv/venv1/Lib/site-packages/azure/core/serialization.py +1 -1
  158. py2docfx/venv/venv1/Lib/site-packages/azure/core/settings.py +15 -3
  159. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_abstract_span.py +15 -5
  160. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/common.py +1 -1
  161. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator.py +12 -1
  162. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator_async.py +24 -4
  163. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/__init__.py +119 -110
  164. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/_version.py +1 -1
  165. py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared.py +3 -1
  166. py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared_async.py +10 -1
  167. py2docfx/venv/venv1/Lib/site-packages/google/api/client_pb2.py +41 -39
  168. py2docfx/venv/venv1/Lib/site-packages/google/api/error_reason_pb2.py +2 -2
  169. py2docfx/venv/venv1/Lib/site-packages/google/api/httpbody_pb2.py +2 -2
  170. py2docfx/venv/venv1/Lib/site-packages/google/api/metric_pb2.py +17 -11
  171. py2docfx/venv/venv1/Lib/site-packages/google/api_core/client_options.py +17 -13
  172. py2docfx/venv/venv1/Lib/site-packages/google/api_core/protobuf_helpers.py +1 -3
  173. py2docfx/venv/venv1/Lib/site-packages/google/api_core/version.py +1 -1
  174. py2docfx/venv/venv1/Lib/site-packages/google/auth/_default.py +4 -0
  175. py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/_metadata.py +1 -1
  176. py2docfx/venv/venv1/Lib/site-packages/google/auth/iam.py +25 -8
  177. py2docfx/venv/venv1/Lib/site-packages/google/auth/impersonated_credentials.py +34 -16
  178. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_requests_base.py +2 -1
  179. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/requests.py +2 -3
  180. py2docfx/venv/venv1/Lib/site-packages/google/auth/version.py +1 -1
  181. py2docfx/venv/venv1/Lib/site-packages/google/oauth2/_client.py +10 -2
  182. py2docfx/venv/venv1/Lib/site-packages/google/oauth2/service_account.py +1 -0
  183. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +27 -32
  184. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
  185. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
  186. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
  187. py2docfx/venv/venv1/Lib/site-packages/proto/enums.py +3 -1
  188. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/collections/repeated.py +7 -2
  189. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/compat.py +18 -21
  190. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/rules/message.py +7 -3
  191. py2docfx/venv/venv1/Lib/site-packages/proto/message.py +6 -35
  192. py2docfx/venv/venv1/Lib/site-packages/proto/version.py +1 -1
  193. py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +7 -9
  194. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
  195. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
  196. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
  197. py2docfx/venv/venv1/Lib/site-packages/setuptools/_importlib.py +1 -4
  198. py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +5 -8
  199. py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +2 -1
  200. py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +53 -0
  201. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
  202. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
  203. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
  204. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  205. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  206. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
  207. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
  208. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
  209. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
  210. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
  211. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
  212. py2docfx/venv/venv1/Lib/site-packages/setuptools/archive_util.py +6 -4
  213. py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +23 -17
  214. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/__init__.py +9 -1
  215. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
  216. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/alias.py +3 -4
  217. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
  218. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
  219. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +18 -45
  220. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build.py +3 -3
  221. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_clib.py +2 -9
  222. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +13 -12
  223. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_py.py +17 -16
  224. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +4 -4
  225. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/dist_info.py +3 -7
  226. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +55 -78
  227. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +19 -21
  228. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +29 -30
  229. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +31 -13
  230. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_egg_info.py +2 -2
  231. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_lib.py +10 -7
  232. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
  233. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/rotate.py +6 -6
  234. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +9 -8
  235. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/setopt.py +2 -2
  236. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
  237. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/expand.py +22 -16
  238. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/pyprojecttoml.py +25 -10
  239. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
  240. py2docfx/venv/venv1/Lib/site-packages/setuptools/depends.py +26 -7
  241. py2docfx/venv/venv1/Lib/site-packages/setuptools/discovery.py +21 -14
  242. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +48 -45
  243. py2docfx/venv/venv1/Lib/site-packages/setuptools/errors.py +21 -26
  244. py2docfx/venv/venv1/Lib/site-packages/setuptools/extension.py +18 -6
  245. py2docfx/venv/venv1/Lib/site-packages/setuptools/glob.py +35 -15
  246. py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +6 -1
  247. py2docfx/venv/venv1/Lib/site-packages/setuptools/launch.py +1 -1
  248. py2docfx/venv/venv1/Lib/site-packages/setuptools/logging.py +2 -2
  249. py2docfx/venv/venv1/Lib/site-packages/setuptools/modified.py +16 -6
  250. py2docfx/venv/venv1/Lib/site-packages/setuptools/monkey.py +2 -2
  251. py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +25 -14
  252. py2docfx/venv/venv1/Lib/site-packages/setuptools/namespaces.py +2 -2
  253. py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +42 -43
  254. py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +19 -12
  255. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
  256. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
  257. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
  258. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +9 -2
  259. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
  260. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
  261. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
  262. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
  263. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
  264. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
  265. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
  266. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
  267. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
  268. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +3 -4
  269. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
  270. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  271. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
  272. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
  273. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
  274. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
  275. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
  276. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
  277. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
  278. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
  279. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
  280. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  281. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
  282. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
  283. py2docfx/venv/venv1/Lib/site-packages/setuptools/warnings.py +5 -2
  284. py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +4 -4
  285. py2docfx/venv/venv1/Lib/site-packages/wheel/__init__.py +1 -1
  286. py2docfx/venv/venv1/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
  287. py2docfx/venv/venv1/Lib/site-packages/wheel/bdist_wheel.py +17 -2
  288. py2docfx/venv/venv1/Lib/site-packages/wheel/cli/convert.py +280 -220
  289. py2docfx/venv/venv1/Lib/site-packages/wheel/util.py +0 -9
  290. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/METADATA +1 -1
  291. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/RECORD +293 -353
  292. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/WHEEL +1 -1
  293. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
  294. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
  295. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
  296. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
  297. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
  298. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
  299. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
  300. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
  301. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
  302. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
  303. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
  304. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
  305. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
  306. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
  307. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
  308. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
  309. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
  310. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
  311. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
  312. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
  313. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
  314. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
  315. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
  316. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
  317. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
  318. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
  319. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
  320. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
  321. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
  322. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
  323. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
  324. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
  325. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
  326. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
  327. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
  328. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
  329. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
  330. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
  331. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
  332. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
  333. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
  334. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
  335. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
  336. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
  337. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
  338. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
  339. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
  340. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
  341. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
  342. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
  343. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
  344. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
  345. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
  346. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
  347. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
  348. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
  349. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
  350. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
  351. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
  352. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
  353. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
  354. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
  355. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
  356. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
  357. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
  358. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
  359. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
  360. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
  361. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
  362. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
  363. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/top_level.txt +0 -0
@@ -4,11 +4,12 @@
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
+ import functools
7
8
  import re
8
9
  from typing import NewType, Tuple, Union, cast
9
10
 
10
11
  from .tags import Tag, parse_tag
11
- from .version import InvalidVersion, Version
12
+ from .version import InvalidVersion, Version, _TrimmedRelease
12
13
 
13
14
  BuildTag = Union[Tuple[()], Tuple[int, str]]
14
15
  NormalizedName = NewType("NormalizedName", str)
@@ -54,52 +55,40 @@ def is_normalized_name(name: str) -> bool:
54
55
  return _normalized_regex.match(name) is not None
55
56
 
56
57
 
58
+ @functools.singledispatch
57
59
  def canonicalize_version(
58
60
  version: Version | str, *, strip_trailing_zero: bool = True
59
61
  ) -> str:
60
62
  """
61
- This is very similar to Version.__str__, but has one subtle difference
62
- with the way it handles the release segment.
63
- """
64
- if isinstance(version, str):
65
- try:
66
- parsed = Version(version)
67
- except InvalidVersion:
68
- # Legacy versions cannot be normalized
69
- return version
70
- else:
71
- parsed = version
72
-
73
- parts = []
63
+ Return a canonical form of a version as a string.
74
64
 
75
- # Epoch
76
- if parsed.epoch != 0:
77
- parts.append(f"{parsed.epoch}!")
65
+ >>> canonicalize_version('1.0.1')
66
+ '1.0.1'
78
67
 
79
- # Release segment
80
- release_segment = ".".join(str(x) for x in parsed.release)
81
- if strip_trailing_zero:
82
- # NB: This strips trailing '.0's to normalize
83
- release_segment = re.sub(r"(\.0)+$", "", release_segment)
84
- parts.append(release_segment)
68
+ Per PEP 625, versions may have multiple canonical forms, differing
69
+ only by trailing zeros.
85
70
 
86
- # Pre-release
87
- if parsed.pre is not None:
88
- parts.append("".join(str(x) for x in parsed.pre))
71
+ >>> canonicalize_version('1.0.0')
72
+ '1'
73
+ >>> canonicalize_version('1.0.0', strip_trailing_zero=False)
74
+ '1.0.0'
89
75
 
90
- # Post-release
91
- if parsed.post is not None:
92
- parts.append(f".post{parsed.post}")
76
+ Invalid versions are returned unaltered.
93
77
 
94
- # Development release
95
- if parsed.dev is not None:
96
- parts.append(f".dev{parsed.dev}")
78
+ >>> canonicalize_version('foo bar baz')
79
+ 'foo bar baz'
80
+ """
81
+ return str(_TrimmedRelease(str(version)) if strip_trailing_zero else version)
97
82
 
98
- # Local version segment
99
- if parsed.local is not None:
100
- parts.append(f"+{parsed.local}")
101
83
 
102
- return "".join(parts)
84
+ @canonicalize_version.register
85
+ def _(version: str, *, strip_trailing_zero: bool = True) -> str:
86
+ try:
87
+ parsed = Version(version)
88
+ except InvalidVersion:
89
+ # Legacy versions cannot be normalized
90
+ return version
91
+ return canonicalize_version(parsed, strip_trailing_zero=strip_trailing_zero)
103
92
 
104
93
 
105
94
  def parse_wheel_filename(
@@ -107,28 +96,28 @@ def parse_wheel_filename(
107
96
  ) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]:
108
97
  if not filename.endswith(".whl"):
109
98
  raise InvalidWheelFilename(
110
- f"Invalid wheel filename (extension must be '.whl'): {filename}"
99
+ f"Invalid wheel filename (extension must be '.whl'): {filename!r}"
111
100
  )
112
101
 
113
102
  filename = filename[:-4]
114
103
  dashes = filename.count("-")
115
104
  if dashes not in (4, 5):
116
105
  raise InvalidWheelFilename(
117
- f"Invalid wheel filename (wrong number of parts): {filename}"
106
+ f"Invalid wheel filename (wrong number of parts): {filename!r}"
118
107
  )
119
108
 
120
109
  parts = filename.split("-", dashes - 2)
121
110
  name_part = parts[0]
122
111
  # See PEP 427 for the rules on escaping the project name.
123
112
  if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None:
124
- raise InvalidWheelFilename(f"Invalid project name: {filename}")
113
+ raise InvalidWheelFilename(f"Invalid project name: {filename!r}")
125
114
  name = canonicalize_name(name_part)
126
115
 
127
116
  try:
128
117
  version = Version(parts[1])
129
118
  except InvalidVersion as e:
130
119
  raise InvalidWheelFilename(
131
- f"Invalid wheel filename (invalid version): {filename}"
120
+ f"Invalid wheel filename (invalid version): {filename!r}"
132
121
  ) from e
133
122
 
134
123
  if dashes == 5:
@@ -136,7 +125,7 @@ def parse_wheel_filename(
136
125
  build_match = _build_tag_regex.match(build_part)
137
126
  if build_match is None:
138
127
  raise InvalidWheelFilename(
139
- f"Invalid build number: {build_part} in '{filename}'"
128
+ f"Invalid build number: {build_part} in {filename!r}"
140
129
  )
141
130
  build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2)))
142
131
  else:
@@ -153,14 +142,14 @@ def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]:
153
142
  else:
154
143
  raise InvalidSdistFilename(
155
144
  f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):"
156
- f" {filename}"
145
+ f" {filename!r}"
157
146
  )
158
147
 
159
148
  # We are requiring a PEP 440 version, which cannot contain dashes,
160
149
  # so we split on the last dash.
161
150
  name_part, sep, version_part = file_stem.rpartition("-")
162
151
  if not sep:
163
- raise InvalidSdistFilename(f"Invalid sdist filename: {filename}")
152
+ raise InvalidSdistFilename(f"Invalid sdist filename: {filename!r}")
164
153
 
165
154
  name = canonicalize_name(name_part)
166
155
 
@@ -168,7 +157,7 @@ def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]:
168
157
  version = Version(version_part)
169
158
  except InvalidVersion as e:
170
159
  raise InvalidSdistFilename(
171
- f"Invalid sdist filename (invalid version): {filename}"
160
+ f"Invalid sdist filename (invalid version): {filename!r}"
172
161
  ) from e
173
162
 
174
163
  return (name, version)
@@ -15,7 +15,7 @@ from typing import Any, Callable, NamedTuple, SupportsInt, Tuple, Union
15
15
 
16
16
  from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType
17
17
 
18
- __all__ = ["VERSION_PATTERN", "parse", "Version", "InvalidVersion"]
18
+ __all__ = ["VERSION_PATTERN", "InvalidVersion", "Version", "parse"]
19
19
 
20
20
  LocalType = Tuple[Union[int, str], ...]
21
21
 
@@ -199,7 +199,7 @@ class Version(_BaseVersion):
199
199
  # Validate the version and parse it into pieces
200
200
  match = self._regex.search(version)
201
201
  if not match:
202
- raise InvalidVersion(f"Invalid version: '{version}'")
202
+ raise InvalidVersion(f"Invalid version: {version!r}")
203
203
 
204
204
  # Store the parsed out pieces of the version
205
205
  self._version = _Version(
@@ -232,7 +232,7 @@ class Version(_BaseVersion):
232
232
  return f"<Version('{self}')>"
233
233
 
234
234
  def __str__(self) -> str:
235
- """A string representation of the version that can be rounded-tripped.
235
+ """A string representation of the version that can be round-tripped.
236
236
 
237
237
  >>> str(Version("1.0a5"))
238
238
  '1.0a5'
@@ -350,8 +350,8 @@ class Version(_BaseVersion):
350
350
  '1.2.3'
351
351
  >>> Version("1.2.3+abc").public
352
352
  '1.2.3'
353
- >>> Version("1.2.3+abc.dev1").public
354
- '1.2.3'
353
+ >>> Version("1!1.2.3dev1+abc").public
354
+ '1!1.2.3.dev1'
355
355
  """
356
356
  return str(self).split("+", 1)[0]
357
357
 
@@ -363,7 +363,7 @@ class Version(_BaseVersion):
363
363
  '1.2.3'
364
364
  >>> Version("1.2.3+abc").base_version
365
365
  '1.2.3'
366
- >>> Version("1!1.2.3+abc.dev1").base_version
366
+ >>> Version("1!1.2.3dev1+abc").base_version
367
367
  '1!1.2.3'
368
368
 
369
369
  The "base version" is the public version of the project without any pre or post
@@ -451,6 +451,23 @@ class Version(_BaseVersion):
451
451
  return self.release[2] if len(self.release) >= 3 else 0
452
452
 
453
453
 
454
+ class _TrimmedRelease(Version):
455
+ @property
456
+ def release(self) -> tuple[int, ...]:
457
+ """
458
+ Release segment without any trailing zeros.
459
+
460
+ >>> _TrimmedRelease('1.0.0').release
461
+ (1,)
462
+ >>> _TrimmedRelease('0.0').release
463
+ (0,)
464
+ """
465
+ rel = super().release
466
+ nonzeros = (index for index, val in enumerate(rel) if val)
467
+ last_nonzero = max(nonzeros, default=0)
468
+ return rel[: last_nonzero + 1]
469
+
470
+
454
471
  def _parse_letter_version(
455
472
  letter: str | None, number: str | bytes | SupportsInt | None
456
473
  ) -> tuple[str, int] | None:
@@ -476,7 +493,9 @@ def _parse_letter_version(
476
493
  letter = "post"
477
494
 
478
495
  return letter, int(number)
479
- if not letter and number:
496
+
497
+ assert not letter
498
+ if number:
480
499
  # We assume if we are given a number, but we are not given a letter
481
500
  # then this is using the implicit post release syntax (e.g. 1.0-1)
482
501
  letter = "post"
@@ -21,8 +21,8 @@ from __future__ import annotations
21
21
 
22
22
  import sys
23
23
 
24
- if sys.version_info < (3, 8): # noqa: UP036 # Check for unsupported versions
25
- raise RuntimeError("Python 3.8 or later is required")
24
+ if sys.version_info < (3, 9): # noqa: UP036 # Check for unsupported versions
25
+ raise RuntimeError("Python 3.9 or later is required")
26
26
 
27
27
  import _imp
28
28
  import collections
@@ -50,22 +50,17 @@ import types
50
50
  import warnings
51
51
  import zipfile
52
52
  import zipimport
53
+ from collections.abc import Iterable, Iterator, Mapping, MutableSequence
53
54
  from pkgutil import get_importer
54
55
  from typing import (
55
56
  TYPE_CHECKING,
56
57
  Any,
57
58
  BinaryIO,
58
59
  Callable,
59
- Dict,
60
- Iterable,
61
- Iterator,
62
60
  Literal,
63
- Mapping,
64
- MutableSequence,
65
61
  NamedTuple,
66
62
  NoReturn,
67
63
  Protocol,
68
- Tuple,
69
64
  TypeVar,
70
65
  Union,
71
66
  overload,
@@ -172,7 +167,7 @@ def _sget_dict(val):
172
167
  return val.copy()
173
168
 
174
169
 
175
- def _sset_dict(key, ob, state):
170
+ def _sset_dict(key, ob, state) -> None:
176
171
  ob.clear()
177
172
  ob.update(state)
178
173
 
@@ -181,7 +176,7 @@ def _sget_object(val):
181
176
  return val.__getstate__()
182
177
 
183
178
 
184
- def _sset_object(key, ob, state):
179
+ def _sset_object(key, ob, state) -> None:
185
180
  ob.__setstate__(state)
186
181
 
187
182
 
@@ -387,7 +382,7 @@ class UnknownExtra(ResolutionError):
387
382
 
388
383
  _provider_factories: dict[type[_ModuleLike], _ProviderFactoryType] = {}
389
384
 
390
- PY_MAJOR = '{}.{}'.format(*sys.version_info)
385
+ PY_MAJOR = f'{sys.version_info.major}.{sys.version_info.minor}'
391
386
  EGG_DIST = 3
392
387
  BINARY_DIST = 2
393
388
  SOURCE_DIST = 1
@@ -424,7 +419,7 @@ def get_provider(moduleOrReq: str | Requirement) -> IResourceProvider | Distribu
424
419
  return _find_adapter(_provider_factories, loader)(module)
425
420
 
426
421
 
427
- @functools.lru_cache(maxsize=None)
422
+ @functools.cache
428
423
  def _macos_vers():
429
424
  version = platform.mac_ver()[0]
430
425
  # fallback for MacPorts
@@ -1090,7 +1085,7 @@ class WorkingSet:
1090
1085
  for dist in self:
1091
1086
  callback(dist)
1092
1087
 
1093
- def _added_new(self, dist):
1088
+ def _added_new(self, dist) -> None:
1094
1089
  for callback in self.callbacks:
1095
1090
  callback(dist)
1096
1091
 
@@ -1120,7 +1115,7 @@ class WorkingSet:
1120
1115
  self.callbacks = callbacks[:]
1121
1116
 
1122
1117
 
1123
- class _ReqExtras(Dict["Requirement", Tuple[str, ...]]):
1118
+ class _ReqExtras(dict["Requirement", tuple[str, ...]]):
1124
1119
  """
1125
1120
  Map each requirement to the extras that demanded it.
1126
1121
  """
@@ -1463,7 +1458,7 @@ class ResourceManager:
1463
1458
  return target_path
1464
1459
 
1465
1460
  @staticmethod
1466
- def _warn_unsafe_extraction_path(path):
1461
+ def _warn_unsafe_extraction_path(path) -> None:
1467
1462
  """
1468
1463
  If the default extraction path is overridden and set to an insecure
1469
1464
  location, such as /tmp, it opens up an opportunity for an attacker to
@@ -1577,7 +1572,7 @@ def safe_version(version: str) -> str:
1577
1572
  return re.sub('[^A-Za-z0-9.]+', '-', version)
1578
1573
 
1579
1574
 
1580
- def _forgiving_version(version):
1575
+ def _forgiving_version(version) -> str:
1581
1576
  """Fallback when ``safe_version`` is not safe enough
1582
1577
  >>> parse_version(_forgiving_version('0.23ubuntu1'))
1583
1578
  <Version('0.23.dev0+sanitized.ubuntu1')>
@@ -1779,7 +1774,7 @@ class NullProvider:
1779
1774
  return base
1780
1775
 
1781
1776
  @staticmethod
1782
- def _validate_resource_path(path):
1777
+ def _validate_resource_path(path) -> None:
1783
1778
  """
1784
1779
  Validate the resource paths according to the docs.
1785
1780
  https://setuptools.pypa.io/en/latest/pkg_resources.html#basic-resource-access
@@ -1890,7 +1885,7 @@ class EggProvider(NullProvider):
1890
1885
  egg = next(eggs, None)
1891
1886
  egg and self._set_egg(egg)
1892
1887
 
1893
- def _set_egg(self, path: str):
1888
+ def _set_egg(self, path: str) -> None:
1894
1889
  self.egg_name = os.path.basename(path)
1895
1890
  self.egg_info = os.path.join(path, 'EGG-INFO')
1896
1891
  self.egg_root = path
@@ -1918,7 +1913,7 @@ class DefaultProvider(EggProvider):
1918
1913
  return stream.read()
1919
1914
 
1920
1915
  @classmethod
1921
- def _register(cls):
1916
+ def _register(cls) -> None:
1922
1917
  loader_names = (
1923
1918
  'SourceFileLoader',
1924
1919
  'SourcelessFileLoader',
@@ -1952,7 +1947,7 @@ class EmptyProvider(NullProvider):
1952
1947
  empty_provider = EmptyProvider()
1953
1948
 
1954
1949
 
1955
- class ZipManifests(Dict[str, "MemoizedZipManifests.manifest_mod"]):
1950
+ class ZipManifests(dict[str, "MemoizedZipManifests.manifest_mod"]):
1956
1951
  """
1957
1952
  zip manifest builder
1958
1953
  """
@@ -2069,7 +2064,7 @@ class ZipProvider(EggProvider):
2069
2064
  # return the extracted directory name
2070
2065
  return os.path.dirname(last)
2071
2066
 
2072
- timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
2067
+ timestamp, _size = self._get_date_and_size(self.zipinfo[zip_path])
2073
2068
 
2074
2069
  if not WRITE_SUPPORT:
2075
2070
  raise OSError(
@@ -2208,7 +2203,7 @@ class FileMetadata(EmptyProvider):
2208
2203
  self._warn_on_replacement(metadata)
2209
2204
  return metadata
2210
2205
 
2211
- def _warn_on_replacement(self, metadata):
2206
+ def _warn_on_replacement(self, metadata) -> None:
2212
2207
  replacement_char = '�'
2213
2208
  if replacement_char in metadata:
2214
2209
  tmpl = "{self.path} could not be properly decoded in UTF-8"
@@ -2505,7 +2500,7 @@ def _handle_ns(packageName, path_item):
2505
2500
  return subpath
2506
2501
 
2507
2502
 
2508
- def _rebuild_mod_path(orig_path, package_name, module: types.ModuleType):
2503
+ def _rebuild_mod_path(orig_path, package_name, module: types.ModuleType) -> None:
2509
2504
  """
2510
2505
  Rebuild module.__path__ ensuring that all entries are ordered
2511
2506
  corresponding to their sys.path order
@@ -2624,7 +2619,7 @@ def null_ns_handler(
2624
2619
  path_item: str | None,
2625
2620
  packageName: str | None,
2626
2621
  module: _ModuleLike | None,
2627
- ):
2622
+ ) -> None:
2628
2623
  return None
2629
2624
 
2630
2625
 
@@ -2635,7 +2630,7 @@ register_namespace_handler(object, null_ns_handler)
2635
2630
  def normalize_path(filename: StrPath) -> str: ...
2636
2631
  @overload
2637
2632
  def normalize_path(filename: BytesPath) -> bytes: ...
2638
- def normalize_path(filename: StrOrBytesPath):
2633
+ def normalize_path(filename: StrOrBytesPath) -> str | bytes:
2639
2634
  """Normalize a file/dir name for comparison purposes"""
2640
2635
  return os.path.normcase(os.path.realpath(os.path.normpath(_cygwin_patch(filename))))
2641
2636
 
@@ -2662,7 +2657,7 @@ if TYPE_CHECKING:
2662
2657
 
2663
2658
  else:
2664
2659
 
2665
- @functools.lru_cache(maxsize=None)
2660
+ @functools.cache
2666
2661
  def _normalize_cached(filename):
2667
2662
  return normalize_path(filename)
2668
2663
 
@@ -2691,7 +2686,7 @@ def _is_unpacked_egg(path):
2691
2686
  )
2692
2687
 
2693
2688
 
2694
- def _set_parent_ns(packageName):
2689
+ def _set_parent_ns(packageName) -> None:
2695
2690
  parts = packageName.split('.')
2696
2691
  name = parts.pop()
2697
2692
  if parts:
@@ -2777,7 +2772,7 @@ class EntryPoint:
2777
2772
  if require:
2778
2773
  # We could pass `env` and `installer` directly,
2779
2774
  # but keeping `*args` and `**kwargs` for backwards compatibility
2780
- self.require(*args, **kwargs) # type: ignore
2775
+ self.require(*args, **kwargs) # type: ignore[arg-type]
2781
2776
  return self.resolve()
2782
2777
 
2783
2778
  def resolve(self) -> _ResolvedEntryPoint:
@@ -3336,7 +3331,7 @@ class Distribution:
3336
3331
  " to sys.path" % (modname, fn, self.location),
3337
3332
  )
3338
3333
 
3339
- def has_version(self):
3334
+ def has_version(self) -> bool:
3340
3335
  try:
3341
3336
  self.version
3342
3337
  except ValueError:
@@ -3552,7 +3547,7 @@ def ensure_directory(path: StrOrBytesPath) -> None:
3552
3547
  os.makedirs(dirname, exist_ok=True)
3553
3548
 
3554
3549
 
3555
- def _bypass_ensure_directory(path):
3550
+ def _bypass_ensure_directory(path) -> None:
3556
3551
  """Sandbox-bypassing version of ensure_directory()"""
3557
3552
  if not WRITE_SUPPORT:
3558
3553
  raise OSError('"os.mkdir" not supported on this platform.')
@@ -3658,7 +3653,7 @@ def _call_aside(f, *args, **kwargs):
3658
3653
 
3659
3654
 
3660
3655
  @_call_aside
3661
- def _initialize(g=globals()):
3656
+ def _initialize(g=globals()) -> None:
3662
3657
  "Set up global resource manager (deliberately not state-saved)"
3663
3658
  manager = ResourceManager()
3664
3659
  g['_manager'] = manager
@@ -3670,7 +3665,7 @@ def _initialize(g=globals()):
3670
3665
 
3671
3666
 
3672
3667
  @_call_aside
3673
- def _initialize_master_working_set():
3668
+ def _initialize_master_working_set() -> None:
3674
3669
  """
3675
3670
  Prepare the master working set and make the ``require()``
3676
3671
  API available.
@@ -236,7 +236,7 @@ def make_distribution_no_version(tmpdir, basename):
236
236
 
237
237
 
238
238
  @pytest.mark.parametrize(
239
- 'suffix, expected_filename, expected_dist_type',
239
+ ("suffix", "expected_filename", "expected_dist_type"),
240
240
  [
241
241
  ('egg-info', 'PKG-INFO', EggInfoDistribution),
242
242
  ('dist-info', 'METADATA', DistInfoDistribution),
@@ -376,7 +376,7 @@ class TestDeepVersionLookupDistutils:
376
376
  assert dist.version == version
377
377
 
378
378
  @pytest.mark.parametrize(
379
- 'unnormalized, normalized',
379
+ ("unnormalized", "normalized"),
380
380
  [
381
381
  ('foo', 'foo'),
382
382
  ('foo/', 'foo'),
@@ -398,7 +398,7 @@ class TestDeepVersionLookupDistutils:
398
398
  reason='Testing case-insensitive filesystems.',
399
399
  )
400
400
  @pytest.mark.parametrize(
401
- 'unnormalized, normalized',
401
+ ("unnormalized", "normalized"),
402
402
  [
403
403
  ('MiXeD/CasE', 'mixed/case'),
404
404
  ],
@@ -414,7 +414,7 @@ class TestDeepVersionLookupDistutils:
414
414
  reason='Testing systems using backslashes as path separators.',
415
415
  )
416
416
  @pytest.mark.parametrize(
417
- 'unnormalized, expected',
417
+ ("unnormalized", "expected"),
418
418
  [
419
419
  ('forward/slash', 'forward\\slash'),
420
420
  ('forward/slash/', 'forward\\slash'),
@@ -32,7 +32,7 @@ def pairwise(iterable):
32
32
  class Metadata(pkg_resources.EmptyProvider):
33
33
  """Mock object to return metadata as if from an on-disk distribution"""
34
34
 
35
- def __init__(self, *pairs):
35
+ def __init__(self, *pairs) -> None:
36
36
  self.metadata = dict(pairs)
37
37
 
38
38
  def has_metadata(self, name) -> bool:
@@ -119,7 +119,7 @@ class TestDistro:
119
119
  self.checkFooPkg(d)
120
120
 
121
121
  d = Distribution("/some/path")
122
- assert d.py_version == '{}.{}'.format(*sys.version_info)
122
+ assert d.py_version == f'{sys.version_info.major}.{sys.version_info.minor}'
123
123
  assert d.platform is None
124
124
 
125
125
  def testDistroParse(self):
@@ -693,14 +693,14 @@ class TestParsing:
693
693
  ) != Requirement.parse("name[foo,bar]==1.0;python_version=='3.6'")
694
694
 
695
695
  def test_local_version(self):
696
- (req,) = parse_requirements('foo==1.0+org1')
696
+ parse_requirements('foo==1.0+org1')
697
697
 
698
698
  def test_spaces_between_multiple_versions(self):
699
- (req,) = parse_requirements('foo>=1.0, <3')
700
- (req,) = parse_requirements('foo >= 1.0, < 3')
699
+ parse_requirements('foo>=1.0, <3')
700
+ parse_requirements('foo >= 1.0, < 3')
701
701
 
702
702
  @pytest.mark.parametrize(
703
- ['lower', 'upper'],
703
+ ("lower", "upper"),
704
704
  [
705
705
  ('1.2-rc1', '1.2rc1'),
706
706
  ('0.4', '0.4.0'),
@@ -724,7 +724,7 @@ class TestParsing:
724
724
  """
725
725
 
726
726
  @pytest.mark.parametrize(
727
- ['lower', 'upper'],
727
+ ("lower", "upper"),
728
728
  [
729
729
  ('2.1', '2.1.1'),
730
730
  ('2a1', '2b0'),
@@ -56,7 +56,7 @@ def parse_distributions(s):
56
56
 
57
57
 
58
58
  class FakeInstaller:
59
- def __init__(self, installable_dists):
59
+ def __init__(self, installable_dists) -> None:
60
60
  self._installable_dists = installable_dists
61
61
 
62
62
  def __call__(self, req):
@@ -60,7 +60,7 @@ def _install_setup_requires(attrs):
60
60
  fetch_build_eggs interface.
61
61
  """
62
62
 
63
- def __init__(self, attrs: Mapping[str, object]):
63
+ def __init__(self, attrs: Mapping[str, object]) -> None:
64
64
  _incl = 'dependency_links', 'setup_requires'
65
65
  filtered = {k: attrs[k] for k in set(_incl) & set(attrs)}
66
66
  super().__init__(filtered)
@@ -70,7 +70,7 @@ def _install_setup_requires(attrs):
70
70
  def _get_project_config_files(self, filenames=None):
71
71
  """Ignore ``pyproject.toml``, they are not related to setup_requires"""
72
72
  try:
73
- cfg, toml = super()._split_standard_project_metadata(filenames)
73
+ cfg, _toml = super()._split_standard_project_metadata(filenames)
74
74
  except Exception:
75
75
  return filenames, ()
76
76
  return cfg, ()
@@ -89,7 +89,7 @@ def _install_setup_requires(attrs):
89
89
  _fetch_build_eggs(dist)
90
90
 
91
91
 
92
- def _fetch_build_eggs(dist):
92
+ def _fetch_build_eggs(dist: Distribution):
93
93
  try:
94
94
  dist.fetch_build_eggs(dist.setup_requires)
95
95
  except Exception as ex:
@@ -120,10 +120,8 @@ def setup(**attrs):
120
120
  setup.__doc__ = distutils.core.setup.__doc__
121
121
 
122
122
  if TYPE_CHECKING:
123
- from typing_extensions import TypeAlias
124
-
125
123
  # Work around a mypy issue where type[T] can't be used as a base: https://github.com/python/mypy/issues/10962
126
- _Command: TypeAlias = distutils.core.Command
124
+ from distutils.core import Command as _Command
127
125
  else:
128
126
  _Command = monkey.get_unpatched(distutils.core.Command)
129
127
 
@@ -169,7 +167,7 @@ class Command(_Command):
169
167
  command_consumes_arguments = False
170
168
  distribution: Distribution # override distutils.dist.Distribution with setuptools.dist.Distribution
171
169
 
172
- def __init__(self, dist: Distribution, **kw):
170
+ def __init__(self, dist: Distribution, **kw) -> None:
173
171
  """
174
172
  Construct the command for dist, updating
175
173
  vars(self) with any keyword parameters.
@@ -188,7 +186,7 @@ class Command(_Command):
188
186
  )
189
187
  return val
190
188
 
191
- def ensure_string_list(self, option):
189
+ def ensure_string_list(self, option: str) -> None:
192
190
  r"""Ensure that 'option' is a list of strings. If 'option' is
193
191
  currently a string, we split it either on /,\s*/ or /\s+/, so
194
192
  "foo bar baz", "foo,bar,baz", and "foo, bar baz" all become
@@ -228,7 +226,7 @@ class Command(_Command):
228
226
  ) -> _Command:
229
227
  cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
230
228
  vars(cmd).update(kw)
231
- return cmd
229
+ return cmd # pyright: ignore[reportReturnType] # pypa/distutils#307
232
230
 
233
231
  @abstractmethod
234
232
  def initialize_options(self) -> None:
@@ -26,7 +26,7 @@ else:
26
26
 
27
27
  def aix_platform(osname, version, release):
28
28
  try:
29
- import _aix_support # type: ignore
29
+ import _aix_support
30
30
 
31
31
  return _aix_support.aix_platform()
32
32
  except ImportError: