@scrypted/server 0.0.141 → 0.0.142

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.

Potentially problematic release.


This version of @scrypted/server might be problematic. Click here for more details.

Files changed (710) hide show
  1. package/package.json +1 -1
  2. package/.venv/bin/Activate.ps1 +0 -241
  3. package/.venv/bin/activate +0 -66
  4. package/.venv/bin/activate.csh +0 -25
  5. package/.venv/bin/activate.fish +0 -64
  6. package/.venv/bin/pip +0 -8
  7. package/.venv/bin/pip3 +0 -8
  8. package/.venv/bin/pip3.9 +0 -8
  9. package/.venv/lib/python3.9/site-packages/_distutils_hack/__init__.py +0 -198
  10. package/.venv/lib/python3.9/site-packages/_distutils_hack/override.py +0 -1
  11. package/.venv/lib/python3.9/site-packages/distutils-precedence.pth +0 -1
  12. package/.venv/lib/python3.9/site-packages/pgi/__init__.py +0 -62
  13. package/.venv/lib/python3.9/site-packages/pgi/_compat.py +0 -74
  14. package/.venv/lib/python3.9/site-packages/pgi/callback.py +0 -15
  15. package/.venv/lib/python3.9/site-packages/pgi/cffilib/__init__.py +0 -12
  16. package/.venv/lib/python3.9/site-packages/pgi/cffilib/_compat.py +0 -25
  17. package/.venv/lib/python3.9/site-packages/pgi/cffilib/_utils.py +0 -119
  18. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/__init__.py +0 -60
  19. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/_cdef.py +0 -574
  20. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/_ffi.py +0 -25
  21. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/error.py +0 -13
  22. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giarginfo.py +0 -73
  23. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giargument.py +0 -36
  24. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gibaseinfo.py +0 -113
  25. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gicallableinfo.py +0 -75
  26. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giconstantinfo.py +0 -22
  27. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gienuminfo.py +0 -59
  28. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gifieldinfo.py +0 -40
  29. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gifunctioninfo.py +0 -64
  30. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giinterfaceinfo.py +0 -93
  31. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giobjectinfo.py +0 -143
  32. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gipropertyinfo.py +0 -28
  33. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giregisteredtypeinfo.py +0 -27
  34. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/girepository.py +0 -143
  35. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gisignalinfo.py +0 -55
  36. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gistructinfo.py +0 -55
  37. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gitypeinfo.py +0 -66
  38. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gitypelib.py +0 -40
  39. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giunioninfo.py +0 -66
  40. package/.venv/lib/python3.9/site-packages/pgi/cffilib/glib/__init__.py +0 -8
  41. package/.venv/lib/python3.9/site-packages/pgi/cffilib/glib/_cdef.py +0 -101
  42. package/.venv/lib/python3.9/site-packages/pgi/cffilib/glib/glib.py +0 -260
  43. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/__init__.py +0 -15
  44. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/_cdef.py +0 -45
  45. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/_ffi.py +0 -26
  46. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/gobject.py +0 -27
  47. package/.venv/lib/python3.9/site-packages/pgi/clib/__init__.py +0 -11
  48. package/.venv/lib/python3.9/site-packages/pgi/clib/_compat.py +0 -20
  49. package/.venv/lib/python3.9/site-packages/pgi/clib/_utils.py +0 -213
  50. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/__init__.py +0 -71
  51. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/error.py +0 -13
  52. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giarginfo.py +0 -65
  53. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giargument.py +0 -58
  54. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gibaseinfo.py +0 -152
  55. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gicallableinfo.py +0 -203
  56. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giconstantinfo.py +0 -35
  57. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gienuminfo.py +0 -64
  58. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gifieldinfo.py +0 -46
  59. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giinterfaceinfo.py +0 -83
  60. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giobjectinfo.py +0 -134
  61. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gipropertyinfo.py +0 -36
  62. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giregisteredtypeinfo.py +0 -34
  63. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/girepository.py +0 -200
  64. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gistructinfo.py +0 -55
  65. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gitypeinfo.py +0 -97
  66. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gitypelib.py +0 -56
  67. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giunioninfo.py +0 -60
  68. package/.venv/lib/python3.9/site-packages/pgi/clib/glib.py +0 -336
  69. package/.venv/lib/python3.9/site-packages/pgi/clib/gobject.py +0 -405
  70. package/.venv/lib/python3.9/site-packages/pgi/codegen/__init__.py +0 -28
  71. package/.venv/lib/python3.9/site-packages/pgi/codegen/arguments.py +0 -640
  72. package/.venv/lib/python3.9/site-packages/pgi/codegen/backend.py +0 -95
  73. package/.venv/lib/python3.9/site-packages/pgi/codegen/cbargs.py +0 -152
  74. package/.venv/lib/python3.9/site-packages/pgi/codegen/cbreturn.py +0 -77
  75. package/.venv/lib/python3.9/site-packages/pgi/codegen/cffi_backend.py +0 -424
  76. package/.venv/lib/python3.9/site-packages/pgi/codegen/construct.py +0 -222
  77. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/__init__.py +0 -11
  78. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/main.py +0 -184
  79. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_basic.py +0 -705
  80. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_container.py +0 -236
  81. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_interface.py +0 -402
  82. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_other.py +0 -93
  83. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/utils.py +0 -168
  84. package/.venv/lib/python3.9/site-packages/pgi/codegen/fieldgen.py +0 -114
  85. package/.venv/lib/python3.9/site-packages/pgi/codegen/fields.py +0 -244
  86. package/.venv/lib/python3.9/site-packages/pgi/codegen/funcgen.py +0 -376
  87. package/.venv/lib/python3.9/site-packages/pgi/codegen/null_backend.py +0 -110
  88. package/.venv/lib/python3.9/site-packages/pgi/codegen/returnvalues.py +0 -443
  89. package/.venv/lib/python3.9/site-packages/pgi/codegen/siggen.py +0 -157
  90. package/.venv/lib/python3.9/site-packages/pgi/codegen/utils.py +0 -248
  91. package/.venv/lib/python3.9/site-packages/pgi/const.py +0 -9
  92. package/.venv/lib/python3.9/site-packages/pgi/constant.py +0 -32
  93. package/.venv/lib/python3.9/site-packages/pgi/debug.py +0 -31
  94. package/.venv/lib/python3.9/site-packages/pgi/enum.py +0 -244
  95. package/.venv/lib/python3.9/site-packages/pgi/field.py +0 -58
  96. package/.venv/lib/python3.9/site-packages/pgi/finalizer.py +0 -3
  97. package/.venv/lib/python3.9/site-packages/pgi/foreign/__init__.py +0 -71
  98. package/.venv/lib/python3.9/site-packages/pgi/foreign/_base.py +0 -43
  99. package/.venv/lib/python3.9/site-packages/pgi/foreign/cairo.py +0 -41
  100. package/.venv/lib/python3.9/site-packages/pgi/function.py +0 -12
  101. package/.venv/lib/python3.9/site-packages/pgi/gerror.py +0 -58
  102. package/.venv/lib/python3.9/site-packages/pgi/gtype.py +0 -168
  103. package/.venv/lib/python3.9/site-packages/pgi/importer.py +0 -189
  104. package/.venv/lib/python3.9/site-packages/pgi/module.py +0 -141
  105. package/.venv/lib/python3.9/site-packages/pgi/obj.py +0 -519
  106. package/.venv/lib/python3.9/site-packages/pgi/overrides/GLib.py +0 -1013
  107. package/.venv/lib/python3.9/site-packages/pgi/overrides/GObject.py +0 -583
  108. package/.venv/lib/python3.9/site-packages/pgi/overrides/Gdk.py +0 -454
  109. package/.venv/lib/python3.9/site-packages/pgi/overrides/Gio.py +0 -237
  110. package/.venv/lib/python3.9/site-packages/pgi/overrides/Gtk.py +0 -2412
  111. package/.venv/lib/python3.9/site-packages/pgi/overrides/Pango.py +0 -53
  112. package/.venv/lib/python3.9/site-packages/pgi/overrides/Poppler.py +0 -61
  113. package/.venv/lib/python3.9/site-packages/pgi/overrides/__init__.py +0 -327
  114. package/.venv/lib/python3.9/site-packages/pgi/overrides/keysyms.py +0 -54
  115. package/.venv/lib/python3.9/site-packages/pgi/properties.py +0 -313
  116. package/.venv/lib/python3.9/site-packages/pgi/propertyhelper.py +0 -12
  117. package/.venv/lib/python3.9/site-packages/pgi/repository/__init__.py +0 -10
  118. package/.venv/lib/python3.9/site-packages/pgi/signalhelper.py +0 -18
  119. package/.venv/lib/python3.9/site-packages/pgi/signals.py +0 -122
  120. package/.venv/lib/python3.9/site-packages/pgi/static.py +0 -189
  121. package/.venv/lib/python3.9/site-packages/pgi/structure.py +0 -131
  122. package/.venv/lib/python3.9/site-packages/pgi/util.py +0 -342
  123. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/COPYING +0 -502
  124. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/INSTALLER +0 -1
  125. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/METADATA +0 -22
  126. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/RECORD +0 -229
  127. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/REQUESTED +0 -0
  128. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/WHEEL +0 -5
  129. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/top_level.txt +0 -1
  130. package/.venv/lib/python3.9/site-packages/pip/__init__.py +0 -13
  131. package/.venv/lib/python3.9/site-packages/pip/__main__.py +0 -31
  132. package/.venv/lib/python3.9/site-packages/pip/_internal/__init__.py +0 -19
  133. package/.venv/lib/python3.9/site-packages/pip/_internal/build_env.py +0 -293
  134. package/.venv/lib/python3.9/site-packages/pip/_internal/cache.py +0 -264
  135. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/__init__.py +0 -4
  136. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py +0 -163
  137. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/base_command.py +0 -214
  138. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/cmdoptions.py +0 -1010
  139. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/command_context.py +0 -27
  140. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/main.py +0 -70
  141. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/main_parser.py +0 -87
  142. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/parser.py +0 -292
  143. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/progress_bars.py +0 -250
  144. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/req_command.py +0 -469
  145. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/spinners.py +0 -157
  146. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/status_codes.py +0 -6
  147. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/__init__.py +0 -127
  148. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/cache.py +0 -223
  149. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/check.py +0 -53
  150. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/completion.py +0 -96
  151. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/configuration.py +0 -266
  152. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/debug.py +0 -202
  153. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/download.py +0 -139
  154. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/freeze.py +0 -97
  155. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/hash.py +0 -59
  156. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/help.py +0 -41
  157. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/index.py +0 -138
  158. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/install.py +0 -770
  159. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/list.py +0 -361
  160. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/search.py +0 -174
  161. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/show.py +0 -235
  162. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/uninstall.py +0 -105
  163. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/wheel.py +0 -177
  164. package/.venv/lib/python3.9/site-packages/pip/_internal/configuration.py +0 -367
  165. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/__init__.py +0 -21
  166. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/base.py +0 -36
  167. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/installed.py +0 -22
  168. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/sdist.py +0 -129
  169. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/wheel.py +0 -31
  170. package/.venv/lib/python3.9/site-packages/pip/_internal/exceptions.py +0 -402
  171. package/.venv/lib/python3.9/site-packages/pip/_internal/index/__init__.py +0 -2
  172. package/.venv/lib/python3.9/site-packages/pip/_internal/index/collector.py +0 -536
  173. package/.venv/lib/python3.9/site-packages/pip/_internal/index/package_finder.py +0 -993
  174. package/.venv/lib/python3.9/site-packages/pip/_internal/index/sources.py +0 -224
  175. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/__init__.py +0 -446
  176. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/_distutils.py +0 -169
  177. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/_sysconfig.py +0 -219
  178. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/base.py +0 -52
  179. package/.venv/lib/python3.9/site-packages/pip/_internal/main.py +0 -12
  180. package/.venv/lib/python3.9/site-packages/pip/_internal/metadata/__init__.py +0 -51
  181. package/.venv/lib/python3.9/site-packages/pip/_internal/metadata/base.py +0 -330
  182. package/.venv/lib/python3.9/site-packages/pip/_internal/metadata/pkg_resources.py +0 -146
  183. package/.venv/lib/python3.9/site-packages/pip/_internal/models/__init__.py +0 -2
  184. package/.venv/lib/python3.9/site-packages/pip/_internal/models/candidate.py +0 -34
  185. package/.venv/lib/python3.9/site-packages/pip/_internal/models/direct_url.py +0 -220
  186. package/.venv/lib/python3.9/site-packages/pip/_internal/models/format_control.py +0 -80
  187. package/.venv/lib/python3.9/site-packages/pip/_internal/models/index.py +0 -28
  188. package/.venv/lib/python3.9/site-packages/pip/_internal/models/link.py +0 -288
  189. package/.venv/lib/python3.9/site-packages/pip/_internal/models/scheme.py +0 -31
  190. package/.venv/lib/python3.9/site-packages/pip/_internal/models/search_scope.py +0 -129
  191. package/.venv/lib/python3.9/site-packages/pip/_internal/models/selection_prefs.py +0 -51
  192. package/.venv/lib/python3.9/site-packages/pip/_internal/models/target_python.py +0 -110
  193. package/.venv/lib/python3.9/site-packages/pip/_internal/models/wheel.py +0 -89
  194. package/.venv/lib/python3.9/site-packages/pip/_internal/network/__init__.py +0 -2
  195. package/.venv/lib/python3.9/site-packages/pip/_internal/network/auth.py +0 -323
  196. package/.venv/lib/python3.9/site-packages/pip/_internal/network/cache.py +0 -69
  197. package/.venv/lib/python3.9/site-packages/pip/_internal/network/download.py +0 -184
  198. package/.venv/lib/python3.9/site-packages/pip/_internal/network/lazy_wheel.py +0 -210
  199. package/.venv/lib/python3.9/site-packages/pip/_internal/network/session.py +0 -454
  200. package/.venv/lib/python3.9/site-packages/pip/_internal/network/utils.py +0 -96
  201. package/.venv/lib/python3.9/site-packages/pip/_internal/network/xmlrpc.py +0 -60
  202. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/__init__.py +0 -0
  203. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  204. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata.py +0 -30
  205. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata_editable.py +0 -34
  206. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata_legacy.py +0 -67
  207. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel.py +0 -37
  208. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel_editable.py +0 -46
  209. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel_legacy.py +0 -105
  210. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/check.py +0 -149
  211. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/freeze.py +0 -254
  212. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/__init__.py +0 -2
  213. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/editable_legacy.py +0 -46
  214. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/legacy.py +0 -125
  215. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/wheel.py +0 -738
  216. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/prepare.py +0 -632
  217. package/.venv/lib/python3.9/site-packages/pip/_internal/pyproject.py +0 -183
  218. package/.venv/lib/python3.9/site-packages/pip/_internal/req/__init__.py +0 -94
  219. package/.venv/lib/python3.9/site-packages/pip/_internal/req/constructors.py +0 -466
  220. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_file.py +0 -536
  221. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_install.py +0 -891
  222. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_set.py +0 -189
  223. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_tracker.py +0 -124
  224. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_uninstall.py +0 -633
  225. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/__init__.py +0 -0
  226. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/base.py +0 -20
  227. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  228. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py +0 -467
  229. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  230. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/base.py +0 -141
  231. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -540
  232. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/factory.py +0 -701
  233. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +0 -155
  234. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/provider.py +0 -215
  235. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/reporter.py +0 -68
  236. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/requirements.py +0 -166
  237. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/resolver.py +0 -251
  238. package/.venv/lib/python3.9/site-packages/pip/_internal/self_outdated_check.py +0 -182
  239. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/__init__.py +0 -0
  240. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/_log.py +0 -38
  241. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/appdirs.py +0 -52
  242. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/compat.py +0 -63
  243. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/compatibility_tags.py +0 -165
  244. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/datetime.py +0 -11
  245. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/deprecation.py +0 -120
  246. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/direct_url_helpers.py +0 -87
  247. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/distutils_args.py +0 -42
  248. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/egg_link.py +0 -75
  249. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/encoding.py +0 -36
  250. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/entrypoints.py +0 -27
  251. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/filesystem.py +0 -182
  252. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/filetypes.py +0 -27
  253. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/glibc.py +0 -88
  254. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/hashes.py +0 -144
  255. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/inject_securetransport.py +0 -35
  256. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/logging.py +0 -358
  257. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/misc.py +0 -689
  258. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/models.py +0 -39
  259. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/packaging.py +0 -84
  260. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/parallel.py +0 -103
  261. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/pkg_resources.py +0 -33
  262. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/setuptools_build.py +0 -167
  263. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/subprocess.py +0 -289
  264. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/temp_dir.py +0 -246
  265. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/unpacking.py +0 -258
  266. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/urls.py +0 -62
  267. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/virtualenv.py +0 -104
  268. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/wheel.py +0 -182
  269. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/__init__.py +0 -15
  270. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/bazaar.py +0 -93
  271. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/git.py +0 -513
  272. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/mercurial.py +0 -153
  273. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/subversion.py +0 -318
  274. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/versioncontrol.py +0 -693
  275. package/.venv/lib/python3.9/site-packages/pip/_internal/wheel_builder.py +0 -375
  276. package/.venv/lib/python3.9/site-packages/pip/_vendor/__init__.py +0 -111
  277. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/__init__.py +0 -11
  278. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/_cmd.py +0 -57
  279. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/adapter.py +0 -133
  280. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/cache.py +0 -39
  281. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +0 -2
  282. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +0 -146
  283. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +0 -33
  284. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/compat.py +0 -29
  285. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/controller.py +0 -376
  286. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/filewrapper.py +0 -80
  287. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/heuristics.py +0 -135
  288. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/serialize.py +0 -188
  289. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/wrapper.py +0 -29
  290. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/__init__.py +0 -3
  291. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/__main__.py +0 -12
  292. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/cacert.pem +0 -4257
  293. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/core.py +0 -76
  294. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/__init__.py +0 -83
  295. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/big5freq.py +0 -386
  296. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/big5prober.py +0 -47
  297. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/chardistribution.py +0 -233
  298. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/charsetgroupprober.py +0 -107
  299. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/charsetprober.py +0 -145
  300. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cli/__init__.py +0 -1
  301. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cli/chardetect.py +0 -84
  302. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/codingstatemachine.py +0 -88
  303. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/compat.py +0 -36
  304. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cp949prober.py +0 -49
  305. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/enums.py +0 -76
  306. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/escprober.py +0 -101
  307. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/escsm.py +0 -246
  308. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/eucjpprober.py +0 -92
  309. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euckrfreq.py +0 -195
  310. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euckrprober.py +0 -47
  311. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euctwfreq.py +0 -387
  312. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euctwprober.py +0 -46
  313. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/gb2312freq.py +0 -283
  314. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/gb2312prober.py +0 -46
  315. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/hebrewprober.py +0 -292
  316. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/jisfreq.py +0 -325
  317. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/jpcntx.py +0 -233
  318. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +0 -4650
  319. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langgreekmodel.py +0 -4398
  320. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langhebrewmodel.py +0 -4383
  321. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langhungarianmodel.py +0 -4650
  322. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langrussianmodel.py +0 -5718
  323. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langthaimodel.py +0 -4383
  324. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langturkishmodel.py +0 -4383
  325. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/latin1prober.py +0 -145
  326. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcharsetprober.py +0 -91
  327. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +0 -54
  328. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcssm.py +0 -572
  329. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/metadata/__init__.py +0 -0
  330. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/metadata/languages.py +0 -310
  331. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sbcharsetprober.py +0 -145
  332. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +0 -83
  333. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sjisprober.py +0 -92
  334. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/universaldetector.py +0 -286
  335. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/utf8prober.py +0 -82
  336. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/version.py +0 -9
  337. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/__init__.py +0 -6
  338. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/ansi.py +0 -102
  339. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/ansitowin32.py +0 -258
  340. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/initialise.py +0 -80
  341. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/win32.py +0 -152
  342. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/winterm.py +0 -169
  343. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/__init__.py +0 -23
  344. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/__init__.py +0 -6
  345. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/misc.py +0 -41
  346. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/shutil.py +0 -764
  347. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +0 -84
  348. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +0 -786
  349. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/tarfile.py +0 -2607
  350. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/compat.py +0 -1122
  351. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/database.py +0 -1339
  352. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/index.py +0 -509
  353. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/locators.py +0 -1300
  354. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/manifest.py +0 -393
  355. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/markers.py +0 -147
  356. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/metadata.py +0 -1058
  357. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/resources.py +0 -358
  358. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/scripts.py +0 -429
  359. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  360. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
  361. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  362. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/util.py +0 -1969
  363. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/version.py +0 -739
  364. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  365. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
  366. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  367. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/wheel.py +0 -1053
  368. package/.venv/lib/python3.9/site-packages/pip/_vendor/distro.py +0 -1386
  369. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/__init__.py +0 -35
  370. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_ihatexml.py +0 -289
  371. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_inputstream.py +0 -918
  372. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_tokenizer.py +0 -1735
  373. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/__init__.py +0 -5
  374. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/_base.py +0 -40
  375. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/py.py +0 -67
  376. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_utils.py +0 -159
  377. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/constants.py +0 -2946
  378. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/__init__.py +0 -0
  379. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +0 -29
  380. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/base.py +0 -12
  381. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +0 -73
  382. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/lint.py +0 -93
  383. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +0 -207
  384. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +0 -916
  385. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/whitespace.py +0 -38
  386. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/html5parser.py +0 -2795
  387. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/serializer.py +0 -409
  388. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +0 -30
  389. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +0 -54
  390. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +0 -50
  391. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +0 -88
  392. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/base.py +0 -417
  393. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +0 -239
  394. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +0 -343
  395. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +0 -392
  396. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +0 -154
  397. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/base.py +0 -252
  398. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +0 -43
  399. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +0 -131
  400. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +0 -215
  401. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +0 -69
  402. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/__init__.py +0 -44
  403. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/codec.py +0 -117
  404. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/compat.py +0 -16
  405. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/core.py +0 -409
  406. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/idnadata.py +0 -2050
  407. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/intranges.py +0 -58
  408. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/package_data.py +0 -2
  409. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/uts46data.py +0 -8438
  410. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/__init__.py +0 -54
  411. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/_version.py +0 -1
  412. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/exceptions.py +0 -48
  413. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/ext.py +0 -193
  414. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/fallback.py +0 -1087
  415. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/__about__.py +0 -26
  416. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/__init__.py +0 -25
  417. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_manylinux.py +0 -301
  418. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_musllinux.py +0 -136
  419. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_structures.py +0 -67
  420. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/markers.py +0 -304
  421. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/requirements.py +0 -146
  422. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/specifiers.py +0 -828
  423. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/tags.py +0 -484
  424. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/utils.py +0 -136
  425. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/version.py +0 -504
  426. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/__init__.py +0 -6
  427. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/build.py +0 -127
  428. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/check.py +0 -207
  429. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/colorlog.py +0 -115
  430. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/compat.py +0 -51
  431. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/dirtools.py +0 -44
  432. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/envbuild.py +0 -171
  433. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/__init__.py +0 -17
  434. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py +0 -363
  435. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/meta.py +0 -92
  436. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/wrappers.py +0 -375
  437. package/.venv/lib/python3.9/site-packages/pip/_vendor/pkg_resources/__init__.py +0 -3296
  438. package/.venv/lib/python3.9/site-packages/pip/_vendor/pkg_resources/py31compat.py +0 -23
  439. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/__init__.py +0 -329
  440. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/__main__.py +0 -44
  441. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/android.py +0 -117
  442. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/api.py +0 -155
  443. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/macos.py +0 -62
  444. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/unix.py +0 -180
  445. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/version.py +0 -4
  446. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/windows.py +0 -180
  447. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/__init__.py +0 -189
  448. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/bar.py +0 -93
  449. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/colors.py +0 -79
  450. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/counter.py +0 -47
  451. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/spinner.py +0 -45
  452. package/.venv/lib/python3.9/site-packages/pip/_vendor/pyparsing.py +0 -7107
  453. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/__init__.py +0 -154
  454. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/__version__.py +0 -14
  455. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/_internal_utils.py +0 -42
  456. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/adapters.py +0 -533
  457. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/api.py +0 -159
  458. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/auth.py +0 -305
  459. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/certs.py +0 -18
  460. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/compat.py +0 -76
  461. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/cookies.py +0 -549
  462. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/exceptions.py +0 -127
  463. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/help.py +0 -132
  464. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/hooks.py +0 -34
  465. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/models.py +0 -966
  466. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/packages.py +0 -16
  467. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/sessions.py +0 -781
  468. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/status_codes.py +0 -123
  469. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/structures.py +0 -105
  470. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/utils.py +0 -1013
  471. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/__init__.py +0 -26
  472. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  473. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +0 -6
  474. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/providers.py +0 -133
  475. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/reporters.py +0 -37
  476. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py +0 -483
  477. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.py +0 -165
  478. package/.venv/lib/python3.9/site-packages/pip/_vendor/six.py +0 -998
  479. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/__init__.py +0 -517
  480. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/_asyncio.py +0 -92
  481. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/_utils.py +0 -68
  482. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/after.py +0 -46
  483. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/before.py +0 -41
  484. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/before_sleep.py +0 -58
  485. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/nap.py +0 -43
  486. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/retry.py +0 -213
  487. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/stop.py +0 -96
  488. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/tornadoweb.py +0 -59
  489. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/wait.py +0 -191
  490. package/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/__init__.py +0 -6
  491. package/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/_parser.py +0 -703
  492. package/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/_re.py +0 -83
  493. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/__init__.py +0 -85
  494. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/_collections.py +0 -337
  495. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/_version.py +0 -2
  496. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/connection.py +0 -569
  497. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/connectionpool.py +0 -1078
  498. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  499. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +0 -36
  500. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  501. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +0 -519
  502. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +0 -397
  503. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/appengine.py +0 -314
  504. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +0 -130
  505. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +0 -511
  506. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +0 -922
  507. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/socks.py +0 -216
  508. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/exceptions.py +0 -323
  509. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/fields.py +0 -274
  510. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/filepost.py +0 -98
  511. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -5
  512. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  513. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +0 -51
  514. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/six.py +0 -1077
  515. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +0 -24
  516. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +0 -160
  517. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/poolmanager.py +0 -536
  518. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/request.py +0 -170
  519. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/response.py +0 -821
  520. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/__init__.py +0 -49
  521. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/connection.py +0 -150
  522. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/proxy.py +0 -57
  523. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/queue.py +0 -22
  524. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/request.py +0 -143
  525. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/response.py +0 -107
  526. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/retry.py +0 -602
  527. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/ssl_.py +0 -495
  528. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/ssltransport.py +0 -221
  529. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/timeout.py +0 -268
  530. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/url.py +0 -432
  531. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/wait.py +0 -153
  532. package/.venv/lib/python3.9/site-packages/pip/_vendor/vendor.txt +0 -22
  533. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/__init__.py +0 -342
  534. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/labels.py +0 -231
  535. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/mklabels.py +0 -59
  536. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/tests.py +0 -153
  537. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/x_user_defined.py +0 -325
  538. package/.venv/lib/python3.9/site-packages/pip/py.typed +0 -4
  539. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/INSTALLER +0 -1
  540. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/LICENSE.txt +0 -20
  541. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/METADATA +0 -93
  542. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/RECORD +0 -819
  543. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/REQUESTED +0 -0
  544. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/WHEEL +0 -5
  545. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/entry_points.txt +0 -5
  546. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/top_level.txt +0 -1
  547. package/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py +0 -3303
  548. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/__init__.py +0 -0
  549. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/appdirs.py +0 -608
  550. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__about__.py +0 -26
  551. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__init__.py +0 -25
  552. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_manylinux.py +0 -301
  553. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_musllinux.py +0 -136
  554. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_structures.py +0 -67
  555. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py +0 -304
  556. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/requirements.py +0 -146
  557. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/specifiers.py +0 -828
  558. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/tags.py +0 -484
  559. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/utils.py +0 -136
  560. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py +0 -504
  561. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/pyparsing.py +0 -5742
  562. package/.venv/lib/python3.9/site-packages/pkg_resources/extern/__init__.py +0 -73
  563. package/.venv/lib/python3.9/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +0 -6
  564. package/.venv/lib/python3.9/site-packages/setuptools/__init__.py +0 -244
  565. package/.venv/lib/python3.9/site-packages/setuptools/_deprecation_warning.py +0 -7
  566. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/__init__.py +0 -24
  567. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/_collections.py +0 -56
  568. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/_msvccompiler.py +0 -561
  569. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/archive_util.py +0 -256
  570. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/bcppcompiler.py +0 -393
  571. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/ccompiler.py +0 -1123
  572. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/cmd.py +0 -403
  573. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/__init__.py +0 -31
  574. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist.py +0 -143
  575. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_dumb.py +0 -123
  576. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_msi.py +0 -749
  577. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_rpm.py +0 -579
  578. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_wininst.py +0 -377
  579. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build.py +0 -157
  580. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_clib.py +0 -209
  581. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_ext.py +0 -755
  582. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_py.py +0 -392
  583. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_scripts.py +0 -152
  584. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/check.py +0 -148
  585. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/clean.py +0 -76
  586. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/config.py +0 -344
  587. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install.py +0 -775
  588. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_data.py +0 -79
  589. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_egg_info.py +0 -84
  590. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_headers.py +0 -47
  591. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_lib.py +0 -217
  592. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_scripts.py +0 -60
  593. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/py37compat.py +0 -30
  594. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/register.py +0 -304
  595. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py +0 -494
  596. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/upload.py +0 -214
  597. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/config.py +0 -130
  598. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/core.py +0 -249
  599. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/cygwinccompiler.py +0 -362
  600. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/debug.py +0 -5
  601. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/dep_util.py +0 -92
  602. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/dir_util.py +0 -210
  603. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/dist.py +0 -1257
  604. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/errors.py +0 -97
  605. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/extension.py +0 -240
  606. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/fancy_getopt.py +0 -457
  607. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/file_util.py +0 -238
  608. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/filelist.py +0 -355
  609. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/log.py +0 -81
  610. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/msvc9compiler.py +0 -788
  611. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/msvccompiler.py +0 -643
  612. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/py35compat.py +0 -19
  613. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/py38compat.py +0 -7
  614. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/spawn.py +0 -106
  615. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/sysconfig.py +0 -567
  616. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/text_file.py +0 -286
  617. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/unixccompiler.py +0 -325
  618. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/util.py +0 -548
  619. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/version.py +0 -363
  620. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/versionpredicate.py +0 -169
  621. package/.venv/lib/python3.9/site-packages/setuptools/_imp.py +0 -82
  622. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/__init__.py +0 -0
  623. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/__init__.py +0 -4
  624. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/more.py +0 -3825
  625. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/recipes.py +0 -620
  626. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/ordered_set.py +0 -488
  627. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/__about__.py +0 -26
  628. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/__init__.py +0 -25
  629. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_manylinux.py +0 -301
  630. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_musllinux.py +0 -136
  631. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_structures.py +0 -67
  632. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/markers.py +0 -304
  633. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/requirements.py +0 -146
  634. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/specifiers.py +0 -828
  635. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/tags.py +0 -484
  636. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/utils.py +0 -136
  637. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/version.py +0 -504
  638. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/pyparsing.py +0 -5742
  639. package/.venv/lib/python3.9/site-packages/setuptools/archive_util.py +0 -205
  640. package/.venv/lib/python3.9/site-packages/setuptools/build_meta.py +0 -290
  641. package/.venv/lib/python3.9/site-packages/setuptools/cli-32.exe +0 -0
  642. package/.venv/lib/python3.9/site-packages/setuptools/cli-64.exe +0 -0
  643. package/.venv/lib/python3.9/site-packages/setuptools/cli-arm64.exe +0 -0
  644. package/.venv/lib/python3.9/site-packages/setuptools/cli.exe +0 -0
  645. package/.venv/lib/python3.9/site-packages/setuptools/command/__init__.py +0 -8
  646. package/.venv/lib/python3.9/site-packages/setuptools/command/alias.py +0 -78
  647. package/.venv/lib/python3.9/site-packages/setuptools/command/bdist_egg.py +0 -456
  648. package/.venv/lib/python3.9/site-packages/setuptools/command/bdist_rpm.py +0 -40
  649. package/.venv/lib/python3.9/site-packages/setuptools/command/build_clib.py +0 -101
  650. package/.venv/lib/python3.9/site-packages/setuptools/command/build_ext.py +0 -328
  651. package/.venv/lib/python3.9/site-packages/setuptools/command/build_py.py +0 -242
  652. package/.venv/lib/python3.9/site-packages/setuptools/command/develop.py +0 -193
  653. package/.venv/lib/python3.9/site-packages/setuptools/command/dist_info.py +0 -36
  654. package/.venv/lib/python3.9/site-packages/setuptools/command/easy_install.py +0 -2304
  655. package/.venv/lib/python3.9/site-packages/setuptools/command/egg_info.py +0 -755
  656. package/.venv/lib/python3.9/site-packages/setuptools/command/install.py +0 -132
  657. package/.venv/lib/python3.9/site-packages/setuptools/command/install_egg_info.py +0 -62
  658. package/.venv/lib/python3.9/site-packages/setuptools/command/install_lib.py +0 -122
  659. package/.venv/lib/python3.9/site-packages/setuptools/command/install_scripts.py +0 -69
  660. package/.venv/lib/python3.9/site-packages/setuptools/command/launcher manifest.xml +0 -15
  661. package/.venv/lib/python3.9/site-packages/setuptools/command/py36compat.py +0 -134
  662. package/.venv/lib/python3.9/site-packages/setuptools/command/register.py +0 -18
  663. package/.venv/lib/python3.9/site-packages/setuptools/command/rotate.py +0 -64
  664. package/.venv/lib/python3.9/site-packages/setuptools/command/saveopts.py +0 -22
  665. package/.venv/lib/python3.9/site-packages/setuptools/command/sdist.py +0 -196
  666. package/.venv/lib/python3.9/site-packages/setuptools/command/setopt.py +0 -149
  667. package/.venv/lib/python3.9/site-packages/setuptools/command/test.py +0 -252
  668. package/.venv/lib/python3.9/site-packages/setuptools/command/upload.py +0 -17
  669. package/.venv/lib/python3.9/site-packages/setuptools/command/upload_docs.py +0 -202
  670. package/.venv/lib/python3.9/site-packages/setuptools/config.py +0 -751
  671. package/.venv/lib/python3.9/site-packages/setuptools/dep_util.py +0 -25
  672. package/.venv/lib/python3.9/site-packages/setuptools/depends.py +0 -176
  673. package/.venv/lib/python3.9/site-packages/setuptools/dist.py +0 -1156
  674. package/.venv/lib/python3.9/site-packages/setuptools/errors.py +0 -40
  675. package/.venv/lib/python3.9/site-packages/setuptools/extension.py +0 -55
  676. package/.venv/lib/python3.9/site-packages/setuptools/extern/__init__.py +0 -73
  677. package/.venv/lib/python3.9/site-packages/setuptools/glob.py +0 -167
  678. package/.venv/lib/python3.9/site-packages/setuptools/gui-32.exe +0 -0
  679. package/.venv/lib/python3.9/site-packages/setuptools/gui-64.exe +0 -0
  680. package/.venv/lib/python3.9/site-packages/setuptools/gui-arm64.exe +0 -0
  681. package/.venv/lib/python3.9/site-packages/setuptools/gui.exe +0 -0
  682. package/.venv/lib/python3.9/site-packages/setuptools/installer.py +0 -104
  683. package/.venv/lib/python3.9/site-packages/setuptools/launch.py +0 -36
  684. package/.venv/lib/python3.9/site-packages/setuptools/logging.py +0 -30
  685. package/.venv/lib/python3.9/site-packages/setuptools/monkey.py +0 -177
  686. package/.venv/lib/python3.9/site-packages/setuptools/msvc.py +0 -1805
  687. package/.venv/lib/python3.9/site-packages/setuptools/namespaces.py +0 -107
  688. package/.venv/lib/python3.9/site-packages/setuptools/package_index.py +0 -1127
  689. package/.venv/lib/python3.9/site-packages/setuptools/py34compat.py +0 -13
  690. package/.venv/lib/python3.9/site-packages/setuptools/sandbox.py +0 -530
  691. package/.venv/lib/python3.9/site-packages/setuptools/script (dev).tmpl +0 -6
  692. package/.venv/lib/python3.9/site-packages/setuptools/script.tmpl +0 -3
  693. package/.venv/lib/python3.9/site-packages/setuptools/tests/integration/__init__.py +0 -0
  694. package/.venv/lib/python3.9/site-packages/setuptools/tests/integration/helpers.py +0 -61
  695. package/.venv/lib/python3.9/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +0 -218
  696. package/.venv/lib/python3.9/site-packages/setuptools/unicode_utils.py +0 -42
  697. package/.venv/lib/python3.9/site-packages/setuptools/version.py +0 -6
  698. package/.venv/lib/python3.9/site-packages/setuptools/wheel.py +0 -213
  699. package/.venv/lib/python3.9/site-packages/setuptools/windows_support.py +0 -29
  700. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/INSTALLER +0 -1
  701. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/LICENSE +0 -19
  702. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/METADATA +0 -142
  703. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/RECORD +0 -308
  704. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/REQUESTED +0 -0
  705. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/WHEEL +0 -5
  706. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/entry_points.txt +0 -56
  707. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/top_level.txt +0 -3
  708. package/.venv/pyvenv.cfg +0 -3
  709. package/.vscode/launch.json +0 -62
  710. package/.vscode/settings.json +0 -8
@@ -1,2304 +0,0 @@
1
- """
2
- Easy Install
3
- ------------
4
-
5
- A tool for doing automatic download/extract/build of distutils-based Python
6
- packages. For detailed documentation, see the accompanying EasyInstall.txt
7
- file, or visit the `EasyInstall home page`__.
8
-
9
- __ https://setuptools.pypa.io/en/latest/deprecated/easy_install.html
10
-
11
- """
12
-
13
- from glob import glob
14
- from distutils.util import get_platform
15
- from distutils.util import convert_path, subst_vars
16
- from distutils.errors import (
17
- DistutilsArgError, DistutilsOptionError,
18
- DistutilsError, DistutilsPlatformError,
19
- )
20
- from distutils import log, dir_util
21
- from distutils.command.build_scripts import first_line_re
22
- from distutils.spawn import find_executable
23
- from distutils.command import install
24
- import sys
25
- import os
26
- import zipimport
27
- import shutil
28
- import tempfile
29
- import zipfile
30
- import re
31
- import stat
32
- import random
33
- import textwrap
34
- import warnings
35
- import site
36
- import struct
37
- import contextlib
38
- import subprocess
39
- import shlex
40
- import io
41
- import configparser
42
-
43
-
44
- from sysconfig import get_config_vars, get_path
45
-
46
- from setuptools import SetuptoolsDeprecationWarning
47
-
48
- from setuptools import Command
49
- from setuptools.sandbox import run_setup
50
- from setuptools.command import setopt
51
- from setuptools.archive_util import unpack_archive
52
- from setuptools.package_index import (
53
- PackageIndex, parse_requirement_arg, URL_SCHEME,
54
- )
55
- from setuptools.command import bdist_egg, egg_info
56
- from setuptools.wheel import Wheel
57
- from pkg_resources import (
58
- yield_lines, normalize_path, resource_string, ensure_directory,
59
- get_distribution, find_distributions, Environment, Requirement,
60
- Distribution, PathMetadata, EggMetadata, WorkingSet, DistributionNotFound,
61
- VersionConflict, DEVELOP_DIST,
62
- )
63
- import pkg_resources
64
-
65
- # Turn on PEP440Warnings
66
- warnings.filterwarnings("default", category=pkg_resources.PEP440Warning)
67
-
68
- __all__ = [
69
- 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg',
70
- 'get_exe_prefixes',
71
- ]
72
-
73
-
74
- def is_64bit():
75
- return struct.calcsize("P") == 8
76
-
77
-
78
- def samefile(p1, p2):
79
- """
80
- Determine if two paths reference the same file.
81
-
82
- Augments os.path.samefile to work on Windows and
83
- suppresses errors if the path doesn't exist.
84
- """
85
- both_exist = os.path.exists(p1) and os.path.exists(p2)
86
- use_samefile = hasattr(os.path, 'samefile') and both_exist
87
- if use_samefile:
88
- return os.path.samefile(p1, p2)
89
- norm_p1 = os.path.normpath(os.path.normcase(p1))
90
- norm_p2 = os.path.normpath(os.path.normcase(p2))
91
- return norm_p1 == norm_p2
92
-
93
-
94
- def _to_bytes(s):
95
- return s.encode('utf8')
96
-
97
-
98
- def isascii(s):
99
- try:
100
- s.encode('ascii')
101
- return True
102
- except UnicodeError:
103
- return False
104
-
105
-
106
- def _one_liner(text):
107
- return textwrap.dedent(text).strip().replace('\n', '; ')
108
-
109
-
110
- class easy_install(Command):
111
- """Manage a download/build/install process"""
112
- description = "Find/get/install Python packages"
113
- command_consumes_arguments = True
114
-
115
- user_options = [
116
- ('prefix=', None, "installation prefix"),
117
- ("zip-ok", "z", "install package as a zipfile"),
118
- ("multi-version", "m", "make apps have to require() a version"),
119
- ("upgrade", "U", "force upgrade (searches PyPI for latest versions)"),
120
- ("install-dir=", "d", "install package to DIR"),
121
- ("script-dir=", "s", "install scripts to DIR"),
122
- ("exclude-scripts", "x", "Don't install scripts"),
123
- ("always-copy", "a", "Copy all needed packages to install dir"),
124
- ("index-url=", "i", "base URL of Python Package Index"),
125
- ("find-links=", "f", "additional URL(s) to search for packages"),
126
- ("build-directory=", "b",
127
- "download/extract/build in DIR; keep the results"),
128
- ('optimize=', 'O',
129
- "also compile with optimization: -O1 for \"python -O\", "
130
- "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"),
131
- ('record=', None,
132
- "filename in which to record list of installed files"),
133
- ('always-unzip', 'Z', "don't install as a zipfile, no matter what"),
134
- ('site-dirs=', 'S', "list of directories where .pth files work"),
135
- ('editable', 'e', "Install specified packages in editable form"),
136
- ('no-deps', 'N', "don't install dependencies"),
137
- ('allow-hosts=', 'H', "pattern(s) that hostnames must match"),
138
- ('local-snapshots-ok', 'l',
139
- "allow building eggs from local checkouts"),
140
- ('version', None, "print version information and exit"),
141
- ('no-find-links', None,
142
- "Don't load find-links defined in packages being installed"),
143
- ('user', None, "install in user site-package '%s'" % site.USER_SITE)
144
- ]
145
- boolean_options = [
146
- 'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy',
147
- 'editable',
148
- 'no-deps', 'local-snapshots-ok', 'version',
149
- 'user'
150
- ]
151
-
152
- negative_opt = {'always-unzip': 'zip-ok'}
153
- create_index = PackageIndex
154
-
155
- def initialize_options(self):
156
- warnings.warn(
157
- "easy_install command is deprecated. "
158
- "Use build and pip and other standards-based tools.",
159
- EasyInstallDeprecationWarning,
160
- )
161
-
162
- # the --user option seems to be an opt-in one,
163
- # so the default should be False.
164
- self.user = 0
165
- self.zip_ok = self.local_snapshots_ok = None
166
- self.install_dir = self.script_dir = self.exclude_scripts = None
167
- self.index_url = None
168
- self.find_links = None
169
- self.build_directory = None
170
- self.args = None
171
- self.optimize = self.record = None
172
- self.upgrade = self.always_copy = self.multi_version = None
173
- self.editable = self.no_deps = self.allow_hosts = None
174
- self.root = self.prefix = self.no_report = None
175
- self.version = None
176
- self.install_purelib = None # for pure module distributions
177
- self.install_platlib = None # non-pure (dists w/ extensions)
178
- self.install_headers = None # for C/C++ headers
179
- self.install_lib = None # set to either purelib or platlib
180
- self.install_scripts = None
181
- self.install_data = None
182
- self.install_base = None
183
- self.install_platbase = None
184
- if site.ENABLE_USER_SITE:
185
- self.install_userbase = site.USER_BASE
186
- self.install_usersite = site.USER_SITE
187
- else:
188
- self.install_userbase = None
189
- self.install_usersite = None
190
- self.no_find_links = None
191
-
192
- # Options not specifiable via command line
193
- self.package_index = None
194
- self.pth_file = self.always_copy_from = None
195
- self.site_dirs = None
196
- self.installed_projects = {}
197
- # Always read easy_install options, even if we are subclassed, or have
198
- # an independent instance created. This ensures that defaults will
199
- # always come from the standard configuration file(s)' "easy_install"
200
- # section, even if this is a "develop" or "install" command, or some
201
- # other embedding.
202
- self._dry_run = None
203
- self.verbose = self.distribution.verbose
204
- self.distribution._set_command_options(
205
- self, self.distribution.get_option_dict('easy_install')
206
- )
207
-
208
- def delete_blockers(self, blockers):
209
- extant_blockers = (
210
- filename for filename in blockers
211
- if os.path.exists(filename) or os.path.islink(filename)
212
- )
213
- list(map(self._delete_path, extant_blockers))
214
-
215
- def _delete_path(self, path):
216
- log.info("Deleting %s", path)
217
- if self.dry_run:
218
- return
219
-
220
- is_tree = os.path.isdir(path) and not os.path.islink(path)
221
- remover = rmtree if is_tree else os.unlink
222
- remover(path)
223
-
224
- @staticmethod
225
- def _render_version():
226
- """
227
- Render the Setuptools version and installation details, then exit.
228
- """
229
- ver = '{}.{}'.format(*sys.version_info)
230
- dist = get_distribution('setuptools')
231
- tmpl = 'setuptools {dist.version} from {dist.location} (Python {ver})'
232
- print(tmpl.format(**locals()))
233
- raise SystemExit()
234
-
235
- def finalize_options(self): # noqa: C901 # is too complex (25) # FIXME
236
- self.version and self._render_version()
237
-
238
- py_version = sys.version.split()[0]
239
- prefix, exec_prefix = get_config_vars('prefix', 'exec_prefix')
240
-
241
- self.config_vars = {
242
- 'dist_name': self.distribution.get_name(),
243
- 'dist_version': self.distribution.get_version(),
244
- 'dist_fullname': self.distribution.get_fullname(),
245
- 'py_version': py_version,
246
- 'py_version_short': f'{sys.version_info.major}.{sys.version_info.minor}',
247
- 'py_version_nodot': f'{sys.version_info.major}{sys.version_info.minor}',
248
- 'sys_prefix': prefix,
249
- 'prefix': prefix,
250
- 'sys_exec_prefix': exec_prefix,
251
- 'exec_prefix': exec_prefix,
252
- # Only python 3.2+ has abiflags
253
- 'abiflags': getattr(sys, 'abiflags', ''),
254
- 'platlibdir': getattr(sys, 'platlibdir', 'lib'),
255
- }
256
- with contextlib.suppress(AttributeError):
257
- # only for distutils outside stdlib
258
- self.config_vars.update({
259
- 'implementation_lower': install._get_implementation().lower(),
260
- 'implementation': install._get_implementation(),
261
- })
262
-
263
- if site.ENABLE_USER_SITE:
264
- self.config_vars['userbase'] = self.install_userbase
265
- self.config_vars['usersite'] = self.install_usersite
266
-
267
- elif self.user:
268
- log.warn("WARNING: The user site-packages directory is disabled.")
269
-
270
- self._fix_install_dir_for_user_site()
271
-
272
- self.expand_basedirs()
273
- self.expand_dirs()
274
-
275
- self._expand(
276
- 'install_dir', 'script_dir', 'build_directory',
277
- 'site_dirs',
278
- )
279
- # If a non-default installation directory was specified, default the
280
- # script directory to match it.
281
- if self.script_dir is None:
282
- self.script_dir = self.install_dir
283
-
284
- if self.no_find_links is None:
285
- self.no_find_links = False
286
-
287
- # Let install_dir get set by install_lib command, which in turn
288
- # gets its info from the install command, and takes into account
289
- # --prefix and --home and all that other crud.
290
- self.set_undefined_options(
291
- 'install_lib', ('install_dir', 'install_dir')
292
- )
293
- # Likewise, set default script_dir from 'install_scripts.install_dir'
294
- self.set_undefined_options(
295
- 'install_scripts', ('install_dir', 'script_dir')
296
- )
297
-
298
- if self.user and self.install_purelib:
299
- self.install_dir = self.install_purelib
300
- self.script_dir = self.install_scripts
301
- # default --record from the install command
302
- self.set_undefined_options('install', ('record', 'record'))
303
- # Should this be moved to the if statement below? It's not used
304
- # elsewhere
305
- normpath = map(normalize_path, sys.path)
306
- self.all_site_dirs = get_site_dirs()
307
- if self.site_dirs is not None:
308
- site_dirs = [
309
- os.path.expanduser(s.strip()) for s in
310
- self.site_dirs.split(',')
311
- ]
312
- for d in site_dirs:
313
- if not os.path.isdir(d):
314
- log.warn("%s (in --site-dirs) does not exist", d)
315
- elif normalize_path(d) not in normpath:
316
- raise DistutilsOptionError(
317
- d + " (in --site-dirs) is not on sys.path"
318
- )
319
- else:
320
- self.all_site_dirs.append(normalize_path(d))
321
- if not self.editable:
322
- self.check_site_dir()
323
- self.index_url = self.index_url or "https://pypi.org/simple/"
324
- self.shadow_path = self.all_site_dirs[:]
325
- for path_item in self.install_dir, normalize_path(self.script_dir):
326
- if path_item not in self.shadow_path:
327
- self.shadow_path.insert(0, path_item)
328
-
329
- if self.allow_hosts is not None:
330
- hosts = [s.strip() for s in self.allow_hosts.split(',')]
331
- else:
332
- hosts = ['*']
333
- if self.package_index is None:
334
- self.package_index = self.create_index(
335
- self.index_url, search_path=self.shadow_path, hosts=hosts,
336
- )
337
- self.local_index = Environment(self.shadow_path + sys.path)
338
-
339
- if self.find_links is not None:
340
- if isinstance(self.find_links, str):
341
- self.find_links = self.find_links.split()
342
- else:
343
- self.find_links = []
344
- if self.local_snapshots_ok:
345
- self.package_index.scan_egg_links(self.shadow_path + sys.path)
346
- if not self.no_find_links:
347
- self.package_index.add_find_links(self.find_links)
348
- self.set_undefined_options('install_lib', ('optimize', 'optimize'))
349
- if not isinstance(self.optimize, int):
350
- try:
351
- self.optimize = int(self.optimize)
352
- if not (0 <= self.optimize <= 2):
353
- raise ValueError
354
- except ValueError as e:
355
- raise DistutilsOptionError(
356
- "--optimize must be 0, 1, or 2"
357
- ) from e
358
-
359
- if self.editable and not self.build_directory:
360
- raise DistutilsArgError(
361
- "Must specify a build directory (-b) when using --editable"
362
- )
363
- if not self.args:
364
- raise DistutilsArgError(
365
- "No urls, filenames, or requirements specified (see --help)")
366
-
367
- self.outputs = []
368
-
369
- def _fix_install_dir_for_user_site(self):
370
- """
371
- Fix the install_dir if "--user" was used.
372
- """
373
- if not self.user or not site.ENABLE_USER_SITE:
374
- return
375
-
376
- self.create_home_path()
377
- if self.install_userbase is None:
378
- msg = "User base directory is not specified"
379
- raise DistutilsPlatformError(msg)
380
- self.install_base = self.install_platbase = self.install_userbase
381
- scheme_name = f'{os.name}_user'
382
- self.select_scheme(scheme_name)
383
-
384
- def _expand_attrs(self, attrs):
385
- for attr in attrs:
386
- val = getattr(self, attr)
387
- if val is not None:
388
- if os.name == 'posix' or os.name == 'nt':
389
- val = os.path.expanduser(val)
390
- val = subst_vars(val, self.config_vars)
391
- setattr(self, attr, val)
392
-
393
- def expand_basedirs(self):
394
- """Calls `os.path.expanduser` on install_base, install_platbase and
395
- root."""
396
- self._expand_attrs(['install_base', 'install_platbase', 'root'])
397
-
398
- def expand_dirs(self):
399
- """Calls `os.path.expanduser` on install dirs."""
400
- dirs = [
401
- 'install_purelib',
402
- 'install_platlib',
403
- 'install_lib',
404
- 'install_headers',
405
- 'install_scripts',
406
- 'install_data',
407
- ]
408
- self._expand_attrs(dirs)
409
-
410
- def run(self, show_deprecation=True):
411
- if show_deprecation:
412
- self.announce(
413
- "WARNING: The easy_install command is deprecated "
414
- "and will be removed in a future version.",
415
- log.WARN,
416
- )
417
- if self.verbose != self.distribution.verbose:
418
- log.set_verbosity(self.verbose)
419
- try:
420
- for spec in self.args:
421
- self.easy_install(spec, not self.no_deps)
422
- if self.record:
423
- outputs = self.outputs
424
- if self.root: # strip any package prefix
425
- root_len = len(self.root)
426
- for counter in range(len(outputs)):
427
- outputs[counter] = outputs[counter][root_len:]
428
- from distutils import file_util
429
-
430
- self.execute(
431
- file_util.write_file, (self.record, outputs),
432
- "writing list of installed files to '%s'" %
433
- self.record
434
- )
435
- self.warn_deprecated_options()
436
- finally:
437
- log.set_verbosity(self.distribution.verbose)
438
-
439
- def pseudo_tempname(self):
440
- """Return a pseudo-tempname base in the install directory.
441
- This code is intentionally naive; if a malicious party can write to
442
- the target directory you're already in deep doodoo.
443
- """
444
- try:
445
- pid = os.getpid()
446
- except Exception:
447
- pid = random.randint(0, sys.maxsize)
448
- return os.path.join(self.install_dir, "test-easy-install-%s" % pid)
449
-
450
- def warn_deprecated_options(self):
451
- pass
452
-
453
- def check_site_dir(self): # noqa: C901 # is too complex (12) # FIXME
454
- """Verify that self.install_dir is .pth-capable dir, if needed"""
455
-
456
- instdir = normalize_path(self.install_dir)
457
- pth_file = os.path.join(instdir, 'easy-install.pth')
458
-
459
- if not os.path.exists(instdir):
460
- try:
461
- os.makedirs(instdir)
462
- except (OSError, IOError):
463
- self.cant_write_to_target()
464
-
465
- # Is it a configured, PYTHONPATH, implicit, or explicit site dir?
466
- is_site_dir = instdir in self.all_site_dirs
467
-
468
- if not is_site_dir and not self.multi_version:
469
- # No? Then directly test whether it does .pth file processing
470
- is_site_dir = self.check_pth_processing()
471
- else:
472
- # make sure we can write to target dir
473
- testfile = self.pseudo_tempname() + '.write-test'
474
- test_exists = os.path.exists(testfile)
475
- try:
476
- if test_exists:
477
- os.unlink(testfile)
478
- open(testfile, 'w').close()
479
- os.unlink(testfile)
480
- except (OSError, IOError):
481
- self.cant_write_to_target()
482
-
483
- if not is_site_dir and not self.multi_version:
484
- # Can't install non-multi to non-site dir with easy_install
485
- pythonpath = os.environ.get('PYTHONPATH', '')
486
- log.warn(self.__no_default_msg, self.install_dir, pythonpath)
487
-
488
- if is_site_dir:
489
- if self.pth_file is None:
490
- self.pth_file = PthDistributions(pth_file, self.all_site_dirs)
491
- else:
492
- self.pth_file = None
493
-
494
- if self.multi_version and not os.path.exists(pth_file):
495
- self.pth_file = None # don't create a .pth file
496
- self.install_dir = instdir
497
-
498
- __cant_write_msg = textwrap.dedent("""
499
- can't create or remove files in install directory
500
-
501
- The following error occurred while trying to add or remove files in the
502
- installation directory:
503
-
504
- %s
505
-
506
- The installation directory you specified (via --install-dir, --prefix, or
507
- the distutils default setting) was:
508
-
509
- %s
510
- """).lstrip() # noqa
511
-
512
- __not_exists_id = textwrap.dedent("""
513
- This directory does not currently exist. Please create it and try again, or
514
- choose a different installation directory (using the -d or --install-dir
515
- option).
516
- """).lstrip() # noqa
517
-
518
- __access_msg = textwrap.dedent("""
519
- Perhaps your account does not have write access to this directory? If the
520
- installation directory is a system-owned directory, you may need to sign in
521
- as the administrator or "root" account. If you do not have administrative
522
- access to this machine, you may wish to choose a different installation
523
- directory, preferably one that is listed in your PYTHONPATH environment
524
- variable.
525
-
526
- For information on other options, you may wish to consult the
527
- documentation at:
528
-
529
- https://setuptools.pypa.io/en/latest/deprecated/easy_install.html
530
-
531
- Please make the appropriate changes for your system and try again.
532
- """).lstrip() # noqa
533
-
534
- def cant_write_to_target(self):
535
- msg = self.__cant_write_msg % (sys.exc_info()[1], self.install_dir,)
536
-
537
- if not os.path.exists(self.install_dir):
538
- msg += '\n' + self.__not_exists_id
539
- else:
540
- msg += '\n' + self.__access_msg
541
- raise DistutilsError(msg)
542
-
543
- def check_pth_processing(self):
544
- """Empirically verify whether .pth files are supported in inst. dir"""
545
- instdir = self.install_dir
546
- log.info("Checking .pth file support in %s", instdir)
547
- pth_file = self.pseudo_tempname() + ".pth"
548
- ok_file = pth_file + '.ok'
549
- ok_exists = os.path.exists(ok_file)
550
- tmpl = _one_liner("""
551
- import os
552
- f = open({ok_file!r}, 'w')
553
- f.write('OK')
554
- f.close()
555
- """) + '\n'
556
- try:
557
- if ok_exists:
558
- os.unlink(ok_file)
559
- dirname = os.path.dirname(ok_file)
560
- os.makedirs(dirname, exist_ok=True)
561
- f = open(pth_file, 'w')
562
- except (OSError, IOError):
563
- self.cant_write_to_target()
564
- else:
565
- try:
566
- f.write(tmpl.format(**locals()))
567
- f.close()
568
- f = None
569
- executable = sys.executable
570
- if os.name == 'nt':
571
- dirname, basename = os.path.split(executable)
572
- alt = os.path.join(dirname, 'pythonw.exe')
573
- use_alt = (
574
- basename.lower() == 'python.exe' and
575
- os.path.exists(alt)
576
- )
577
- if use_alt:
578
- # use pythonw.exe to avoid opening a console window
579
- executable = alt
580
-
581
- from distutils.spawn import spawn
582
-
583
- spawn([executable, '-E', '-c', 'pass'], 0)
584
-
585
- if os.path.exists(ok_file):
586
- log.info(
587
- "TEST PASSED: %s appears to support .pth files",
588
- instdir
589
- )
590
- return True
591
- finally:
592
- if f:
593
- f.close()
594
- if os.path.exists(ok_file):
595
- os.unlink(ok_file)
596
- if os.path.exists(pth_file):
597
- os.unlink(pth_file)
598
- if not self.multi_version:
599
- log.warn("TEST FAILED: %s does NOT support .pth files", instdir)
600
- return False
601
-
602
- def install_egg_scripts(self, dist):
603
- """Write all the scripts for `dist`, unless scripts are excluded"""
604
- if not self.exclude_scripts and dist.metadata_isdir('scripts'):
605
- for script_name in dist.metadata_listdir('scripts'):
606
- if dist.metadata_isdir('scripts/' + script_name):
607
- # The "script" is a directory, likely a Python 3
608
- # __pycache__ directory, so skip it.
609
- continue
610
- self.install_script(
611
- dist, script_name,
612
- dist.get_metadata('scripts/' + script_name)
613
- )
614
- self.install_wrapper_scripts(dist)
615
-
616
- def add_output(self, path):
617
- if os.path.isdir(path):
618
- for base, dirs, files in os.walk(path):
619
- for filename in files:
620
- self.outputs.append(os.path.join(base, filename))
621
- else:
622
- self.outputs.append(path)
623
-
624
- def not_editable(self, spec):
625
- if self.editable:
626
- raise DistutilsArgError(
627
- "Invalid argument %r: you can't use filenames or URLs "
628
- "with --editable (except via the --find-links option)."
629
- % (spec,)
630
- )
631
-
632
- def check_editable(self, spec):
633
- if not self.editable:
634
- return
635
-
636
- if os.path.exists(os.path.join(self.build_directory, spec.key)):
637
- raise DistutilsArgError(
638
- "%r already exists in %s; can't do a checkout there" %
639
- (spec.key, self.build_directory)
640
- )
641
-
642
- @contextlib.contextmanager
643
- def _tmpdir(self):
644
- tmpdir = tempfile.mkdtemp(prefix=u"easy_install-")
645
- try:
646
- # cast to str as workaround for #709 and #710 and #712
647
- yield str(tmpdir)
648
- finally:
649
- os.path.exists(tmpdir) and rmtree(tmpdir)
650
-
651
- def easy_install(self, spec, deps=False):
652
- with self._tmpdir() as tmpdir:
653
- if not isinstance(spec, Requirement):
654
- if URL_SCHEME(spec):
655
- # It's a url, download it to tmpdir and process
656
- self.not_editable(spec)
657
- dl = self.package_index.download(spec, tmpdir)
658
- return self.install_item(None, dl, tmpdir, deps, True)
659
-
660
- elif os.path.exists(spec):
661
- # Existing file or directory, just process it directly
662
- self.not_editable(spec)
663
- return self.install_item(None, spec, tmpdir, deps, True)
664
- else:
665
- spec = parse_requirement_arg(spec)
666
-
667
- self.check_editable(spec)
668
- dist = self.package_index.fetch_distribution(
669
- spec, tmpdir, self.upgrade, self.editable,
670
- not self.always_copy, self.local_index
671
- )
672
- if dist is None:
673
- msg = "Could not find suitable distribution for %r" % spec
674
- if self.always_copy:
675
- msg += " (--always-copy skips system and development eggs)"
676
- raise DistutilsError(msg)
677
- elif dist.precedence == DEVELOP_DIST:
678
- # .egg-info dists don't need installing, just process deps
679
- self.process_distribution(spec, dist, deps, "Using")
680
- return dist
681
- else:
682
- return self.install_item(spec, dist.location, tmpdir, deps)
683
-
684
- def install_item(self, spec, download, tmpdir, deps, install_needed=False):
685
-
686
- # Installation is also needed if file in tmpdir or is not an egg
687
- install_needed = install_needed or self.always_copy
688
- install_needed = install_needed or os.path.dirname(download) == tmpdir
689
- install_needed = install_needed or not download.endswith('.egg')
690
- install_needed = install_needed or (
691
- self.always_copy_from is not None and
692
- os.path.dirname(normalize_path(download)) ==
693
- normalize_path(self.always_copy_from)
694
- )
695
-
696
- if spec and not install_needed:
697
- # at this point, we know it's a local .egg, we just don't know if
698
- # it's already installed.
699
- for dist in self.local_index[spec.project_name]:
700
- if dist.location == download:
701
- break
702
- else:
703
- install_needed = True # it's not in the local index
704
-
705
- log.info("Processing %s", os.path.basename(download))
706
-
707
- if install_needed:
708
- dists = self.install_eggs(spec, download, tmpdir)
709
- for dist in dists:
710
- self.process_distribution(spec, dist, deps)
711
- else:
712
- dists = [self.egg_distribution(download)]
713
- self.process_distribution(spec, dists[0], deps, "Using")
714
-
715
- if spec is not None:
716
- for dist in dists:
717
- if dist in spec:
718
- return dist
719
-
720
- def select_scheme(self, name):
721
- try:
722
- install._select_scheme(self, name)
723
- except AttributeError:
724
- # stdlib distutils
725
- install.install.select_scheme(self, name.replace('posix', 'unix'))
726
-
727
- # FIXME: 'easy_install.process_distribution' is too complex (12)
728
- def process_distribution( # noqa: C901
729
- self, requirement, dist, deps=True, *info,
730
- ):
731
- self.update_pth(dist)
732
- self.package_index.add(dist)
733
- if dist in self.local_index[dist.key]:
734
- self.local_index.remove(dist)
735
- self.local_index.add(dist)
736
- self.install_egg_scripts(dist)
737
- self.installed_projects[dist.key] = dist
738
- log.info(self.installation_report(requirement, dist, *info))
739
- if (dist.has_metadata('dependency_links.txt') and
740
- not self.no_find_links):
741
- self.package_index.add_find_links(
742
- dist.get_metadata_lines('dependency_links.txt')
743
- )
744
- if not deps and not self.always_copy:
745
- return
746
- elif requirement is not None and dist.key != requirement.key:
747
- log.warn("Skipping dependencies for %s", dist)
748
- return # XXX this is not the distribution we were looking for
749
- elif requirement is None or dist not in requirement:
750
- # if we wound up with a different version, resolve what we've got
751
- distreq = dist.as_requirement()
752
- requirement = Requirement(str(distreq))
753
- log.info("Processing dependencies for %s", requirement)
754
- try:
755
- distros = WorkingSet([]).resolve(
756
- [requirement], self.local_index, self.easy_install
757
- )
758
- except DistributionNotFound as e:
759
- raise DistutilsError(str(e)) from e
760
- except VersionConflict as e:
761
- raise DistutilsError(e.report()) from e
762
- if self.always_copy or self.always_copy_from:
763
- # Force all the relevant distros to be copied or activated
764
- for dist in distros:
765
- if dist.key not in self.installed_projects:
766
- self.easy_install(dist.as_requirement())
767
- log.info("Finished processing dependencies for %s", requirement)
768
-
769
- def should_unzip(self, dist):
770
- if self.zip_ok is not None:
771
- return not self.zip_ok
772
- if dist.has_metadata('not-zip-safe'):
773
- return True
774
- if not dist.has_metadata('zip-safe'):
775
- return True
776
- return False
777
-
778
- def maybe_move(self, spec, dist_filename, setup_base):
779
- dst = os.path.join(self.build_directory, spec.key)
780
- if os.path.exists(dst):
781
- msg = (
782
- "%r already exists in %s; build directory %s will not be kept"
783
- )
784
- log.warn(msg, spec.key, self.build_directory, setup_base)
785
- return setup_base
786
- if os.path.isdir(dist_filename):
787
- setup_base = dist_filename
788
- else:
789
- if os.path.dirname(dist_filename) == setup_base:
790
- os.unlink(dist_filename) # get it out of the tmp dir
791
- contents = os.listdir(setup_base)
792
- if len(contents) == 1:
793
- dist_filename = os.path.join(setup_base, contents[0])
794
- if os.path.isdir(dist_filename):
795
- # if the only thing there is a directory, move it instead
796
- setup_base = dist_filename
797
- ensure_directory(dst)
798
- shutil.move(setup_base, dst)
799
- return dst
800
-
801
- def install_wrapper_scripts(self, dist):
802
- if self.exclude_scripts:
803
- return
804
- for args in ScriptWriter.best().get_args(dist):
805
- self.write_script(*args)
806
-
807
- def install_script(self, dist, script_name, script_text, dev_path=None):
808
- """Generate a legacy script wrapper and install it"""
809
- spec = str(dist.as_requirement())
810
- is_script = is_python_script(script_text, script_name)
811
-
812
- if is_script:
813
- body = self._load_template(dev_path) % locals()
814
- script_text = ScriptWriter.get_header(script_text) + body
815
- self.write_script(script_name, _to_bytes(script_text), 'b')
816
-
817
- @staticmethod
818
- def _load_template(dev_path):
819
- """
820
- There are a couple of template scripts in the package. This
821
- function loads one of them and prepares it for use.
822
- """
823
- # See https://github.com/pypa/setuptools/issues/134 for info
824
- # on script file naming and downstream issues with SVR4
825
- name = 'script.tmpl'
826
- if dev_path:
827
- name = name.replace('.tmpl', ' (dev).tmpl')
828
-
829
- raw_bytes = resource_string('setuptools', name)
830
- return raw_bytes.decode('utf-8')
831
-
832
- def write_script(self, script_name, contents, mode="t", blockers=()):
833
- """Write an executable file to the scripts directory"""
834
- self.delete_blockers( # clean up old .py/.pyw w/o a script
835
- [os.path.join(self.script_dir, x) for x in blockers]
836
- )
837
- log.info("Installing %s script to %s", script_name, self.script_dir)
838
- target = os.path.join(self.script_dir, script_name)
839
- self.add_output(target)
840
-
841
- if self.dry_run:
842
- return
843
-
844
- mask = current_umask()
845
- ensure_directory(target)
846
- if os.path.exists(target):
847
- os.unlink(target)
848
- with open(target, "w" + mode) as f:
849
- f.write(contents)
850
- chmod(target, 0o777 - mask)
851
-
852
- def install_eggs(self, spec, dist_filename, tmpdir):
853
- # .egg dirs or files are already built, so just return them
854
- installer_map = {
855
- '.egg': self.install_egg,
856
- '.exe': self.install_exe,
857
- '.whl': self.install_wheel,
858
- }
859
- try:
860
- install_dist = installer_map[
861
- dist_filename.lower()[-4:]
862
- ]
863
- except KeyError:
864
- pass
865
- else:
866
- return [install_dist(dist_filename, tmpdir)]
867
-
868
- # Anything else, try to extract and build
869
- setup_base = tmpdir
870
- if os.path.isfile(dist_filename) and not dist_filename.endswith('.py'):
871
- unpack_archive(dist_filename, tmpdir, self.unpack_progress)
872
- elif os.path.isdir(dist_filename):
873
- setup_base = os.path.abspath(dist_filename)
874
-
875
- if (setup_base.startswith(tmpdir) # something we downloaded
876
- and self.build_directory and spec is not None):
877
- setup_base = self.maybe_move(spec, dist_filename, setup_base)
878
-
879
- # Find the setup.py file
880
- setup_script = os.path.join(setup_base, 'setup.py')
881
-
882
- if not os.path.exists(setup_script):
883
- setups = glob(os.path.join(setup_base, '*', 'setup.py'))
884
- if not setups:
885
- raise DistutilsError(
886
- "Couldn't find a setup script in %s" %
887
- os.path.abspath(dist_filename)
888
- )
889
- if len(setups) > 1:
890
- raise DistutilsError(
891
- "Multiple setup scripts in %s" %
892
- os.path.abspath(dist_filename)
893
- )
894
- setup_script = setups[0]
895
-
896
- # Now run it, and return the result
897
- if self.editable:
898
- log.info(self.report_editable(spec, setup_script))
899
- return []
900
- else:
901
- return self.build_and_install(setup_script, setup_base)
902
-
903
- def egg_distribution(self, egg_path):
904
- if os.path.isdir(egg_path):
905
- metadata = PathMetadata(egg_path, os.path.join(egg_path,
906
- 'EGG-INFO'))
907
- else:
908
- metadata = EggMetadata(zipimport.zipimporter(egg_path))
909
- return Distribution.from_filename(egg_path, metadata=metadata)
910
-
911
- # FIXME: 'easy_install.install_egg' is too complex (11)
912
- def install_egg(self, egg_path, tmpdir): # noqa: C901
913
- destination = os.path.join(
914
- self.install_dir,
915
- os.path.basename(egg_path),
916
- )
917
- destination = os.path.abspath(destination)
918
- if not self.dry_run:
919
- ensure_directory(destination)
920
-
921
- dist = self.egg_distribution(egg_path)
922
- if not samefile(egg_path, destination):
923
- if os.path.isdir(destination) and not os.path.islink(destination):
924
- dir_util.remove_tree(destination, dry_run=self.dry_run)
925
- elif os.path.exists(destination):
926
- self.execute(
927
- os.unlink,
928
- (destination,),
929
- "Removing " + destination,
930
- )
931
- try:
932
- new_dist_is_zipped = False
933
- if os.path.isdir(egg_path):
934
- if egg_path.startswith(tmpdir):
935
- f, m = shutil.move, "Moving"
936
- else:
937
- f, m = shutil.copytree, "Copying"
938
- elif self.should_unzip(dist):
939
- self.mkpath(destination)
940
- f, m = self.unpack_and_compile, "Extracting"
941
- else:
942
- new_dist_is_zipped = True
943
- if egg_path.startswith(tmpdir):
944
- f, m = shutil.move, "Moving"
945
- else:
946
- f, m = shutil.copy2, "Copying"
947
- self.execute(
948
- f,
949
- (egg_path, destination),
950
- (m + " %s to %s") % (
951
- os.path.basename(egg_path),
952
- os.path.dirname(destination)
953
- ),
954
- )
955
- update_dist_caches(
956
- destination,
957
- fix_zipimporter_caches=new_dist_is_zipped,
958
- )
959
- except Exception:
960
- update_dist_caches(destination, fix_zipimporter_caches=False)
961
- raise
962
-
963
- self.add_output(destination)
964
- return self.egg_distribution(destination)
965
-
966
- def install_exe(self, dist_filename, tmpdir):
967
- # See if it's valid, get data
968
- cfg = extract_wininst_cfg(dist_filename)
969
- if cfg is None:
970
- raise DistutilsError(
971
- "%s is not a valid distutils Windows .exe" % dist_filename
972
- )
973
- # Create a dummy distribution object until we build the real distro
974
- dist = Distribution(
975
- None,
976
- project_name=cfg.get('metadata', 'name'),
977
- version=cfg.get('metadata', 'version'), platform=get_platform(),
978
- )
979
-
980
- # Convert the .exe to an unpacked egg
981
- egg_path = os.path.join(tmpdir, dist.egg_name() + '.egg')
982
- dist.location = egg_path
983
- egg_tmp = egg_path + '.tmp'
984
- _egg_info = os.path.join(egg_tmp, 'EGG-INFO')
985
- pkg_inf = os.path.join(_egg_info, 'PKG-INFO')
986
- ensure_directory(pkg_inf) # make sure EGG-INFO dir exists
987
- dist._provider = PathMetadata(egg_tmp, _egg_info) # XXX
988
- self.exe_to_egg(dist_filename, egg_tmp)
989
-
990
- # Write EGG-INFO/PKG-INFO
991
- if not os.path.exists(pkg_inf):
992
- f = open(pkg_inf, 'w')
993
- f.write('Metadata-Version: 1.0\n')
994
- for k, v in cfg.items('metadata'):
995
- if k != 'target_version':
996
- f.write('%s: %s\n' % (k.replace('_', '-').title(), v))
997
- f.close()
998
- script_dir = os.path.join(_egg_info, 'scripts')
999
- # delete entry-point scripts to avoid duping
1000
- self.delete_blockers([
1001
- os.path.join(script_dir, args[0])
1002
- for args in ScriptWriter.get_args(dist)
1003
- ])
1004
- # Build .egg file from tmpdir
1005
- bdist_egg.make_zipfile(
1006
- egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run,
1007
- )
1008
- # install the .egg
1009
- return self.install_egg(egg_path, tmpdir)
1010
-
1011
- # FIXME: 'easy_install.exe_to_egg' is too complex (12)
1012
- def exe_to_egg(self, dist_filename, egg_tmp): # noqa: C901
1013
- """Extract a bdist_wininst to the directories an egg would use"""
1014
- # Check for .pth file and set up prefix translations
1015
- prefixes = get_exe_prefixes(dist_filename)
1016
- to_compile = []
1017
- native_libs = []
1018
- top_level = {}
1019
-
1020
- def process(src, dst):
1021
- s = src.lower()
1022
- for old, new in prefixes:
1023
- if s.startswith(old):
1024
- src = new + src[len(old):]
1025
- parts = src.split('/')
1026
- dst = os.path.join(egg_tmp, *parts)
1027
- dl = dst.lower()
1028
- if dl.endswith('.pyd') or dl.endswith('.dll'):
1029
- parts[-1] = bdist_egg.strip_module(parts[-1])
1030
- top_level[os.path.splitext(parts[0])[0]] = 1
1031
- native_libs.append(src)
1032
- elif dl.endswith('.py') and old != 'SCRIPTS/':
1033
- top_level[os.path.splitext(parts[0])[0]] = 1
1034
- to_compile.append(dst)
1035
- return dst
1036
- if not src.endswith('.pth'):
1037
- log.warn("WARNING: can't process %s", src)
1038
- return None
1039
-
1040
- # extract, tracking .pyd/.dll->native_libs and .py -> to_compile
1041
- unpack_archive(dist_filename, egg_tmp, process)
1042
- stubs = []
1043
- for res in native_libs:
1044
- if res.lower().endswith('.pyd'): # create stubs for .pyd's
1045
- parts = res.split('/')
1046
- resource = parts[-1]
1047
- parts[-1] = bdist_egg.strip_module(parts[-1]) + '.py'
1048
- pyfile = os.path.join(egg_tmp, *parts)
1049
- to_compile.append(pyfile)
1050
- stubs.append(pyfile)
1051
- bdist_egg.write_stub(resource, pyfile)
1052
- self.byte_compile(to_compile) # compile .py's
1053
- bdist_egg.write_safety_flag(
1054
- os.path.join(egg_tmp, 'EGG-INFO'),
1055
- bdist_egg.analyze_egg(egg_tmp, stubs)) # write zip-safety flag
1056
-
1057
- for name in 'top_level', 'native_libs':
1058
- if locals()[name]:
1059
- txt = os.path.join(egg_tmp, 'EGG-INFO', name + '.txt')
1060
- if not os.path.exists(txt):
1061
- f = open(txt, 'w')
1062
- f.write('\n'.join(locals()[name]) + '\n')
1063
- f.close()
1064
-
1065
- def install_wheel(self, wheel_path, tmpdir):
1066
- wheel = Wheel(wheel_path)
1067
- assert wheel.is_compatible()
1068
- destination = os.path.join(self.install_dir, wheel.egg_name())
1069
- destination = os.path.abspath(destination)
1070
- if not self.dry_run:
1071
- ensure_directory(destination)
1072
- if os.path.isdir(destination) and not os.path.islink(destination):
1073
- dir_util.remove_tree(destination, dry_run=self.dry_run)
1074
- elif os.path.exists(destination):
1075
- self.execute(
1076
- os.unlink,
1077
- (destination,),
1078
- "Removing " + destination,
1079
- )
1080
- try:
1081
- self.execute(
1082
- wheel.install_as_egg,
1083
- (destination,),
1084
- ("Installing %s to %s") % (
1085
- os.path.basename(wheel_path),
1086
- os.path.dirname(destination)
1087
- ),
1088
- )
1089
- finally:
1090
- update_dist_caches(destination, fix_zipimporter_caches=False)
1091
- self.add_output(destination)
1092
- return self.egg_distribution(destination)
1093
-
1094
- __mv_warning = textwrap.dedent("""
1095
- Because this distribution was installed --multi-version, before you can
1096
- import modules from this package in an application, you will need to
1097
- 'import pkg_resources' and then use a 'require()' call similar to one of
1098
- these examples, in order to select the desired version:
1099
-
1100
- pkg_resources.require("%(name)s") # latest installed version
1101
- pkg_resources.require("%(name)s==%(version)s") # this exact version
1102
- pkg_resources.require("%(name)s>=%(version)s") # this version or higher
1103
- """).lstrip() # noqa
1104
-
1105
- __id_warning = textwrap.dedent("""
1106
- Note also that the installation directory must be on sys.path at runtime for
1107
- this to work. (e.g. by being the application's script directory, by being on
1108
- PYTHONPATH, or by being added to sys.path by your code.)
1109
- """) # noqa
1110
-
1111
- def installation_report(self, req, dist, what="Installed"):
1112
- """Helpful installation message for display to package users"""
1113
- msg = "\n%(what)s %(eggloc)s%(extras)s"
1114
- if self.multi_version and not self.no_report:
1115
- msg += '\n' + self.__mv_warning
1116
- if self.install_dir not in map(normalize_path, sys.path):
1117
- msg += '\n' + self.__id_warning
1118
-
1119
- eggloc = dist.location
1120
- name = dist.project_name
1121
- version = dist.version
1122
- extras = '' # TODO: self.report_extras(req, dist)
1123
- return msg % locals()
1124
-
1125
- __editable_msg = textwrap.dedent("""
1126
- Extracted editable version of %(spec)s to %(dirname)s
1127
-
1128
- If it uses setuptools in its setup script, you can activate it in
1129
- "development" mode by going to that directory and running::
1130
-
1131
- %(python)s setup.py develop
1132
-
1133
- See the setuptools documentation for the "develop" command for more info.
1134
- """).lstrip() # noqa
1135
-
1136
- def report_editable(self, spec, setup_script):
1137
- dirname = os.path.dirname(setup_script)
1138
- python = sys.executable
1139
- return '\n' + self.__editable_msg % locals()
1140
-
1141
- def run_setup(self, setup_script, setup_base, args):
1142
- sys.modules.setdefault('distutils.command.bdist_egg', bdist_egg)
1143
- sys.modules.setdefault('distutils.command.egg_info', egg_info)
1144
-
1145
- args = list(args)
1146
- if self.verbose > 2:
1147
- v = 'v' * (self.verbose - 1)
1148
- args.insert(0, '-' + v)
1149
- elif self.verbose < 2:
1150
- args.insert(0, '-q')
1151
- if self.dry_run:
1152
- args.insert(0, '-n')
1153
- log.info(
1154
- "Running %s %s", setup_script[len(setup_base) + 1:], ' '.join(args)
1155
- )
1156
- try:
1157
- run_setup(setup_script, args)
1158
- except SystemExit as v:
1159
- raise DistutilsError(
1160
- "Setup script exited with %s" % (v.args[0],)
1161
- ) from v
1162
-
1163
- def build_and_install(self, setup_script, setup_base):
1164
- args = ['bdist_egg', '--dist-dir']
1165
-
1166
- dist_dir = tempfile.mkdtemp(
1167
- prefix='egg-dist-tmp-', dir=os.path.dirname(setup_script)
1168
- )
1169
- try:
1170
- self._set_fetcher_options(os.path.dirname(setup_script))
1171
- args.append(dist_dir)
1172
-
1173
- self.run_setup(setup_script, setup_base, args)
1174
- all_eggs = Environment([dist_dir])
1175
- eggs = []
1176
- for key in all_eggs:
1177
- for dist in all_eggs[key]:
1178
- eggs.append(self.install_egg(dist.location, setup_base))
1179
- if not eggs and not self.dry_run:
1180
- log.warn("No eggs found in %s (setup script problem?)",
1181
- dist_dir)
1182
- return eggs
1183
- finally:
1184
- rmtree(dist_dir)
1185
- log.set_verbosity(self.verbose) # restore our log verbosity
1186
-
1187
- def _set_fetcher_options(self, base):
1188
- """
1189
- When easy_install is about to run bdist_egg on a source dist, that
1190
- source dist might have 'setup_requires' directives, requiring
1191
- additional fetching. Ensure the fetcher options given to easy_install
1192
- are available to that command as well.
1193
- """
1194
- # find the fetch options from easy_install and write them out
1195
- # to the setup.cfg file.
1196
- ei_opts = self.distribution.get_option_dict('easy_install').copy()
1197
- fetch_directives = (
1198
- 'find_links', 'site_dirs', 'index_url', 'optimize', 'allow_hosts',
1199
- )
1200
- fetch_options = {}
1201
- for key, val in ei_opts.items():
1202
- if key not in fetch_directives:
1203
- continue
1204
- fetch_options[key] = val[1]
1205
- # create a settings dictionary suitable for `edit_config`
1206
- settings = dict(easy_install=fetch_options)
1207
- cfg_filename = os.path.join(base, 'setup.cfg')
1208
- setopt.edit_config(cfg_filename, settings)
1209
-
1210
- def update_pth(self, dist): # noqa: C901 # is too complex (11) # FIXME
1211
- if self.pth_file is None:
1212
- return
1213
-
1214
- for d in self.pth_file[dist.key]: # drop old entries
1215
- if not self.multi_version and d.location == dist.location:
1216
- continue
1217
-
1218
- log.info("Removing %s from easy-install.pth file", d)
1219
- self.pth_file.remove(d)
1220
- if d.location in self.shadow_path:
1221
- self.shadow_path.remove(d.location)
1222
-
1223
- if not self.multi_version:
1224
- if dist.location in self.pth_file.paths:
1225
- log.info(
1226
- "%s is already the active version in easy-install.pth",
1227
- dist,
1228
- )
1229
- else:
1230
- log.info("Adding %s to easy-install.pth file", dist)
1231
- self.pth_file.add(dist) # add new entry
1232
- if dist.location not in self.shadow_path:
1233
- self.shadow_path.append(dist.location)
1234
-
1235
- if self.dry_run:
1236
- return
1237
-
1238
- self.pth_file.save()
1239
-
1240
- if dist.key != 'setuptools':
1241
- return
1242
-
1243
- # Ensure that setuptools itself never becomes unavailable!
1244
- # XXX should this check for latest version?
1245
- filename = os.path.join(self.install_dir, 'setuptools.pth')
1246
- if os.path.islink(filename):
1247
- os.unlink(filename)
1248
- with open(filename, 'wt') as f:
1249
- f.write(self.pth_file.make_relative(dist.location) + '\n')
1250
-
1251
- def unpack_progress(self, src, dst):
1252
- # Progress filter for unpacking
1253
- log.debug("Unpacking %s to %s", src, dst)
1254
- return dst # only unpack-and-compile skips files for dry run
1255
-
1256
- def unpack_and_compile(self, egg_path, destination):
1257
- to_compile = []
1258
- to_chmod = []
1259
-
1260
- def pf(src, dst):
1261
- if dst.endswith('.py') and not src.startswith('EGG-INFO/'):
1262
- to_compile.append(dst)
1263
- elif dst.endswith('.dll') or dst.endswith('.so'):
1264
- to_chmod.append(dst)
1265
- self.unpack_progress(src, dst)
1266
- return not self.dry_run and dst or None
1267
-
1268
- unpack_archive(egg_path, destination, pf)
1269
- self.byte_compile(to_compile)
1270
- if not self.dry_run:
1271
- for f in to_chmod:
1272
- mode = ((os.stat(f)[stat.ST_MODE]) | 0o555) & 0o7755
1273
- chmod(f, mode)
1274
-
1275
- def byte_compile(self, to_compile):
1276
- if sys.dont_write_bytecode:
1277
- return
1278
-
1279
- from distutils.util import byte_compile
1280
-
1281
- try:
1282
- # try to make the byte compile messages quieter
1283
- log.set_verbosity(self.verbose - 1)
1284
-
1285
- byte_compile(to_compile, optimize=0, force=1, dry_run=self.dry_run)
1286
- if self.optimize:
1287
- byte_compile(
1288
- to_compile, optimize=self.optimize, force=1,
1289
- dry_run=self.dry_run,
1290
- )
1291
- finally:
1292
- log.set_verbosity(self.verbose) # restore original verbosity
1293
-
1294
- __no_default_msg = textwrap.dedent("""
1295
- bad install directory or PYTHONPATH
1296
-
1297
- You are attempting to install a package to a directory that is not
1298
- on PYTHONPATH and which Python does not read ".pth" files from. The
1299
- installation directory you specified (via --install-dir, --prefix, or
1300
- the distutils default setting) was:
1301
-
1302
- %s
1303
-
1304
- and your PYTHONPATH environment variable currently contains:
1305
-
1306
- %r
1307
-
1308
- Here are some of your options for correcting the problem:
1309
-
1310
- * You can choose a different installation directory, i.e., one that is
1311
- on PYTHONPATH or supports .pth files
1312
-
1313
- * You can add the installation directory to the PYTHONPATH environment
1314
- variable. (It must then also be on PYTHONPATH whenever you run
1315
- Python and want to use the package(s) you are installing.)
1316
-
1317
- * You can set up the installation directory to support ".pth" files by
1318
- using one of the approaches described here:
1319
-
1320
- https://setuptools.pypa.io/en/latest/deprecated/easy_install.html#custom-installation-locations
1321
-
1322
-
1323
- Please make the appropriate changes for your system and try again.
1324
- """).strip()
1325
-
1326
- def create_home_path(self):
1327
- """Create directories under ~."""
1328
- if not self.user:
1329
- return
1330
- home = convert_path(os.path.expanduser("~"))
1331
- for name, path in self.config_vars.items():
1332
- if path.startswith(home) and not os.path.isdir(path):
1333
- self.debug_print("os.makedirs('%s', 0o700)" % path)
1334
- os.makedirs(path, 0o700)
1335
-
1336
- INSTALL_SCHEMES = dict(
1337
- posix=dict(
1338
- install_dir='$base/lib/python$py_version_short/site-packages',
1339
- script_dir='$base/bin',
1340
- ),
1341
- )
1342
-
1343
- DEFAULT_SCHEME = dict(
1344
- install_dir='$base/Lib/site-packages',
1345
- script_dir='$base/Scripts',
1346
- )
1347
-
1348
- def _expand(self, *attrs):
1349
- config_vars = self.get_finalized_command('install').config_vars
1350
-
1351
- if self.prefix:
1352
- # Set default install_dir/scripts from --prefix
1353
- config_vars = dict(config_vars)
1354
- config_vars['base'] = self.prefix
1355
- scheme = self.INSTALL_SCHEMES.get(os.name, self.DEFAULT_SCHEME)
1356
- for attr, val in scheme.items():
1357
- if getattr(self, attr, None) is None:
1358
- setattr(self, attr, val)
1359
-
1360
- from distutils.util import subst_vars
1361
-
1362
- for attr in attrs:
1363
- val = getattr(self, attr)
1364
- if val is not None:
1365
- val = subst_vars(val, config_vars)
1366
- if os.name == 'posix':
1367
- val = os.path.expanduser(val)
1368
- setattr(self, attr, val)
1369
-
1370
-
1371
- def _pythonpath():
1372
- items = os.environ.get('PYTHONPATH', '').split(os.pathsep)
1373
- return filter(None, items)
1374
-
1375
-
1376
- def get_site_dirs():
1377
- """
1378
- Return a list of 'site' dirs
1379
- """
1380
-
1381
- sitedirs = []
1382
-
1383
- # start with PYTHONPATH
1384
- sitedirs.extend(_pythonpath())
1385
-
1386
- prefixes = [sys.prefix]
1387
- if sys.exec_prefix != sys.prefix:
1388
- prefixes.append(sys.exec_prefix)
1389
- for prefix in prefixes:
1390
- if not prefix:
1391
- continue
1392
-
1393
- if sys.platform in ('os2emx', 'riscos'):
1394
- sitedirs.append(os.path.join(prefix, "Lib", "site-packages"))
1395
- elif os.sep == '/':
1396
- sitedirs.extend([
1397
- os.path.join(
1398
- prefix,
1399
- "lib",
1400
- "python{}.{}".format(*sys.version_info),
1401
- "site-packages",
1402
- ),
1403
- os.path.join(prefix, "lib", "site-python"),
1404
- ])
1405
- else:
1406
- sitedirs.extend([
1407
- prefix,
1408
- os.path.join(prefix, "lib", "site-packages"),
1409
- ])
1410
- if sys.platform != 'darwin':
1411
- continue
1412
-
1413
- # for framework builds *only* we add the standard Apple
1414
- # locations. Currently only per-user, but /Library and
1415
- # /Network/Library could be added too
1416
- if 'Python.framework' not in prefix:
1417
- continue
1418
-
1419
- home = os.environ.get('HOME')
1420
- if not home:
1421
- continue
1422
-
1423
- home_sp = os.path.join(
1424
- home,
1425
- 'Library',
1426
- 'Python',
1427
- '{}.{}'.format(*sys.version_info),
1428
- 'site-packages',
1429
- )
1430
- sitedirs.append(home_sp)
1431
- lib_paths = get_path('purelib'), get_path('platlib')
1432
-
1433
- sitedirs.extend(s for s in lib_paths if s not in sitedirs)
1434
-
1435
- if site.ENABLE_USER_SITE:
1436
- sitedirs.append(site.USER_SITE)
1437
-
1438
- with contextlib.suppress(AttributeError):
1439
- sitedirs.extend(site.getsitepackages())
1440
-
1441
- sitedirs = list(map(normalize_path, sitedirs))
1442
-
1443
- return sitedirs
1444
-
1445
-
1446
- def expand_paths(inputs): # noqa: C901 # is too complex (11) # FIXME
1447
- """Yield sys.path directories that might contain "old-style" packages"""
1448
-
1449
- seen = {}
1450
-
1451
- for dirname in inputs:
1452
- dirname = normalize_path(dirname)
1453
- if dirname in seen:
1454
- continue
1455
-
1456
- seen[dirname] = 1
1457
- if not os.path.isdir(dirname):
1458
- continue
1459
-
1460
- files = os.listdir(dirname)
1461
- yield dirname, files
1462
-
1463
- for name in files:
1464
- if not name.endswith('.pth'):
1465
- # We only care about the .pth files
1466
- continue
1467
- if name in ('easy-install.pth', 'setuptools.pth'):
1468
- # Ignore .pth files that we control
1469
- continue
1470
-
1471
- # Read the .pth file
1472
- f = open(os.path.join(dirname, name))
1473
- lines = list(yield_lines(f))
1474
- f.close()
1475
-
1476
- # Yield existing non-dupe, non-import directory lines from it
1477
- for line in lines:
1478
- if line.startswith("import"):
1479
- continue
1480
-
1481
- line = normalize_path(line.rstrip())
1482
- if line in seen:
1483
- continue
1484
-
1485
- seen[line] = 1
1486
- if not os.path.isdir(line):
1487
- continue
1488
-
1489
- yield line, os.listdir(line)
1490
-
1491
-
1492
- def extract_wininst_cfg(dist_filename):
1493
- """Extract configuration data from a bdist_wininst .exe
1494
-
1495
- Returns a configparser.RawConfigParser, or None
1496
- """
1497
- f = open(dist_filename, 'rb')
1498
- try:
1499
- endrec = zipfile._EndRecData(f)
1500
- if endrec is None:
1501
- return None
1502
-
1503
- prepended = (endrec[9] - endrec[5]) - endrec[6]
1504
- if prepended < 12: # no wininst data here
1505
- return None
1506
- f.seek(prepended - 12)
1507
-
1508
- tag, cfglen, bmlen = struct.unpack("<iii", f.read(12))
1509
- if tag not in (0x1234567A, 0x1234567B):
1510
- return None # not a valid tag
1511
-
1512
- f.seek(prepended - (12 + cfglen))
1513
- init = {'version': '', 'target_version': ''}
1514
- cfg = configparser.RawConfigParser(init)
1515
- try:
1516
- part = f.read(cfglen)
1517
- # Read up to the first null byte.
1518
- config = part.split(b'\0', 1)[0]
1519
- # Now the config is in bytes, but for RawConfigParser, it should
1520
- # be text, so decode it.
1521
- config = config.decode(sys.getfilesystemencoding())
1522
- cfg.read_file(io.StringIO(config))
1523
- except configparser.Error:
1524
- return None
1525
- if not cfg.has_section('metadata') or not cfg.has_section('Setup'):
1526
- return None
1527
- return cfg
1528
-
1529
- finally:
1530
- f.close()
1531
-
1532
-
1533
- def get_exe_prefixes(exe_filename):
1534
- """Get exe->egg path translations for a given .exe file"""
1535
-
1536
- prefixes = [
1537
- ('PURELIB/', ''),
1538
- ('PLATLIB/pywin32_system32', ''),
1539
- ('PLATLIB/', ''),
1540
- ('SCRIPTS/', 'EGG-INFO/scripts/'),
1541
- ('DATA/lib/site-packages', ''),
1542
- ]
1543
- z = zipfile.ZipFile(exe_filename)
1544
- try:
1545
- for info in z.infolist():
1546
- name = info.filename
1547
- parts = name.split('/')
1548
- if len(parts) == 3 and parts[2] == 'PKG-INFO':
1549
- if parts[1].endswith('.egg-info'):
1550
- prefixes.insert(0, ('/'.join(parts[:2]), 'EGG-INFO/'))
1551
- break
1552
- if len(parts) != 2 or not name.endswith('.pth'):
1553
- continue
1554
- if name.endswith('-nspkg.pth'):
1555
- continue
1556
- if parts[0].upper() in ('PURELIB', 'PLATLIB'):
1557
- contents = z.read(name).decode()
1558
- for pth in yield_lines(contents):
1559
- pth = pth.strip().replace('\\', '/')
1560
- if not pth.startswith('import'):
1561
- prefixes.append((('%s/%s/' % (parts[0], pth)), ''))
1562
- finally:
1563
- z.close()
1564
- prefixes = [(x.lower(), y) for x, y in prefixes]
1565
- prefixes.sort()
1566
- prefixes.reverse()
1567
- return prefixes
1568
-
1569
-
1570
- class PthDistributions(Environment):
1571
- """A .pth file with Distribution paths in it"""
1572
-
1573
- dirty = False
1574
-
1575
- def __init__(self, filename, sitedirs=()):
1576
- self.filename = filename
1577
- self.sitedirs = list(map(normalize_path, sitedirs))
1578
- self.basedir = normalize_path(os.path.dirname(self.filename))
1579
- self._load()
1580
- Environment.__init__(self, [], None, None)
1581
- for path in yield_lines(self.paths):
1582
- list(map(self.add, find_distributions(path, True)))
1583
-
1584
- def _load(self):
1585
- self.paths = []
1586
- saw_import = False
1587
- seen = dict.fromkeys(self.sitedirs)
1588
- if os.path.isfile(self.filename):
1589
- f = open(self.filename, 'rt')
1590
- for line in f:
1591
- if line.startswith('import'):
1592
- saw_import = True
1593
- continue
1594
- path = line.rstrip()
1595
- self.paths.append(path)
1596
- if not path.strip() or path.strip().startswith('#'):
1597
- continue
1598
- # skip non-existent paths, in case somebody deleted a package
1599
- # manually, and duplicate paths as well
1600
- path = self.paths[-1] = normalize_path(
1601
- os.path.join(self.basedir, path)
1602
- )
1603
- if not os.path.exists(path) or path in seen:
1604
- self.paths.pop() # skip it
1605
- self.dirty = True # we cleaned up, so we're dirty now :)
1606
- continue
1607
- seen[path] = 1
1608
- f.close()
1609
-
1610
- if self.paths and not saw_import:
1611
- self.dirty = True # ensure anything we touch has import wrappers
1612
- while self.paths and not self.paths[-1].strip():
1613
- self.paths.pop()
1614
-
1615
- def save(self):
1616
- """Write changed .pth file back to disk"""
1617
- if not self.dirty:
1618
- return
1619
-
1620
- rel_paths = list(map(self.make_relative, self.paths))
1621
- if rel_paths:
1622
- log.debug("Saving %s", self.filename)
1623
- lines = self._wrap_lines(rel_paths)
1624
- data = '\n'.join(lines) + '\n'
1625
-
1626
- if os.path.islink(self.filename):
1627
- os.unlink(self.filename)
1628
- with open(self.filename, 'wt') as f:
1629
- f.write(data)
1630
-
1631
- elif os.path.exists(self.filename):
1632
- log.debug("Deleting empty %s", self.filename)
1633
- os.unlink(self.filename)
1634
-
1635
- self.dirty = False
1636
-
1637
- @staticmethod
1638
- def _wrap_lines(lines):
1639
- return lines
1640
-
1641
- def add(self, dist):
1642
- """Add `dist` to the distribution map"""
1643
- new_path = (
1644
- dist.location not in self.paths and (
1645
- dist.location not in self.sitedirs or
1646
- # account for '.' being in PYTHONPATH
1647
- dist.location == os.getcwd()
1648
- )
1649
- )
1650
- if new_path:
1651
- self.paths.append(dist.location)
1652
- self.dirty = True
1653
- Environment.add(self, dist)
1654
-
1655
- def remove(self, dist):
1656
- """Remove `dist` from the distribution map"""
1657
- while dist.location in self.paths:
1658
- self.paths.remove(dist.location)
1659
- self.dirty = True
1660
- Environment.remove(self, dist)
1661
-
1662
- def make_relative(self, path):
1663
- npath, last = os.path.split(normalize_path(path))
1664
- baselen = len(self.basedir)
1665
- parts = [last]
1666
- sep = os.altsep == '/' and '/' or os.sep
1667
- while len(npath) >= baselen:
1668
- if npath == self.basedir:
1669
- parts.append(os.curdir)
1670
- parts.reverse()
1671
- return sep.join(parts)
1672
- npath, last = os.path.split(npath)
1673
- parts.append(last)
1674
- else:
1675
- return path
1676
-
1677
-
1678
- class RewritePthDistributions(PthDistributions):
1679
- @classmethod
1680
- def _wrap_lines(cls, lines):
1681
- yield cls.prelude
1682
- for line in lines:
1683
- yield line
1684
- yield cls.postlude
1685
-
1686
- prelude = _one_liner("""
1687
- import sys
1688
- sys.__plen = len(sys.path)
1689
- """)
1690
- postlude = _one_liner("""
1691
- import sys
1692
- new = sys.path[sys.__plen:]
1693
- del sys.path[sys.__plen:]
1694
- p = getattr(sys, '__egginsert', 0)
1695
- sys.path[p:p] = new
1696
- sys.__egginsert = p + len(new)
1697
- """)
1698
-
1699
-
1700
- if os.environ.get('SETUPTOOLS_SYS_PATH_TECHNIQUE', 'raw') == 'rewrite':
1701
- PthDistributions = RewritePthDistributions
1702
-
1703
-
1704
- def _first_line_re():
1705
- """
1706
- Return a regular expression based on first_line_re suitable for matching
1707
- strings.
1708
- """
1709
- if isinstance(first_line_re.pattern, str):
1710
- return first_line_re
1711
-
1712
- # first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern.
1713
- return re.compile(first_line_re.pattern.decode())
1714
-
1715
-
1716
- def auto_chmod(func, arg, exc):
1717
- if func in [os.unlink, os.remove] and os.name == 'nt':
1718
- chmod(arg, stat.S_IWRITE)
1719
- return func(arg)
1720
- et, ev, _ = sys.exc_info()
1721
- # TODO: This code doesn't make sense. What is it trying to do?
1722
- raise (ev[0], ev[1] + (" %s %s" % (func, arg)))
1723
-
1724
-
1725
- def update_dist_caches(dist_path, fix_zipimporter_caches):
1726
- """
1727
- Fix any globally cached `dist_path` related data
1728
-
1729
- `dist_path` should be a path of a newly installed egg distribution (zipped
1730
- or unzipped).
1731
-
1732
- sys.path_importer_cache contains finder objects that have been cached when
1733
- importing data from the original distribution. Any such finders need to be
1734
- cleared since the replacement distribution might be packaged differently,
1735
- e.g. a zipped egg distribution might get replaced with an unzipped egg
1736
- folder or vice versa. Having the old finders cached may then cause Python
1737
- to attempt loading modules from the replacement distribution using an
1738
- incorrect loader.
1739
-
1740
- zipimport.zipimporter objects are Python loaders charged with importing
1741
- data packaged inside zip archives. If stale loaders referencing the
1742
- original distribution, are left behind, they can fail to load modules from
1743
- the replacement distribution. E.g. if an old zipimport.zipimporter instance
1744
- is used to load data from a new zipped egg archive, it may cause the
1745
- operation to attempt to locate the requested data in the wrong location -
1746
- one indicated by the original distribution's zip archive directory
1747
- information. Such an operation may then fail outright, e.g. report having
1748
- read a 'bad local file header', or even worse, it may fail silently &
1749
- return invalid data.
1750
-
1751
- zipimport._zip_directory_cache contains cached zip archive directory
1752
- information for all existing zipimport.zipimporter instances and all such
1753
- instances connected to the same archive share the same cached directory
1754
- information.
1755
-
1756
- If asked, and the underlying Python implementation allows it, we can fix
1757
- all existing zipimport.zipimporter instances instead of having to track
1758
- them down and remove them one by one, by updating their shared cached zip
1759
- archive directory information. This, of course, assumes that the
1760
- replacement distribution is packaged as a zipped egg.
1761
-
1762
- If not asked to fix existing zipimport.zipimporter instances, we still do
1763
- our best to clear any remaining zipimport.zipimporter related cached data
1764
- that might somehow later get used when attempting to load data from the new
1765
- distribution and thus cause such load operations to fail. Note that when
1766
- tracking down such remaining stale data, we can not catch every conceivable
1767
- usage from here, and we clear only those that we know of and have found to
1768
- cause problems if left alive. Any remaining caches should be updated by
1769
- whomever is in charge of maintaining them, i.e. they should be ready to
1770
- handle us replacing their zip archives with new distributions at runtime.
1771
-
1772
- """
1773
- # There are several other known sources of stale zipimport.zipimporter
1774
- # instances that we do not clear here, but might if ever given a reason to
1775
- # do so:
1776
- # * Global setuptools pkg_resources.working_set (a.k.a. 'master working
1777
- # set') may contain distributions which may in turn contain their
1778
- # zipimport.zipimporter loaders.
1779
- # * Several zipimport.zipimporter loaders held by local variables further
1780
- # up the function call stack when running the setuptools installation.
1781
- # * Already loaded modules may have their __loader__ attribute set to the
1782
- # exact loader instance used when importing them. Python 3.4 docs state
1783
- # that this information is intended mostly for introspection and so is
1784
- # not expected to cause us problems.
1785
- normalized_path = normalize_path(dist_path)
1786
- _uncache(normalized_path, sys.path_importer_cache)
1787
- if fix_zipimporter_caches:
1788
- _replace_zip_directory_cache_data(normalized_path)
1789
- else:
1790
- # Here, even though we do not want to fix existing and now stale
1791
- # zipimporter cache information, we still want to remove it. Related to
1792
- # Python's zip archive directory information cache, we clear each of
1793
- # its stale entries in two phases:
1794
- # 1. Clear the entry so attempting to access zip archive information
1795
- # via any existing stale zipimport.zipimporter instances fails.
1796
- # 2. Remove the entry from the cache so any newly constructed
1797
- # zipimport.zipimporter instances do not end up using old stale
1798
- # zip archive directory information.
1799
- # This whole stale data removal step does not seem strictly necessary,
1800
- # but has been left in because it was done before we started replacing
1801
- # the zip archive directory information cache content if possible, and
1802
- # there are no relevant unit tests that we can depend on to tell us if
1803
- # this is really needed.
1804
- _remove_and_clear_zip_directory_cache_data(normalized_path)
1805
-
1806
-
1807
- def _collect_zipimporter_cache_entries(normalized_path, cache):
1808
- """
1809
- Return zipimporter cache entry keys related to a given normalized path.
1810
-
1811
- Alternative path spellings (e.g. those using different character case or
1812
- those using alternative path separators) related to the same path are
1813
- included. Any sub-path entries are included as well, i.e. those
1814
- corresponding to zip archives embedded in other zip archives.
1815
-
1816
- """
1817
- result = []
1818
- prefix_len = len(normalized_path)
1819
- for p in cache:
1820
- np = normalize_path(p)
1821
- if (np.startswith(normalized_path) and
1822
- np[prefix_len:prefix_len + 1] in (os.sep, '')):
1823
- result.append(p)
1824
- return result
1825
-
1826
-
1827
- def _update_zipimporter_cache(normalized_path, cache, updater=None):
1828
- """
1829
- Update zipimporter cache data for a given normalized path.
1830
-
1831
- Any sub-path entries are processed as well, i.e. those corresponding to zip
1832
- archives embedded in other zip archives.
1833
-
1834
- Given updater is a callable taking a cache entry key and the original entry
1835
- (after already removing the entry from the cache), and expected to update
1836
- the entry and possibly return a new one to be inserted in its place.
1837
- Returning None indicates that the entry should not be replaced with a new
1838
- one. If no updater is given, the cache entries are simply removed without
1839
- any additional processing, the same as if the updater simply returned None.
1840
-
1841
- """
1842
- for p in _collect_zipimporter_cache_entries(normalized_path, cache):
1843
- # N.B. pypy's custom zipimport._zip_directory_cache implementation does
1844
- # not support the complete dict interface:
1845
- # * Does not support item assignment, thus not allowing this function
1846
- # to be used only for removing existing cache entries.
1847
- # * Does not support the dict.pop() method, forcing us to use the
1848
- # get/del patterns instead. For more detailed information see the
1849
- # following links:
1850
- # https://github.com/pypa/setuptools/issues/202#issuecomment-202913420
1851
- # http://bit.ly/2h9itJX
1852
- old_entry = cache[p]
1853
- del cache[p]
1854
- new_entry = updater and updater(p, old_entry)
1855
- if new_entry is not None:
1856
- cache[p] = new_entry
1857
-
1858
-
1859
- def _uncache(normalized_path, cache):
1860
- _update_zipimporter_cache(normalized_path, cache)
1861
-
1862
-
1863
- def _remove_and_clear_zip_directory_cache_data(normalized_path):
1864
- def clear_and_remove_cached_zip_archive_directory_data(path, old_entry):
1865
- old_entry.clear()
1866
-
1867
- _update_zipimporter_cache(
1868
- normalized_path, zipimport._zip_directory_cache,
1869
- updater=clear_and_remove_cached_zip_archive_directory_data)
1870
-
1871
-
1872
- # PyPy Python implementation does not allow directly writing to the
1873
- # zipimport._zip_directory_cache and so prevents us from attempting to correct
1874
- # its content. The best we can do there is clear the problematic cache content
1875
- # and have PyPy repopulate it as needed. The downside is that if there are any
1876
- # stale zipimport.zipimporter instances laying around, attempting to use them
1877
- # will fail due to not having its zip archive directory information available
1878
- # instead of being automatically corrected to use the new correct zip archive
1879
- # directory information.
1880
- if '__pypy__' in sys.builtin_module_names:
1881
- _replace_zip_directory_cache_data = \
1882
- _remove_and_clear_zip_directory_cache_data
1883
- else:
1884
-
1885
- def _replace_zip_directory_cache_data(normalized_path):
1886
- def replace_cached_zip_archive_directory_data(path, old_entry):
1887
- # N.B. In theory, we could load the zip directory information just
1888
- # once for all updated path spellings, and then copy it locally and
1889
- # update its contained path strings to contain the correct
1890
- # spelling, but that seems like a way too invasive move (this cache
1891
- # structure is not officially documented anywhere and could in
1892
- # theory change with new Python releases) for no significant
1893
- # benefit.
1894
- old_entry.clear()
1895
- zipimport.zipimporter(path)
1896
- old_entry.update(zipimport._zip_directory_cache[path])
1897
- return old_entry
1898
-
1899
- _update_zipimporter_cache(
1900
- normalized_path, zipimport._zip_directory_cache,
1901
- updater=replace_cached_zip_archive_directory_data)
1902
-
1903
-
1904
- def is_python(text, filename='<string>'):
1905
- "Is this string a valid Python script?"
1906
- try:
1907
- compile(text, filename, 'exec')
1908
- except (SyntaxError, TypeError):
1909
- return False
1910
- else:
1911
- return True
1912
-
1913
-
1914
- def is_sh(executable):
1915
- """Determine if the specified executable is a .sh (contains a #! line)"""
1916
- try:
1917
- with io.open(executable, encoding='latin-1') as fp:
1918
- magic = fp.read(2)
1919
- except (OSError, IOError):
1920
- return executable
1921
- return magic == '#!'
1922
-
1923
-
1924
- def nt_quote_arg(arg):
1925
- """Quote a command line argument according to Windows parsing rules"""
1926
- return subprocess.list2cmdline([arg])
1927
-
1928
-
1929
- def is_python_script(script_text, filename):
1930
- """Is this text, as a whole, a Python script? (as opposed to shell/bat/etc.
1931
- """
1932
- if filename.endswith('.py') or filename.endswith('.pyw'):
1933
- return True # extension says it's Python
1934
- if is_python(script_text, filename):
1935
- return True # it's syntactically valid Python
1936
- if script_text.startswith('#!'):
1937
- # It begins with a '#!' line, so check if 'python' is in it somewhere
1938
- return 'python' in script_text.splitlines()[0].lower()
1939
-
1940
- return False # Not any Python I can recognize
1941
-
1942
-
1943
- try:
1944
- from os import chmod as _chmod
1945
- except ImportError:
1946
- # Jython compatibility
1947
- def _chmod(*args):
1948
- pass
1949
-
1950
-
1951
- def chmod(path, mode):
1952
- log.debug("changing mode of %s to %o", path, mode)
1953
- try:
1954
- _chmod(path, mode)
1955
- except os.error as e:
1956
- log.debug("chmod failed: %s", e)
1957
-
1958
-
1959
- class CommandSpec(list):
1960
- """
1961
- A command spec for a #! header, specified as a list of arguments akin to
1962
- those passed to Popen.
1963
- """
1964
-
1965
- options = []
1966
- split_args = dict()
1967
-
1968
- @classmethod
1969
- def best(cls):
1970
- """
1971
- Choose the best CommandSpec class based on environmental conditions.
1972
- """
1973
- return cls
1974
-
1975
- @classmethod
1976
- def _sys_executable(cls):
1977
- _default = os.path.normpath(sys.executable)
1978
- return os.environ.get('__PYVENV_LAUNCHER__', _default)
1979
-
1980
- @classmethod
1981
- def from_param(cls, param):
1982
- """
1983
- Construct a CommandSpec from a parameter to build_scripts, which may
1984
- be None.
1985
- """
1986
- if isinstance(param, cls):
1987
- return param
1988
- if isinstance(param, list):
1989
- return cls(param)
1990
- if param is None:
1991
- return cls.from_environment()
1992
- # otherwise, assume it's a string.
1993
- return cls.from_string(param)
1994
-
1995
- @classmethod
1996
- def from_environment(cls):
1997
- return cls([cls._sys_executable()])
1998
-
1999
- @classmethod
2000
- def from_string(cls, string):
2001
- """
2002
- Construct a command spec from a simple string representing a command
2003
- line parseable by shlex.split.
2004
- """
2005
- items = shlex.split(string, **cls.split_args)
2006
- return cls(items)
2007
-
2008
- def install_options(self, script_text):
2009
- self.options = shlex.split(self._extract_options(script_text))
2010
- cmdline = subprocess.list2cmdline(self)
2011
- if not isascii(cmdline):
2012
- self.options[:0] = ['-x']
2013
-
2014
- @staticmethod
2015
- def _extract_options(orig_script):
2016
- """
2017
- Extract any options from the first line of the script.
2018
- """
2019
- first = (orig_script + '\n').splitlines()[0]
2020
- match = _first_line_re().match(first)
2021
- options = match.group(1) or '' if match else ''
2022
- return options.strip()
2023
-
2024
- def as_header(self):
2025
- return self._render(self + list(self.options))
2026
-
2027
- @staticmethod
2028
- def _strip_quotes(item):
2029
- _QUOTES = '"\''
2030
- for q in _QUOTES:
2031
- if item.startswith(q) and item.endswith(q):
2032
- return item[1:-1]
2033
- return item
2034
-
2035
- @staticmethod
2036
- def _render(items):
2037
- cmdline = subprocess.list2cmdline(
2038
- CommandSpec._strip_quotes(item.strip()) for item in items)
2039
- return '#!' + cmdline + '\n'
2040
-
2041
-
2042
- # For pbr compat; will be removed in a future version.
2043
- sys_executable = CommandSpec._sys_executable()
2044
-
2045
-
2046
- class WindowsCommandSpec(CommandSpec):
2047
- split_args = dict(posix=False)
2048
-
2049
-
2050
- class ScriptWriter:
2051
- """
2052
- Encapsulates behavior around writing entry point scripts for console and
2053
- gui apps.
2054
- """
2055
-
2056
- template = textwrap.dedent(r"""
2057
- # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
2058
- import re
2059
- import sys
2060
-
2061
- # for compatibility with easy_install; see #2198
2062
- __requires__ = %(spec)r
2063
-
2064
- try:
2065
- from importlib.metadata import distribution
2066
- except ImportError:
2067
- try:
2068
- from importlib_metadata import distribution
2069
- except ImportError:
2070
- from pkg_resources import load_entry_point
2071
-
2072
-
2073
- def importlib_load_entry_point(spec, group, name):
2074
- dist_name, _, _ = spec.partition('==')
2075
- matches = (
2076
- entry_point
2077
- for entry_point in distribution(dist_name).entry_points
2078
- if entry_point.group == group and entry_point.name == name
2079
- )
2080
- return next(matches).load()
2081
-
2082
-
2083
- globals().setdefault('load_entry_point', importlib_load_entry_point)
2084
-
2085
-
2086
- if __name__ == '__main__':
2087
- sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
2088
- sys.exit(load_entry_point(%(spec)r, %(group)r, %(name)r)())
2089
- """).lstrip()
2090
-
2091
- command_spec_class = CommandSpec
2092
-
2093
- @classmethod
2094
- def get_script_args(cls, dist, executable=None, wininst=False):
2095
- # for backward compatibility
2096
- warnings.warn("Use get_args", EasyInstallDeprecationWarning)
2097
- writer = (WindowsScriptWriter if wininst else ScriptWriter).best()
2098
- header = cls.get_script_header("", executable, wininst)
2099
- return writer.get_args(dist, header)
2100
-
2101
- @classmethod
2102
- def get_script_header(cls, script_text, executable=None, wininst=False):
2103
- # for backward compatibility
2104
- warnings.warn(
2105
- "Use get_header", EasyInstallDeprecationWarning, stacklevel=2)
2106
- if wininst:
2107
- executable = "python.exe"
2108
- return cls.get_header(script_text, executable)
2109
-
2110
- @classmethod
2111
- def get_args(cls, dist, header=None):
2112
- """
2113
- Yield write_script() argument tuples for a distribution's
2114
- console_scripts and gui_scripts entry points.
2115
- """
2116
- if header is None:
2117
- header = cls.get_header()
2118
- spec = str(dist.as_requirement())
2119
- for type_ in 'console', 'gui':
2120
- group = type_ + '_scripts'
2121
- for name, ep in dist.get_entry_map(group).items():
2122
- cls._ensure_safe_name(name)
2123
- script_text = cls.template % locals()
2124
- args = cls._get_script_args(type_, name, header, script_text)
2125
- for res in args:
2126
- yield res
2127
-
2128
- @staticmethod
2129
- def _ensure_safe_name(name):
2130
- """
2131
- Prevent paths in *_scripts entry point names.
2132
- """
2133
- has_path_sep = re.search(r'[\\/]', name)
2134
- if has_path_sep:
2135
- raise ValueError("Path separators not allowed in script names")
2136
-
2137
- @classmethod
2138
- def get_writer(cls, force_windows):
2139
- # for backward compatibility
2140
- warnings.warn("Use best", EasyInstallDeprecationWarning)
2141
- return WindowsScriptWriter.best() if force_windows else cls.best()
2142
-
2143
- @classmethod
2144
- def best(cls):
2145
- """
2146
- Select the best ScriptWriter for this environment.
2147
- """
2148
- if sys.platform == 'win32' or (os.name == 'java' and os._name == 'nt'):
2149
- return WindowsScriptWriter.best()
2150
- else:
2151
- return cls
2152
-
2153
- @classmethod
2154
- def _get_script_args(cls, type_, name, header, script_text):
2155
- # Simply write the stub with no extension.
2156
- yield (name, header + script_text)
2157
-
2158
- @classmethod
2159
- def get_header(cls, script_text="", executable=None):
2160
- """Create a #! line, getting options (if any) from script_text"""
2161
- cmd = cls.command_spec_class.best().from_param(executable)
2162
- cmd.install_options(script_text)
2163
- return cmd.as_header()
2164
-
2165
-
2166
- class WindowsScriptWriter(ScriptWriter):
2167
- command_spec_class = WindowsCommandSpec
2168
-
2169
- @classmethod
2170
- def get_writer(cls):
2171
- # for backward compatibility
2172
- warnings.warn("Use best", EasyInstallDeprecationWarning)
2173
- return cls.best()
2174
-
2175
- @classmethod
2176
- def best(cls):
2177
- """
2178
- Select the best ScriptWriter suitable for Windows
2179
- """
2180
- writer_lookup = dict(
2181
- executable=WindowsExecutableLauncherWriter,
2182
- natural=cls,
2183
- )
2184
- # for compatibility, use the executable launcher by default
2185
- launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable')
2186
- return writer_lookup[launcher]
2187
-
2188
- @classmethod
2189
- def _get_script_args(cls, type_, name, header, script_text):
2190
- "For Windows, add a .py extension"
2191
- ext = dict(console='.pya', gui='.pyw')[type_]
2192
- if ext not in os.environ['PATHEXT'].lower().split(';'):
2193
- msg = (
2194
- "{ext} not listed in PATHEXT; scripts will not be "
2195
- "recognized as executables."
2196
- ).format(**locals())
2197
- warnings.warn(msg, UserWarning)
2198
- old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe']
2199
- old.remove(ext)
2200
- header = cls._adjust_header(type_, header)
2201
- blockers = [name + x for x in old]
2202
- yield name + ext, header + script_text, 't', blockers
2203
-
2204
- @classmethod
2205
- def _adjust_header(cls, type_, orig_header):
2206
- """
2207
- Make sure 'pythonw' is used for gui and 'python' is used for
2208
- console (regardless of what sys.executable is).
2209
- """
2210
- pattern = 'pythonw.exe'
2211
- repl = 'python.exe'
2212
- if type_ == 'gui':
2213
- pattern, repl = repl, pattern
2214
- pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE)
2215
- new_header = pattern_ob.sub(string=orig_header, repl=repl)
2216
- return new_header if cls._use_header(new_header) else orig_header
2217
-
2218
- @staticmethod
2219
- def _use_header(new_header):
2220
- """
2221
- Should _adjust_header use the replaced header?
2222
-
2223
- On non-windows systems, always use. On
2224
- Windows systems, only use the replaced header if it resolves
2225
- to an executable on the system.
2226
- """
2227
- clean_header = new_header[2:-1].strip('"')
2228
- return sys.platform != 'win32' or find_executable(clean_header)
2229
-
2230
-
2231
- class WindowsExecutableLauncherWriter(WindowsScriptWriter):
2232
- @classmethod
2233
- def _get_script_args(cls, type_, name, header, script_text):
2234
- """
2235
- For Windows, add a .py extension and an .exe launcher
2236
- """
2237
- if type_ == 'gui':
2238
- launcher_type = 'gui'
2239
- ext = '-script.pyw'
2240
- old = ['.pyw']
2241
- else:
2242
- launcher_type = 'cli'
2243
- ext = '-script.py'
2244
- old = ['.py', '.pyc', '.pyo']
2245
- hdr = cls._adjust_header(type_, header)
2246
- blockers = [name + x for x in old]
2247
- yield (name + ext, hdr + script_text, 't', blockers)
2248
- yield (
2249
- name + '.exe', get_win_launcher(launcher_type),
2250
- 'b' # write in binary mode
2251
- )
2252
- if not is_64bit():
2253
- # install a manifest for the launcher to prevent Windows
2254
- # from detecting it as an installer (which it will for
2255
- # launchers like easy_install.exe). Consider only
2256
- # adding a manifest for launchers detected as installers.
2257
- # See Distribute #143 for details.
2258
- m_name = name + '.exe.manifest'
2259
- yield (m_name, load_launcher_manifest(name), 't')
2260
-
2261
-
2262
- # for backward-compatibility
2263
- get_script_args = ScriptWriter.get_script_args
2264
- get_script_header = ScriptWriter.get_script_header
2265
-
2266
-
2267
- def get_win_launcher(type):
2268
- """
2269
- Load the Windows launcher (executable) suitable for launching a script.
2270
-
2271
- `type` should be either 'cli' or 'gui'
2272
-
2273
- Returns the executable as a byte string.
2274
- """
2275
- launcher_fn = '%s.exe' % type
2276
- if is_64bit():
2277
- if get_platform() == "win-arm64":
2278
- launcher_fn = launcher_fn.replace(".", "-arm64.")
2279
- else:
2280
- launcher_fn = launcher_fn.replace(".", "-64.")
2281
- else:
2282
- launcher_fn = launcher_fn.replace(".", "-32.")
2283
- return resource_string('setuptools', launcher_fn)
2284
-
2285
-
2286
- def load_launcher_manifest(name):
2287
- manifest = pkg_resources.resource_string(__name__, 'launcher manifest.xml')
2288
- return manifest.decode('utf-8') % vars()
2289
-
2290
-
2291
- def rmtree(path, ignore_errors=False, onerror=auto_chmod):
2292
- return shutil.rmtree(path, ignore_errors, onerror)
2293
-
2294
-
2295
- def current_umask():
2296
- tmp = os.umask(0o022)
2297
- os.umask(tmp)
2298
- return tmp
2299
-
2300
-
2301
- class EasyInstallDeprecationWarning(SetuptoolsDeprecationWarning):
2302
- """
2303
- Warning for EasyInstall deprecations, bypassing suppression.
2304
- """