quarchpy 2.1.14.dev3__py2.py3-none-any.whl → 2.1.14.dev5__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. quarchpy/.idea/.name +1 -0
  2. quarchpy/.idea/workspace.xml +70 -11
  3. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  4. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  5. quarchpy/_version.py +1 -1
  6. quarchpy/_version.py.bak +1 -0
  7. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  8. quarchpy/connection_specific/connection_QIS.py +22 -9
  9. quarchpy/connection_specific/connection_QIS.py.bak +35 -17
  10. quarchpy/connection_specific/connection_ReST.py +26 -16
  11. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  12. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  13. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  14. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  15. quarchpy/device/scanDevices.py +2 -4
  16. quarchpy/device/scanDevices.py.bak +657 -0
  17. quarchpy/qis/qisFuncs.py +25 -42
  18. quarchpy/qis/qisFuncs.py.bak +213 -0
  19. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  20. quarchpy/qps/qpsFuncs.py +18 -22
  21. quarchpy/qps/qpsFuncs.py.bak +224 -0
  22. quarchpy/venv/.gitignore +2 -0
  23. quarchpy/venv/Include/Python-ast.h +535 -0
  24. quarchpy/venv/Include/Python.h +181 -0
  25. quarchpy/venv/Include/abstract.h +1396 -0
  26. quarchpy/venv/Include/asdl.h +45 -0
  27. quarchpy/venv/Include/ast.h +13 -0
  28. quarchpy/venv/Include/bitset.h +32 -0
  29. quarchpy/venv/Include/boolobject.h +36 -0
  30. quarchpy/venv/Include/bufferobject.h +33 -0
  31. quarchpy/venv/Include/bytearrayobject.h +57 -0
  32. quarchpy/venv/Include/bytes_methods.h +75 -0
  33. quarchpy/venv/Include/bytesobject.h +27 -0
  34. quarchpy/venv/Include/cStringIO.h +73 -0
  35. quarchpy/venv/Include/cellobject.h +28 -0
  36. quarchpy/venv/Include/ceval.h +154 -0
  37. quarchpy/venv/Include/classobject.h +83 -0
  38. quarchpy/venv/Include/cobject.h +89 -0
  39. quarchpy/venv/Include/code.h +116 -0
  40. quarchpy/venv/Include/codecs.h +212 -0
  41. quarchpy/venv/Include/compile.h +40 -0
  42. quarchpy/venv/Include/complexobject.h +66 -0
  43. quarchpy/venv/Include/datetime.h +239 -0
  44. quarchpy/venv/Include/descrobject.h +94 -0
  45. quarchpy/venv/Include/dictobject.h +160 -0
  46. quarchpy/venv/Include/dtoa.h +15 -0
  47. quarchpy/venv/Include/enumobject.h +17 -0
  48. quarchpy/venv/Include/errcode.h +37 -0
  49. quarchpy/venv/Include/eval.h +25 -0
  50. quarchpy/venv/Include/fileobject.h +97 -0
  51. quarchpy/venv/Include/floatobject.h +140 -0
  52. quarchpy/venv/Include/frameobject.h +89 -0
  53. quarchpy/venv/Include/funcobject.h +76 -0
  54. quarchpy/venv/Include/genobject.h +40 -0
  55. quarchpy/venv/Include/graminit.h +87 -0
  56. quarchpy/venv/Include/grammar.h +94 -0
  57. quarchpy/venv/Include/import.h +71 -0
  58. quarchpy/venv/Include/intobject.h +84 -0
  59. quarchpy/venv/Include/intrcheck.h +15 -0
  60. quarchpy/venv/Include/iterobject.h +23 -0
  61. quarchpy/venv/Include/listobject.h +68 -0
  62. quarchpy/venv/Include/longintrepr.h +103 -0
  63. quarchpy/venv/Include/longobject.h +135 -0
  64. quarchpy/venv/Include/marshal.h +25 -0
  65. quarchpy/venv/Include/memoryobject.h +74 -0
  66. quarchpy/venv/Include/metagrammar.h +18 -0
  67. quarchpy/venv/Include/methodobject.h +93 -0
  68. quarchpy/venv/Include/modsupport.h +134 -0
  69. quarchpy/venv/Include/moduleobject.h +24 -0
  70. quarchpy/venv/Include/node.h +41 -0
  71. quarchpy/venv/Include/object.h +1046 -0
  72. quarchpy/venv/Include/objimpl.h +369 -0
  73. quarchpy/venv/Include/opcode.h +171 -0
  74. quarchpy/venv/Include/osdefs.h +63 -0
  75. quarchpy/venv/Include/parsetok.h +64 -0
  76. quarchpy/venv/Include/patchlevel.h +43 -0
  77. quarchpy/venv/Include/pgen.h +18 -0
  78. quarchpy/venv/Include/pgenheaders.h +43 -0
  79. quarchpy/venv/Include/py_curses.h +177 -0
  80. quarchpy/venv/Include/pyarena.h +62 -0
  81. quarchpy/venv/Include/pycapsule.h +56 -0
  82. quarchpy/venv/Include/pyconfig.h +770 -0
  83. quarchpy/venv/Include/pyctype.h +31 -0
  84. quarchpy/venv/Include/pydebug.h +41 -0
  85. quarchpy/venv/Include/pyerrors.h +329 -0
  86. quarchpy/venv/Include/pyexpat.h +50 -0
  87. quarchpy/venv/Include/pyfpe.h +176 -0
  88. quarchpy/venv/Include/pygetopt.h +18 -0
  89. quarchpy/venv/Include/pymacconfig.h +102 -0
  90. quarchpy/venv/Include/pymactoolbox.h +232 -0
  91. quarchpy/venv/Include/pymath.h +214 -0
  92. quarchpy/venv/Include/pymem.h +122 -0
  93. quarchpy/venv/Include/pyport.h +950 -0
  94. quarchpy/venv/Include/pystate.h +200 -0
  95. quarchpy/venv/Include/pystrcmp.h +23 -0
  96. quarchpy/venv/Include/pystrtod.h +45 -0
  97. quarchpy/venv/Include/pythonrun.h +181 -0
  98. quarchpy/venv/Include/pythread.h +41 -0
  99. quarchpy/venv/Include/rangeobject.h +28 -0
  100. quarchpy/venv/Include/setobject.h +99 -0
  101. quarchpy/venv/Include/sliceobject.h +50 -0
  102. quarchpy/venv/Include/stringobject.h +210 -0
  103. quarchpy/venv/Include/structmember.h +99 -0
  104. quarchpy/venv/Include/structseq.h +41 -0
  105. quarchpy/venv/Include/symtable.h +98 -0
  106. quarchpy/venv/Include/sysmodule.h +31 -0
  107. quarchpy/venv/Include/timefuncs.h +26 -0
  108. quarchpy/venv/Include/token.h +85 -0
  109. quarchpy/venv/Include/traceback.h +31 -0
  110. quarchpy/venv/Include/tupleobject.h +61 -0
  111. quarchpy/venv/Include/ucnhash.h +33 -0
  112. quarchpy/venv/Include/unicodeobject.h +1413 -0
  113. quarchpy/venv/Include/warnings.h +23 -0
  114. quarchpy/venv/Include/weakrefobject.h +82 -0
  115. quarchpy/venv/Lib/os.py +742 -0
  116. quarchpy/venv/Lib/os.pyc +0 -0
  117. quarchpy/venv/Lib/site-packages/_virtualenv.pth +1 -0
  118. quarchpy/venv/Lib/site-packages/_virtualenv.py +130 -0
  119. quarchpy/venv/Lib/site-packages/_virtualenv.pyc +0 -0
  120. quarchpy/venv/Lib/site-packages/easy_install.py +5 -0
  121. quarchpy/venv/Lib/site-packages/pip/__init__.py +18 -0
  122. quarchpy/venv/Lib/site-packages/pip/__main__.py +26 -0
  123. quarchpy/venv/Lib/site-packages/pip/_internal/__init__.py +17 -0
  124. quarchpy/venv/Lib/site-packages/pip/_internal/build_env.py +242 -0
  125. quarchpy/venv/Lib/site-packages/pip/_internal/cache.py +346 -0
  126. quarchpy/venv/Lib/site-packages/pip/_internal/cli/__init__.py +4 -0
  127. quarchpy/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +164 -0
  128. quarchpy/venv/Lib/site-packages/pip/_internal/cli/base_command.py +260 -0
  129. quarchpy/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +971 -0
  130. quarchpy/venv/Lib/site-packages/pip/_internal/cli/command_context.py +36 -0
  131. quarchpy/venv/Lib/site-packages/pip/_internal/cli/main.py +75 -0
  132. quarchpy/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +96 -0
  133. quarchpy/venv/Lib/site-packages/pip/_internal/cli/parser.py +285 -0
  134. quarchpy/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +280 -0
  135. quarchpy/venv/Lib/site-packages/pip/_internal/cli/req_command.py +436 -0
  136. quarchpy/venv/Lib/site-packages/pip/_internal/cli/spinners.py +173 -0
  137. quarchpy/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +8 -0
  138. quarchpy/venv/Lib/site-packages/pip/_internal/commands/__init__.py +123 -0
  139. quarchpy/venv/Lib/site-packages/pip/_internal/commands/cache.py +234 -0
  140. quarchpy/venv/Lib/site-packages/pip/_internal/commands/check.py +51 -0
  141. quarchpy/venv/Lib/site-packages/pip/_internal/commands/completion.py +98 -0
  142. quarchpy/venv/Lib/site-packages/pip/_internal/commands/configuration.py +280 -0
  143. quarchpy/venv/Lib/site-packages/pip/_internal/commands/debug.py +230 -0
  144. quarchpy/venv/Lib/site-packages/pip/_internal/commands/download.py +143 -0
  145. quarchpy/venv/Lib/site-packages/pip/_internal/commands/freeze.py +116 -0
  146. quarchpy/venv/Lib/site-packages/pip/_internal/commands/hash.py +63 -0
  147. quarchpy/venv/Lib/site-packages/pip/_internal/commands/help.py +46 -0
  148. quarchpy/venv/Lib/site-packages/pip/_internal/commands/install.py +737 -0
  149. quarchpy/venv/Lib/site-packages/pip/_internal/commands/list.py +327 -0
  150. quarchpy/venv/Lib/site-packages/pip/_internal/commands/search.py +169 -0
  151. quarchpy/venv/Lib/site-packages/pip/_internal/commands/show.py +186 -0
  152. quarchpy/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +95 -0
  153. quarchpy/venv/Lib/site-packages/pip/_internal/commands/wheel.py +198 -0
  154. quarchpy/venv/Lib/site-packages/pip/_internal/configuration.py +407 -0
  155. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +24 -0
  156. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/base.py +46 -0
  157. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/installed.py +25 -0
  158. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +105 -0
  159. quarchpy/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +37 -0
  160. quarchpy/venv/Lib/site-packages/pip/_internal/exceptions.py +391 -0
  161. quarchpy/venv/Lib/site-packages/pip/_internal/index/__init__.py +2 -0
  162. quarchpy/venv/Lib/site-packages/pip/_internal/index/collector.py +667 -0
  163. quarchpy/venv/Lib/site-packages/pip/_internal/index/package_finder.py +1015 -0
  164. quarchpy/venv/Lib/site-packages/pip/_internal/locations.py +193 -0
  165. quarchpy/venv/Lib/site-packages/pip/_internal/main.py +16 -0
  166. quarchpy/venv/Lib/site-packages/pip/_internal/models/__init__.py +2 -0
  167. quarchpy/venv/Lib/site-packages/pip/_internal/models/candidate.py +39 -0
  168. quarchpy/venv/Lib/site-packages/pip/_internal/models/direct_url.py +243 -0
  169. quarchpy/venv/Lib/site-packages/pip/_internal/models/format_control.py +92 -0
  170. quarchpy/venv/Lib/site-packages/pip/_internal/models/index.py +34 -0
  171. quarchpy/venv/Lib/site-packages/pip/_internal/models/link.py +246 -0
  172. quarchpy/venv/Lib/site-packages/pip/_internal/models/scheme.py +31 -0
  173. quarchpy/venv/Lib/site-packages/pip/_internal/models/search_scope.py +135 -0
  174. quarchpy/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +50 -0
  175. quarchpy/venv/Lib/site-packages/pip/_internal/models/target_python.py +117 -0
  176. quarchpy/venv/Lib/site-packages/pip/_internal/models/wheel.py +78 -0
  177. quarchpy/venv/Lib/site-packages/pip/_internal/network/__init__.py +2 -0
  178. quarchpy/venv/Lib/site-packages/pip/_internal/network/auth.py +310 -0
  179. quarchpy/venv/Lib/site-packages/pip/_internal/network/cache.py +79 -0
  180. quarchpy/venv/Lib/site-packages/pip/_internal/network/download.py +202 -0
  181. quarchpy/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +231 -0
  182. quarchpy/venv/Lib/site-packages/pip/_internal/network/session.py +428 -0
  183. quarchpy/venv/Lib/site-packages/pip/_internal/network/utils.py +97 -0
  184. quarchpy/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +53 -0
  185. quarchpy/venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  186. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  187. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  188. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +77 -0
  189. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +47 -0
  190. quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +113 -0
  191. quarchpy/venv/Lib/site-packages/pip/_internal/operations/check.py +155 -0
  192. quarchpy/venv/Lib/site-packages/pip/_internal/operations/freeze.py +277 -0
  193. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +2 -0
  194. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +52 -0
  195. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +130 -0
  196. quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +846 -0
  197. quarchpy/venv/Lib/site-packages/pip/_internal/operations/prepare.py +608 -0
  198. quarchpy/venv/Lib/site-packages/pip/_internal/pyproject.py +196 -0
  199. quarchpy/venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  200. quarchpy/venv/Lib/site-packages/pip/_internal/req/constructors.py +476 -0
  201. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_file.py +574 -0
  202. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_install.py +907 -0
  203. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_set.py +204 -0
  204. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +151 -0
  205. quarchpy/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +657 -0
  206. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  207. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/base.py +21 -0
  208. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  209. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +473 -0
  210. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  211. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +156 -0
  212. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +604 -0
  213. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +504 -0
  214. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +101 -0
  215. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +174 -0
  216. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +84 -0
  217. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +201 -0
  218. quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +296 -0
  219. quarchpy/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +197 -0
  220. quarchpy/venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  221. quarchpy/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +44 -0
  222. quarchpy/venv/Lib/site-packages/pip/_internal/utils/compat.py +293 -0
  223. quarchpy/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +178 -0
  224. quarchpy/venv/Lib/site-packages/pip/_internal/utils/datetime.py +14 -0
  225. quarchpy/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +104 -0
  226. quarchpy/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +126 -0
  227. quarchpy/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +48 -0
  228. quarchpy/venv/Lib/site-packages/pip/_internal/utils/encoding.py +41 -0
  229. quarchpy/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +31 -0
  230. quarchpy/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +224 -0
  231. quarchpy/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +26 -0
  232. quarchpy/venv/Lib/site-packages/pip/_internal/utils/glibc.py +98 -0
  233. quarchpy/venv/Lib/site-packages/pip/_internal/utils/hashes.py +169 -0
  234. quarchpy/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +36 -0
  235. quarchpy/venv/Lib/site-packages/pip/_internal/utils/logging.py +399 -0
  236. quarchpy/venv/Lib/site-packages/pip/_internal/utils/misc.py +962 -0
  237. quarchpy/venv/Lib/site-packages/pip/_internal/utils/models.py +44 -0
  238. quarchpy/venv/Lib/site-packages/pip/_internal/utils/packaging.py +95 -0
  239. quarchpy/venv/Lib/site-packages/pip/_internal/utils/parallel.py +107 -0
  240. quarchpy/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +44 -0
  241. quarchpy/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +181 -0
  242. quarchpy/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +299 -0
  243. quarchpy/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +284 -0
  244. quarchpy/venv/Lib/site-packages/pip/_internal/utils/typing.py +38 -0
  245. quarchpy/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +281 -0
  246. quarchpy/venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  247. quarchpy/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +119 -0
  248. quarchpy/venv/Lib/site-packages/pip/_internal/utils/wheel.py +225 -0
  249. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  250. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +123 -0
  251. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/git.py +454 -0
  252. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +172 -0
  253. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +340 -0
  254. quarchpy/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +735 -0
  255. quarchpy/venv/Lib/site-packages/pip/_internal/wheel_builder.py +362 -0
  256. quarchpy/venv/Lib/site-packages/pip/_vendor/__init__.py +114 -0
  257. quarchpy/venv/Lib/site-packages/pip/_vendor/appdirs.py +633 -0
  258. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +11 -0
  259. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +57 -0
  260. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +133 -0
  261. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +39 -0
  262. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +2 -0
  263. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +146 -0
  264. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +33 -0
  265. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +29 -0
  266. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +376 -0
  267. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +80 -0
  268. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +135 -0
  269. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +188 -0
  270. quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +29 -0
  271. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +3 -0
  272. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  273. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +4606 -0
  274. quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/core.py +60 -0
  275. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +39 -0
  276. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
  277. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
  278. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +233 -0
  279. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
  280. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +145 -0
  281. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +1 -0
  282. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +85 -0
  283. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +88 -0
  284. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +34 -0
  285. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
  286. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +76 -0
  287. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +101 -0
  288. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +246 -0
  289. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +92 -0
  290. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +195 -0
  291. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
  292. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +387 -0
  293. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +46 -0
  294. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +283 -0
  295. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +46 -0
  296. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +292 -0
  297. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
  298. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +233 -0
  299. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +228 -0
  300. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py +333 -0
  301. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +225 -0
  302. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +200 -0
  303. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +225 -0
  304. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +199 -0
  305. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +193 -0
  306. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +145 -0
  307. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +91 -0
  308. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +54 -0
  309. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +572 -0
  310. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +132 -0
  311. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +73 -0
  312. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +92 -0
  313. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +286 -0
  314. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
  315. quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/version.py +9 -0
  316. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +6 -0
  317. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +102 -0
  318. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +258 -0
  319. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +80 -0
  320. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +152 -0
  321. quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +169 -0
  322. quarchpy/venv/Lib/site-packages/pip/_vendor/contextlib2.py +518 -0
  323. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +23 -0
  324. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +6 -0
  325. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +41 -0
  326. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +764 -0
  327. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +84 -0
  328. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +786 -0
  329. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +2607 -0
  330. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1120 -0
  331. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/database.py +1339 -0
  332. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/index.py +516 -0
  333. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +1302 -0
  334. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +393 -0
  335. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +131 -0
  336. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +1056 -0
  337. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +355 -0
  338. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +419 -0
  339. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  340. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  341. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/util.py +1761 -0
  342. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/version.py +736 -0
  343. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  344. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  345. quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +1018 -0
  346. quarchpy/venv/Lib/site-packages/pip/_vendor/distro.py +1230 -0
  347. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +35 -0
  348. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +289 -0
  349. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +918 -0
  350. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +1735 -0
  351. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +5 -0
  352. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +40 -0
  353. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +67 -0
  354. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +159 -0
  355. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +2946 -0
  356. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +0 -0
  357. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +29 -0
  358. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +12 -0
  359. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +73 -0
  360. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +93 -0
  361. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +207 -0
  362. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +916 -0
  363. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +38 -0
  364. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +2795 -0
  365. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +409 -0
  366. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +30 -0
  367. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +54 -0
  368. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +50 -0
  369. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +88 -0
  370. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +417 -0
  371. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +239 -0
  372. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +343 -0
  373. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +392 -0
  374. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +154 -0
  375. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +252 -0
  376. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +43 -0
  377. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +131 -0
  378. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +215 -0
  379. quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +69 -0
  380. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +2 -0
  381. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/codec.py +118 -0
  382. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/compat.py +12 -0
  383. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/core.py +400 -0
  384. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +2050 -0
  385. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +53 -0
  386. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +2 -0
  387. quarchpy/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8357 -0
  388. quarchpy/venv/Lib/site-packages/pip/_vendor/ipaddress.py +2420 -0
  389. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +54 -0
  390. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +1 -0
  391. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  392. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +191 -0
  393. quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +1063 -0
  394. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +27 -0
  395. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +26 -0
  396. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +38 -0
  397. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +86 -0
  398. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +48 -0
  399. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +328 -0
  400. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +151 -0
  401. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +864 -0
  402. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +852 -0
  403. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +67 -0
  404. quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/version.py +556 -0
  405. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +6 -0
  406. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/_in_process.py +280 -0
  407. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/build.py +124 -0
  408. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/check.py +203 -0
  409. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +115 -0
  410. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +34 -0
  411. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +44 -0
  412. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +167 -0
  413. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +92 -0
  414. quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +327 -0
  415. quarchpy/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3296 -0
  416. quarchpy/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +23 -0
  417. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +177 -0
  418. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/bar.py +91 -0
  419. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/counter.py +41 -0
  420. quarchpy/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +43 -0
  421. quarchpy/venv/Lib/site-packages/pip/_vendor/pyparsing.py +7107 -0
  422. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +144 -0
  423. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  424. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +42 -0
  425. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +533 -0
  426. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/api.py +161 -0
  427. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/auth.py +305 -0
  428. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/certs.py +18 -0
  429. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/compat.py +76 -0
  430. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +549 -0
  431. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +123 -0
  432. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/help.py +119 -0
  433. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +34 -0
  434. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/models.py +956 -0
  435. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/packages.py +16 -0
  436. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +781 -0
  437. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +123 -0
  438. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/structures.py +105 -0
  439. quarchpy/venv/Lib/site-packages/pip/_vendor/requests/utils.py +988 -0
  440. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
  441. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  442. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
  443. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +119 -0
  444. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +37 -0
  445. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +454 -0
  446. quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +149 -0
  447. quarchpy/venv/Lib/site-packages/pip/_vendor/retrying.py +267 -0
  448. quarchpy/venv/Lib/site-packages/pip/_vendor/six.py +982 -0
  449. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +25 -0
  450. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +1057 -0
  451. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +304 -0
  452. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +15 -0
  453. quarchpy/venv/Lib/site-packages/pip/_vendor/toml/tz.py +24 -0
  454. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +85 -0
  455. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
  456. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  457. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +535 -0
  458. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1067 -0
  459. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  460. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  461. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  462. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  463. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +396 -0
  464. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  465. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +121 -0
  466. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +509 -0
  467. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  468. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  469. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +313 -0
  470. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  471. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  472. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +5 -0
  473. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  474. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  475. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1021 -0
  476. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +22 -0
  477. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +160 -0
  478. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +536 -0
  479. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +170 -0
  480. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +821 -0
  481. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  482. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +150 -0
  483. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +56 -0
  484. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  485. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +143 -0
  486. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  487. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +601 -0
  488. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +474 -0
  489. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  490. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +268 -0
  491. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +430 -0
  492. quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +153 -0
  493. quarchpy/venv/Lib/site-packages/pip/_vendor/vendor.txt +24 -0
  494. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
  495. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +231 -0
  496. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
  497. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +153 -0
  498. quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
  499. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/INSTALLER +1 -0
  500. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/LICENSE.txt +20 -0
  501. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/METADATA +94 -0
  502. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/RECORD +812 -0
  503. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/WHEEL +6 -0
  504. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/entry_points.txt +5 -0
  505. quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/top_level.txt +1 -0
  506. quarchpy/venv/Lib/site-packages/pip-20.3.4.virtualenv +0 -0
  507. quarchpy/venv/Lib/site-packages/pkg_resources/__init__.py +3296 -0
  508. quarchpy/venv/Lib/site-packages/pkg_resources/__init__.pyc +0 -0
  509. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +0 -0
  510. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/__init__.pyc +0 -0
  511. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +608 -0
  512. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.pyc +0 -0
  513. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +21 -0
  514. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.pyc +0 -0
  515. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +14 -0
  516. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.pyc +0 -0
  517. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +30 -0
  518. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.pyc +0 -0
  519. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +68 -0
  520. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.pyc +0 -0
  521. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +301 -0
  522. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.pyc +0 -0
  523. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +127 -0
  524. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.pyc +0 -0
  525. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +774 -0
  526. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.pyc +0 -0
  527. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +14 -0
  528. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +393 -0
  529. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.pyc +0 -0
  530. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +5742 -0
  531. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.pyc +0 -0
  532. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/six.py +868 -0
  533. quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/six.pyc +0 -0
  534. quarchpy/venv/Lib/site-packages/pkg_resources/extern/__init__.py +73 -0
  535. quarchpy/venv/Lib/site-packages/pkg_resources/extern/__init__.pyc +0 -0
  536. quarchpy/venv/Lib/site-packages/pkg_resources/py31compat.py +23 -0
  537. quarchpy/venv/Lib/site-packages/pkg_resources/py31compat.pyc +0 -0
  538. quarchpy/venv/Lib/site-packages/setuptools/__init__.py +245 -0
  539. quarchpy/venv/Lib/site-packages/setuptools/_deprecation_warning.py +7 -0
  540. quarchpy/venv/Lib/site-packages/setuptools/_imp.py +73 -0
  541. quarchpy/venv/Lib/site-packages/setuptools/_vendor/__init__.py +0 -0
  542. quarchpy/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +488 -0
  543. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +27 -0
  544. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +26 -0
  545. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +31 -0
  546. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +68 -0
  547. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +296 -0
  548. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +138 -0
  549. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +749 -0
  550. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +404 -0
  551. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +57 -0
  552. quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +420 -0
  553. quarchpy/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +5742 -0
  554. quarchpy/venv/Lib/site-packages/setuptools/_vendor/six.py +868 -0
  555. quarchpy/venv/Lib/site-packages/setuptools/archive_util.py +173 -0
  556. quarchpy/venv/Lib/site-packages/setuptools/build_meta.py +264 -0
  557. quarchpy/venv/Lib/site-packages/setuptools/cli-32.exe +0 -0
  558. quarchpy/venv/Lib/site-packages/setuptools/cli-64.exe +0 -0
  559. quarchpy/venv/Lib/site-packages/setuptools/cli.exe +0 -0
  560. quarchpy/venv/Lib/site-packages/setuptools/command/__init__.py +17 -0
  561. quarchpy/venv/Lib/site-packages/setuptools/command/alias.py +80 -0
  562. quarchpy/venv/Lib/site-packages/setuptools/command/bdist_egg.py +502 -0
  563. quarchpy/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +43 -0
  564. quarchpy/venv/Lib/site-packages/setuptools/command/bdist_wininst.py +21 -0
  565. quarchpy/venv/Lib/site-packages/setuptools/command/build_clib.py +98 -0
  566. quarchpy/venv/Lib/site-packages/setuptools/command/build_ext.py +327 -0
  567. quarchpy/venv/Lib/site-packages/setuptools/command/build_py.py +270 -0
  568. quarchpy/venv/Lib/site-packages/setuptools/command/develop.py +221 -0
  569. quarchpy/venv/Lib/site-packages/setuptools/command/dist_info.py +36 -0
  570. quarchpy/venv/Lib/site-packages/setuptools/command/easy_install.py +2347 -0
  571. quarchpy/venv/Lib/site-packages/setuptools/command/egg_info.py +717 -0
  572. quarchpy/venv/Lib/site-packages/setuptools/command/install.py +125 -0
  573. quarchpy/venv/Lib/site-packages/setuptools/command/install_egg_info.py +62 -0
  574. quarchpy/venv/Lib/site-packages/setuptools/command/install_lib.py +121 -0
  575. quarchpy/venv/Lib/site-packages/setuptools/command/install_scripts.py +65 -0
  576. quarchpy/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +15 -0
  577. quarchpy/venv/Lib/site-packages/setuptools/command/py36compat.py +136 -0
  578. quarchpy/venv/Lib/site-packages/setuptools/command/register.py +18 -0
  579. quarchpy/venv/Lib/site-packages/setuptools/command/rotate.py +66 -0
  580. quarchpy/venv/Lib/site-packages/setuptools/command/saveopts.py +22 -0
  581. quarchpy/venv/Lib/site-packages/setuptools/command/sdist.py +252 -0
  582. quarchpy/venv/Lib/site-packages/setuptools/command/setopt.py +149 -0
  583. quarchpy/venv/Lib/site-packages/setuptools/command/test.py +279 -0
  584. quarchpy/venv/Lib/site-packages/setuptools/command/upload.py +17 -0
  585. quarchpy/venv/Lib/site-packages/setuptools/command/upload_docs.py +206 -0
  586. quarchpy/venv/Lib/site-packages/setuptools/config.py +659 -0
  587. quarchpy/venv/Lib/site-packages/setuptools/dep_util.py +23 -0
  588. quarchpy/venv/Lib/site-packages/setuptools/depends.py +176 -0
  589. quarchpy/venv/Lib/site-packages/setuptools/dist.py +1274 -0
  590. quarchpy/venv/Lib/site-packages/setuptools/errors.py +16 -0
  591. quarchpy/venv/Lib/site-packages/setuptools/extension.py +57 -0
  592. quarchpy/venv/Lib/site-packages/setuptools/extern/__init__.py +73 -0
  593. quarchpy/venv/Lib/site-packages/setuptools/glob.py +174 -0
  594. quarchpy/venv/Lib/site-packages/setuptools/gui-32.exe +0 -0
  595. quarchpy/venv/Lib/site-packages/setuptools/gui-64.exe +0 -0
  596. quarchpy/venv/Lib/site-packages/setuptools/gui.exe +0 -0
  597. quarchpy/venv/Lib/site-packages/setuptools/installer.py +150 -0
  598. quarchpy/venv/Lib/site-packages/setuptools/launch.py +35 -0
  599. quarchpy/venv/Lib/site-packages/setuptools/lib2to3_ex.py +62 -0
  600. quarchpy/venv/Lib/site-packages/setuptools/monkey.py +179 -0
  601. quarchpy/venv/Lib/site-packages/setuptools/msvc.py +1679 -0
  602. quarchpy/venv/Lib/site-packages/setuptools/namespaces.py +107 -0
  603. quarchpy/venv/Lib/site-packages/setuptools/package_index.py +1136 -0
  604. quarchpy/venv/Lib/site-packages/setuptools/py27compat.py +60 -0
  605. quarchpy/venv/Lib/site-packages/setuptools/py31compat.py +32 -0
  606. quarchpy/venv/Lib/site-packages/setuptools/py33compat.py +59 -0
  607. quarchpy/venv/Lib/site-packages/setuptools/py34compat.py +13 -0
  608. quarchpy/venv/Lib/site-packages/setuptools/sandbox.py +491 -0
  609. quarchpy/venv/Lib/site-packages/setuptools/script (dev).tmpl +6 -0
  610. quarchpy/venv/Lib/site-packages/setuptools/script.tmpl +3 -0
  611. quarchpy/venv/Lib/site-packages/setuptools/site-patch.py +74 -0
  612. quarchpy/venv/Lib/site-packages/setuptools/ssl_support.py +260 -0
  613. quarchpy/venv/Lib/site-packages/setuptools/unicode_utils.py +44 -0
  614. quarchpy/venv/Lib/site-packages/setuptools/version.py +6 -0
  615. quarchpy/venv/Lib/site-packages/setuptools/wheel.py +220 -0
  616. quarchpy/venv/Lib/site-packages/setuptools/windows_support.py +29 -0
  617. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/INSTALLER +1 -0
  618. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/LICENSE +19 -0
  619. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/METADATA +86 -0
  620. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/RECORD +207 -0
  621. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/WHEEL +6 -0
  622. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/dependency_links.txt +2 -0
  623. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/entry_points.txt +69 -0
  624. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/top_level.txt +3 -0
  625. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/zip-safe +1 -0
  626. quarchpy/venv/Lib/site-packages/setuptools-44.1.1.virtualenv +0 -0
  627. quarchpy/venv/Lib/site-packages/wheel/__init__.py +1 -0
  628. quarchpy/venv/Lib/site-packages/wheel/__main__.py +19 -0
  629. quarchpy/venv/Lib/site-packages/wheel/bdist_wheel.py +492 -0
  630. quarchpy/venv/Lib/site-packages/wheel/cli/__init__.py +88 -0
  631. quarchpy/venv/Lib/site-packages/wheel/cli/convert.py +269 -0
  632. quarchpy/venv/Lib/site-packages/wheel/cli/pack.py +82 -0
  633. quarchpy/venv/Lib/site-packages/wheel/cli/unpack.py +25 -0
  634. quarchpy/venv/Lib/site-packages/wheel/macosx_libfile.py +428 -0
  635. quarchpy/venv/Lib/site-packages/wheel/metadata.py +133 -0
  636. quarchpy/venv/Lib/site-packages/wheel/pkginfo.py +43 -0
  637. quarchpy/venv/Lib/site-packages/wheel/util.py +46 -0
  638. quarchpy/venv/Lib/site-packages/wheel/vendored/__init__.py +0 -0
  639. quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +0 -0
  640. quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +48 -0
  641. quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +866 -0
  642. quarchpy/venv/Lib/site-packages/wheel/wheelfile.py +181 -0
  643. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/INSTALLER +1 -0
  644. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/LICENSE.txt +22 -0
  645. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/METADATA +69 -0
  646. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/RECORD +49 -0
  647. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/WHEEL +6 -0
  648. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/entry_points.txt +6 -0
  649. quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/top_level.txt +1 -0
  650. quarchpy/venv/Lib/site-packages/wheel-0.37.1.virtualenv +0 -0
  651. quarchpy/venv/Lib/site.py +190 -0
  652. quarchpy/venv/Lib/site.pyc +0 -0
  653. quarchpy/venv/Scripts/activate +83 -0
  654. quarchpy/venv/Scripts/activate.bat +39 -0
  655. quarchpy/venv/Scripts/activate.fish +100 -0
  656. quarchpy/venv/Scripts/activate.nu +41 -0
  657. quarchpy/venv/Scripts/activate.ps1 +60 -0
  658. quarchpy/venv/Scripts/activate_this.py +32 -0
  659. quarchpy/venv/Scripts/deactivate.bat +19 -0
  660. quarchpy/venv/Scripts/deactivate.nu +11 -0
  661. quarchpy/venv/Scripts/easy_install-2.7.exe +0 -0
  662. quarchpy/venv/Scripts/easy_install.exe +0 -0
  663. quarchpy/venv/Scripts/easy_install2.7.exe +0 -0
  664. quarchpy/venv/Scripts/easy_install2.exe +0 -0
  665. quarchpy/venv/Scripts/pip-2.7.exe +0 -0
  666. quarchpy/venv/Scripts/pip.exe +0 -0
  667. quarchpy/venv/Scripts/pip2.7.exe +0 -0
  668. quarchpy/venv/Scripts/pip2.exe +0 -0
  669. quarchpy/venv/Scripts/pydoc.bat +1 -0
  670. quarchpy/venv/Scripts/python.exe +0 -0
  671. quarchpy/venv/Scripts/python27.dll +0 -0
  672. quarchpy/venv/Scripts/pythonw.exe +0 -0
  673. quarchpy/venv/Scripts/wheel-2.7.exe +0 -0
  674. quarchpy/venv/Scripts/wheel.exe +0 -0
  675. quarchpy/venv/Scripts/wheel2.7.exe +0 -0
  676. quarchpy/venv/Scripts/wheel2.exe +0 -0
  677. quarchpy/venv/libs/_bsddb.lib +0 -0
  678. quarchpy/venv/libs/_ctypes.lib +0 -0
  679. quarchpy/venv/libs/_ctypes_test.lib +0 -0
  680. quarchpy/venv/libs/_elementtree.lib +0 -0
  681. quarchpy/venv/libs/_hashlib.lib +0 -0
  682. quarchpy/venv/libs/_msi.lib +0 -0
  683. quarchpy/venv/libs/_multiprocessing.lib +0 -0
  684. quarchpy/venv/libs/_socket.lib +0 -0
  685. quarchpy/venv/libs/_sqlite3.lib +0 -0
  686. quarchpy/venv/libs/_ssl.lib +0 -0
  687. quarchpy/venv/libs/_testcapi.lib +0 -0
  688. quarchpy/venv/libs/_tkinter.lib +0 -0
  689. quarchpy/venv/libs/bz2.lib +0 -0
  690. quarchpy/venv/libs/libpython27.a +0 -0
  691. quarchpy/venv/libs/pyexpat.lib +0 -0
  692. quarchpy/venv/libs/python27.lib +0 -0
  693. quarchpy/venv/libs/select.lib +0 -0
  694. quarchpy/venv/libs/unicodedata.lib +0 -0
  695. quarchpy/venv/libs/winsound.lib +0 -0
  696. quarchpy/venv/pyvenv.cfg +8 -0
  697. {quarchpy-2.1.14.dev3.dist-info → quarchpy-2.1.14.dev5.dist-info}/METADATA +1 -1
  698. quarchpy-2.1.14.dev5.dist-info/RECORD +1219 -0
  699. quarchpy-2.1.14.dev3.dist-info/RECORD +0 -535
  700. {quarchpy-2.1.14.dev3.dist-info → quarchpy-2.1.14.dev5.dist-info}/WHEEL +0 -0
  701. {quarchpy-2.1.14.dev3.dist-info → quarchpy-2.1.14.dev5.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,121 @@
1
+ """
2
+ NTLM authenticating pool, contributed by erikcederstran
3
+
4
+ Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10
5
+ """
6
+ from __future__ import absolute_import
7
+
8
+ from logging import getLogger
9
+
10
+ from ntlm import ntlm
11
+
12
+ from .. import HTTPSConnectionPool
13
+ from ..packages.six.moves.http_client import HTTPSConnection
14
+
15
+ log = getLogger(__name__)
16
+
17
+
18
+ class NTLMConnectionPool(HTTPSConnectionPool):
19
+ """
20
+ Implements an NTLM authentication version of an urllib3 connection pool
21
+ """
22
+
23
+ scheme = "https"
24
+
25
+ def __init__(self, user, pw, authurl, *args, **kwargs):
26
+ """
27
+ authurl is a random URL on the server that is protected by NTLM.
28
+ user is the Windows user, probably in the DOMAIN\\username format.
29
+ pw is the password for the user.
30
+ """
31
+ super(NTLMConnectionPool, self).__init__(*args, **kwargs)
32
+ self.authurl = authurl
33
+ self.rawuser = user
34
+ user_parts = user.split("\\", 1)
35
+ self.domain = user_parts[0].upper()
36
+ self.user = user_parts[1]
37
+ self.pw = pw
38
+
39
+ def _new_conn(self):
40
+ # Performs the NTLM handshake that secures the connection. The socket
41
+ # must be kept open while requests are performed.
42
+ self.num_connections += 1
43
+ log.debug(
44
+ "Starting NTLM HTTPS connection no. %d: https://%s%s",
45
+ self.num_connections,
46
+ self.host,
47
+ self.authurl,
48
+ )
49
+
50
+ headers = {"Connection": "Keep-Alive"}
51
+ req_header = "Authorization"
52
+ resp_header = "www-authenticate"
53
+
54
+ conn = HTTPSConnection(host=self.host, port=self.port)
55
+
56
+ # Send negotiation message
57
+ headers[req_header] = "NTLM %s" % ntlm.create_NTLM_NEGOTIATE_MESSAGE(
58
+ self.rawuser
59
+ )
60
+ log.debug("Request headers: %s", headers)
61
+ conn.request("GET", self.authurl, None, headers)
62
+ res = conn.getresponse()
63
+ reshdr = dict(res.getheaders())
64
+ log.debug("Response status: %s %s", res.status, res.reason)
65
+ log.debug("Response headers: %s", reshdr)
66
+ log.debug("Response data: %s [...]", res.read(100))
67
+
68
+ # Remove the reference to the socket, so that it can not be closed by
69
+ # the response object (we want to keep the socket open)
70
+ res.fp = None
71
+
72
+ # Server should respond with a challenge message
73
+ auth_header_values = reshdr[resp_header].split(", ")
74
+ auth_header_value = None
75
+ for s in auth_header_values:
76
+ if s[:5] == "NTLM ":
77
+ auth_header_value = s[5:]
78
+ if auth_header_value is None:
79
+ raise Exception(
80
+ "Unexpected %s response header: %s" % (resp_header, reshdr[resp_header])
81
+ )
82
+
83
+ # Send authentication message
84
+ ServerChallenge, NegotiateFlags = ntlm.parse_NTLM_CHALLENGE_MESSAGE(
85
+ auth_header_value
86
+ )
87
+ auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(
88
+ ServerChallenge, self.user, self.domain, self.pw, NegotiateFlags
89
+ )
90
+ headers[req_header] = "NTLM %s" % auth_msg
91
+ log.debug("Request headers: %s", headers)
92
+ conn.request("GET", self.authurl, None, headers)
93
+ res = conn.getresponse()
94
+ log.debug("Response status: %s %s", res.status, res.reason)
95
+ log.debug("Response headers: %s", dict(res.getheaders()))
96
+ log.debug("Response data: %s [...]", res.read()[:100])
97
+ if res.status != 200:
98
+ if res.status == 401:
99
+ raise Exception("Server rejected request: wrong username or password")
100
+ raise Exception("Wrong server response: %s %s" % (res.status, res.reason))
101
+
102
+ res.fp = None
103
+ log.debug("Connection established")
104
+ return conn
105
+
106
+ def urlopen(
107
+ self,
108
+ method,
109
+ url,
110
+ body=None,
111
+ headers=None,
112
+ retries=3,
113
+ redirect=True,
114
+ assert_same_host=True,
115
+ ):
116
+ if headers is None:
117
+ headers = {}
118
+ headers["Connection"] = "Keep-Alive"
119
+ return super(NTLMConnectionPool, self).urlopen(
120
+ method, url, body, headers, retries, redirect, assert_same_host
121
+ )
@@ -0,0 +1,509 @@
1
+ """
2
+ TLS with SNI_-support for Python 2. Follow these instructions if you would
3
+ like to verify TLS certificates in Python 2. Note, the default libraries do
4
+ *not* do certificate checking; you need to do additional work to validate
5
+ certificates yourself.
6
+
7
+ This needs the following packages installed:
8
+
9
+ * `pyOpenSSL`_ (tested with 16.0.0)
10
+ * `cryptography`_ (minimum 1.3.4, from pyopenssl)
11
+ * `idna`_ (minimum 2.0, from cryptography)
12
+
13
+ However, pyopenssl depends on cryptography, which depends on idna, so while we
14
+ use all three directly here we end up having relatively few packages required.
15
+
16
+ You can install them with the following command:
17
+
18
+ .. code-block:: bash
19
+
20
+ $ python -m pip install pyopenssl cryptography idna
21
+
22
+ To activate certificate checking, call
23
+ :func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code
24
+ before you begin making HTTP requests. This can be done in a ``sitecustomize``
25
+ module, or at any other time before your application begins using ``urllib3``,
26
+ like this:
27
+
28
+ .. code-block:: python
29
+
30
+ try:
31
+ import urllib3.contrib.pyopenssl
32
+ urllib3.contrib.pyopenssl.inject_into_urllib3()
33
+ except ImportError:
34
+ pass
35
+
36
+ Now you can use :mod:`urllib3` as you normally would, and it will support SNI
37
+ when the required modules are installed.
38
+
39
+ Activating this module also has the positive side effect of disabling SSL/TLS
40
+ compression in Python 2 (see `CRIME attack`_).
41
+
42
+ .. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication
43
+ .. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit)
44
+ .. _pyopenssl: https://www.pyopenssl.org
45
+ .. _cryptography: https://cryptography.io
46
+ .. _idna: https://github.com/kjd/idna
47
+ """
48
+ from __future__ import absolute_import
49
+
50
+ import OpenSSL.SSL
51
+ from cryptography import x509
52
+ from cryptography.hazmat.backends.openssl import backend as openssl_backend
53
+ from cryptography.hazmat.backends.openssl.x509 import _Certificate
54
+
55
+ try:
56
+ from cryptography.x509 import UnsupportedExtension
57
+ except ImportError:
58
+ # UnsupportedExtension is gone in cryptography >= 2.1.0
59
+ class UnsupportedExtension(Exception):
60
+ pass
61
+
62
+
63
+ from io import BytesIO
64
+ from socket import error as SocketError
65
+ from socket import timeout
66
+
67
+ try: # Platform-specific: Python 2
68
+ from socket import _fileobject
69
+ except ImportError: # Platform-specific: Python 3
70
+ _fileobject = None
71
+ from ..packages.backports.makefile import backport_makefile
72
+
73
+ import logging
74
+ import ssl
75
+ import sys
76
+
77
+ from .. import util
78
+ from ..packages import six
79
+
80
+ __all__ = ["inject_into_urllib3", "extract_from_urllib3"]
81
+
82
+ # SNI always works.
83
+ HAS_SNI = True
84
+
85
+ # Map from urllib3 to PyOpenSSL compatible parameter-values.
86
+ _openssl_versions = {
87
+ util.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD,
88
+ ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
89
+ }
90
+
91
+ if hasattr(ssl, "PROTOCOL_SSLv3") and hasattr(OpenSSL.SSL, "SSLv3_METHOD"):
92
+ _openssl_versions[ssl.PROTOCOL_SSLv3] = OpenSSL.SSL.SSLv3_METHOD
93
+
94
+ if hasattr(ssl, "PROTOCOL_TLSv1_1") and hasattr(OpenSSL.SSL, "TLSv1_1_METHOD"):
95
+ _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD
96
+
97
+ if hasattr(ssl, "PROTOCOL_TLSv1_2") and hasattr(OpenSSL.SSL, "TLSv1_2_METHOD"):
98
+ _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD
99
+
100
+
101
+ _stdlib_to_openssl_verify = {
102
+ ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE,
103
+ ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER,
104
+ ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER
105
+ + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
106
+ }
107
+ _openssl_to_stdlib_verify = dict((v, k) for k, v in _stdlib_to_openssl_verify.items())
108
+
109
+ # OpenSSL will only write 16K at a time
110
+ SSL_WRITE_BLOCKSIZE = 16384
111
+
112
+ orig_util_HAS_SNI = util.HAS_SNI
113
+ orig_util_SSLContext = util.ssl_.SSLContext
114
+
115
+
116
+ log = logging.getLogger(__name__)
117
+
118
+
119
+ def inject_into_urllib3():
120
+ "Monkey-patch urllib3 with PyOpenSSL-backed SSL-support."
121
+
122
+ _validate_dependencies_met()
123
+
124
+ util.SSLContext = PyOpenSSLContext
125
+ util.ssl_.SSLContext = PyOpenSSLContext
126
+ util.HAS_SNI = HAS_SNI
127
+ util.ssl_.HAS_SNI = HAS_SNI
128
+ util.IS_PYOPENSSL = True
129
+ util.ssl_.IS_PYOPENSSL = True
130
+
131
+
132
+ def extract_from_urllib3():
133
+ "Undo monkey-patching by :func:`inject_into_urllib3`."
134
+
135
+ util.SSLContext = orig_util_SSLContext
136
+ util.ssl_.SSLContext = orig_util_SSLContext
137
+ util.HAS_SNI = orig_util_HAS_SNI
138
+ util.ssl_.HAS_SNI = orig_util_HAS_SNI
139
+ util.IS_PYOPENSSL = False
140
+ util.ssl_.IS_PYOPENSSL = False
141
+
142
+
143
+ def _validate_dependencies_met():
144
+ """
145
+ Verifies that PyOpenSSL's package-level dependencies have been met.
146
+ Throws `ImportError` if they are not met.
147
+ """
148
+ # Method added in `cryptography==1.1`; not available in older versions
149
+ from cryptography.x509.extensions import Extensions
150
+
151
+ if getattr(Extensions, "get_extension_for_class", None) is None:
152
+ raise ImportError(
153
+ "'cryptography' module missing required functionality. "
154
+ "Try upgrading to v1.3.4 or newer."
155
+ )
156
+
157
+ # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
158
+ # attribute is only present on those versions.
159
+ from OpenSSL.crypto import X509
160
+
161
+ x509 = X509()
162
+ if getattr(x509, "_x509", None) is None:
163
+ raise ImportError(
164
+ "'pyOpenSSL' module missing required functionality. "
165
+ "Try upgrading to v0.14 or newer."
166
+ )
167
+
168
+
169
+ def _dnsname_to_stdlib(name):
170
+ """
171
+ Converts a dNSName SubjectAlternativeName field to the form used by the
172
+ standard library on the given Python version.
173
+
174
+ Cryptography produces a dNSName as a unicode string that was idna-decoded
175
+ from ASCII bytes. We need to idna-encode that string to get it back, and
176
+ then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib
177
+ uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8).
178
+
179
+ If the name cannot be idna-encoded then we return None signalling that
180
+ the name given should be skipped.
181
+ """
182
+
183
+ def idna_encode(name):
184
+ """
185
+ Borrowed wholesale from the Python Cryptography Project. It turns out
186
+ that we can't just safely call `idna.encode`: it can explode for
187
+ wildcard names. This avoids that problem.
188
+ """
189
+ from pip._vendor import idna
190
+
191
+ try:
192
+ for prefix in [u"*.", u"."]:
193
+ if name.startswith(prefix):
194
+ name = name[len(prefix) :]
195
+ return prefix.encode("ascii") + idna.encode(name)
196
+ return idna.encode(name)
197
+ except idna.core.IDNAError:
198
+ return None
199
+
200
+ # Don't send IPv6 addresses through the IDNA encoder.
201
+ if ":" in name:
202
+ return name
203
+
204
+ name = idna_encode(name)
205
+ if name is None:
206
+ return None
207
+ elif sys.version_info >= (3, 0):
208
+ name = name.decode("utf-8")
209
+ return name
210
+
211
+
212
+ def get_subj_alt_name(peer_cert):
213
+ """
214
+ Given an PyOpenSSL certificate, provides all the subject alternative names.
215
+ """
216
+ # Pass the cert to cryptography, which has much better APIs for this.
217
+ if hasattr(peer_cert, "to_cryptography"):
218
+ cert = peer_cert.to_cryptography()
219
+ else:
220
+ # This is technically using private APIs, but should work across all
221
+ # relevant versions before PyOpenSSL got a proper API for this.
222
+ cert = _Certificate(openssl_backend, peer_cert._x509)
223
+
224
+ # We want to find the SAN extension. Ask Cryptography to locate it (it's
225
+ # faster than looping in Python)
226
+ try:
227
+ ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value
228
+ except x509.ExtensionNotFound:
229
+ # No such extension, return the empty list.
230
+ return []
231
+ except (
232
+ x509.DuplicateExtension,
233
+ UnsupportedExtension,
234
+ x509.UnsupportedGeneralNameType,
235
+ UnicodeError,
236
+ ) as e:
237
+ # A problem has been found with the quality of the certificate. Assume
238
+ # no SAN field is present.
239
+ log.warning(
240
+ "A problem was encountered with the certificate that prevented "
241
+ "urllib3 from finding the SubjectAlternativeName field. This can "
242
+ "affect certificate validation. The error was %s",
243
+ e,
244
+ )
245
+ return []
246
+
247
+ # We want to return dNSName and iPAddress fields. We need to cast the IPs
248
+ # back to strings because the match_hostname function wants them as
249
+ # strings.
250
+ # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8
251
+ # decoded. This is pretty frustrating, but that's what the standard library
252
+ # does with certificates, and so we need to attempt to do the same.
253
+ # We also want to skip over names which cannot be idna encoded.
254
+ names = [
255
+ ("DNS", name)
256
+ for name in map(_dnsname_to_stdlib, ext.get_values_for_type(x509.DNSName))
257
+ if name is not None
258
+ ]
259
+ names.extend(
260
+ ("IP Address", str(name)) for name in ext.get_values_for_type(x509.IPAddress)
261
+ )
262
+
263
+ return names
264
+
265
+
266
+ class WrappedSocket(object):
267
+ """API-compatibility wrapper for Python OpenSSL's Connection-class.
268
+
269
+ Note: _makefile_refs, _drop() and _reuse() are needed for the garbage
270
+ collector of pypy.
271
+ """
272
+
273
+ def __init__(self, connection, socket, suppress_ragged_eofs=True):
274
+ self.connection = connection
275
+ self.socket = socket
276
+ self.suppress_ragged_eofs = suppress_ragged_eofs
277
+ self._makefile_refs = 0
278
+ self._closed = False
279
+
280
+ def fileno(self):
281
+ return self.socket.fileno()
282
+
283
+ # Copy-pasted from Python 3.5 source code
284
+ def _decref_socketios(self):
285
+ if self._makefile_refs > 0:
286
+ self._makefile_refs -= 1
287
+ if self._closed:
288
+ self.close()
289
+
290
+ def recv(self, *args, **kwargs):
291
+ try:
292
+ data = self.connection.recv(*args, **kwargs)
293
+ except OpenSSL.SSL.SysCallError as e:
294
+ if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"):
295
+ return b""
296
+ else:
297
+ raise SocketError(str(e))
298
+ except OpenSSL.SSL.ZeroReturnError:
299
+ if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN:
300
+ return b""
301
+ else:
302
+ raise
303
+ except OpenSSL.SSL.WantReadError:
304
+ if not util.wait_for_read(self.socket, self.socket.gettimeout()):
305
+ raise timeout("The read operation timed out")
306
+ else:
307
+ return self.recv(*args, **kwargs)
308
+
309
+ # TLS 1.3 post-handshake authentication
310
+ except OpenSSL.SSL.Error as e:
311
+ raise ssl.SSLError("read error: %r" % e)
312
+ else:
313
+ return data
314
+
315
+ def recv_into(self, *args, **kwargs):
316
+ try:
317
+ return self.connection.recv_into(*args, **kwargs)
318
+ except OpenSSL.SSL.SysCallError as e:
319
+ if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"):
320
+ return 0
321
+ else:
322
+ raise SocketError(str(e))
323
+ except OpenSSL.SSL.ZeroReturnError:
324
+ if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN:
325
+ return 0
326
+ else:
327
+ raise
328
+ except OpenSSL.SSL.WantReadError:
329
+ if not util.wait_for_read(self.socket, self.socket.gettimeout()):
330
+ raise timeout("The read operation timed out")
331
+ else:
332
+ return self.recv_into(*args, **kwargs)
333
+
334
+ # TLS 1.3 post-handshake authentication
335
+ except OpenSSL.SSL.Error as e:
336
+ raise ssl.SSLError("read error: %r" % e)
337
+
338
+ def settimeout(self, timeout):
339
+ return self.socket.settimeout(timeout)
340
+
341
+ def _send_until_done(self, data):
342
+ while True:
343
+ try:
344
+ return self.connection.send(data)
345
+ except OpenSSL.SSL.WantWriteError:
346
+ if not util.wait_for_write(self.socket, self.socket.gettimeout()):
347
+ raise timeout()
348
+ continue
349
+ except OpenSSL.SSL.SysCallError as e:
350
+ raise SocketError(str(e))
351
+
352
+ def sendall(self, data):
353
+ total_sent = 0
354
+ while total_sent < len(data):
355
+ sent = self._send_until_done(
356
+ data[total_sent : total_sent + SSL_WRITE_BLOCKSIZE]
357
+ )
358
+ total_sent += sent
359
+
360
+ def shutdown(self):
361
+ # FIXME rethrow compatible exceptions should we ever use this
362
+ self.connection.shutdown()
363
+
364
+ def close(self):
365
+ if self._makefile_refs < 1:
366
+ try:
367
+ self._closed = True
368
+ return self.connection.close()
369
+ except OpenSSL.SSL.Error:
370
+ return
371
+ else:
372
+ self._makefile_refs -= 1
373
+
374
+ def getpeercert(self, binary_form=False):
375
+ x509 = self.connection.get_peer_certificate()
376
+
377
+ if not x509:
378
+ return x509
379
+
380
+ if binary_form:
381
+ return OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, x509)
382
+
383
+ return {
384
+ "subject": ((("commonName", x509.get_subject().CN),),),
385
+ "subjectAltName": get_subj_alt_name(x509),
386
+ }
387
+
388
+ def version(self):
389
+ return self.connection.get_protocol_version_name()
390
+
391
+ def _reuse(self):
392
+ self._makefile_refs += 1
393
+
394
+ def _drop(self):
395
+ if self._makefile_refs < 1:
396
+ self.close()
397
+ else:
398
+ self._makefile_refs -= 1
399
+
400
+
401
+ if _fileobject: # Platform-specific: Python 2
402
+
403
+ def makefile(self, mode, bufsize=-1):
404
+ self._makefile_refs += 1
405
+ return _fileobject(self, mode, bufsize, close=True)
406
+
407
+
408
+ else: # Platform-specific: Python 3
409
+ makefile = backport_makefile
410
+
411
+ WrappedSocket.makefile = makefile
412
+
413
+
414
+ class PyOpenSSLContext(object):
415
+ """
416
+ I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible
417
+ for translating the interface of the standard library ``SSLContext`` object
418
+ to calls into PyOpenSSL.
419
+ """
420
+
421
+ def __init__(self, protocol):
422
+ self.protocol = _openssl_versions[protocol]
423
+ self._ctx = OpenSSL.SSL.Context(self.protocol)
424
+ self._options = 0
425
+ self.check_hostname = False
426
+
427
+ @property
428
+ def options(self):
429
+ return self._options
430
+
431
+ @options.setter
432
+ def options(self, value):
433
+ self._options = value
434
+ self._ctx.set_options(value)
435
+
436
+ @property
437
+ def verify_mode(self):
438
+ return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()]
439
+
440
+ @verify_mode.setter
441
+ def verify_mode(self, value):
442
+ self._ctx.set_verify(_stdlib_to_openssl_verify[value], _verify_callback)
443
+
444
+ def set_default_verify_paths(self):
445
+ self._ctx.set_default_verify_paths()
446
+
447
+ def set_ciphers(self, ciphers):
448
+ if isinstance(ciphers, six.text_type):
449
+ ciphers = ciphers.encode("utf-8")
450
+ self._ctx.set_cipher_list(ciphers)
451
+
452
+ def load_verify_locations(self, cafile=None, capath=None, cadata=None):
453
+ if cafile is not None:
454
+ cafile = cafile.encode("utf-8")
455
+ if capath is not None:
456
+ capath = capath.encode("utf-8")
457
+ try:
458
+ self._ctx.load_verify_locations(cafile, capath)
459
+ if cadata is not None:
460
+ self._ctx.load_verify_locations(BytesIO(cadata))
461
+ except OpenSSL.SSL.Error as e:
462
+ raise ssl.SSLError("unable to load trusted certificates: %r" % e)
463
+
464
+ def load_cert_chain(self, certfile, keyfile=None, password=None):
465
+ self._ctx.use_certificate_chain_file(certfile)
466
+ if password is not None:
467
+ if not isinstance(password, six.binary_type):
468
+ password = password.encode("utf-8")
469
+ self._ctx.set_passwd_cb(lambda *_: password)
470
+ self._ctx.use_privatekey_file(keyfile or certfile)
471
+
472
+ def set_alpn_protocols(self, protocols):
473
+ protocols = [six.ensure_binary(p) for p in protocols]
474
+ return self._ctx.set_alpn_protos(protocols)
475
+
476
+ def wrap_socket(
477
+ self,
478
+ sock,
479
+ server_side=False,
480
+ do_handshake_on_connect=True,
481
+ suppress_ragged_eofs=True,
482
+ server_hostname=None,
483
+ ):
484
+ cnx = OpenSSL.SSL.Connection(self._ctx, sock)
485
+
486
+ if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3
487
+ server_hostname = server_hostname.encode("utf-8")
488
+
489
+ if server_hostname is not None:
490
+ cnx.set_tlsext_host_name(server_hostname)
491
+
492
+ cnx.set_connect_state()
493
+
494
+ while True:
495
+ try:
496
+ cnx.do_handshake()
497
+ except OpenSSL.SSL.WantReadError:
498
+ if not util.wait_for_read(sock, sock.gettimeout()):
499
+ raise timeout("select timed out")
500
+ continue
501
+ except OpenSSL.SSL.Error as e:
502
+ raise ssl.SSLError("bad handshake: %r" % e)
503
+ break
504
+
505
+ return WrappedSocket(cnx, sock)
506
+
507
+
508
+ def _verify_callback(cnx, x509, err_no, err_depth, return_code):
509
+ return err_no == 0