py2docfx 0.1.16rc2051518__py3-none-any.whl → 0.1.17__py3-none-any.whl

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