py2docfx 0.1.9.dev1897607__py3-none-any.whl → 0.1.9.dev1926139__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. py2docfx/__main__.py +77 -22
  2. py2docfx/convert_prepare/environment.py +59 -19
  3. py2docfx/convert_prepare/generate_document.py +12 -5
  4. py2docfx/convert_prepare/get_source.py +5 -1
  5. py2docfx/convert_prepare/git.py +24 -20
  6. py2docfx/convert_prepare/package_info.py +15 -9
  7. py2docfx/convert_prepare/pip_utils.py +29 -8
  8. py2docfx/convert_prepare/post_process/merge_toc.py +5 -1
  9. py2docfx/convert_prepare/sphinx_caller.py +31 -14
  10. py2docfx/convert_prepare/tests/test_generate_document.py +6 -4
  11. py2docfx/convert_prepare/tests/test_get_source.py +6 -6
  12. py2docfx/convert_prepare/tests/test_params.py +1 -1
  13. py2docfx/convert_prepare/tests/test_sphinx_caller.py +5 -3
  14. py2docfx/convert_prepare/tests/utils.py +11 -0
  15. py2docfx/docfx_yaml/build_finished.py +11 -3
  16. py2docfx/docfx_yaml/convert_class.py +4 -2
  17. py2docfx/docfx_yaml/convert_enum.py +4 -2
  18. py2docfx/docfx_yaml/convert_module.py +4 -2
  19. py2docfx/docfx_yaml/convert_package.py +4 -2
  20. py2docfx/docfx_yaml/logger.py +68 -0
  21. py2docfx/docfx_yaml/process_doctree.py +6 -4
  22. py2docfx/docfx_yaml/translator.py +5 -7
  23. py2docfx/docfx_yaml/writer.py +10 -4
  24. py2docfx/docfx_yaml/yaml_builder.py +0 -1
  25. py2docfx/venv/basevenv/Lib/site-packages/_distutils_hack/__init__.py +2 -3
  26. py2docfx/venv/basevenv/Lib/site-packages/packaging/__init__.py +2 -2
  27. py2docfx/venv/basevenv/Lib/site-packages/packaging/_elffile.py +4 -4
  28. py2docfx/venv/basevenv/Lib/site-packages/packaging/_manylinux.py +1 -0
  29. py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/__init__.py +145 -0
  30. py2docfx/venv/basevenv/Lib/site-packages/packaging/licenses/_spdx.py +759 -0
  31. py2docfx/venv/basevenv/Lib/site-packages/packaging/markers.py +15 -9
  32. py2docfx/venv/basevenv/Lib/site-packages/packaging/metadata.py +83 -24
  33. py2docfx/venv/basevenv/Lib/site-packages/packaging/specifiers.py +19 -8
  34. py2docfx/venv/basevenv/Lib/site-packages/packaging/tags.py +78 -29
  35. py2docfx/venv/basevenv/Lib/site-packages/packaging/utils.py +33 -44
  36. py2docfx/venv/basevenv/Lib/site-packages/packaging/version.py +26 -7
  37. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/__init__.py +27 -32
  38. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
  39. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
  40. py2docfx/venv/basevenv/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
  41. py2docfx/venv/basevenv/Lib/site-packages/setuptools/__init__.py +7 -9
  42. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
  43. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
  44. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
  45. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_importlib.py +1 -4
  46. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_path.py +5 -8
  47. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_reqs.py +2 -1
  48. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_shutil.py +53 -0
  49. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
  50. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
  51. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
  52. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  53. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  54. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
  55. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
  56. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
  57. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
  58. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
  59. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
  60. py2docfx/venv/basevenv/Lib/site-packages/setuptools/archive_util.py +6 -4
  61. py2docfx/venv/basevenv/Lib/site-packages/setuptools/build_meta.py +25 -19
  62. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/__init__.py +9 -1
  63. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
  64. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/alias.py +3 -4
  65. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
  66. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
  67. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/bdist_wheel.py +43 -84
  68. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build.py +3 -3
  69. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_clib.py +2 -9
  70. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_ext.py +15 -14
  71. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/build_py.py +26 -30
  72. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/develop.py +4 -4
  73. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/dist_info.py +3 -7
  74. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/easy_install.py +57 -80
  75. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/editable_wheel.py +21 -23
  76. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/egg_info.py +32 -32
  77. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install.py +31 -13
  78. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_egg_info.py +4 -4
  79. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_lib.py +10 -7
  80. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
  81. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/rotate.py +6 -6
  82. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/saveopts.py +2 -2
  83. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/sdist.py +11 -10
  84. py2docfx/venv/basevenv/Lib/site-packages/setuptools/command/setopt.py +3 -3
  85. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
  86. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/expand.py +22 -16
  87. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/pyprojecttoml.py +12 -10
  88. py2docfx/venv/basevenv/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
  89. py2docfx/venv/basevenv/Lib/site-packages/setuptools/depends.py +26 -7
  90. py2docfx/venv/basevenv/Lib/site-packages/setuptools/discovery.py +21 -14
  91. py2docfx/venv/basevenv/Lib/site-packages/setuptools/dist.py +51 -47
  92. py2docfx/venv/basevenv/Lib/site-packages/setuptools/errors.py +21 -26
  93. py2docfx/venv/basevenv/Lib/site-packages/setuptools/extension.py +18 -6
  94. py2docfx/venv/basevenv/Lib/site-packages/setuptools/glob.py +35 -15
  95. py2docfx/venv/basevenv/Lib/site-packages/setuptools/installer.py +6 -1
  96. py2docfx/venv/basevenv/Lib/site-packages/setuptools/launch.py +1 -1
  97. py2docfx/venv/basevenv/Lib/site-packages/setuptools/logging.py +2 -2
  98. py2docfx/venv/basevenv/Lib/site-packages/setuptools/modified.py +16 -6
  99. py2docfx/venv/basevenv/Lib/site-packages/setuptools/monkey.py +5 -5
  100. py2docfx/venv/basevenv/Lib/site-packages/setuptools/msvc.py +35 -24
  101. py2docfx/venv/basevenv/Lib/site-packages/setuptools/namespaces.py +2 -2
  102. py2docfx/venv/basevenv/Lib/site-packages/setuptools/package_index.py +42 -43
  103. py2docfx/venv/basevenv/Lib/site-packages/setuptools/sandbox.py +19 -12
  104. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
  105. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
  106. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
  107. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +2 -2
  108. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
  109. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
  110. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
  111. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
  112. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
  113. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
  114. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
  115. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
  116. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
  117. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_core_metadata.py +171 -76
  118. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
  119. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  120. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
  121. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
  122. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
  123. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
  124. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
  125. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
  126. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
  127. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
  128. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
  129. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  130. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
  131. py2docfx/venv/basevenv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
  132. py2docfx/venv/basevenv/Lib/site-packages/setuptools/unicode_utils.py +3 -3
  133. py2docfx/venv/basevenv/Lib/site-packages/setuptools/warnings.py +5 -2
  134. py2docfx/venv/basevenv/Lib/site-packages/setuptools/wheel.py +4 -4
  135. py2docfx/venv/basevenv/Lib/site-packages/wheel/__init__.py +1 -1
  136. py2docfx/venv/basevenv/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
  137. py2docfx/venv/basevenv/Lib/site-packages/wheel/bdist_wheel.py +17 -2
  138. py2docfx/venv/basevenv/Lib/site-packages/wheel/cli/convert.py +279 -220
  139. py2docfx/venv/basevenv/Lib/site-packages/wheel/util.py +0 -9
  140. py2docfx/venv/venv1/Lib/site-packages/_distutils_hack/__init__.py +2 -3
  141. py2docfx/venv/venv1/Lib/site-packages/azure/core/_enum_meta.py +1 -1
  142. py2docfx/venv/venv1/Lib/site-packages/azure/core/_pipeline_client.py +2 -2
  143. py2docfx/venv/venv1/Lib/site-packages/azure/core/_pipeline_client_async.py +5 -3
  144. py2docfx/venv/venv1/Lib/site-packages/azure/core/_version.py +1 -1
  145. py2docfx/venv/venv1/Lib/site-packages/azure/core/credentials.py +6 -1
  146. py2docfx/venv/venv1/Lib/site-packages/azure/core/exceptions.py +13 -5
  147. py2docfx/venv/venv1/Lib/site-packages/azure/core/messaging.py +3 -3
  148. py2docfx/venv/venv1/Lib/site-packages/azure/core/paging.py +1 -1
  149. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/__init__.py +16 -5
  150. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base.py +15 -4
  151. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_base_async.py +20 -10
  152. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/_tools.py +3 -1
  153. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication.py +55 -19
  154. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_authentication_async.py +46 -15
  155. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_custom_hook.py +8 -3
  156. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_distributed_tracing.py +9 -3
  157. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect.py +9 -2
  158. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_redirect_async.py +4 -1
  159. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry.py +27 -8
  160. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_retry_async.py +6 -3
  161. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_sensitive_header_cleanup_policy.py +4 -1
  162. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_universal.py +6 -10
  163. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/policies/_utils.py +101 -1
  164. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/__init__.py +1 -1
  165. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_aiohttp.py +9 -2
  166. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base.py +1 -1
  167. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_base_async.py +7 -5
  168. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_asyncio.py +0 -1
  169. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_basic.py +11 -3
  170. py2docfx/venv/venv1/Lib/site-packages/azure/core/pipeline/transport/_requests_trio.py +11 -3
  171. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/_async_poller.py +5 -2
  172. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/_poller.py +4 -1
  173. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/async_base_polling.py +3 -1
  174. py2docfx/venv/venv1/Lib/site-packages/azure/core/polling/base_polling.py +47 -16
  175. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_helpers.py +3 -1
  176. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_http_response_impl.py +1 -1
  177. py2docfx/venv/venv1/Lib/site-packages/azure/core/rest/_requests_basic.py +3 -1
  178. py2docfx/venv/venv1/Lib/site-packages/azure/core/serialization.py +1 -1
  179. py2docfx/venv/venv1/Lib/site-packages/azure/core/settings.py +15 -3
  180. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/_abstract_span.py +15 -5
  181. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/common.py +1 -1
  182. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator.py +12 -1
  183. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/decorator_async.py +24 -4
  184. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/__init__.py +119 -110
  185. py2docfx/venv/venv1/Lib/site-packages/azure/core/tracing/ext/opencensus_span/_version.py +1 -1
  186. py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared.py +3 -1
  187. py2docfx/venv/venv1/Lib/site-packages/azure/core/utils/_pipeline_transport_rest_shared_async.py +10 -1
  188. py2docfx/venv/venv1/Lib/site-packages/google/api/client_pb2.py +41 -39
  189. py2docfx/venv/venv1/Lib/site-packages/google/api/error_reason_pb2.py +2 -2
  190. py2docfx/venv/venv1/Lib/site-packages/google/api/httpbody_pb2.py +2 -2
  191. py2docfx/venv/venv1/Lib/site-packages/google/api/metric_pb2.py +17 -11
  192. py2docfx/venv/venv1/Lib/site-packages/google/api_core/client_options.py +17 -13
  193. py2docfx/venv/venv1/Lib/site-packages/google/api_core/protobuf_helpers.py +1 -3
  194. py2docfx/venv/venv1/Lib/site-packages/google/api_core/version.py +1 -1
  195. py2docfx/venv/venv1/Lib/site-packages/google/auth/_default.py +4 -0
  196. py2docfx/venv/venv1/Lib/site-packages/google/auth/compute_engine/_metadata.py +1 -1
  197. py2docfx/venv/venv1/Lib/site-packages/google/auth/iam.py +25 -8
  198. py2docfx/venv/venv1/Lib/site-packages/google/auth/impersonated_credentials.py +34 -16
  199. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/_requests_base.py +2 -1
  200. py2docfx/venv/venv1/Lib/site-packages/google/auth/transport/requests.py +2 -3
  201. py2docfx/venv/venv1/Lib/site-packages/google/auth/version.py +1 -1
  202. py2docfx/venv/venv1/Lib/site-packages/google/oauth2/_client.py +10 -2
  203. py2docfx/venv/venv1/Lib/site-packages/google/oauth2/service_account.py +1 -0
  204. py2docfx/venv/venv1/Lib/site-packages/jwt/__init__.py +3 -2
  205. py2docfx/venv/venv1/Lib/site-packages/jwt/algorithms.py +31 -16
  206. py2docfx/venv/venv1/Lib/site-packages/jwt/api_jws.py +19 -8
  207. py2docfx/venv/venv1/Lib/site-packages/jwt/api_jwt.py +75 -19
  208. py2docfx/venv/venv1/Lib/site-packages/jwt/exceptions.py +8 -0
  209. py2docfx/venv/venv1/Lib/site-packages/jwt/help.py +4 -1
  210. py2docfx/venv/venv1/Lib/site-packages/jwt/jwks_client.py +4 -2
  211. py2docfx/venv/venv1/Lib/site-packages/jwt/utils.py +7 -10
  212. py2docfx/venv/venv1/Lib/site-packages/msal/application.py +1 -1
  213. py2docfx/venv/venv1/Lib/site-packages/msal/managed_identity.py +5 -3
  214. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/__init__.py +27 -32
  215. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +4 -4
  216. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_resources.py +7 -7
  217. py2docfx/venv/venv1/Lib/site-packages/pkg_resources/tests/test_working_set.py +1 -1
  218. py2docfx/venv/venv1/Lib/site-packages/proto/enums.py +3 -1
  219. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/collections/repeated.py +7 -2
  220. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/compat.py +18 -21
  221. py2docfx/venv/venv1/Lib/site-packages/proto/marshal/rules/message.py +7 -3
  222. py2docfx/venv/venv1/Lib/site-packages/proto/message.py +6 -35
  223. py2docfx/venv/venv1/Lib/site-packages/proto/version.py +1 -1
  224. py2docfx/venv/venv1/Lib/site-packages/setuptools/__init__.py +7 -9
  225. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/compat/py38.py +1 -1
  226. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/dir_util.py +3 -8
  227. py2docfx/venv/venv1/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +22 -0
  228. py2docfx/venv/venv1/Lib/site-packages/setuptools/_importlib.py +1 -4
  229. py2docfx/venv/venv1/Lib/site-packages/setuptools/_path.py +5 -8
  230. py2docfx/venv/venv1/Lib/site-packages/setuptools/_reqs.py +2 -1
  231. py2docfx/venv/venv1/Lib/site-packages/setuptools/_shutil.py +53 -0
  232. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +2 -2
  233. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +4 -4
  234. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +1 -0
  235. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  236. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  237. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/markers.py +15 -9
  238. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +83 -24
  239. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +19 -8
  240. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/tags.py +78 -29
  241. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/utils.py +33 -44
  242. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/packaging/version.py +26 -7
  243. py2docfx/venv/venv1/Lib/site-packages/setuptools/archive_util.py +6 -4
  244. py2docfx/venv/venv1/Lib/site-packages/setuptools/build_meta.py +25 -19
  245. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/__init__.py +9 -1
  246. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/_requirestxt.py +4 -4
  247. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/alias.py +3 -4
  248. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_egg.py +27 -13
  249. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_rpm.py +1 -1
  250. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/bdist_wheel.py +43 -84
  251. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build.py +3 -3
  252. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_clib.py +2 -9
  253. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_ext.py +15 -14
  254. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/build_py.py +26 -30
  255. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/develop.py +4 -4
  256. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/dist_info.py +3 -7
  257. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/easy_install.py +57 -80
  258. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/editable_wheel.py +21 -23
  259. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/egg_info.py +32 -32
  260. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install.py +31 -13
  261. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_egg_info.py +4 -4
  262. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_lib.py +10 -7
  263. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/install_scripts.py +2 -2
  264. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/rotate.py +6 -6
  265. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/saveopts.py +2 -2
  266. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/sdist.py +11 -10
  267. py2docfx/venv/venv1/Lib/site-packages/setuptools/command/setopt.py +3 -3
  268. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +19 -14
  269. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/expand.py +22 -16
  270. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/pyprojecttoml.py +12 -10
  271. py2docfx/venv/venv1/Lib/site-packages/setuptools/config/setupcfg.py +39 -47
  272. py2docfx/venv/venv1/Lib/site-packages/setuptools/depends.py +26 -7
  273. py2docfx/venv/venv1/Lib/site-packages/setuptools/discovery.py +21 -14
  274. py2docfx/venv/venv1/Lib/site-packages/setuptools/dist.py +51 -47
  275. py2docfx/venv/venv1/Lib/site-packages/setuptools/errors.py +21 -26
  276. py2docfx/venv/venv1/Lib/site-packages/setuptools/extension.py +18 -6
  277. py2docfx/venv/venv1/Lib/site-packages/setuptools/glob.py +35 -15
  278. py2docfx/venv/venv1/Lib/site-packages/setuptools/installer.py +6 -1
  279. py2docfx/venv/venv1/Lib/site-packages/setuptools/launch.py +1 -1
  280. py2docfx/venv/venv1/Lib/site-packages/setuptools/logging.py +2 -2
  281. py2docfx/venv/venv1/Lib/site-packages/setuptools/modified.py +16 -6
  282. py2docfx/venv/venv1/Lib/site-packages/setuptools/monkey.py +5 -5
  283. py2docfx/venv/venv1/Lib/site-packages/setuptools/msvc.py +35 -24
  284. py2docfx/venv/venv1/Lib/site-packages/setuptools/namespaces.py +2 -2
  285. py2docfx/venv/venv1/Lib/site-packages/setuptools/package_index.py +42 -43
  286. py2docfx/venv/venv1/Lib/site-packages/setuptools/sandbox.py +19 -12
  287. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +5 -3
  288. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +7 -6
  289. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_expand.py +3 -3
  290. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +2 -2
  291. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +21 -11
  292. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +12 -16
  293. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +10 -11
  294. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_egg.py +7 -3
  295. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +10 -33
  296. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_ext.py +2 -2
  297. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_meta.py +1 -1
  298. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_build_py.py +6 -6
  299. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_config_discovery.py +4 -4
  300. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_core_metadata.py +171 -76
  301. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist.py +11 -13
  302. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_dist_info.py +1 -1
  303. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +44 -5
  304. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_easy_install.py +32 -26
  305. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_editable_install.py +10 -6
  306. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_egg_info.py +15 -15
  307. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_glob.py +1 -1
  308. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_logging.py +1 -1
  309. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_manifest.py +2 -8
  310. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_packageindex.py +6 -17
  311. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_setuptools.py +4 -3
  312. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  313. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_wheel.py +29 -20
  314. py2docfx/venv/venv1/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +3 -3
  315. py2docfx/venv/venv1/Lib/site-packages/setuptools/unicode_utils.py +3 -3
  316. py2docfx/venv/venv1/Lib/site-packages/setuptools/warnings.py +5 -2
  317. py2docfx/venv/venv1/Lib/site-packages/setuptools/wheel.py +4 -4
  318. py2docfx/venv/venv1/Lib/site-packages/wheel/__init__.py +1 -1
  319. py2docfx/venv/venv1/Lib/site-packages/wheel/_bdist_wheel.py +9 -0
  320. py2docfx/venv/venv1/Lib/site-packages/wheel/bdist_wheel.py +17 -2
  321. py2docfx/venv/venv1/Lib/site-packages/wheel/cli/convert.py +279 -220
  322. py2docfx/venv/venv1/Lib/site-packages/wheel/util.py +0 -9
  323. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/METADATA +1 -1
  324. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/RECORD +327 -385
  325. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/WHEEL +1 -1
  326. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
  327. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
  328. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
  329. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
  330. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
  331. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
  332. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
  333. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
  334. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
  335. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
  336. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
  337. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
  338. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
  339. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
  340. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
  341. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
  342. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
  343. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
  344. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
  345. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
  346. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
  347. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
  348. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
  349. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
  350. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
  351. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
  352. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
  353. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
  354. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
  355. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
  356. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
  357. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
  358. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
  359. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
  360. py2docfx/venv/basevenv/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
  361. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +0 -36
  362. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +0 -168
  363. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +0 -210
  364. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +0 -38
  365. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +0 -171
  366. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/__init__.py +0 -0
  367. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py38.py +0 -11
  368. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/compat/py39.py +0 -10
  369. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/functional.py +0 -81
  370. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/__init__.py +0 -0
  371. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/future/adapters.py +0 -95
  372. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +0 -194
  373. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +0 -106
  374. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/__init__.py +0 -0
  375. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/_path.py +0 -56
  376. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/__init__.py +0 -0
  377. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py312.py +0 -18
  378. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/compat/py39.py +0 -10
  379. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/__init__.py +0 -0
  380. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.py +0 -0
  381. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/__init__.py +0 -0
  382. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/one/__init__.py +0 -0
  383. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/data02/two/__init__.py +0 -0
  384. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_compatibilty_files.py +0 -104
  385. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_contents.py +0 -43
  386. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_custom.py +0 -47
  387. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_files.py +0 -117
  388. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_functional.py +0 -242
  389. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_open.py +0 -89
  390. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_path.py +0 -65
  391. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_read.py +0 -97
  392. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_reader.py +0 -145
  393. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/test_resource.py +0 -241
  394. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/util.py +0 -164
  395. py2docfx/venv/venv1/Lib/site-packages/setuptools/_vendor/importlib_resources/tests/zip.py +0 -32
  396. /py2docfx/convert_prepare/conf_templates/{master_doc.rst_t → root_doc.rst_t} +0 -0
  397. {py2docfx-0.1.9.dev1897607.dist-info → py2docfx-0.1.9.dev1926139.dist-info}/top_level.txt +0 -0
@@ -2,21 +2,23 @@ from __future__ import annotations
2
2
 
3
3
  import os.path
4
4
  import re
5
- import shutil
6
- import tempfile
7
- import zipfile
5
+ from abc import ABCMeta, abstractmethod
6
+ from collections import defaultdict
7
+ from collections.abc import Iterator
8
+ from email.message import Message
9
+ from email.parser import Parser
10
+ from email.policy import EmailPolicy
8
11
  from glob import iglob
12
+ from pathlib import Path
13
+ from textwrap import dedent
14
+ from zipfile import ZipFile
9
15
 
10
- from .._bdist_wheel import bdist_wheel
16
+ from .. import __version__
17
+ from ..metadata import generate_requirements
18
+ from ..vendored.packaging.tags import parse_tag
11
19
  from ..wheelfile import WheelFile
12
- from . import WheelError
13
20
 
14
- try:
15
- from setuptools import Distribution
16
- except ImportError:
17
- from distutils.dist import Distribution
18
-
19
- egg_info_re = re.compile(
21
+ egg_filename_re = re.compile(
20
22
  r"""
21
23
  (?P<name>.+?)-(?P<ver>.+?)
22
24
  (-(?P<pyver>py\d\.\d+)
@@ -24,84 +26,168 @@ egg_info_re = re.compile(
24
26
  )?.egg$""",
25
27
  re.VERBOSE,
26
28
  )
27
-
28
-
29
- class _bdist_wheel_tag(bdist_wheel):
30
- # allow the client to override the default generated wheel tag
31
- # The default bdist_wheel implementation uses python and abi tags
32
- # of the running python process. This is not suitable for
33
- # generating/repackaging prebuild binaries.
34
-
35
- full_tag_supplied = False
36
- full_tag = None # None or a (pytag, soabitag, plattag) triple
37
-
38
- def get_tag(self):
39
- if self.full_tag_supplied and self.full_tag is not None:
40
- return self.full_tag
29
+ egg_info_re = re.compile(
30
+ r"""
31
+ ^(?P<name>.+?)-(?P<ver>.+?)
32
+ (-(?P<pyver>py\d\.\d+)
33
+ )?.egg-info/""",
34
+ re.VERBOSE,
35
+ )
36
+ wininst_re = re.compile(
37
+ r"\.(?P<platform>win32|win-amd64)(?:-(?P<pyver>py\d\.\d))?\.exe$"
38
+ )
39
+ pyd_re = re.compile(r"\.(?P<abi>[a-z0-9]+)-(?P<platform>win32|win_amd64)\.pyd$")
40
+ serialization_policy = EmailPolicy(
41
+ utf8=True,
42
+ mangle_from_=False,
43
+ max_line_length=0,
44
+ )
45
+ GENERATOR = f"wheel {__version__}"
46
+
47
+
48
+ def convert_requires(requires: str, metadata: Message) -> None:
49
+ extra: str | None = None
50
+ requirements: dict[str | None, list[str]] = defaultdict(list)
51
+ for line in requires.splitlines():
52
+ line = line.strip()
53
+ if not line:
54
+ continue
55
+
56
+ if line.startswith("[") and line.endswith("]"):
57
+ extra = line[1:-1]
58
+ continue
59
+
60
+ requirements[extra].append(line)
61
+
62
+ for key, value in generate_requirements(requirements):
63
+ metadata.add_header(key, value)
64
+
65
+
66
+ def convert_pkg_info(pkginfo: str, metadata: Message):
67
+ parsed_message = Parser().parsestr(pkginfo)
68
+ for key, value in parsed_message.items():
69
+ key_lower = key.lower()
70
+ if value == "UNKNOWN":
71
+ continue
72
+
73
+ if key_lower == "description":
74
+ description_lines = value.splitlines()
75
+ value = "\n".join(
76
+ (
77
+ description_lines[0].lstrip(),
78
+ dedent("\n".join(description_lines[1:])),
79
+ "\n",
80
+ )
81
+ )
82
+ metadata.set_payload(value)
83
+ elif key_lower == "home-page":
84
+ metadata.add_header("Project-URL", f"Homepage, {value}")
85
+ elif key_lower == "download-url":
86
+ metadata.add_header("Project-URL", f"Download, {value}")
41
87
  else:
42
- return bdist_wheel.get_tag(self)
43
-
44
-
45
- def egg2wheel(egg_path: str, dest_dir: str) -> None:
46
- filename = os.path.basename(egg_path)
47
- match = egg_info_re.match(filename)
48
- if not match:
49
- raise WheelError(f"Invalid egg file name: {filename}")
50
-
51
- egg_info = match.groupdict()
52
- dir = tempfile.mkdtemp(suffix="_e2w")
53
- if os.path.isfile(egg_path):
54
- # assume we have a bdist_egg otherwise
55
- with zipfile.ZipFile(egg_path) as egg:
56
- egg.extractall(dir)
57
- else:
58
- # support buildout-style installed eggs directories
59
- for pth in os.listdir(egg_path):
60
- src = os.path.join(egg_path, pth)
61
- if os.path.isfile(src):
62
- shutil.copy2(src, dir)
63
- else:
64
- shutil.copytree(src, os.path.join(dir, pth))
65
-
66
- pyver = egg_info["pyver"]
67
- if pyver:
68
- pyver = egg_info["pyver"] = pyver.replace(".", "")
69
-
70
- arch = (egg_info["arch"] or "any").replace(".", "_").replace("-", "_")
71
-
72
- # assume all binary eggs are for CPython
73
- abi = "cp" + pyver[2:] if arch != "any" else "none"
74
-
75
- root_is_purelib = egg_info["arch"] is None
76
- if root_is_purelib:
77
- bw = bdist_wheel(Distribution())
78
- else:
79
- bw = _bdist_wheel_tag(Distribution())
80
-
81
- bw.root_is_pure = root_is_purelib
82
- bw.python_tag = pyver
83
- bw.plat_name_supplied = True
84
- bw.plat_name = egg_info["arch"] or "any"
85
- if not root_is_purelib:
86
- bw.full_tag_supplied = True
87
- bw.full_tag = (pyver, abi, arch)
88
-
89
- dist_info_dir = os.path.join(dir, "{name}-{ver}.dist-info".format(**egg_info))
90
- bw.egg2dist(os.path.join(dir, "EGG-INFO"), dist_info_dir)
91
- bw.write_wheelfile(dist_info_dir, generator="egg2wheel")
92
- wheel_name = "{name}-{ver}-{pyver}-{}-{}.whl".format(abi, arch, **egg_info)
93
- with WheelFile(os.path.join(dest_dir, wheel_name), "w") as wf:
94
- wf.write_files(dir)
95
-
96
- shutil.rmtree(dir)
97
-
98
-
99
- def parse_wininst_info(wininfo_name: str, egginfo_name: str | None):
100
- """Extract metadata from filenames.
101
-
102
- Extracts the 4 metadataitems needed (name, version, pyversion, arch) from
103
- the installer filename and the name of the egg-info directory embedded in
104
- the zipfile (if any).
88
+ metadata.add_header(key, value)
89
+
90
+ metadata.replace_header("Metadata-Version", "2.4")
91
+
92
+
93
+ def normalize(name: str) -> str:
94
+ return re.sub(r"[-_.]+", "-", name).lower().replace("-", "_")
95
+
96
+
97
+ class ConvertSource(metaclass=ABCMeta):
98
+ name: str
99
+ version: str
100
+ pyver: str = "py2.py3"
101
+ abi: str = "none"
102
+ platform: str = "any"
103
+ metadata: Message
104
+
105
+ @property
106
+ def dist_info_dir(self) -> str:
107
+ return f"{self.name}-{self.version}.dist-info"
108
+
109
+ @abstractmethod
110
+ def generate_contents(self) -> Iterator[tuple[str, bytes]]:
111
+ pass
112
+
113
+
114
+ class EggFileSource(ConvertSource):
115
+ def __init__(self, path: Path):
116
+ if not (match := egg_filename_re.match(path.name)):
117
+ raise ValueError(f"Invalid egg file name: {path.name}")
118
+
119
+ # Binary wheels are assumed to be for CPython
120
+ self.path = path
121
+ self.name = normalize(match.group("name"))
122
+ self.version = match.group("ver")
123
+ if pyver := match.group("pyver"):
124
+ self.pyver = pyver.replace(".", "")
125
+ if arch := match.group("arch"):
126
+ self.abi = self.pyver.replace("py", "cp")
127
+ self.platform = normalize(arch)
128
+
129
+ self.metadata = Message()
130
+
131
+ def generate_contents(self) -> Iterator[tuple[str, bytes]]:
132
+ with ZipFile(self.path, "r") as zip_file:
133
+ for filename in sorted(zip_file.namelist()):
134
+ # Skip pure directory entries
135
+ if filename.endswith("/"):
136
+ continue
137
+
138
+ # Handle files in the egg-info directory specially, selectively moving
139
+ # them to the dist-info directory while converting as needed
140
+ if filename.startswith("EGG-INFO/"):
141
+ if filename == "EGG-INFO/requires.txt":
142
+ requires = zip_file.read(filename).decode("utf-8")
143
+ convert_requires(requires, self.metadata)
144
+ elif filename == "EGG-INFO/PKG-INFO":
145
+ pkginfo = zip_file.read(filename).decode("utf-8")
146
+ convert_pkg_info(pkginfo, self.metadata)
147
+ elif filename == "EGG-INFO/entry_points.txt":
148
+ yield (
149
+ f"{self.dist_info_dir}/entry_points.txt",
150
+ zip_file.read(filename),
151
+ )
152
+
153
+ continue
154
+
155
+ # For any other file, just pass it through
156
+ yield filename, zip_file.read(filename)
157
+
158
+
159
+ class EggDirectorySource(EggFileSource):
160
+ def generate_contents(self) -> Iterator[tuple[str, bytes]]:
161
+ for dirpath, _, filenames in os.walk(self.path):
162
+ for filename in sorted(filenames):
163
+ path = Path(dirpath, filename)
164
+ if path.parent.name == "EGG-INFO":
165
+ if path.name == "requires.txt":
166
+ requires = path.read_text("utf-8")
167
+ convert_requires(requires, self.metadata)
168
+ elif path.name == "PKG-INFO":
169
+ pkginfo = path.read_text("utf-8")
170
+ convert_pkg_info(pkginfo, self.metadata)
171
+ if name := self.metadata.get("Name"):
172
+ self.name = normalize(name)
173
+
174
+ if version := self.metadata.get("Version"):
175
+ self.version = version
176
+ elif path.name == "entry_points.txt":
177
+ yield (
178
+ f"{self.dist_info_dir}/entry_points.txt",
179
+ path.read_bytes(),
180
+ )
181
+
182
+ continue
183
+
184
+ # For any other file, just pass it through
185
+ yield str(path.relative_to(self.path)), path.read_bytes()
186
+
187
+
188
+ class WininstFileSource(ConvertSource):
189
+ """
190
+ Handles distributions created with ``bdist_wininst``.
105
191
 
106
192
  The egginfo filename has the format::
107
193
 
@@ -129,145 +215,118 @@ def parse_wininst_info(wininfo_name: str, egginfo_name: str | None):
129
215
  should therefore ignore the architecture if the content is pure-python.
130
216
  """
131
217
 
132
- egginfo = None
133
- if egginfo_name:
134
- egginfo = egg_info_re.search(egginfo_name)
135
- if not egginfo:
136
- raise ValueError(f"Egg info filename {egginfo_name} is not valid")
137
-
138
- # Parse the wininst filename
139
- # 1. Distribution name (up to the first '-')
140
- w_name, sep, rest = wininfo_name.partition("-")
141
- if not sep:
142
- raise ValueError(f"Installer filename {wininfo_name} is not valid")
143
-
144
- # Strip '.exe'
145
- rest = rest[:-4]
146
- # 2. Python version (from the last '-', must start with 'py')
147
- rest2, sep, w_pyver = rest.rpartition("-")
148
- if sep and w_pyver.startswith("py"):
149
- rest = rest2
150
- w_pyver = w_pyver.replace(".", "")
151
- else:
152
- # Not version specific - use py2.py3. While it is possible that
153
- # pure-Python code is not compatible with both Python 2 and 3, there
154
- # is no way of knowing from the wininst format, so we assume the best
155
- # here (the user can always manually rename the wheel to be more
156
- # restrictive if needed).
157
- w_pyver = "py2.py3"
158
- # 3. Version and architecture
159
- w_ver, sep, w_arch = rest.rpartition(".")
160
- if not sep:
161
- raise ValueError(f"Installer filename {wininfo_name} is not valid")
162
-
163
- if egginfo:
164
- w_name = egginfo.group("name")
165
- w_ver = egginfo.group("ver")
166
-
167
- return {"name": w_name, "ver": w_ver, "arch": w_arch, "pyver": w_pyver}
168
-
169
-
170
- def wininst2wheel(path: str, dest_dir: str) -> None:
171
- with zipfile.ZipFile(path) as bdw:
172
- # Search for egg-info in the archive
173
- egginfo_name = None
174
- for filename in bdw.namelist():
175
- if ".egg-info" in filename:
176
- egginfo_name = filename
177
- break
178
-
179
- info = parse_wininst_info(os.path.basename(path), egginfo_name)
180
-
181
- root_is_purelib = True
182
- for zipinfo in bdw.infolist():
183
- if zipinfo.filename.startswith("PLATLIB"):
184
- root_is_purelib = False
185
- break
186
- if root_is_purelib:
187
- paths = {"purelib": ""}
188
- else:
189
- paths = {"platlib": ""}
190
-
191
- dist_info = "{name}-{ver}".format(**info)
192
- datadir = f"{dist_info}.data/"
193
-
194
- # rewrite paths to trick ZipFile into extracting an egg
195
- # XXX grab wininst .ini - between .exe, padding, and first zip file.
196
- members: list[str] = []
197
- egginfo_name = ""
198
- for zipinfo in bdw.infolist():
199
- key, basename = zipinfo.filename.split("/", 1)
200
- key = key.lower()
201
- basepath = paths.get(key, None)
202
- if basepath is None:
203
- basepath = datadir + key.lower() + "/"
204
- oldname = zipinfo.filename
205
- newname = basepath + basename
206
- zipinfo.filename = newname
207
- del bdw.NameToInfo[oldname]
208
- bdw.NameToInfo[newname] = zipinfo
209
- # Collect member names, but omit '' (from an entry like "PLATLIB/"
210
- if newname:
211
- members.append(newname)
212
- # Remember egg-info name for the egg2dist call below
213
- if not egginfo_name:
214
- if newname.endswith(".egg-info"):
215
- egginfo_name = newname
216
- elif ".egg-info/" in newname:
217
- egginfo_name, sep, _ = newname.rpartition("/")
218
- dir = tempfile.mkdtemp(suffix="_b2w")
219
- bdw.extractall(dir, members)
220
-
221
- # egg2wheel
222
- abi = "none"
223
- pyver = info["pyver"]
224
- arch = (info["arch"] or "any").replace(".", "_").replace("-", "_")
225
- # Wininst installers always have arch even if they are not
226
- # architecture-specific (because the format itself is).
227
- # So, assume the content is architecture-neutral if root is purelib.
228
- if root_is_purelib:
229
- arch = "any"
230
- # If the installer is architecture-specific, it's almost certainly also
231
- # CPython-specific.
232
- if arch != "any":
233
- pyver = pyver.replace("py", "cp")
234
- wheel_name = "-".join((dist_info, pyver, abi, arch))
235
- if root_is_purelib:
236
- bw = bdist_wheel(Distribution())
237
- else:
238
- bw = _bdist_wheel_tag(Distribution())
239
-
240
- bw.root_is_pure = root_is_purelib
241
- bw.python_tag = pyver
242
- bw.plat_name_supplied = True
243
- bw.plat_name = info["arch"] or "any"
244
-
245
- if not root_is_purelib:
246
- bw.full_tag_supplied = True
247
- bw.full_tag = (pyver, abi, arch)
248
-
249
- dist_info_dir = os.path.join(dir, f"{dist_info}.dist-info")
250
- bw.egg2dist(os.path.join(dir, egginfo_name), dist_info_dir)
251
- bw.write_wheelfile(dist_info_dir, generator="wininst2wheel")
252
-
253
- wheel_path = os.path.join(dest_dir, wheel_name)
254
- with WheelFile(wheel_path, "w") as wf:
255
- wf.write_files(dir)
256
-
257
- shutil.rmtree(dir)
218
+ def __init__(self, path: Path):
219
+ self.path = path
220
+ self.metadata = Message()
221
+
222
+ # Determine the initial architecture and Python version from the file name
223
+ # (if possible)
224
+ if match := wininst_re.search(path.name):
225
+ self.platform = normalize(match.group("platform"))
226
+ if pyver := match.group("pyver"):
227
+ self.pyver = pyver.replace(".", "")
228
+
229
+ # Look for an .egg-info directory and any .pyd files for more precise info
230
+ egg_info_found = pyd_found = False
231
+ with ZipFile(self.path) as zip_file:
232
+ for filename in zip_file.namelist():
233
+ prefix, filename = filename.split("/", 1)
234
+ if not egg_info_found and (match := egg_info_re.match(filename)):
235
+ egg_info_found = True
236
+ self.name = normalize(match.group("name"))
237
+ self.version = match.group("ver")
238
+ if pyver := match.group("pyver"):
239
+ self.pyver = pyver.replace(".", "")
240
+ elif not pyd_found and (match := pyd_re.search(filename)):
241
+ pyd_found = True
242
+ self.abi = match.group("abi")
243
+ self.platform = match.group("platform")
244
+
245
+ if egg_info_found and pyd_found:
246
+ break
247
+
248
+ def generate_contents(self) -> Iterator[tuple[str, bytes]]:
249
+ dist_info_dir = f"{self.name}-{self.version}.dist-info"
250
+ data_dir = f"{self.name}-{self.version}.data"
251
+ with ZipFile(self.path, "r") as zip_file:
252
+ for filename in sorted(zip_file.namelist()):
253
+ # Skip pure directory entries
254
+ if filename.endswith("/"):
255
+ continue
256
+
257
+ # Handle files in the egg-info directory specially, selectively moving
258
+ # them to the dist-info directory while converting as needed
259
+ prefix, target_filename = filename.split("/", 1)
260
+ if egg_info_re.search(target_filename):
261
+ basename = target_filename.rsplit("/", 1)[-1]
262
+ if basename == "requires.txt":
263
+ requires = zip_file.read(filename).decode("utf-8")
264
+ convert_requires(requires, self.metadata)
265
+ elif basename == "PKG-INFO":
266
+ pkginfo = zip_file.read(filename).decode("utf-8")
267
+ convert_pkg_info(pkginfo, self.metadata)
268
+ elif basename == "entry_points.txt":
269
+ yield (
270
+ f"{dist_info_dir}/entry_points.txt",
271
+ zip_file.read(filename),
272
+ )
273
+
274
+ continue
275
+ elif prefix == "SCRIPTS":
276
+ target_filename = f"{data_dir}/scripts/{target_filename}"
277
+
278
+ # For any other file, just pass it through
279
+ yield target_filename, zip_file.read(filename)
258
280
 
259
281
 
260
282
  def convert(files: list[str], dest_dir: str, verbose: bool) -> None:
261
283
  for pat in files:
262
- for installer in iglob(pat):
263
- if os.path.splitext(installer)[1] == ".egg":
264
- conv = egg2wheel
284
+ for archive in iglob(pat):
285
+ path = Path(archive)
286
+ if path.suffix == ".egg":
287
+ if path.is_dir():
288
+ source: ConvertSource = EggDirectorySource(path)
289
+ else:
290
+ source = EggFileSource(path)
265
291
  else:
266
- conv = wininst2wheel
292
+ source = WininstFileSource(path)
267
293
 
268
294
  if verbose:
269
- print(f"{installer}... ", flush=True)
295
+ print(f"{archive}...", flush=True, end="")
296
+
297
+ dest_path = Path(dest_dir) / (
298
+ f"{source.name}-{source.version}-{source.pyver}-{source.abi}"
299
+ f"-{source.platform}.whl"
300
+ )
301
+ with WheelFile(dest_path, "w") as wheelfile:
302
+ for name_or_zinfo, contents in source.generate_contents():
303
+ wheelfile.writestr(name_or_zinfo, contents)
304
+
305
+ # Write the METADATA file
306
+ wheelfile.writestr(
307
+ f"{source.dist_info_dir}/METADATA",
308
+ source.metadata.as_string(policy=serialization_policy).encode(
309
+ "utf-8"
310
+ ),
311
+ )
312
+
313
+ # Write the WHEEL file
314
+ wheel_message = Message()
315
+ wheel_message.add_header("Wheel-Version", "1.0")
316
+ wheel_message.add_header("Generator", GENERATOR)
317
+ wheel_message.add_header(
318
+ "Root-Is-Purelib", str(source.platform == "any").lower()
319
+ )
320
+ tags = parse_tag(f"{source.pyver}-{source.abi}-{source.platform}")
321
+ for tag in sorted(tags, key=lambda tag: tag.interpreter):
322
+ wheel_message.add_header("Tag", str(tag))
323
+
324
+ wheelfile.writestr(
325
+ f"{source.dist_info_dir}/WHEEL",
326
+ wheel_message.as_string(policy=serialization_policy).encode(
327
+ "utf-8"
328
+ ),
329
+ )
270
330
 
271
- conv(installer, dest_dir)
272
331
  if verbose:
273
332
  print("OK")
@@ -5,15 +5,6 @@ import logging
5
5
 
6
6
  log = logging.getLogger("wheel")
7
7
 
8
- # ensure Python logging is configured
9
- try:
10
- __import__("setuptools.logging")
11
- except ImportError:
12
- # setuptools < ??
13
- from . import _setuptools_logging
14
-
15
- _setuptools_logging.configure()
16
-
17
8
 
18
9
  def urlsafe_b64encode(data: bytes) -> bytes:
19
10
  """urlsafe_b64encode without padding"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py2docfx
3
- Version: 0.1.9.dev1897607
3
+ Version: 0.1.9.dev1926139
4
4
  Summary: A package built based on Sphinx which download source code package and generate yaml files supported by docfx.
5
5
  Author: Microsoft Corporation
6
6
  License: MIT License