py2docfx 0.1.9.dev1897554__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 (377) 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/google/protobuf/__init__.py +1 -1
  184. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +2 -2
  185. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +2 -2
  186. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +2 -2
  187. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +2 -2
  188. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +2 -2
  189. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +2 -2
  190. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +2 -2
  191. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +1 -7
  192. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +2 -2
  193. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +2 -2
  194. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +2 -2
  195. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +2 -2
  196. py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +2 -2
  197. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +27 -32
  198. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
  199. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
  200. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
  201. py2docfx/venv/venv1/Lib/site-packages/proto/enums.py +3 -1
  202. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/collections/repeated.py +7 -2
  203. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/compat.py +18 -21
  204. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/rules/message.py +7 -3
  205. py2docfx/venv/venv1/Lib/site-packages/proto/message.py +6 -35
  206. py2docfx/venv/venv1/Lib/site-packages/proto/version.py +1 -1
  207. py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +7 -9
  208. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
  209. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
  210. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
  211. py2docfx/venv/venv1/Lib/site-packages/setuptools/_importlib.py +1 -4
  212. py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +5 -8
  213. py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +2 -1
  214. py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +53 -0
  215. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
  216. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
  217. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
  218. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  219. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  220. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
  221. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
  222. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
  223. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
  224. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
  225. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
  226. py2docfx/venv/venv1/Lib/site-packages/setuptools/archive_util.py +6 -4
  227. py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +23 -17
  228. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/__init__.py +9 -1
  229. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
  230. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/alias.py +3 -4
  231. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
  232. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
  233. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +18 -45
  234. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build.py +3 -3
  235. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_clib.py +2 -9
  236. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +13 -12
  237. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_py.py +17 -16
  238. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +4 -4
  239. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/dist_info.py +3 -7
  240. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +55 -78
  241. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +19 -21
  242. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +29 -30
  243. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +31 -13
  244. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_egg_info.py +2 -2
  245. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_lib.py +10 -7
  246. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
  247. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/rotate.py +6 -6
  248. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +9 -8
  249. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/setopt.py +2 -2
  250. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
  251. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/expand.py +22 -16
  252. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/pyprojecttoml.py +25 -10
  253. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
  254. py2docfx/venv/venv1/Lib/site-packages/setuptools/depends.py +26 -7
  255. py2docfx/venv/venv1/Lib/site-packages/setuptools/discovery.py +21 -14
  256. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +48 -45
  257. py2docfx/venv/venv1/Lib/site-packages/setuptools/errors.py +21 -26
  258. py2docfx/venv/venv1/Lib/site-packages/setuptools/extension.py +18 -6
  259. py2docfx/venv/venv1/Lib/site-packages/setuptools/glob.py +35 -15
  260. py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +6 -1
  261. py2docfx/venv/venv1/Lib/site-packages/setuptools/launch.py +1 -1
  262. py2docfx/venv/venv1/Lib/site-packages/setuptools/logging.py +2 -2
  263. py2docfx/venv/venv1/Lib/site-packages/setuptools/modified.py +16 -6
  264. py2docfx/venv/venv1/Lib/site-packages/setuptools/monkey.py +2 -2
  265. py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +25 -14
  266. py2docfx/venv/venv1/Lib/site-packages/setuptools/namespaces.py +2 -2
  267. py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +42 -43
  268. py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +19 -12
  269. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
  270. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
  271. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
  272. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +9 -2
  273. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
  274. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
  275. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
  276. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
  277. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
  278. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
  279. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
  280. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
  281. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
  282. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +3 -4
  283. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
  284. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  285. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
  286. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
  287. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
  288. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
  289. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
  290. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
  291. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
  292. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
  293. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
  294. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  295. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
  296. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
  297. py2docfx/venv/venv1/Lib/site-packages/setuptools/warnings.py +5 -2
  298. py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +4 -4
  299. py2docfx/venv/venv1/Lib/site-packages/wheel/__init__.py +1 -1
  300. py2docfx/venv/venv1/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
  301. py2docfx/venv/venv1/Lib/site-packages/wheel/bdist_wheel.py +17 -2
  302. py2docfx/venv/venv1/Lib/site-packages/wheel/cli/convert.py +280 -220
  303. py2docfx/venv/venv1/Lib/site-packages/wheel/util.py +0 -9
  304. {py2docfx-0.1.9.dev1897554.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/METADATA +1 -1
  305. {py2docfx-0.1.9.dev1897554.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/RECORD +307 -367
  306. {py2docfx-0.1.9.dev1897554.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/WHEEL +1 -1
  307. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
  308. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
  309. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
  310. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
  311. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
  312. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
  313. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
  314. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
  315. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
  316. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
  317. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
  318. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
  319. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
  320. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
  321. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
  322. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
  323. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
  324. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
  325. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
  326. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
  327. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
  328. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
  329. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
  330. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
  331. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
  332. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
  333. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
  334. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
  335. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
  336. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
  337. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
  338. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
  339. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
  340. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
  341. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
  342. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
  343. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
  344. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
  345. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
  346. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
  347. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
  348. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
  349. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
  350. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
  351. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
  352. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
  353. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
  354. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
  355. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
  356. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
  357. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
  358. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
  359. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
  360. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
  361. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
  362. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
  363. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
  364. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
  365. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
  366. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
  367. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
  368. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
  369. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
  370. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
  371. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
  372. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
  373. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
  374. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
  375. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
  376. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
  377. {py2docfx-0.1.9.dev1897554.dist-info → py2docfx-0.1.9.dev1917798.dist-info}/top_level.txt +0 -0
@@ -18,9 +18,9 @@ from .utils import canonicalize_name
18
18
 
19
19
  __all__ = [
20
20
  "InvalidMarker",
21
+ "Marker",
21
22
  "UndefinedComparison",
22
23
  "UndefinedEnvironmentName",
23
- "Marker",
24
24
  "default_environment",
25
25
  ]
26
26
 
@@ -232,7 +232,7 @@ def _evaluate_markers(markers: MarkerList, environment: dict[str, str]) -> bool:
232
232
 
233
233
 
234
234
  def format_full_version(info: sys._version_info) -> str:
235
- version = "{0.major}.{0.minor}.{0.micro}".format(info)
235
+ version = f"{info.major}.{info.minor}.{info.micro}"
236
236
  kind = info.releaselevel
237
237
  if kind != "final":
238
238
  version += kind[0] + str(info.serial)
@@ -309,12 +309,6 @@ class Marker:
309
309
  """
310
310
  current_environment = cast("dict[str, str]", default_environment())
311
311
  current_environment["extra"] = ""
312
- # Work around platform.python_version() returning something that is not PEP 440
313
- # compliant for non-tagged Python builds. We preserve default_environment()'s
314
- # behavior of returning platform.python_version() verbatim, and leave it to the
315
- # caller to provide a syntactically valid version if they want to override it.
316
- if current_environment["python_full_version"].endswith("+"):
317
- current_environment["python_full_version"] += "local"
318
312
  if environment is not None:
319
313
  current_environment.update(environment)
320
314
  # The API used to allow setting extra to None. We need to handle this
@@ -322,4 +316,16 @@ class Marker:
322
316
  if current_environment["extra"] is None:
323
317
  current_environment["extra"] = ""
324
318
 
325
- return _evaluate_markers(self._markers, current_environment)
319
+ return _evaluate_markers(
320
+ self._markers, _repair_python_full_version(current_environment)
321
+ )
322
+
323
+
324
+ def _repair_python_full_version(env: dict[str, str]) -> dict[str, str]:
325
+ """
326
+ Work around platform.python_version() returning something that is not PEP 440
327
+ compliant for non-tagged Python builds.
328
+ """
329
+ if env["python_full_version"].endswith("+"):
330
+ env["python_full_version"] += "local"
331
+ return env
@@ -5,6 +5,8 @@ import email.header
5
5
  import email.message
6
6
  import email.parser
7
7
  import email.policy
8
+ import pathlib
9
+ import sys
8
10
  import typing
9
11
  from typing import (
10
12
  Any,
@@ -15,15 +17,16 @@ from typing import (
15
17
  cast,
16
18
  )
17
19
 
18
- from . import requirements, specifiers, utils
20
+ from . import licenses, requirements, specifiers, utils
19
21
  from . import version as version_module
22
+ from .licenses import NormalizedLicenseExpression
20
23
 
21
24
  T = typing.TypeVar("T")
22
25
 
23
26
 
24
- try:
25
- ExceptionGroup
26
- except NameError: # pragma: no cover
27
+ if sys.version_info >= (3, 11): # pragma: no cover
28
+ ExceptionGroup = ExceptionGroup
29
+ else: # pragma: no cover
27
30
 
28
31
  class ExceptionGroup(Exception):
29
32
  """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11.
@@ -42,9 +45,6 @@ except NameError: # pragma: no cover
42
45
  def __repr__(self) -> str:
43
46
  return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})"
44
47
 
45
- else: # pragma: no cover
46
- ExceptionGroup = ExceptionGroup
47
-
48
48
 
49
49
  class InvalidMetadata(ValueError):
50
50
  """A metadata field contains invalid data."""
@@ -128,6 +128,10 @@ class RawMetadata(TypedDict, total=False):
128
128
  # No new fields were added in PEP 685, just some edge case were
129
129
  # tightened up to provide better interoptability.
130
130
 
131
+ # Metadata 2.4 - PEP 639
132
+ license_expression: str
133
+ license_files: list[str]
134
+
131
135
 
132
136
  _STRING_FIELDS = {
133
137
  "author",
@@ -137,6 +141,7 @@ _STRING_FIELDS = {
137
141
  "download_url",
138
142
  "home_page",
139
143
  "license",
144
+ "license_expression",
140
145
  "maintainer",
141
146
  "maintainer_email",
142
147
  "metadata_version",
@@ -149,6 +154,7 @@ _STRING_FIELDS = {
149
154
  _LIST_FIELDS = {
150
155
  "classifiers",
151
156
  "dynamic",
157
+ "license_files",
152
158
  "obsoletes",
153
159
  "obsoletes_dist",
154
160
  "platforms",
@@ -167,7 +173,7 @@ _DICT_FIELDS = {
167
173
 
168
174
 
169
175
  def _parse_keywords(data: str) -> list[str]:
170
- """Split a string of comma-separate keyboards into a list of keywords."""
176
+ """Split a string of comma-separated keywords into a list of keywords."""
171
177
  return [k.strip() for k in data.split(",")]
172
178
 
173
179
 
@@ -216,16 +222,18 @@ def _get_payload(msg: email.message.Message, source: bytes | str) -> str:
216
222
  # If our source is a str, then our caller has managed encodings for us,
217
223
  # and we don't need to deal with it.
218
224
  if isinstance(source, str):
219
- payload: str = msg.get_payload()
225
+ payload = msg.get_payload()
226
+ assert isinstance(payload, str)
220
227
  return payload
221
228
  # If our source is a bytes, then we're managing the encoding and we need
222
229
  # to deal with it.
223
230
  else:
224
- bpayload: bytes = msg.get_payload(decode=True)
231
+ bpayload = msg.get_payload(decode=True)
232
+ assert isinstance(bpayload, bytes)
225
233
  try:
226
234
  return bpayload.decode("utf8", "strict")
227
- except UnicodeDecodeError:
228
- raise ValueError("payload in an invalid encoding")
235
+ except UnicodeDecodeError as exc:
236
+ raise ValueError("payload in an invalid encoding") from exc
229
237
 
230
238
 
231
239
  # The various parse_FORMAT functions here are intended to be as lenient as
@@ -251,6 +259,8 @@ _EMAIL_TO_RAW_MAPPING = {
251
259
  "home-page": "home_page",
252
260
  "keywords": "keywords",
253
261
  "license": "license",
262
+ "license-expression": "license_expression",
263
+ "license-file": "license_files",
254
264
  "maintainer": "maintainer",
255
265
  "maintainer-email": "maintainer_email",
256
266
  "metadata-version": "metadata_version",
@@ -426,7 +436,7 @@ def parse_email(data: bytes | str) -> tuple[RawMetadata, dict[str, list[str]]]:
426
436
  payload = _get_payload(parsed, data)
427
437
  except ValueError:
428
438
  unparsed.setdefault("description", []).append(
429
- parsed.get_payload(decode=isinstance(data, bytes))
439
+ parsed.get_payload(decode=isinstance(data, bytes)) # type: ignore[call-overload]
430
440
  )
431
441
  else:
432
442
  if payload:
@@ -453,8 +463,8 @@ _NOT_FOUND = object()
453
463
 
454
464
 
455
465
  # Keep the two values in sync.
456
- _VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"]
457
- _MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"]
466
+ _VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"]
467
+ _MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"]
458
468
 
459
469
  _REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"])
460
470
 
@@ -535,7 +545,7 @@ class _Validator(Generic[T]):
535
545
  except utils.InvalidName as exc:
536
546
  raise self._invalid_metadata(
537
547
  f"{value!r} is invalid for {{field}}", cause=exc
538
- )
548
+ ) from exc
539
549
  else:
540
550
  return value
541
551
 
@@ -547,7 +557,7 @@ class _Validator(Generic[T]):
547
557
  except version_module.InvalidVersion as exc:
548
558
  raise self._invalid_metadata(
549
559
  f"{value!r} is invalid for {{field}}", cause=exc
550
- )
560
+ ) from exc
551
561
 
552
562
  def _process_summary(self, value: str) -> str:
553
563
  """Check the field contains no newlines."""
@@ -591,10 +601,12 @@ class _Validator(Generic[T]):
591
601
  for dynamic_field in map(str.lower, value):
592
602
  if dynamic_field in {"name", "version", "metadata-version"}:
593
603
  raise self._invalid_metadata(
594
- f"{value!r} is not allowed as a dynamic field"
604
+ f"{dynamic_field!r} is not allowed as a dynamic field"
595
605
  )
596
606
  elif dynamic_field not in _EMAIL_TO_RAW_MAPPING:
597
- raise self._invalid_metadata(f"{value!r} is not a valid dynamic field")
607
+ raise self._invalid_metadata(
608
+ f"{dynamic_field!r} is not a valid dynamic field"
609
+ )
598
610
  return list(map(str.lower, value))
599
611
 
600
612
  def _process_provides_extra(
@@ -608,7 +620,7 @@ class _Validator(Generic[T]):
608
620
  except utils.InvalidName as exc:
609
621
  raise self._invalid_metadata(
610
622
  f"{name!r} is invalid for {{field}}", cause=exc
611
- )
623
+ ) from exc
612
624
  else:
613
625
  return normalized_names
614
626
 
@@ -618,7 +630,7 @@ class _Validator(Generic[T]):
618
630
  except specifiers.InvalidSpecifier as exc:
619
631
  raise self._invalid_metadata(
620
632
  f"{value!r} is invalid for {{field}}", cause=exc
621
- )
633
+ ) from exc
622
634
 
623
635
  def _process_requires_dist(
624
636
  self,
@@ -629,10 +641,49 @@ class _Validator(Generic[T]):
629
641
  for req in value:
630
642
  reqs.append(requirements.Requirement(req))
631
643
  except requirements.InvalidRequirement as exc:
632
- raise self._invalid_metadata(f"{req!r} is invalid for {{field}}", cause=exc)
644
+ raise self._invalid_metadata(
645
+ f"{req!r} is invalid for {{field}}", cause=exc
646
+ ) from exc
633
647
  else:
634
648
  return reqs
635
649
 
650
+ def _process_license_expression(
651
+ self, value: str
652
+ ) -> NormalizedLicenseExpression | None:
653
+ try:
654
+ return licenses.canonicalize_license_expression(value)
655
+ except ValueError as exc:
656
+ raise self._invalid_metadata(
657
+ f"{value!r} is invalid for {{field}}", cause=exc
658
+ ) from exc
659
+
660
+ def _process_license_files(self, value: list[str]) -> list[str]:
661
+ paths = []
662
+ for path in value:
663
+ if ".." in path:
664
+ raise self._invalid_metadata(
665
+ f"{path!r} is invalid for {{field}}, "
666
+ "parent directory indicators are not allowed"
667
+ )
668
+ if "*" in path:
669
+ raise self._invalid_metadata(
670
+ f"{path!r} is invalid for {{field}}, paths must be resolved"
671
+ )
672
+ if (
673
+ pathlib.PurePosixPath(path).is_absolute()
674
+ or pathlib.PureWindowsPath(path).is_absolute()
675
+ ):
676
+ raise self._invalid_metadata(
677
+ f"{path!r} is invalid for {{field}}, paths must be relative"
678
+ )
679
+ if pathlib.PureWindowsPath(path).as_posix() != path:
680
+ raise self._invalid_metadata(
681
+ f"{path!r} is invalid for {{field}}, "
682
+ "paths must use '/' delimiter"
683
+ )
684
+ paths.append(path)
685
+ return paths
686
+
636
687
 
637
688
  class Metadata:
638
689
  """Representation of distribution metadata.
@@ -688,8 +739,8 @@ class Metadata:
688
739
  field = _RAW_TO_EMAIL_MAPPING[key]
689
740
  exc = InvalidMetadata(
690
741
  field,
691
- "{field} introduced in metadata version "
692
- "{field_metadata_version}, not {metadata_version}",
742
+ f"{field} introduced in metadata version "
743
+ f"{field_metadata_version}, not {metadata_version}",
693
744
  )
694
745
  exceptions.append(exc)
695
746
  continue
@@ -733,6 +784,8 @@ class Metadata:
733
784
  metadata_version: _Validator[_MetadataVersion] = _Validator()
734
785
  """:external:ref:`core-metadata-metadata-version`
735
786
  (required; validated to be a valid metadata version)"""
787
+ # `name` is not normalized/typed to NormalizedName so as to provide access to
788
+ # the original/raw name.
736
789
  name: _Validator[str] = _Validator()
737
790
  """:external:ref:`core-metadata-name`
738
791
  (required; validated using :func:`~packaging.utils.canonicalize_name` and its
@@ -770,6 +823,12 @@ class Metadata:
770
823
  """:external:ref:`core-metadata-maintainer-email`"""
771
824
  license: _Validator[str | None] = _Validator()
772
825
  """:external:ref:`core-metadata-license`"""
826
+ license_expression: _Validator[NormalizedLicenseExpression | None] = _Validator(
827
+ added="2.4"
828
+ )
829
+ """:external:ref:`core-metadata-license-expression`"""
830
+ license_files: _Validator[list[str] | None] = _Validator(added="2.4")
831
+ """:external:ref:`core-metadata-license-file`"""
773
832
  classifiers: _Validator[list[str] | None] = _Validator(added="1.1")
774
833
  """:external:ref:`core-metadata-classifier`"""
775
834
  requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator(
@@ -234,7 +234,7 @@ class Specifier(BaseSpecifier):
234
234
  """
235
235
  match = self._regex.search(spec)
236
236
  if not match:
237
- raise InvalidSpecifier(f"Invalid specifier: '{spec}'")
237
+ raise InvalidSpecifier(f"Invalid specifier: {spec!r}")
238
238
 
239
239
  self._spec: tuple[str, str] = (
240
240
  match.group("operator").strip(),
@@ -256,7 +256,7 @@ class Specifier(BaseSpecifier):
256
256
  # operators, and if they are if they are including an explicit
257
257
  # prerelease.
258
258
  operator, version = self._spec
259
- if operator in ["==", ">=", "<=", "~=", "==="]:
259
+ if operator in ["==", ">=", "<=", "~=", "===", ">", "<"]:
260
260
  # The == specifier can include a trailing .*, if it does we
261
261
  # want to remove before parsing.
262
262
  if operator == "==" and version.endswith(".*"):
@@ -694,12 +694,18 @@ class SpecifierSet(BaseSpecifier):
694
694
  specifiers (``>=3.0,!=3.1``), or no specifier at all.
695
695
  """
696
696
 
697
- def __init__(self, specifiers: str = "", prereleases: bool | None = None) -> None:
697
+ def __init__(
698
+ self,
699
+ specifiers: str | Iterable[Specifier] = "",
700
+ prereleases: bool | None = None,
701
+ ) -> None:
698
702
  """Initialize a SpecifierSet instance.
699
703
 
700
704
  :param specifiers:
701
705
  The string representation of a specifier or a comma-separated list of
702
706
  specifiers which will be parsed and normalized before use.
707
+ May also be an iterable of ``Specifier`` instances, which will be used
708
+ as is.
703
709
  :param prereleases:
704
710
  This tells the SpecifierSet if it should accept prerelease versions if
705
711
  applicable or not. The default of ``None`` will autodetect it from the
@@ -710,12 +716,17 @@ class SpecifierSet(BaseSpecifier):
710
716
  raised.
711
717
  """
712
718
 
713
- # Split on `,` to break each individual specifier into it's own item, and
714
- # strip each item to remove leading/trailing whitespace.
715
- split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
719
+ if isinstance(specifiers, str):
720
+ # Split on `,` to break each individual specifier into its own item, and
721
+ # strip each item to remove leading/trailing whitespace.
722
+ split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
716
723
 
717
- # Make each individual specifier a Specifier and save in a frozen set for later.
718
- self._specs = frozenset(map(Specifier, split_specifiers))
724
+ # Make each individual specifier a Specifier and save in a frozen set
725
+ # for later.
726
+ self._specs = frozenset(map(Specifier, split_specifiers))
727
+ else:
728
+ # Save the supplied specifiers in a frozen set.
729
+ self._specs = frozenset(specifiers)
719
730
 
720
731
  # Store our prereleases value so we can use it later to determine if
721
732
  # we accept prereleases or not.
@@ -25,7 +25,7 @@ from . import _manylinux, _musllinux
25
25
  logger = logging.getLogger(__name__)
26
26
 
27
27
  PythonVersion = Sequence[int]
28
- MacVersion = Tuple[int, int]
28
+ AppleVersion = Tuple[int, int]
29
29
 
30
30
  INTERPRETER_SHORT_NAMES: dict[str, str] = {
31
31
  "python": "py", # Generic.
@@ -47,7 +47,7 @@ class Tag:
47
47
  is also supported.
48
48
  """
49
49
 
50
- __slots__ = ["_interpreter", "_abi", "_platform", "_hash"]
50
+ __slots__ = ["_abi", "_hash", "_interpreter", "_platform"]
51
51
 
52
52
  def __init__(self, interpreter: str, abi: str, platform: str) -> None:
53
53
  self._interpreter = interpreter.lower()
@@ -235,9 +235,8 @@ def cpython_tags(
235
235
  if use_abi3:
236
236
  for minor_version in range(python_version[1] - 1, 1, -1):
237
237
  for platform_ in platforms:
238
- interpreter = "cp{version}".format(
239
- version=_version_nodot((python_version[0], minor_version))
240
- )
238
+ version = _version_nodot((python_version[0], minor_version))
239
+ interpreter = f"cp{version}"
241
240
  yield Tag(interpreter, "abi3", platform_)
242
241
 
243
242
 
@@ -363,7 +362,7 @@ def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str:
363
362
  return "i386"
364
363
 
365
364
 
366
- def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> list[str]:
365
+ def _mac_binary_formats(version: AppleVersion, cpu_arch: str) -> list[str]:
367
366
  formats = [cpu_arch]
368
367
  if cpu_arch == "x86_64":
369
368
  if version < (10, 4):
@@ -396,7 +395,7 @@ def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> list[str]:
396
395
 
397
396
 
398
397
  def mac_platforms(
399
- version: MacVersion | None = None, arch: str | None = None
398
+ version: AppleVersion | None = None, arch: str | None = None
400
399
  ) -> Iterator[str]:
401
400
  """
402
401
  Yields the platform tags for a macOS system.
@@ -408,7 +407,7 @@ def mac_platforms(
408
407
  """
409
408
  version_str, _, cpu_arch = platform.mac_ver()
410
409
  if version is None:
411
- version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2])))
410
+ version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2])))
412
411
  if version == (10, 16):
413
412
  # When built against an older macOS SDK, Python will report macOS 10.16
414
413
  # instead of the real version.
@@ -424,7 +423,7 @@ def mac_platforms(
424
423
  stdout=subprocess.PIPE,
425
424
  text=True,
426
425
  ).stdout
427
- version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2])))
426
+ version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2])))
428
427
  else:
429
428
  version = version
430
429
  if arch is None:
@@ -435,24 +434,22 @@ def mac_platforms(
435
434
  if (10, 0) <= version and version < (11, 0):
436
435
  # Prior to Mac OS 11, each yearly release of Mac OS bumped the
437
436
  # "minor" version number. The major version was always 10.
437
+ major_version = 10
438
438
  for minor_version in range(version[1], -1, -1):
439
- compat_version = 10, minor_version
439
+ compat_version = major_version, minor_version
440
440
  binary_formats = _mac_binary_formats(compat_version, arch)
441
441
  for binary_format in binary_formats:
442
- yield "macosx_{major}_{minor}_{binary_format}".format(
443
- major=10, minor=minor_version, binary_format=binary_format
444
- )
442
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
445
443
 
446
444
  if version >= (11, 0):
447
445
  # Starting with Mac OS 11, each yearly release bumps the major version
448
446
  # number. The minor versions are now the midyear updates.
447
+ minor_version = 0
449
448
  for major_version in range(version[0], 10, -1):
450
- compat_version = major_version, 0
449
+ compat_version = major_version, minor_version
451
450
  binary_formats = _mac_binary_formats(compat_version, arch)
452
451
  for binary_format in binary_formats:
453
- yield "macosx_{major}_{minor}_{binary_format}".format(
454
- major=major_version, minor=0, binary_format=binary_format
455
- )
452
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
456
453
 
457
454
  if version >= (11, 0):
458
455
  # Mac OS 11 on x86_64 is compatible with binaries from previous releases.
@@ -462,25 +459,75 @@ def mac_platforms(
462
459
  # However, the "universal2" binary format can have a
463
460
  # macOS version earlier than 11.0 when the x86_64 part of the binary supports
464
461
  # that version of macOS.
462
+ major_version = 10
465
463
  if arch == "x86_64":
466
464
  for minor_version in range(16, 3, -1):
467
- compat_version = 10, minor_version
465
+ compat_version = major_version, minor_version
468
466
  binary_formats = _mac_binary_formats(compat_version, arch)
469
467
  for binary_format in binary_formats:
470
- yield "macosx_{major}_{minor}_{binary_format}".format(
471
- major=compat_version[0],
472
- minor=compat_version[1],
473
- binary_format=binary_format,
474
- )
468
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
475
469
  else:
476
470
  for minor_version in range(16, 3, -1):
477
- compat_version = 10, minor_version
471
+ compat_version = major_version, minor_version
478
472
  binary_format = "universal2"
479
- yield "macosx_{major}_{minor}_{binary_format}".format(
480
- major=compat_version[0],
481
- minor=compat_version[1],
482
- binary_format=binary_format,
483
- )
473
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
474
+
475
+
476
+ def ios_platforms(
477
+ version: AppleVersion | None = None, multiarch: str | None = None
478
+ ) -> Iterator[str]:
479
+ """
480
+ Yields the platform tags for an iOS system.
481
+
482
+ :param version: A two-item tuple specifying the iOS version to generate
483
+ platform tags for. Defaults to the current iOS version.
484
+ :param multiarch: The CPU architecture+ABI to generate platform tags for -
485
+ (the value used by `sys.implementation._multiarch` e.g.,
486
+ `arm64_iphoneos` or `x84_64_iphonesimulator`). Defaults to the current
487
+ multiarch value.
488
+ """
489
+ if version is None:
490
+ # if iOS is the current platform, ios_ver *must* be defined. However,
491
+ # it won't exist for CPython versions before 3.13, which causes a mypy
492
+ # error.
493
+ _, release, _, _ = platform.ios_ver() # type: ignore[attr-defined, unused-ignore]
494
+ version = cast("AppleVersion", tuple(map(int, release.split(".")[:2])))
495
+
496
+ if multiarch is None:
497
+ multiarch = sys.implementation._multiarch
498
+ multiarch = multiarch.replace("-", "_")
499
+
500
+ ios_platform_template = "ios_{major}_{minor}_{multiarch}"
501
+
502
+ # Consider any iOS major.minor version from the version requested, down to
503
+ # 12.0. 12.0 is the first iOS version that is known to have enough features
504
+ # to support CPython. Consider every possible minor release up to X.9. There
505
+ # highest the minor has ever gone is 8 (14.8 and 15.8) but having some extra
506
+ # candidates that won't ever match doesn't really hurt, and it saves us from
507
+ # having to keep an explicit list of known iOS versions in the code. Return
508
+ # the results descending order of version number.
509
+
510
+ # If the requested major version is less than 12, there won't be any matches.
511
+ if version[0] < 12:
512
+ return
513
+
514
+ # Consider the actual X.Y version that was requested.
515
+ yield ios_platform_template.format(
516
+ major=version[0], minor=version[1], multiarch=multiarch
517
+ )
518
+
519
+ # Consider every minor version from X.0 to the minor version prior to the
520
+ # version requested by the platform.
521
+ for minor in range(version[1] - 1, -1, -1):
522
+ yield ios_platform_template.format(
523
+ major=version[0], minor=minor, multiarch=multiarch
524
+ )
525
+
526
+ for major in range(version[0] - 1, 11, -1):
527
+ for minor in range(9, -1, -1):
528
+ yield ios_platform_template.format(
529
+ major=major, minor=minor, multiarch=multiarch
530
+ )
484
531
 
485
532
 
486
533
  def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]:
@@ -512,6 +559,8 @@ def platform_tags() -> Iterator[str]:
512
559
  """
513
560
  if platform.system() == "Darwin":
514
561
  return mac_platforms()
562
+ elif platform.system() == "iOS":
563
+ return ios_platforms()
515
564
  elif platform.system() == "Linux":
516
565
  return _linux_platforms()
517
566
  else: