@scrypted/server 0.0.140 → 0.0.144

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 (719) hide show
  1. package/dist/plugin/media.js +14 -3
  2. package/dist/plugin/media.js.map +1 -1
  3. package/dist/rpc.js +9 -5
  4. package/dist/rpc.js.map +1 -1
  5. package/dist/runtime.js +6 -0
  6. package/dist/runtime.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/plugin/media.ts +15 -3
  9. package/src/rpc.ts +11 -3
  10. package/src/runtime.ts +7 -0
  11. package/.venv/bin/Activate.ps1 +0 -241
  12. package/.venv/bin/activate +0 -66
  13. package/.venv/bin/activate.csh +0 -25
  14. package/.venv/bin/activate.fish +0 -64
  15. package/.venv/bin/pip +0 -8
  16. package/.venv/bin/pip3 +0 -8
  17. package/.venv/bin/pip3.9 +0 -8
  18. package/.venv/lib/python3.9/site-packages/_distutils_hack/__init__.py +0 -198
  19. package/.venv/lib/python3.9/site-packages/_distutils_hack/override.py +0 -1
  20. package/.venv/lib/python3.9/site-packages/distutils-precedence.pth +0 -1
  21. package/.venv/lib/python3.9/site-packages/pgi/__init__.py +0 -62
  22. package/.venv/lib/python3.9/site-packages/pgi/_compat.py +0 -74
  23. package/.venv/lib/python3.9/site-packages/pgi/callback.py +0 -15
  24. package/.venv/lib/python3.9/site-packages/pgi/cffilib/__init__.py +0 -12
  25. package/.venv/lib/python3.9/site-packages/pgi/cffilib/_compat.py +0 -25
  26. package/.venv/lib/python3.9/site-packages/pgi/cffilib/_utils.py +0 -119
  27. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/__init__.py +0 -60
  28. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/_cdef.py +0 -574
  29. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/_ffi.py +0 -25
  30. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/error.py +0 -13
  31. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giarginfo.py +0 -73
  32. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giargument.py +0 -36
  33. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gibaseinfo.py +0 -113
  34. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gicallableinfo.py +0 -75
  35. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giconstantinfo.py +0 -22
  36. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gienuminfo.py +0 -59
  37. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gifieldinfo.py +0 -40
  38. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gifunctioninfo.py +0 -64
  39. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giinterfaceinfo.py +0 -93
  40. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giobjectinfo.py +0 -143
  41. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gipropertyinfo.py +0 -28
  42. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giregisteredtypeinfo.py +0 -27
  43. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/girepository.py +0 -143
  44. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gisignalinfo.py +0 -55
  45. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gistructinfo.py +0 -55
  46. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gitypeinfo.py +0 -66
  47. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/gitypelib.py +0 -40
  48. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gir/giunioninfo.py +0 -66
  49. package/.venv/lib/python3.9/site-packages/pgi/cffilib/glib/__init__.py +0 -8
  50. package/.venv/lib/python3.9/site-packages/pgi/cffilib/glib/_cdef.py +0 -101
  51. package/.venv/lib/python3.9/site-packages/pgi/cffilib/glib/glib.py +0 -260
  52. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/__init__.py +0 -15
  53. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/_cdef.py +0 -45
  54. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/_ffi.py +0 -26
  55. package/.venv/lib/python3.9/site-packages/pgi/cffilib/gobject/gobject.py +0 -27
  56. package/.venv/lib/python3.9/site-packages/pgi/clib/__init__.py +0 -11
  57. package/.venv/lib/python3.9/site-packages/pgi/clib/_compat.py +0 -20
  58. package/.venv/lib/python3.9/site-packages/pgi/clib/_utils.py +0 -213
  59. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/__init__.py +0 -71
  60. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/error.py +0 -13
  61. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giarginfo.py +0 -65
  62. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giargument.py +0 -58
  63. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gibaseinfo.py +0 -152
  64. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gicallableinfo.py +0 -203
  65. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giconstantinfo.py +0 -35
  66. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gienuminfo.py +0 -64
  67. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gifieldinfo.py +0 -46
  68. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giinterfaceinfo.py +0 -83
  69. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giobjectinfo.py +0 -134
  70. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gipropertyinfo.py +0 -36
  71. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giregisteredtypeinfo.py +0 -34
  72. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/girepository.py +0 -200
  73. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gistructinfo.py +0 -55
  74. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gitypeinfo.py +0 -97
  75. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/gitypelib.py +0 -56
  76. package/.venv/lib/python3.9/site-packages/pgi/clib/gir/giunioninfo.py +0 -60
  77. package/.venv/lib/python3.9/site-packages/pgi/clib/glib.py +0 -336
  78. package/.venv/lib/python3.9/site-packages/pgi/clib/gobject.py +0 -405
  79. package/.venv/lib/python3.9/site-packages/pgi/codegen/__init__.py +0 -28
  80. package/.venv/lib/python3.9/site-packages/pgi/codegen/arguments.py +0 -640
  81. package/.venv/lib/python3.9/site-packages/pgi/codegen/backend.py +0 -95
  82. package/.venv/lib/python3.9/site-packages/pgi/codegen/cbargs.py +0 -152
  83. package/.venv/lib/python3.9/site-packages/pgi/codegen/cbreturn.py +0 -77
  84. package/.venv/lib/python3.9/site-packages/pgi/codegen/cffi_backend.py +0 -424
  85. package/.venv/lib/python3.9/site-packages/pgi/codegen/construct.py +0 -222
  86. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/__init__.py +0 -11
  87. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/main.py +0 -184
  88. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_basic.py +0 -705
  89. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_container.py +0 -236
  90. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_interface.py +0 -402
  91. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/types_other.py +0 -93
  92. package/.venv/lib/python3.9/site-packages/pgi/codegen/ctypes_backend/utils.py +0 -168
  93. package/.venv/lib/python3.9/site-packages/pgi/codegen/fieldgen.py +0 -114
  94. package/.venv/lib/python3.9/site-packages/pgi/codegen/fields.py +0 -244
  95. package/.venv/lib/python3.9/site-packages/pgi/codegen/funcgen.py +0 -376
  96. package/.venv/lib/python3.9/site-packages/pgi/codegen/null_backend.py +0 -110
  97. package/.venv/lib/python3.9/site-packages/pgi/codegen/returnvalues.py +0 -443
  98. package/.venv/lib/python3.9/site-packages/pgi/codegen/siggen.py +0 -157
  99. package/.venv/lib/python3.9/site-packages/pgi/codegen/utils.py +0 -248
  100. package/.venv/lib/python3.9/site-packages/pgi/const.py +0 -9
  101. package/.venv/lib/python3.9/site-packages/pgi/constant.py +0 -32
  102. package/.venv/lib/python3.9/site-packages/pgi/debug.py +0 -31
  103. package/.venv/lib/python3.9/site-packages/pgi/enum.py +0 -244
  104. package/.venv/lib/python3.9/site-packages/pgi/field.py +0 -58
  105. package/.venv/lib/python3.9/site-packages/pgi/finalizer.py +0 -3
  106. package/.venv/lib/python3.9/site-packages/pgi/foreign/__init__.py +0 -71
  107. package/.venv/lib/python3.9/site-packages/pgi/foreign/_base.py +0 -43
  108. package/.venv/lib/python3.9/site-packages/pgi/foreign/cairo.py +0 -41
  109. package/.venv/lib/python3.9/site-packages/pgi/function.py +0 -12
  110. package/.venv/lib/python3.9/site-packages/pgi/gerror.py +0 -58
  111. package/.venv/lib/python3.9/site-packages/pgi/gtype.py +0 -168
  112. package/.venv/lib/python3.9/site-packages/pgi/importer.py +0 -189
  113. package/.venv/lib/python3.9/site-packages/pgi/module.py +0 -141
  114. package/.venv/lib/python3.9/site-packages/pgi/obj.py +0 -519
  115. package/.venv/lib/python3.9/site-packages/pgi/overrides/GLib.py +0 -1013
  116. package/.venv/lib/python3.9/site-packages/pgi/overrides/GObject.py +0 -583
  117. package/.venv/lib/python3.9/site-packages/pgi/overrides/Gdk.py +0 -454
  118. package/.venv/lib/python3.9/site-packages/pgi/overrides/Gio.py +0 -237
  119. package/.venv/lib/python3.9/site-packages/pgi/overrides/Gtk.py +0 -2412
  120. package/.venv/lib/python3.9/site-packages/pgi/overrides/Pango.py +0 -53
  121. package/.venv/lib/python3.9/site-packages/pgi/overrides/Poppler.py +0 -61
  122. package/.venv/lib/python3.9/site-packages/pgi/overrides/__init__.py +0 -327
  123. package/.venv/lib/python3.9/site-packages/pgi/overrides/keysyms.py +0 -54
  124. package/.venv/lib/python3.9/site-packages/pgi/properties.py +0 -313
  125. package/.venv/lib/python3.9/site-packages/pgi/propertyhelper.py +0 -12
  126. package/.venv/lib/python3.9/site-packages/pgi/repository/__init__.py +0 -10
  127. package/.venv/lib/python3.9/site-packages/pgi/signalhelper.py +0 -18
  128. package/.venv/lib/python3.9/site-packages/pgi/signals.py +0 -122
  129. package/.venv/lib/python3.9/site-packages/pgi/static.py +0 -189
  130. package/.venv/lib/python3.9/site-packages/pgi/structure.py +0 -131
  131. package/.venv/lib/python3.9/site-packages/pgi/util.py +0 -342
  132. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/COPYING +0 -502
  133. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/INSTALLER +0 -1
  134. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/METADATA +0 -22
  135. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/RECORD +0 -229
  136. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/REQUESTED +0 -0
  137. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/WHEEL +0 -5
  138. package/.venv/lib/python3.9/site-packages/pgi-0.0.11.2.dist-info/top_level.txt +0 -1
  139. package/.venv/lib/python3.9/site-packages/pip/__init__.py +0 -13
  140. package/.venv/lib/python3.9/site-packages/pip/__main__.py +0 -31
  141. package/.venv/lib/python3.9/site-packages/pip/_internal/__init__.py +0 -19
  142. package/.venv/lib/python3.9/site-packages/pip/_internal/build_env.py +0 -293
  143. package/.venv/lib/python3.9/site-packages/pip/_internal/cache.py +0 -264
  144. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/__init__.py +0 -4
  145. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py +0 -163
  146. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/base_command.py +0 -214
  147. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/cmdoptions.py +0 -1010
  148. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/command_context.py +0 -27
  149. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/main.py +0 -70
  150. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/main_parser.py +0 -87
  151. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/parser.py +0 -292
  152. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/progress_bars.py +0 -250
  153. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/req_command.py +0 -469
  154. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/spinners.py +0 -157
  155. package/.venv/lib/python3.9/site-packages/pip/_internal/cli/status_codes.py +0 -6
  156. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/__init__.py +0 -127
  157. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/cache.py +0 -223
  158. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/check.py +0 -53
  159. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/completion.py +0 -96
  160. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/configuration.py +0 -266
  161. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/debug.py +0 -202
  162. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/download.py +0 -139
  163. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/freeze.py +0 -97
  164. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/hash.py +0 -59
  165. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/help.py +0 -41
  166. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/index.py +0 -138
  167. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/install.py +0 -770
  168. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/list.py +0 -361
  169. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/search.py +0 -174
  170. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/show.py +0 -235
  171. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/uninstall.py +0 -105
  172. package/.venv/lib/python3.9/site-packages/pip/_internal/commands/wheel.py +0 -177
  173. package/.venv/lib/python3.9/site-packages/pip/_internal/configuration.py +0 -367
  174. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/__init__.py +0 -21
  175. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/base.py +0 -36
  176. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/installed.py +0 -22
  177. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/sdist.py +0 -129
  178. package/.venv/lib/python3.9/site-packages/pip/_internal/distributions/wheel.py +0 -31
  179. package/.venv/lib/python3.9/site-packages/pip/_internal/exceptions.py +0 -402
  180. package/.venv/lib/python3.9/site-packages/pip/_internal/index/__init__.py +0 -2
  181. package/.venv/lib/python3.9/site-packages/pip/_internal/index/collector.py +0 -536
  182. package/.venv/lib/python3.9/site-packages/pip/_internal/index/package_finder.py +0 -993
  183. package/.venv/lib/python3.9/site-packages/pip/_internal/index/sources.py +0 -224
  184. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/__init__.py +0 -446
  185. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/_distutils.py +0 -169
  186. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/_sysconfig.py +0 -219
  187. package/.venv/lib/python3.9/site-packages/pip/_internal/locations/base.py +0 -52
  188. package/.venv/lib/python3.9/site-packages/pip/_internal/main.py +0 -12
  189. package/.venv/lib/python3.9/site-packages/pip/_internal/metadata/__init__.py +0 -51
  190. package/.venv/lib/python3.9/site-packages/pip/_internal/metadata/base.py +0 -330
  191. package/.venv/lib/python3.9/site-packages/pip/_internal/metadata/pkg_resources.py +0 -146
  192. package/.venv/lib/python3.9/site-packages/pip/_internal/models/__init__.py +0 -2
  193. package/.venv/lib/python3.9/site-packages/pip/_internal/models/candidate.py +0 -34
  194. package/.venv/lib/python3.9/site-packages/pip/_internal/models/direct_url.py +0 -220
  195. package/.venv/lib/python3.9/site-packages/pip/_internal/models/format_control.py +0 -80
  196. package/.venv/lib/python3.9/site-packages/pip/_internal/models/index.py +0 -28
  197. package/.venv/lib/python3.9/site-packages/pip/_internal/models/link.py +0 -288
  198. package/.venv/lib/python3.9/site-packages/pip/_internal/models/scheme.py +0 -31
  199. package/.venv/lib/python3.9/site-packages/pip/_internal/models/search_scope.py +0 -129
  200. package/.venv/lib/python3.9/site-packages/pip/_internal/models/selection_prefs.py +0 -51
  201. package/.venv/lib/python3.9/site-packages/pip/_internal/models/target_python.py +0 -110
  202. package/.venv/lib/python3.9/site-packages/pip/_internal/models/wheel.py +0 -89
  203. package/.venv/lib/python3.9/site-packages/pip/_internal/network/__init__.py +0 -2
  204. package/.venv/lib/python3.9/site-packages/pip/_internal/network/auth.py +0 -323
  205. package/.venv/lib/python3.9/site-packages/pip/_internal/network/cache.py +0 -69
  206. package/.venv/lib/python3.9/site-packages/pip/_internal/network/download.py +0 -184
  207. package/.venv/lib/python3.9/site-packages/pip/_internal/network/lazy_wheel.py +0 -210
  208. package/.venv/lib/python3.9/site-packages/pip/_internal/network/session.py +0 -454
  209. package/.venv/lib/python3.9/site-packages/pip/_internal/network/utils.py +0 -96
  210. package/.venv/lib/python3.9/site-packages/pip/_internal/network/xmlrpc.py +0 -60
  211. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/__init__.py +0 -0
  212. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  213. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata.py +0 -30
  214. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata_editable.py +0 -34
  215. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata_legacy.py +0 -67
  216. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel.py +0 -37
  217. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel_editable.py +0 -46
  218. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel_legacy.py +0 -105
  219. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/check.py +0 -149
  220. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/freeze.py +0 -254
  221. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/__init__.py +0 -2
  222. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/editable_legacy.py +0 -46
  223. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/legacy.py +0 -125
  224. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/wheel.py +0 -738
  225. package/.venv/lib/python3.9/site-packages/pip/_internal/operations/prepare.py +0 -632
  226. package/.venv/lib/python3.9/site-packages/pip/_internal/pyproject.py +0 -183
  227. package/.venv/lib/python3.9/site-packages/pip/_internal/req/__init__.py +0 -94
  228. package/.venv/lib/python3.9/site-packages/pip/_internal/req/constructors.py +0 -466
  229. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_file.py +0 -536
  230. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_install.py +0 -891
  231. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_set.py +0 -189
  232. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_tracker.py +0 -124
  233. package/.venv/lib/python3.9/site-packages/pip/_internal/req/req_uninstall.py +0 -633
  234. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/__init__.py +0 -0
  235. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/base.py +0 -20
  236. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  237. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py +0 -467
  238. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  239. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/base.py +0 -141
  240. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -540
  241. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/factory.py +0 -701
  242. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +0 -155
  243. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/provider.py +0 -215
  244. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/reporter.py +0 -68
  245. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/requirements.py +0 -166
  246. package/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/resolver.py +0 -251
  247. package/.venv/lib/python3.9/site-packages/pip/_internal/self_outdated_check.py +0 -182
  248. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/__init__.py +0 -0
  249. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/_log.py +0 -38
  250. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/appdirs.py +0 -52
  251. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/compat.py +0 -63
  252. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/compatibility_tags.py +0 -165
  253. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/datetime.py +0 -11
  254. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/deprecation.py +0 -120
  255. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/direct_url_helpers.py +0 -87
  256. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/distutils_args.py +0 -42
  257. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/egg_link.py +0 -75
  258. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/encoding.py +0 -36
  259. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/entrypoints.py +0 -27
  260. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/filesystem.py +0 -182
  261. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/filetypes.py +0 -27
  262. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/glibc.py +0 -88
  263. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/hashes.py +0 -144
  264. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/inject_securetransport.py +0 -35
  265. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/logging.py +0 -358
  266. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/misc.py +0 -689
  267. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/models.py +0 -39
  268. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/packaging.py +0 -84
  269. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/parallel.py +0 -103
  270. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/pkg_resources.py +0 -33
  271. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/setuptools_build.py +0 -167
  272. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/subprocess.py +0 -289
  273. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/temp_dir.py +0 -246
  274. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/unpacking.py +0 -258
  275. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/urls.py +0 -62
  276. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/virtualenv.py +0 -104
  277. package/.venv/lib/python3.9/site-packages/pip/_internal/utils/wheel.py +0 -182
  278. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/__init__.py +0 -15
  279. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/bazaar.py +0 -93
  280. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/git.py +0 -513
  281. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/mercurial.py +0 -153
  282. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/subversion.py +0 -318
  283. package/.venv/lib/python3.9/site-packages/pip/_internal/vcs/versioncontrol.py +0 -693
  284. package/.venv/lib/python3.9/site-packages/pip/_internal/wheel_builder.py +0 -375
  285. package/.venv/lib/python3.9/site-packages/pip/_vendor/__init__.py +0 -111
  286. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/__init__.py +0 -11
  287. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/_cmd.py +0 -57
  288. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/adapter.py +0 -133
  289. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/cache.py +0 -39
  290. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +0 -2
  291. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +0 -146
  292. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +0 -33
  293. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/compat.py +0 -29
  294. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/controller.py +0 -376
  295. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/filewrapper.py +0 -80
  296. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/heuristics.py +0 -135
  297. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/serialize.py +0 -188
  298. package/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/wrapper.py +0 -29
  299. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/__init__.py +0 -3
  300. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/__main__.py +0 -12
  301. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/cacert.pem +0 -4257
  302. package/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/core.py +0 -76
  303. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/__init__.py +0 -83
  304. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/big5freq.py +0 -386
  305. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/big5prober.py +0 -47
  306. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/chardistribution.py +0 -233
  307. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/charsetgroupprober.py +0 -107
  308. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/charsetprober.py +0 -145
  309. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cli/__init__.py +0 -1
  310. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cli/chardetect.py +0 -84
  311. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/codingstatemachine.py +0 -88
  312. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/compat.py +0 -36
  313. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cp949prober.py +0 -49
  314. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/enums.py +0 -76
  315. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/escprober.py +0 -101
  316. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/escsm.py +0 -246
  317. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/eucjpprober.py +0 -92
  318. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euckrfreq.py +0 -195
  319. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euckrprober.py +0 -47
  320. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euctwfreq.py +0 -387
  321. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euctwprober.py +0 -46
  322. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/gb2312freq.py +0 -283
  323. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/gb2312prober.py +0 -46
  324. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/hebrewprober.py +0 -292
  325. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/jisfreq.py +0 -325
  326. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/jpcntx.py +0 -233
  327. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +0 -4650
  328. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langgreekmodel.py +0 -4398
  329. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langhebrewmodel.py +0 -4383
  330. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langhungarianmodel.py +0 -4650
  331. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langrussianmodel.py +0 -5718
  332. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langthaimodel.py +0 -4383
  333. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langturkishmodel.py +0 -4383
  334. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/latin1prober.py +0 -145
  335. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcharsetprober.py +0 -91
  336. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +0 -54
  337. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcssm.py +0 -572
  338. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/metadata/__init__.py +0 -0
  339. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/metadata/languages.py +0 -310
  340. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sbcharsetprober.py +0 -145
  341. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +0 -83
  342. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sjisprober.py +0 -92
  343. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/universaldetector.py +0 -286
  344. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/utf8prober.py +0 -82
  345. package/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/version.py +0 -9
  346. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/__init__.py +0 -6
  347. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/ansi.py +0 -102
  348. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/ansitowin32.py +0 -258
  349. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/initialise.py +0 -80
  350. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/win32.py +0 -152
  351. package/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/winterm.py +0 -169
  352. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/__init__.py +0 -23
  353. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/__init__.py +0 -6
  354. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/misc.py +0 -41
  355. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/shutil.py +0 -764
  356. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +0 -84
  357. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +0 -786
  358. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/tarfile.py +0 -2607
  359. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/compat.py +0 -1122
  360. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/database.py +0 -1339
  361. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/index.py +0 -509
  362. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/locators.py +0 -1300
  363. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/manifest.py +0 -393
  364. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/markers.py +0 -147
  365. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/metadata.py +0 -1058
  366. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/resources.py +0 -358
  367. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/scripts.py +0 -429
  368. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  369. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
  370. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  371. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/util.py +0 -1969
  372. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/version.py +0 -739
  373. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  374. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
  375. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  376. package/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/wheel.py +0 -1053
  377. package/.venv/lib/python3.9/site-packages/pip/_vendor/distro.py +0 -1386
  378. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/__init__.py +0 -35
  379. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_ihatexml.py +0 -289
  380. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_inputstream.py +0 -918
  381. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_tokenizer.py +0 -1735
  382. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/__init__.py +0 -5
  383. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/_base.py +0 -40
  384. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/py.py +0 -67
  385. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_utils.py +0 -159
  386. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/constants.py +0 -2946
  387. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/__init__.py +0 -0
  388. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +0 -29
  389. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/base.py +0 -12
  390. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +0 -73
  391. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/lint.py +0 -93
  392. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +0 -207
  393. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +0 -916
  394. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/whitespace.py +0 -38
  395. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/html5parser.py +0 -2795
  396. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/serializer.py +0 -409
  397. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +0 -30
  398. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +0 -54
  399. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +0 -50
  400. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +0 -88
  401. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/base.py +0 -417
  402. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +0 -239
  403. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +0 -343
  404. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +0 -392
  405. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +0 -154
  406. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/base.py +0 -252
  407. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +0 -43
  408. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +0 -131
  409. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +0 -215
  410. package/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +0 -69
  411. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/__init__.py +0 -44
  412. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/codec.py +0 -117
  413. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/compat.py +0 -16
  414. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/core.py +0 -409
  415. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/idnadata.py +0 -2050
  416. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/intranges.py +0 -58
  417. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/package_data.py +0 -2
  418. package/.venv/lib/python3.9/site-packages/pip/_vendor/idna/uts46data.py +0 -8438
  419. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/__init__.py +0 -54
  420. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/_version.py +0 -1
  421. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/exceptions.py +0 -48
  422. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/ext.py +0 -193
  423. package/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/fallback.py +0 -1087
  424. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/__about__.py +0 -26
  425. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/__init__.py +0 -25
  426. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_manylinux.py +0 -301
  427. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_musllinux.py +0 -136
  428. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_structures.py +0 -67
  429. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/markers.py +0 -304
  430. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/requirements.py +0 -146
  431. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/specifiers.py +0 -828
  432. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/tags.py +0 -484
  433. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/utils.py +0 -136
  434. package/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/version.py +0 -504
  435. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/__init__.py +0 -6
  436. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/build.py +0 -127
  437. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/check.py +0 -207
  438. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/colorlog.py +0 -115
  439. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/compat.py +0 -51
  440. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/dirtools.py +0 -44
  441. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/envbuild.py +0 -171
  442. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/__init__.py +0 -17
  443. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py +0 -363
  444. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/meta.py +0 -92
  445. package/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/wrappers.py +0 -375
  446. package/.venv/lib/python3.9/site-packages/pip/_vendor/pkg_resources/__init__.py +0 -3296
  447. package/.venv/lib/python3.9/site-packages/pip/_vendor/pkg_resources/py31compat.py +0 -23
  448. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/__init__.py +0 -329
  449. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/__main__.py +0 -44
  450. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/android.py +0 -117
  451. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/api.py +0 -155
  452. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/macos.py +0 -62
  453. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/unix.py +0 -180
  454. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/version.py +0 -4
  455. package/.venv/lib/python3.9/site-packages/pip/_vendor/platformdirs/windows.py +0 -180
  456. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/__init__.py +0 -189
  457. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/bar.py +0 -93
  458. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/colors.py +0 -79
  459. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/counter.py +0 -47
  460. package/.venv/lib/python3.9/site-packages/pip/_vendor/progress/spinner.py +0 -45
  461. package/.venv/lib/python3.9/site-packages/pip/_vendor/pyparsing.py +0 -7107
  462. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/__init__.py +0 -154
  463. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/__version__.py +0 -14
  464. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/_internal_utils.py +0 -42
  465. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/adapters.py +0 -533
  466. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/api.py +0 -159
  467. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/auth.py +0 -305
  468. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/certs.py +0 -18
  469. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/compat.py +0 -76
  470. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/cookies.py +0 -549
  471. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/exceptions.py +0 -127
  472. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/help.py +0 -132
  473. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/hooks.py +0 -34
  474. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/models.py +0 -966
  475. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/packages.py +0 -16
  476. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/sessions.py +0 -781
  477. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/status_codes.py +0 -123
  478. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/structures.py +0 -105
  479. package/.venv/lib/python3.9/site-packages/pip/_vendor/requests/utils.py +0 -1013
  480. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/__init__.py +0 -26
  481. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  482. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +0 -6
  483. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/providers.py +0 -133
  484. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/reporters.py +0 -37
  485. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py +0 -483
  486. package/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.py +0 -165
  487. package/.venv/lib/python3.9/site-packages/pip/_vendor/six.py +0 -998
  488. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/__init__.py +0 -517
  489. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/_asyncio.py +0 -92
  490. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/_utils.py +0 -68
  491. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/after.py +0 -46
  492. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/before.py +0 -41
  493. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/before_sleep.py +0 -58
  494. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/nap.py +0 -43
  495. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/retry.py +0 -213
  496. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/stop.py +0 -96
  497. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/tornadoweb.py +0 -59
  498. package/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/wait.py +0 -191
  499. package/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/__init__.py +0 -6
  500. package/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/_parser.py +0 -703
  501. package/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/_re.py +0 -83
  502. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/__init__.py +0 -85
  503. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/_collections.py +0 -337
  504. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/_version.py +0 -2
  505. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/connection.py +0 -569
  506. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/connectionpool.py +0 -1078
  507. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  508. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +0 -36
  509. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  510. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +0 -519
  511. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +0 -397
  512. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/appengine.py +0 -314
  513. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +0 -130
  514. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +0 -511
  515. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +0 -922
  516. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/socks.py +0 -216
  517. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/exceptions.py +0 -323
  518. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/fields.py +0 -274
  519. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/filepost.py +0 -98
  520. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -5
  521. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  522. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +0 -51
  523. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/six.py +0 -1077
  524. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +0 -24
  525. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +0 -160
  526. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/poolmanager.py +0 -536
  527. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/request.py +0 -170
  528. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/response.py +0 -821
  529. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/__init__.py +0 -49
  530. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/connection.py +0 -150
  531. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/proxy.py +0 -57
  532. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/queue.py +0 -22
  533. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/request.py +0 -143
  534. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/response.py +0 -107
  535. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/retry.py +0 -602
  536. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/ssl_.py +0 -495
  537. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/ssltransport.py +0 -221
  538. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/timeout.py +0 -268
  539. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/url.py +0 -432
  540. package/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/wait.py +0 -153
  541. package/.venv/lib/python3.9/site-packages/pip/_vendor/vendor.txt +0 -22
  542. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/__init__.py +0 -342
  543. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/labels.py +0 -231
  544. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/mklabels.py +0 -59
  545. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/tests.py +0 -153
  546. package/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/x_user_defined.py +0 -325
  547. package/.venv/lib/python3.9/site-packages/pip/py.typed +0 -4
  548. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/INSTALLER +0 -1
  549. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/LICENSE.txt +0 -20
  550. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/METADATA +0 -93
  551. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/RECORD +0 -819
  552. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/REQUESTED +0 -0
  553. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/WHEEL +0 -5
  554. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/entry_points.txt +0 -5
  555. package/.venv/lib/python3.9/site-packages/pip-21.3.1.dist-info/top_level.txt +0 -1
  556. package/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py +0 -3303
  557. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/__init__.py +0 -0
  558. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/appdirs.py +0 -608
  559. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__about__.py +0 -26
  560. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__init__.py +0 -25
  561. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_manylinux.py +0 -301
  562. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_musllinux.py +0 -136
  563. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_structures.py +0 -67
  564. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py +0 -304
  565. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/requirements.py +0 -146
  566. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/specifiers.py +0 -828
  567. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/tags.py +0 -484
  568. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/utils.py +0 -136
  569. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py +0 -504
  570. package/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/pyparsing.py +0 -5742
  571. package/.venv/lib/python3.9/site-packages/pkg_resources/extern/__init__.py +0 -73
  572. package/.venv/lib/python3.9/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +0 -6
  573. package/.venv/lib/python3.9/site-packages/setuptools/__init__.py +0 -244
  574. package/.venv/lib/python3.9/site-packages/setuptools/_deprecation_warning.py +0 -7
  575. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/__init__.py +0 -24
  576. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/_collections.py +0 -56
  577. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/_msvccompiler.py +0 -561
  578. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/archive_util.py +0 -256
  579. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/bcppcompiler.py +0 -393
  580. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/ccompiler.py +0 -1123
  581. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/cmd.py +0 -403
  582. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/__init__.py +0 -31
  583. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist.py +0 -143
  584. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_dumb.py +0 -123
  585. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_msi.py +0 -749
  586. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_rpm.py +0 -579
  587. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_wininst.py +0 -377
  588. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build.py +0 -157
  589. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_clib.py +0 -209
  590. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_ext.py +0 -755
  591. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_py.py +0 -392
  592. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_scripts.py +0 -152
  593. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/check.py +0 -148
  594. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/clean.py +0 -76
  595. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/config.py +0 -344
  596. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install.py +0 -775
  597. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_data.py +0 -79
  598. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_egg_info.py +0 -84
  599. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_headers.py +0 -47
  600. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_lib.py +0 -217
  601. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_scripts.py +0 -60
  602. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/py37compat.py +0 -30
  603. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/register.py +0 -304
  604. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py +0 -494
  605. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/upload.py +0 -214
  606. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/config.py +0 -130
  607. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/core.py +0 -249
  608. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/cygwinccompiler.py +0 -362
  609. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/debug.py +0 -5
  610. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/dep_util.py +0 -92
  611. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/dir_util.py +0 -210
  612. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/dist.py +0 -1257
  613. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/errors.py +0 -97
  614. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/extension.py +0 -240
  615. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/fancy_getopt.py +0 -457
  616. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/file_util.py +0 -238
  617. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/filelist.py +0 -355
  618. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/log.py +0 -81
  619. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/msvc9compiler.py +0 -788
  620. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/msvccompiler.py +0 -643
  621. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/py35compat.py +0 -19
  622. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/py38compat.py +0 -7
  623. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/spawn.py +0 -106
  624. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/sysconfig.py +0 -567
  625. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/text_file.py +0 -286
  626. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/unixccompiler.py +0 -325
  627. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/util.py +0 -548
  628. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/version.py +0 -363
  629. package/.venv/lib/python3.9/site-packages/setuptools/_distutils/versionpredicate.py +0 -169
  630. package/.venv/lib/python3.9/site-packages/setuptools/_imp.py +0 -82
  631. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/__init__.py +0 -0
  632. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/__init__.py +0 -4
  633. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/more.py +0 -3825
  634. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/recipes.py +0 -620
  635. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/ordered_set.py +0 -488
  636. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/__about__.py +0 -26
  637. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/__init__.py +0 -25
  638. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_manylinux.py +0 -301
  639. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_musllinux.py +0 -136
  640. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_structures.py +0 -67
  641. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/markers.py +0 -304
  642. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/requirements.py +0 -146
  643. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/specifiers.py +0 -828
  644. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/tags.py +0 -484
  645. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/utils.py +0 -136
  646. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/version.py +0 -504
  647. package/.venv/lib/python3.9/site-packages/setuptools/_vendor/pyparsing.py +0 -5742
  648. package/.venv/lib/python3.9/site-packages/setuptools/archive_util.py +0 -205
  649. package/.venv/lib/python3.9/site-packages/setuptools/build_meta.py +0 -290
  650. package/.venv/lib/python3.9/site-packages/setuptools/cli-32.exe +0 -0
  651. package/.venv/lib/python3.9/site-packages/setuptools/cli-64.exe +0 -0
  652. package/.venv/lib/python3.9/site-packages/setuptools/cli-arm64.exe +0 -0
  653. package/.venv/lib/python3.9/site-packages/setuptools/cli.exe +0 -0
  654. package/.venv/lib/python3.9/site-packages/setuptools/command/__init__.py +0 -8
  655. package/.venv/lib/python3.9/site-packages/setuptools/command/alias.py +0 -78
  656. package/.venv/lib/python3.9/site-packages/setuptools/command/bdist_egg.py +0 -456
  657. package/.venv/lib/python3.9/site-packages/setuptools/command/bdist_rpm.py +0 -40
  658. package/.venv/lib/python3.9/site-packages/setuptools/command/build_clib.py +0 -101
  659. package/.venv/lib/python3.9/site-packages/setuptools/command/build_ext.py +0 -328
  660. package/.venv/lib/python3.9/site-packages/setuptools/command/build_py.py +0 -242
  661. package/.venv/lib/python3.9/site-packages/setuptools/command/develop.py +0 -193
  662. package/.venv/lib/python3.9/site-packages/setuptools/command/dist_info.py +0 -36
  663. package/.venv/lib/python3.9/site-packages/setuptools/command/easy_install.py +0 -2304
  664. package/.venv/lib/python3.9/site-packages/setuptools/command/egg_info.py +0 -755
  665. package/.venv/lib/python3.9/site-packages/setuptools/command/install.py +0 -132
  666. package/.venv/lib/python3.9/site-packages/setuptools/command/install_egg_info.py +0 -62
  667. package/.venv/lib/python3.9/site-packages/setuptools/command/install_lib.py +0 -122
  668. package/.venv/lib/python3.9/site-packages/setuptools/command/install_scripts.py +0 -69
  669. package/.venv/lib/python3.9/site-packages/setuptools/command/launcher manifest.xml +0 -15
  670. package/.venv/lib/python3.9/site-packages/setuptools/command/py36compat.py +0 -134
  671. package/.venv/lib/python3.9/site-packages/setuptools/command/register.py +0 -18
  672. package/.venv/lib/python3.9/site-packages/setuptools/command/rotate.py +0 -64
  673. package/.venv/lib/python3.9/site-packages/setuptools/command/saveopts.py +0 -22
  674. package/.venv/lib/python3.9/site-packages/setuptools/command/sdist.py +0 -196
  675. package/.venv/lib/python3.9/site-packages/setuptools/command/setopt.py +0 -149
  676. package/.venv/lib/python3.9/site-packages/setuptools/command/test.py +0 -252
  677. package/.venv/lib/python3.9/site-packages/setuptools/command/upload.py +0 -17
  678. package/.venv/lib/python3.9/site-packages/setuptools/command/upload_docs.py +0 -202
  679. package/.venv/lib/python3.9/site-packages/setuptools/config.py +0 -751
  680. package/.venv/lib/python3.9/site-packages/setuptools/dep_util.py +0 -25
  681. package/.venv/lib/python3.9/site-packages/setuptools/depends.py +0 -176
  682. package/.venv/lib/python3.9/site-packages/setuptools/dist.py +0 -1156
  683. package/.venv/lib/python3.9/site-packages/setuptools/errors.py +0 -40
  684. package/.venv/lib/python3.9/site-packages/setuptools/extension.py +0 -55
  685. package/.venv/lib/python3.9/site-packages/setuptools/extern/__init__.py +0 -73
  686. package/.venv/lib/python3.9/site-packages/setuptools/glob.py +0 -167
  687. package/.venv/lib/python3.9/site-packages/setuptools/gui-32.exe +0 -0
  688. package/.venv/lib/python3.9/site-packages/setuptools/gui-64.exe +0 -0
  689. package/.venv/lib/python3.9/site-packages/setuptools/gui-arm64.exe +0 -0
  690. package/.venv/lib/python3.9/site-packages/setuptools/gui.exe +0 -0
  691. package/.venv/lib/python3.9/site-packages/setuptools/installer.py +0 -104
  692. package/.venv/lib/python3.9/site-packages/setuptools/launch.py +0 -36
  693. package/.venv/lib/python3.9/site-packages/setuptools/logging.py +0 -30
  694. package/.venv/lib/python3.9/site-packages/setuptools/monkey.py +0 -177
  695. package/.venv/lib/python3.9/site-packages/setuptools/msvc.py +0 -1805
  696. package/.venv/lib/python3.9/site-packages/setuptools/namespaces.py +0 -107
  697. package/.venv/lib/python3.9/site-packages/setuptools/package_index.py +0 -1127
  698. package/.venv/lib/python3.9/site-packages/setuptools/py34compat.py +0 -13
  699. package/.venv/lib/python3.9/site-packages/setuptools/sandbox.py +0 -530
  700. package/.venv/lib/python3.9/site-packages/setuptools/script (dev).tmpl +0 -6
  701. package/.venv/lib/python3.9/site-packages/setuptools/script.tmpl +0 -3
  702. package/.venv/lib/python3.9/site-packages/setuptools/tests/integration/__init__.py +0 -0
  703. package/.venv/lib/python3.9/site-packages/setuptools/tests/integration/helpers.py +0 -61
  704. package/.venv/lib/python3.9/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +0 -218
  705. package/.venv/lib/python3.9/site-packages/setuptools/unicode_utils.py +0 -42
  706. package/.venv/lib/python3.9/site-packages/setuptools/version.py +0 -6
  707. package/.venv/lib/python3.9/site-packages/setuptools/wheel.py +0 -213
  708. package/.venv/lib/python3.9/site-packages/setuptools/windows_support.py +0 -29
  709. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/INSTALLER +0 -1
  710. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/LICENSE +0 -19
  711. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/METADATA +0 -142
  712. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/RECORD +0 -308
  713. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/REQUESTED +0 -0
  714. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/WHEEL +0 -5
  715. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/entry_points.txt +0 -56
  716. package/.venv/lib/python3.9/site-packages/setuptools-60.5.0.dist-info/top_level.txt +0 -3
  717. package/.venv/pyvenv.cfg +0 -3
  718. package/.vscode/launch.json +0 -62
  719. 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
- """