com.googler.python 1.0.7 → 1.0.9

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 (354) hide show
  1. package/package.json +4 -2
  2. package/python3.4.2/lib/python3.4/site-packages/pip/__init__.py +1 -277
  3. package/python3.4.2/lib/python3.4/site-packages/pip/__main__.py +19 -7
  4. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/__init__.py +246 -0
  5. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/basecommand.py +373 -0
  6. package/python3.4.2/lib/python3.4/site-packages/pip/{baseparser.py → _internal/baseparser.py} +240 -224
  7. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/build_env.py +92 -0
  8. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/cache.py +202 -0
  9. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/cmdoptions.py +609 -0
  10. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/__init__.py +79 -0
  11. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/check.py +42 -0
  12. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/completion.py +94 -0
  13. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/configuration.py +227 -0
  14. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/download.py +233 -0
  15. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/freeze.py +96 -0
  16. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/hash.py +57 -0
  17. package/python3.4.2/lib/python3.4/site-packages/pip/{commands → _internal/commands}/help.py +36 -33
  18. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/install.py +477 -0
  19. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/list.py +343 -0
  20. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/search.py +135 -0
  21. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/show.py +164 -0
  22. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/uninstall.py +71 -0
  23. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/commands/wheel.py +179 -0
  24. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/compat.py +235 -0
  25. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/configuration.py +378 -0
  26. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/download.py +922 -0
  27. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/exceptions.py +249 -0
  28. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/index.py +1117 -0
  29. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/locations.py +194 -0
  30. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/models/__init__.py +4 -0
  31. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/models/index.py +15 -0
  32. package/python3.4.2/lib/python3.4/site-packages/pip/{_vendor/requests/packages/urllib3/contrib → _internal/operations}/__init__.py +0 -0
  33. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/operations/check.py +106 -0
  34. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/operations/freeze.py +252 -0
  35. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/operations/prepare.py +378 -0
  36. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/pep425tags.py +317 -0
  37. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/req/__init__.py +69 -0
  38. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/req/req_file.py +338 -0
  39. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/req/req_install.py +1115 -0
  40. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/req/req_set.py +164 -0
  41. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/req/req_uninstall.py +455 -0
  42. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/resolve.py +354 -0
  43. package/python3.4.2/lib/python3.4/site-packages/pip/{status_codes.py → _internal/status_codes.py} +8 -6
  44. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/__init__.py +0 -0
  45. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/appdirs.py +258 -0
  46. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/deprecation.py +77 -0
  47. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/encoding.py +33 -0
  48. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/filesystem.py +28 -0
  49. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/glibc.py +84 -0
  50. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/hashes.py +94 -0
  51. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/logging.py +132 -0
  52. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/misc.py +851 -0
  53. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/outdated.py +163 -0
  54. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/packaging.py +70 -0
  55. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/setuptools_build.py +8 -0
  56. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/temp_dir.py +82 -0
  57. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/typing.py +29 -0
  58. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/utils/ui.py +421 -0
  59. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/vcs/__init__.py +471 -0
  60. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/vcs/bazaar.py +113 -0
  61. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/vcs/git.py +311 -0
  62. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/vcs/mercurial.py +105 -0
  63. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/vcs/subversion.py +271 -0
  64. package/python3.4.2/lib/python3.4/site-packages/pip/_internal/wheel.py +817 -0
  65. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/__init__.py +109 -8
  66. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/appdirs.py +604 -0
  67. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/__init__.py +11 -0
  68. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/_cmd.py +60 -0
  69. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/adapter.py +134 -0
  70. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/cache.py +39 -0
  71. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +2 -0
  72. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +133 -0
  73. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +43 -0
  74. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/compat.py +29 -0
  75. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/controller.py +373 -0
  76. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/filewrapper.py +78 -0
  77. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/heuristics.py +138 -0
  78. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/serialize.py +194 -0
  79. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/cachecontrol/wrapper.py +27 -0
  80. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/certifi/__init__.py +3 -0
  81. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/certifi/__main__.py +2 -0
  82. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests → certifi}/cacert.pem +1765 -2358
  83. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/certifi/core.py +37 -0
  84. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/__init__.py +39 -32
  85. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
  86. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/big5prober.py +47 -42
  87. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/chardistribution.py +233 -231
  88. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
  89. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/charsetprober.py +145 -0
  90. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/cli/__init__.py +1 -0
  91. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/cli/chardetect.py +85 -0
  92. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/codingstatemachine.py +88 -0
  93. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/compat.py +34 -34
  94. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/cp949prober.py +49 -44
  95. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/enums.py +76 -0
  96. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/escprober.py +101 -0
  97. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/escsm.py +246 -0
  98. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/eucjpprober.py +92 -0
  99. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/euckrfreq.py +195 -0
  100. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/euckrprober.py +47 -42
  101. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/euctwfreq.py +387 -428
  102. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/euctwprober.py +46 -41
  103. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/gb2312freq.py +283 -472
  104. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/gb2312prober.py +46 -41
  105. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/hebrewprober.py +292 -283
  106. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/jisfreq.py +325 -569
  107. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/jpcntx.py +233 -219
  108. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/langbulgarianmodel.py +228 -229
  109. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/langcyrillicmodel.py +333 -329
  110. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/langgreekmodel.py +225 -225
  111. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/langhebrewmodel.py +200 -201
  112. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/langhungarianmodel.py +225 -225
  113. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/langthaimodel.py +199 -200
  114. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/langturkishmodel.py +193 -0
  115. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/latin1prober.py +145 -139
  116. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/mbcharsetprober.py +91 -0
  117. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/mbcsgroupprober.py +54 -54
  118. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/mbcssm.py +572 -0
  119. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/sbcharsetprober.py +132 -0
  120. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/sbcsgroupprober.py +73 -69
  121. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/sjisprober.py +92 -0
  122. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/universaldetector.py +286 -0
  123. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/chardet → chardet}/utf8prober.py +82 -76
  124. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/chardet/version.py +9 -0
  125. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/colorama/__init__.py +7 -7
  126. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/colorama/ansi.py +102 -50
  127. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/colorama/ansitowin32.py +236 -190
  128. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/colorama/initialise.py +82 -56
  129. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/colorama/win32.py +156 -137
  130. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/colorama/winterm.py +162 -120
  131. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/__init__.py +23 -23
  132. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/_backport/__init__.py +6 -6
  133. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/_backport/misc.py +41 -41
  134. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/_backport/shutil.py +761 -761
  135. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +84 -84
  136. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +788 -788
  137. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/_backport/tarfile.py +2607 -2607
  138. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/compat.py +1117 -1064
  139. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/database.py +1318 -1301
  140. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/index.py +516 -488
  141. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/locators.py +1292 -1194
  142. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/manifest.py +393 -364
  143. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/markers.py +131 -190
  144. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/metadata.py +1068 -1026
  145. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/resources.py +355 -317
  146. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/scripts.py +415 -323
  147. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  148. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  149. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/util.py +1755 -1575
  150. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/version.py +736 -721
  151. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  152. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  153. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distlib/wheel.py +984 -958
  154. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/distro.py +1104 -0
  155. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/__init__.py +35 -23
  156. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{ihatexml.py → _ihatexml.py} +288 -285
  157. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{inputstream.py → _inputstream.py} +923 -881
  158. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{tokenizer.py → _tokenizer.py} +1721 -1731
  159. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{trie → _trie}/__init__.py +14 -12
  160. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{trie → _trie}/_base.py +37 -37
  161. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{trie → _trie}/datrie.py +44 -44
  162. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{trie → _trie}/py.py +67 -67
  163. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/{utils.py → _utils.py} +124 -82
  164. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/constants.py +2947 -3104
  165. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +29 -20
  166. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/{_base.py → base.py} +12 -12
  167. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +73 -65
  168. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/lint.py +93 -93
  169. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +207 -205
  170. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +896 -12
  171. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/filters/whitespace.py +38 -38
  172. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/html5parser.py +2791 -2713
  173. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/serializer.py +409 -0
  174. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +30 -0
  175. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +54 -0
  176. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +50 -44
  177. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +88 -76
  178. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treebuilders/{_base.py → base.py} +417 -377
  179. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +236 -227
  180. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +340 -337
  181. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +366 -369
  182. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +154 -57
  183. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/{_base.py → base.py} +252 -200
  184. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +43 -46
  185. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +130 -138
  186. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/{lxmletree.py → etree_lxml.py} +213 -208
  187. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/{genshistream.py → genshi.py} +69 -69
  188. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/__init__.py +2 -0
  189. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/codec.py +118 -0
  190. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/compat.py +12 -0
  191. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/core.py +387 -0
  192. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/idnadata.py +1585 -0
  193. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/intranges.py +53 -0
  194. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/package_data.py +2 -0
  195. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/idna/uts46data.py +7634 -0
  196. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/ipaddress.py +2419 -0
  197. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/lockfile/__init__.py +347 -0
  198. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/lockfile/linklockfile.py +73 -0
  199. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/lockfile/mkdirlockfile.py +84 -0
  200. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/lockfile/pidlockfile.py +190 -0
  201. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/lockfile/sqlitelockfile.py +156 -0
  202. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/lockfile/symlinklockfile.py +70 -0
  203. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/msgpack/__init__.py +66 -0
  204. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/msgpack/_version.py +1 -0
  205. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/msgpack/exceptions.py +41 -0
  206. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/msgpack/fallback.py +971 -0
  207. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/__about__.py +21 -0
  208. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/__init__.py +14 -0
  209. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/_compat.py +30 -0
  210. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/_structures.py +70 -0
  211. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/markers.py +301 -0
  212. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/requirements.py +130 -0
  213. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/specifiers.py +774 -0
  214. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/utils.py +63 -0
  215. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/packaging/version.py +441 -0
  216. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{pkg_resources.py → pkg_resources/__init__.py} +3125 -2762
  217. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/pkg_resources/py31compat.py +22 -0
  218. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/progress/__init__.py +127 -0
  219. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/progress/bar.py +88 -0
  220. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/progress/counter.py +48 -0
  221. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/progress/helpers.py +91 -0
  222. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/progress/spinner.py +44 -0
  223. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/pyparsing.py +5720 -0
  224. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/pytoml/__init__.py +3 -0
  225. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/pytoml/core.py +13 -0
  226. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/pytoml/parser.py +374 -0
  227. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/pytoml/writer.py +127 -0
  228. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/__init__.py +123 -77
  229. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/__version__.py +14 -0
  230. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/_internal_utils.py +42 -0
  231. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/adapters.py +525 -388
  232. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/api.py +152 -120
  233. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/auth.py +293 -193
  234. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/certs.py +18 -24
  235. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/compat.py +73 -115
  236. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/cookies.py +542 -454
  237. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/exceptions.py +122 -75
  238. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/help.py +120 -0
  239. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/hooks.py +34 -45
  240. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/models.py +948 -803
  241. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages.py +16 -0
  242. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/sessions.py +737 -637
  243. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/status_codes.py +91 -88
  244. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/structures.py +105 -127
  245. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/utils.py +904 -673
  246. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/retrying.py +267 -0
  247. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/six.py +891 -646
  248. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/__init__.py +97 -0
  249. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/_collections.py +319 -0
  250. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/connection.py +373 -0
  251. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/connectionpool.py +905 -710
  252. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  253. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  254. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +593 -0
  255. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +343 -0
  256. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/appengine.py +296 -0
  257. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/contrib/ntlmpool.py +112 -120
  258. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +455 -0
  259. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +810 -0
  260. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/contrib/socks.py +188 -0
  261. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/exceptions.py +246 -0
  262. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/fields.py +178 -177
  263. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/filepost.py +94 -100
  264. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/packages/__init__.py +5 -4
  265. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  266. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +53 -0
  267. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/packages/ordered_dict.py +259 -260
  268. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/packages/six.py +868 -0
  269. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/packages/ssl_match_hostname/__init__.py +19 -13
  270. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/packages/ssl_match_hostname/_implementation.py +157 -105
  271. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/poolmanager.py +440 -0
  272. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/request.py +148 -141
  273. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/response.py +626 -0
  274. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/__init__.py +54 -0
  275. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/connection.py +130 -0
  276. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/request.py +118 -0
  277. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/response.py +81 -0
  278. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/retry.py +401 -0
  279. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/selectors.py +581 -0
  280. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/ssl_.py +341 -0
  281. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/util/timeout.py +242 -234
  282. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/{requests/packages/urllib3 → urllib3}/util/url.py +230 -162
  283. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/urllib3/util/wait.py +40 -0
  284. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
  285. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/webencodings/labels.py +231 -0
  286. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
  287. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/webencodings/tests.py +153 -0
  288. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
  289. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/_markerlib/__init__.py +0 -16
  290. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/_markerlib/markers.py +0 -119
  291. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/sanitizer.py +0 -271
  292. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/serializer/__init__.py +0 -16
  293. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/serializer/htmlserializer.py +0 -320
  294. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/html5lib/treewalkers/pulldom.py +0 -63
  295. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/re-vendor.py +0 -34
  296. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/__init__.py +0 -3
  297. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/big5freq.py +0 -925
  298. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/chardetect.py +0 -46
  299. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/charsetgroupprober.py +0 -106
  300. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/charsetprober.py +0 -62
  301. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/codingstatemachine.py +0 -61
  302. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/constants.py +0 -39
  303. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/escprober.py +0 -86
  304. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/escsm.py +0 -242
  305. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/eucjpprober.py +0 -90
  306. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/euckrfreq.py +0 -596
  307. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/mbcharsetprober.py +0 -86
  308. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/mbcssm.py +0 -575
  309. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/sbcharsetprober.py +0 -120
  310. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/sjisprober.py +0 -91
  311. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/chardet/universaldetector.py +0 -170
  312. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/__init__.py +0 -58
  313. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/_collections.py +0 -205
  314. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/connection.py +0 -204
  315. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py +0 -422
  316. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/exceptions.py +0 -126
  317. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/packages/six.py +0 -385
  318. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/poolmanager.py +0 -258
  319. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/response.py +0 -308
  320. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/__init__.py +0 -27
  321. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/connection.py +0 -45
  322. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/request.py +0 -68
  323. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/response.py +0 -13
  324. package/python3.4.2/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py +0 -133
  325. package/python3.4.2/lib/python3.4/site-packages/pip/backwardcompat/__init__.py +0 -138
  326. package/python3.4.2/lib/python3.4/site-packages/pip/basecommand.py +0 -201
  327. package/python3.4.2/lib/python3.4/site-packages/pip/cmdoptions.py +0 -371
  328. package/python3.4.2/lib/python3.4/site-packages/pip/commands/__init__.py +0 -88
  329. package/python3.4.2/lib/python3.4/site-packages/pip/commands/bundle.py +0 -42
  330. package/python3.4.2/lib/python3.4/site-packages/pip/commands/completion.py +0 -59
  331. package/python3.4.2/lib/python3.4/site-packages/pip/commands/freeze.py +0 -114
  332. package/python3.4.2/lib/python3.4/site-packages/pip/commands/install.py +0 -314
  333. package/python3.4.2/lib/python3.4/site-packages/pip/commands/list.py +0 -162
  334. package/python3.4.2/lib/python3.4/site-packages/pip/commands/search.py +0 -132
  335. package/python3.4.2/lib/python3.4/site-packages/pip/commands/show.py +0 -80
  336. package/python3.4.2/lib/python3.4/site-packages/pip/commands/uninstall.py +0 -59
  337. package/python3.4.2/lib/python3.4/site-packages/pip/commands/unzip.py +0 -7
  338. package/python3.4.2/lib/python3.4/site-packages/pip/commands/wheel.py +0 -195
  339. package/python3.4.2/lib/python3.4/site-packages/pip/commands/zip.py +0 -351
  340. package/python3.4.2/lib/python3.4/site-packages/pip/download.py +0 -644
  341. package/python3.4.2/lib/python3.4/site-packages/pip/exceptions.py +0 -46
  342. package/python3.4.2/lib/python3.4/site-packages/pip/index.py +0 -990
  343. package/python3.4.2/lib/python3.4/site-packages/pip/locations.py +0 -171
  344. package/python3.4.2/lib/python3.4/site-packages/pip/log.py +0 -276
  345. package/python3.4.2/lib/python3.4/site-packages/pip/pep425tags.py +0 -102
  346. package/python3.4.2/lib/python3.4/site-packages/pip/req.py +0 -1931
  347. package/python3.4.2/lib/python3.4/site-packages/pip/runner.py +0 -18
  348. package/python3.4.2/lib/python3.4/site-packages/pip/util.py +0 -720
  349. package/python3.4.2/lib/python3.4/site-packages/pip/vcs/__init__.py +0 -251
  350. package/python3.4.2/lib/python3.4/site-packages/pip/vcs/bazaar.py +0 -131
  351. package/python3.4.2/lib/python3.4/site-packages/pip/vcs/git.py +0 -194
  352. package/python3.4.2/lib/python3.4/site-packages/pip/vcs/mercurial.py +0 -151
  353. package/python3.4.2/lib/python3.4/site-packages/pip/vcs/subversion.py +0 -273
  354. package/python3.4.2/lib/python3.4/site-packages/pip/wheel.py +0 -560
@@ -1,721 +1,736 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2012-2013 The Python Software Foundation.
4
- # See LICENSE.txt and CONTRIBUTORS.txt.
5
- #
6
- """
7
- Implementation of a flexible versioning scheme providing support for PEP-386,
8
- distribute-compatible and semantic versioning.
9
- """
10
-
11
- import logging
12
- import re
13
-
14
- from .compat import string_types
15
-
16
- __all__ = ['NormalizedVersion', 'NormalizedMatcher',
17
- 'LegacyVersion', 'LegacyMatcher',
18
- 'SemanticVersion', 'SemanticMatcher',
19
- 'UnsupportedVersionError', 'get_scheme']
20
-
21
- logger = logging.getLogger(__name__)
22
-
23
-
24
- class UnsupportedVersionError(ValueError):
25
- """This is an unsupported version."""
26
- pass
27
-
28
-
29
- class Version(object):
30
- def __init__(self, s):
31
- self._string = s = s.strip()
32
- self._parts = parts = self.parse(s)
33
- assert isinstance(parts, tuple)
34
- assert len(parts) > 0
35
-
36
- def parse(self, s):
37
- raise NotImplementedError('please implement in a subclass')
38
-
39
- def _check_compatible(self, other):
40
- if type(self) != type(other):
41
- raise TypeError('cannot compare %r and %r' % (self, other))
42
-
43
- def __eq__(self, other):
44
- self._check_compatible(other)
45
- return self._parts == other._parts
46
-
47
- def __ne__(self, other):
48
- return not self.__eq__(other)
49
-
50
- def __lt__(self, other):
51
- self._check_compatible(other)
52
- return self._parts < other._parts
53
-
54
- def __gt__(self, other):
55
- return not (self.__lt__(other) or self.__eq__(other))
56
-
57
- def __le__(self, other):
58
- return self.__lt__(other) or self.__eq__(other)
59
-
60
- def __ge__(self, other):
61
- return self.__gt__(other) or self.__eq__(other)
62
-
63
- # See http://docs.python.org/reference/datamodel#object.__hash__
64
- def __hash__(self):
65
- return hash(self._parts)
66
-
67
- def __repr__(self):
68
- return "%s('%s')" % (self.__class__.__name__, self._string)
69
-
70
- def __str__(self):
71
- return self._string
72
-
73
- @property
74
- def is_prerelease(self):
75
- raise NotImplementedError('Please implement in subclasses.')
76
-
77
-
78
- class Matcher(object):
79
- version_class = None
80
-
81
- dist_re = re.compile(r"^(\w[\s\w'.-]*)(\((.*)\))?")
82
- comp_re = re.compile(r'^(<=|>=|<|>|!=|==|~=)?\s*([^\s,]+)$')
83
- num_re = re.compile(r'^\d+(\.\d+)*$')
84
-
85
- # value is either a callable or the name of a method
86
- _operators = {
87
- '<': lambda v, c, p: v < c,
88
- '>': lambda v, c, p: v > c,
89
- '<=': lambda v, c, p: v == c or v < c,
90
- '>=': lambda v, c, p: v == c or v > c,
91
- '==': lambda v, c, p: v == c,
92
- # by default, compatible => >=.
93
- '~=': lambda v, c, p: v == c or v > c,
94
- '!=': lambda v, c, p: v != c,
95
- }
96
-
97
- def __init__(self, s):
98
- if self.version_class is None:
99
- raise ValueError('Please specify a version class')
100
- self._string = s = s.strip()
101
- m = self.dist_re.match(s)
102
- if not m:
103
- raise ValueError('Not valid: %r' % s)
104
- groups = m.groups('')
105
- self.name = groups[0].strip()
106
- self.key = self.name.lower() # for case-insensitive comparisons
107
- clist = []
108
- if groups[2]:
109
- constraints = [c.strip() for c in groups[2].split(',')]
110
- for c in constraints:
111
- m = self.comp_re.match(c)
112
- if not m:
113
- raise ValueError('Invalid %r in %r' % (c, s))
114
- groups = m.groups()
115
- op = groups[0] or '~='
116
- s = groups[1]
117
- if s.endswith('.*'):
118
- if op not in ('==', '!='):
119
- raise ValueError('\'.*\' not allowed for '
120
- '%r constraints' % op)
121
- # Could be a partial version (e.g. for '2.*') which
122
- # won't parse as a version, so keep it as a string
123
- vn, prefix = s[:-2], True
124
- if not self.num_re.match(vn):
125
- # Just to check that vn is a valid version
126
- self.version_class(vn)
127
- else:
128
- # Should parse as a version, so we can create an
129
- # instance for the comparison
130
- vn, prefix = self.version_class(s), False
131
- clist.append((op, vn, prefix))
132
- self._parts = tuple(clist)
133
-
134
- def match(self, version):
135
- """
136
- Check if the provided version matches the constraints.
137
-
138
- :param version: The version to match against this instance.
139
- :type version: Strring or :class:`Version` instance.
140
- """
141
- if isinstance(version, string_types):
142
- version = self.version_class(version)
143
- for operator, constraint, prefix in self._parts:
144
- f = self._operators.get(operator)
145
- if isinstance(f, string_types):
146
- f = getattr(self, f)
147
- if not f:
148
- msg = ('%r not implemented '
149
- 'for %s' % (operator, self.__class__.__name__))
150
- raise NotImplementedError(msg)
151
- if not f(version, constraint, prefix):
152
- return False
153
- return True
154
-
155
- @property
156
- def exact_version(self):
157
- result = None
158
- if len(self._parts) == 1 and self._parts[0][0] == '==':
159
- result = self._parts[0][1]
160
- return result
161
-
162
- def _check_compatible(self, other):
163
- if type(self) != type(other) or self.name != other.name:
164
- raise TypeError('cannot compare %s and %s' % (self, other))
165
-
166
- def __eq__(self, other):
167
- self._check_compatible(other)
168
- return self.key == other.key and self._parts == other._parts
169
-
170
- def __ne__(self, other):
171
- return not self.__eq__(other)
172
-
173
- # See http://docs.python.org/reference/datamodel#object.__hash__
174
- def __hash__(self):
175
- return hash(self.key) + hash(self._parts)
176
-
177
- def __repr__(self):
178
- return "%s(%r)" % (self.__class__.__name__, self._string)
179
-
180
- def __str__(self):
181
- return self._string
182
-
183
-
184
- PEP426_VERSION_RE = re.compile(r'^(\d+(\.\d+)*)((a|b|c|rc)(\d+))?'
185
- r'(\.(post)(\d+))?(\.(dev)(\d+))?'
186
- r'(-(\d+(\.\d+)?))?$')
187
-
188
-
189
- def _pep426_key(s):
190
- s = s.strip()
191
- m = PEP426_VERSION_RE.match(s)
192
- if not m:
193
- raise UnsupportedVersionError('Not a valid version: %s' % s)
194
- groups = m.groups()
195
- nums = tuple(int(v) for v in groups[0].split('.'))
196
- while len(nums) > 1 and nums[-1] == 0:
197
- nums = nums[:-1]
198
-
199
- pre = groups[3:5]
200
- post = groups[6:8]
201
- dev = groups[9:11]
202
- local = groups[12]
203
- if pre == (None, None):
204
- pre = ()
205
- else:
206
- pre = pre[0], int(pre[1])
207
- if post == (None, None):
208
- post = ()
209
- else:
210
- post = post[0], int(post[1])
211
- if dev == (None, None):
212
- dev = ()
213
- else:
214
- dev = dev[0], int(dev[1])
215
- if local is None:
216
- local = ()
217
- else:
218
- local = tuple([int(s) for s in local.split('.')])
219
- if not pre:
220
- # either before pre-release, or final release and after
221
- if not post and dev:
222
- # before pre-release
223
- pre = ('a', -1) # to sort before a0
224
- else:
225
- pre = ('z',) # to sort after all pre-releases
226
- # now look at the state of post and dev.
227
- if not post:
228
- post = ('_',) # sort before 'a'
229
- if not dev:
230
- dev = ('final',)
231
-
232
- #print('%s -> %s' % (s, m.groups()))
233
- return nums, pre, post, dev, local
234
-
235
-
236
- _normalized_key = _pep426_key
237
-
238
-
239
- class NormalizedVersion(Version):
240
- """A rational version.
241
-
242
- Good:
243
- 1.2 # equivalent to "1.2.0"
244
- 1.2.0
245
- 1.2a1
246
- 1.2.3a2
247
- 1.2.3b1
248
- 1.2.3c1
249
- 1.2.3.4
250
- TODO: fill this out
251
-
252
- Bad:
253
- 1 # mininum two numbers
254
- 1.2a # release level must have a release serial
255
- 1.2.3b
256
- """
257
- def parse(self, s):
258
- result = _normalized_key(s)
259
- # _normalized_key loses trailing zeroes in the release
260
- # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0
261
- # However, PEP 440 prefix matching needs it: for example,
262
- # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0).
263
- m = PEP426_VERSION_RE.match(s) # must succeed
264
- groups = m.groups()
265
- self._release_clause = tuple(int(v) for v in groups[0].split('.'))
266
- return result
267
-
268
- PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev'])
269
-
270
- @property
271
- def is_prerelease(self):
272
- return any(t[0] in self.PREREL_TAGS for t in self._parts if t)
273
-
274
-
275
- def _match_prefix(x, y):
276
- x = str(x)
277
- y = str(y)
278
- if x == y:
279
- return True
280
- if not x.startswith(y):
281
- return False
282
- n = len(y)
283
- return x[n] == '.'
284
-
285
-
286
- class NormalizedMatcher(Matcher):
287
- version_class = NormalizedVersion
288
-
289
- # value is either a callable or the name of a method
290
- _operators = {
291
- '~=': '_match_compatible',
292
- '<': '_match_lt',
293
- '>': '_match_gt',
294
- '<=': '_match_le',
295
- '>=': '_match_ge',
296
- '==': '_match_eq',
297
- '!=': '_match_ne',
298
- }
299
-
300
- def _adjust_local(self, version, constraint, prefix):
301
- if prefix:
302
- strip_local = '-' not in constraint and version._parts[-1]
303
- else:
304
- # both constraint and version are
305
- # NormalizedVersion instances.
306
- # If constraint does not have a local component,
307
- # ensure the version doesn't, either.
308
- strip_local = not constraint._parts[-1] and version._parts[-1]
309
- if strip_local:
310
- s = version._string.split('-', 1)[0]
311
- version = self.version_class(s)
312
- return version, constraint
313
-
314
- def _match_lt(self, version, constraint, prefix):
315
- version, constraint = self._adjust_local(version, constraint, prefix)
316
- if version >= constraint:
317
- return False
318
- release_clause = constraint._release_clause
319
- pfx = '.'.join([str(i) for i in release_clause])
320
- return not _match_prefix(version, pfx)
321
-
322
- def _match_gt(self, version, constraint, prefix):
323
- version, constraint = self._adjust_local(version, constraint, prefix)
324
- if version <= constraint:
325
- return False
326
- release_clause = constraint._release_clause
327
- pfx = '.'.join([str(i) for i in release_clause])
328
- return not _match_prefix(version, pfx)
329
-
330
- def _match_le(self, version, constraint, prefix):
331
- version, constraint = self._adjust_local(version, constraint, prefix)
332
- return version <= constraint
333
-
334
- def _match_ge(self, version, constraint, prefix):
335
- version, constraint = self._adjust_local(version, constraint, prefix)
336
- return version >= constraint
337
-
338
- def _match_eq(self, version, constraint, prefix):
339
- version, constraint = self._adjust_local(version, constraint, prefix)
340
- if not prefix:
341
- result = (version == constraint)
342
- else:
343
- result = _match_prefix(version, constraint)
344
- return result
345
-
346
- def _match_ne(self, version, constraint, prefix):
347
- version, constraint = self._adjust_local(version, constraint, prefix)
348
- if not prefix:
349
- result = (version != constraint)
350
- else:
351
- result = not _match_prefix(version, constraint)
352
- return result
353
-
354
- def _match_compatible(self, version, constraint, prefix):
355
- version, constraint = self._adjust_local(version, constraint, prefix)
356
- if version == constraint:
357
- return True
358
- if version < constraint:
359
- return False
360
- release_clause = constraint._release_clause
361
- if len(release_clause) > 1:
362
- release_clause = release_clause[:-1]
363
- pfx = '.'.join([str(i) for i in release_clause])
364
- return _match_prefix(version, pfx)
365
-
366
- _REPLACEMENTS = (
367
- (re.compile('[.+-]$'), ''), # remove trailing puncts
368
- (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start
369
- (re.compile('^[.-]'), ''), # remove leading puncts
370
- (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses
371
- (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion)
372
- (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion)
373
- (re.compile('[.]{2,}'), '.'), # multiple runs of '.'
374
- (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha
375
- (re.compile(r'\b(pre-alpha|prealpha)\b'),
376
- 'pre.alpha'), # standardise
377
- (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses
378
- )
379
-
380
- _SUFFIX_REPLACEMENTS = (
381
- (re.compile('^[:~._+-]+'), ''), # remove leading puncts
382
- (re.compile('[,*")([\]]'), ''), # remove unwanted chars
383
- (re.compile('[~:+_ -]'), '.'), # replace illegal chars
384
- (re.compile('[.]{2,}'), '.'), # multiple runs of '.'
385
- (re.compile(r'\.$'), ''), # trailing '.'
386
- )
387
-
388
- _NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)')
389
-
390
-
391
- def _suggest_semantic_version(s):
392
- """
393
- Try to suggest a semantic form for a version for which
394
- _suggest_normalized_version couldn't come up with anything.
395
- """
396
- result = s.strip().lower()
397
- for pat, repl in _REPLACEMENTS:
398
- result = pat.sub(repl, result)
399
- if not result:
400
- result = '0.0.0'
401
-
402
- # Now look for numeric prefix, and separate it out from
403
- # the rest.
404
- #import pdb; pdb.set_trace()
405
- m = _NUMERIC_PREFIX.match(result)
406
- if not m:
407
- prefix = '0.0.0'
408
- suffix = result
409
- else:
410
- prefix = m.groups()[0].split('.')
411
- prefix = [int(i) for i in prefix]
412
- while len(prefix) < 3:
413
- prefix.append(0)
414
- if len(prefix) == 3:
415
- suffix = result[m.end():]
416
- else:
417
- suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():]
418
- prefix = prefix[:3]
419
- prefix = '.'.join([str(i) for i in prefix])
420
- suffix = suffix.strip()
421
- if suffix:
422
- #import pdb; pdb.set_trace()
423
- # massage the suffix.
424
- for pat, repl in _SUFFIX_REPLACEMENTS:
425
- suffix = pat.sub(repl, suffix)
426
-
427
- if not suffix:
428
- result = prefix
429
- else:
430
- sep = '-' if 'dev' in suffix else '+'
431
- result = prefix + sep + suffix
432
- if not is_semver(result):
433
- result = None
434
- return result
435
-
436
-
437
- def _suggest_normalized_version(s):
438
- """Suggest a normalized version close to the given version string.
439
-
440
- If you have a version string that isn't rational (i.e. NormalizedVersion
441
- doesn't like it) then you might be able to get an equivalent (or close)
442
- rational version from this function.
443
-
444
- This does a number of simple normalizations to the given string, based
445
- on observation of versions currently in use on PyPI. Given a dump of
446
- those version during PyCon 2009, 4287 of them:
447
- - 2312 (53.93%) match NormalizedVersion without change
448
- with the automatic suggestion
449
- - 3474 (81.04%) match when using this suggestion method
450
-
451
- @param s {str} An irrational version string.
452
- @returns A rational version string, or None, if couldn't determine one.
453
- """
454
- try:
455
- _normalized_key(s)
456
- return s # already rational
457
- except UnsupportedVersionError:
458
- pass
459
-
460
- rs = s.lower()
461
-
462
- # part of this could use maketrans
463
- for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'),
464
- ('beta', 'b'), ('rc', 'c'), ('-final', ''),
465
- ('-pre', 'c'),
466
- ('-release', ''), ('.release', ''), ('-stable', ''),
467
- ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''),
468
- ('final', '')):
469
- rs = rs.replace(orig, repl)
470
-
471
- # if something ends with dev or pre, we add a 0
472
- rs = re.sub(r"pre$", r"pre0", rs)
473
- rs = re.sub(r"dev$", r"dev0", rs)
474
-
475
- # if we have something like "b-2" or "a.2" at the end of the
476
- # version, that is pobably beta, alpha, etc
477
- # let's remove the dash or dot
478
- rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs)
479
-
480
- # 1.0-dev-r371 -> 1.0.dev371
481
- # 0.1-dev-r79 -> 0.1.dev79
482
- rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs)
483
-
484
- # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1
485
- rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs)
486
-
487
- # Clean: v0.3, v1.0
488
- if rs.startswith('v'):
489
- rs = rs[1:]
490
-
491
- # Clean leading '0's on numbers.
492
- #TODO: unintended side-effect on, e.g., "2003.05.09"
493
- # PyPI stats: 77 (~2%) better
494
- rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs)
495
-
496
- # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers
497
- # zero.
498
- # PyPI stats: 245 (7.56%) better
499
- rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs)
500
-
501
- # the 'dev-rNNN' tag is a dev tag
502
- rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs)
503
-
504
- # clean the - when used as a pre delimiter
505
- rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs)
506
-
507
- # a terminal "dev" or "devel" can be changed into ".dev0"
508
- rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs)
509
-
510
- # a terminal "dev" can be changed into ".dev0"
511
- rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs)
512
-
513
- # a terminal "final" or "stable" can be removed
514
- rs = re.sub(r"(final|stable)$", "", rs)
515
-
516
- # The 'r' and the '-' tags are post release tags
517
- # 0.4a1.r10 -> 0.4a1.post10
518
- # 0.9.33-17222 -> 0.9.33.post17222
519
- # 0.9.33-r17222 -> 0.9.33.post17222
520
- rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs)
521
-
522
- # Clean 'r' instead of 'dev' usage:
523
- # 0.9.33+r17222 -> 0.9.33.dev17222
524
- # 1.0dev123 -> 1.0.dev123
525
- # 1.0.git123 -> 1.0.dev123
526
- # 1.0.bzr123 -> 1.0.dev123
527
- # 0.1a0dev.123 -> 0.1a0.dev123
528
- # PyPI stats: ~150 (~4%) better
529
- rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs)
530
-
531
- # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage:
532
- # 0.2.pre1 -> 0.2c1
533
- # 0.2-c1 -> 0.2c1
534
- # 1.0preview123 -> 1.0c123
535
- # PyPI stats: ~21 (0.62%) better
536
- rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs)
537
-
538
- # Tcl/Tk uses "px" for their post release markers
539
- rs = re.sub(r"p(\d+)$", r".post\1", rs)
540
-
541
- try:
542
- _normalized_key(rs)
543
- except UnsupportedVersionError:
544
- rs = None
545
- return rs
546
-
547
- #
548
- # Legacy version processing (distribute-compatible)
549
- #
550
-
551
- _VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I)
552
- _VERSION_REPLACE = {
553
- 'pre': 'c',
554
- 'preview': 'c',
555
- '-': 'final-',
556
- 'rc': 'c',
557
- 'dev': '@',
558
- '': None,
559
- '.': None,
560
- }
561
-
562
-
563
- def _legacy_key(s):
564
- def get_parts(s):
565
- result = []
566
- for p in _VERSION_PART.split(s.lower()):
567
- p = _VERSION_REPLACE.get(p, p)
568
- if p:
569
- if '0' <= p[:1] <= '9':
570
- p = p.zfill(8)
571
- else:
572
- p = '*' + p
573
- result.append(p)
574
- result.append('*final')
575
- return result
576
-
577
- result = []
578
- for p in get_parts(s):
579
- if p.startswith('*'):
580
- if p < '*final':
581
- while result and result[-1] == '*final-':
582
- result.pop()
583
- while result and result[-1] == '00000000':
584
- result.pop()
585
- result.append(p)
586
- return tuple(result)
587
-
588
-
589
- class LegacyVersion(Version):
590
- def parse(self, s):
591
- return _legacy_key(s)
592
-
593
- @property
594
- def is_prerelease(self):
595
- result = False
596
- for x in self._parts:
597
- if (isinstance(x, string_types) and x.startswith('*') and
598
- x < '*final'):
599
- result = True
600
- break
601
- return result
602
-
603
-
604
- class LegacyMatcher(Matcher):
605
- version_class = LegacyVersion
606
-
607
- _operators = dict(Matcher._operators)
608
- _operators['~='] = '_match_compatible'
609
-
610
- numeric_re = re.compile('^(\d+(\.\d+)*)')
611
-
612
- def _match_compatible(self, version, constraint, prefix):
613
- if version < constraint:
614
- return False
615
- m = self.numeric_re.match(str(constraint))
616
- if not m:
617
- logger.warning('Cannot compute compatible match for version %s '
618
- ' and constraint %s', version, constraint)
619
- return True
620
- s = m.groups()[0]
621
- if '.' in s:
622
- s = s.rsplit('.', 1)[0]
623
- return _match_prefix(version, s)
624
-
625
- #
626
- # Semantic versioning
627
- #
628
-
629
- _SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)'
630
- r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?'
631
- r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I)
632
-
633
-
634
- def is_semver(s):
635
- return _SEMVER_RE.match(s)
636
-
637
-
638
- def _semantic_key(s):
639
- def make_tuple(s, absent):
640
- if s is None:
641
- result = (absent,)
642
- else:
643
- parts = s[1:].split('.')
644
- # We can't compare ints and strings on Python 3, so fudge it
645
- # by zero-filling numeric values so simulate a numeric comparison
646
- result = tuple([p.zfill(8) if p.isdigit() else p for p in parts])
647
- return result
648
-
649
- m = is_semver(s)
650
- if not m:
651
- raise UnsupportedVersionError(s)
652
- groups = m.groups()
653
- major, minor, patch = [int(i) for i in groups[:3]]
654
- # choose the '|' and '*' so that versions sort correctly
655
- pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*')
656
- return (major, minor, patch), pre, build
657
-
658
-
659
- class SemanticVersion(Version):
660
- def parse(self, s):
661
- return _semantic_key(s)
662
-
663
- @property
664
- def is_prerelease(self):
665
- return self._parts[1][0] != '|'
666
-
667
-
668
- class SemanticMatcher(Matcher):
669
- version_class = SemanticVersion
670
-
671
-
672
- class VersionScheme(object):
673
- def __init__(self, key, matcher, suggester=None):
674
- self.key = key
675
- self.matcher = matcher
676
- self.suggester = suggester
677
-
678
- def is_valid_version(self, s):
679
- try:
680
- self.matcher.version_class(s)
681
- result = True
682
- except UnsupportedVersionError:
683
- result = False
684
- return result
685
-
686
- def is_valid_matcher(self, s):
687
- try:
688
- self.matcher(s)
689
- result = True
690
- except UnsupportedVersionError:
691
- result = False
692
- return result
693
-
694
- def is_valid_constraint_list(self, s):
695
- """
696
- Used for processing some metadata fields
697
- """
698
- return self.is_valid_matcher('dummy_name (%s)' % s)
699
-
700
- def suggest(self, s):
701
- if self.suggester is None:
702
- result = None
703
- else:
704
- result = self.suggester(s)
705
- return result
706
-
707
- _SCHEMES = {
708
- 'normalized': VersionScheme(_normalized_key, NormalizedMatcher,
709
- _suggest_normalized_version),
710
- 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s),
711
- 'semantic': VersionScheme(_semantic_key, SemanticMatcher,
712
- _suggest_semantic_version),
713
- }
714
-
715
- _SCHEMES['default'] = _SCHEMES['normalized']
716
-
717
-
718
- def get_scheme(name):
719
- if name not in _SCHEMES:
720
- raise ValueError('unknown scheme name: %r' % name)
721
- return _SCHEMES[name]
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012-2017 The Python Software Foundation.
4
+ # See LICENSE.txt and CONTRIBUTORS.txt.
5
+ #
6
+ """
7
+ Implementation of a flexible versioning scheme providing support for PEP-440,
8
+ setuptools-compatible and semantic versioning.
9
+ """
10
+
11
+ import logging
12
+ import re
13
+
14
+ from .compat import string_types
15
+ from .util import parse_requirement
16
+
17
+ __all__ = ['NormalizedVersion', 'NormalizedMatcher',
18
+ 'LegacyVersion', 'LegacyMatcher',
19
+ 'SemanticVersion', 'SemanticMatcher',
20
+ 'UnsupportedVersionError', 'get_scheme']
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class UnsupportedVersionError(ValueError):
26
+ """This is an unsupported version."""
27
+ pass
28
+
29
+
30
+ class Version(object):
31
+ def __init__(self, s):
32
+ self._string = s = s.strip()
33
+ self._parts = parts = self.parse(s)
34
+ assert isinstance(parts, tuple)
35
+ assert len(parts) > 0
36
+
37
+ def parse(self, s):
38
+ raise NotImplementedError('please implement in a subclass')
39
+
40
+ def _check_compatible(self, other):
41
+ if type(self) != type(other):
42
+ raise TypeError('cannot compare %r and %r' % (self, other))
43
+
44
+ def __eq__(self, other):
45
+ self._check_compatible(other)
46
+ return self._parts == other._parts
47
+
48
+ def __ne__(self, other):
49
+ return not self.__eq__(other)
50
+
51
+ def __lt__(self, other):
52
+ self._check_compatible(other)
53
+ return self._parts < other._parts
54
+
55
+ def __gt__(self, other):
56
+ return not (self.__lt__(other) or self.__eq__(other))
57
+
58
+ def __le__(self, other):
59
+ return self.__lt__(other) or self.__eq__(other)
60
+
61
+ def __ge__(self, other):
62
+ return self.__gt__(other) or self.__eq__(other)
63
+
64
+ # See http://docs.python.org/reference/datamodel#object.__hash__
65
+ def __hash__(self):
66
+ return hash(self._parts)
67
+
68
+ def __repr__(self):
69
+ return "%s('%s')" % (self.__class__.__name__, self._string)
70
+
71
+ def __str__(self):
72
+ return self._string
73
+
74
+ @property
75
+ def is_prerelease(self):
76
+ raise NotImplementedError('Please implement in subclasses.')
77
+
78
+
79
+ class Matcher(object):
80
+ version_class = None
81
+
82
+ # value is either a callable or the name of a method
83
+ _operators = {
84
+ '<': lambda v, c, p: v < c,
85
+ '>': lambda v, c, p: v > c,
86
+ '<=': lambda v, c, p: v == c or v < c,
87
+ '>=': lambda v, c, p: v == c or v > c,
88
+ '==': lambda v, c, p: v == c,
89
+ '===': lambda v, c, p: v == c,
90
+ # by default, compatible => >=.
91
+ '~=': lambda v, c, p: v == c or v > c,
92
+ '!=': lambda v, c, p: v != c,
93
+ }
94
+
95
+ # this is a method only to support alternative implementations
96
+ # via overriding
97
+ def parse_requirement(self, s):
98
+ return parse_requirement(s)
99
+
100
+ def __init__(self, s):
101
+ if self.version_class is None:
102
+ raise ValueError('Please specify a version class')
103
+ self._string = s = s.strip()
104
+ r = self.parse_requirement(s)
105
+ if not r:
106
+ raise ValueError('Not valid: %r' % s)
107
+ self.name = r.name
108
+ self.key = self.name.lower() # for case-insensitive comparisons
109
+ clist = []
110
+ if r.constraints:
111
+ # import pdb; pdb.set_trace()
112
+ for op, s in r.constraints:
113
+ if s.endswith('.*'):
114
+ if op not in ('==', '!='):
115
+ raise ValueError('\'.*\' not allowed for '
116
+ '%r constraints' % op)
117
+ # Could be a partial version (e.g. for '2.*') which
118
+ # won't parse as a version, so keep it as a string
119
+ vn, prefix = s[:-2], True
120
+ # Just to check that vn is a valid version
121
+ self.version_class(vn)
122
+ else:
123
+ # Should parse as a version, so we can create an
124
+ # instance for the comparison
125
+ vn, prefix = self.version_class(s), False
126
+ clist.append((op, vn, prefix))
127
+ self._parts = tuple(clist)
128
+
129
+ def match(self, version):
130
+ """
131
+ Check if the provided version matches the constraints.
132
+
133
+ :param version: The version to match against this instance.
134
+ :type version: String or :class:`Version` instance.
135
+ """
136
+ if isinstance(version, string_types):
137
+ version = self.version_class(version)
138
+ for operator, constraint, prefix in self._parts:
139
+ f = self._operators.get(operator)
140
+ if isinstance(f, string_types):
141
+ f = getattr(self, f)
142
+ if not f:
143
+ msg = ('%r not implemented '
144
+ 'for %s' % (operator, self.__class__.__name__))
145
+ raise NotImplementedError(msg)
146
+ if not f(version, constraint, prefix):
147
+ return False
148
+ return True
149
+
150
+ @property
151
+ def exact_version(self):
152
+ result = None
153
+ if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='):
154
+ result = self._parts[0][1]
155
+ return result
156
+
157
+ def _check_compatible(self, other):
158
+ if type(self) != type(other) or self.name != other.name:
159
+ raise TypeError('cannot compare %s and %s' % (self, other))
160
+
161
+ def __eq__(self, other):
162
+ self._check_compatible(other)
163
+ return self.key == other.key and self._parts == other._parts
164
+
165
+ def __ne__(self, other):
166
+ return not self.__eq__(other)
167
+
168
+ # See http://docs.python.org/reference/datamodel#object.__hash__
169
+ def __hash__(self):
170
+ return hash(self.key) + hash(self._parts)
171
+
172
+ def __repr__(self):
173
+ return "%s(%r)" % (self.__class__.__name__, self._string)
174
+
175
+ def __str__(self):
176
+ return self._string
177
+
178
+
179
+ PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?'
180
+ r'(\.(post)(\d+))?(\.(dev)(\d+))?'
181
+ r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$')
182
+
183
+
184
+ def _pep_440_key(s):
185
+ s = s.strip()
186
+ m = PEP440_VERSION_RE.match(s)
187
+ if not m:
188
+ raise UnsupportedVersionError('Not a valid version: %s' % s)
189
+ groups = m.groups()
190
+ nums = tuple(int(v) for v in groups[1].split('.'))
191
+ while len(nums) > 1 and nums[-1] == 0:
192
+ nums = nums[:-1]
193
+
194
+ if not groups[0]:
195
+ epoch = 0
196
+ else:
197
+ epoch = int(groups[0])
198
+ pre = groups[4:6]
199
+ post = groups[7:9]
200
+ dev = groups[10:12]
201
+ local = groups[13]
202
+ if pre == (None, None):
203
+ pre = ()
204
+ else:
205
+ pre = pre[0], int(pre[1])
206
+ if post == (None, None):
207
+ post = ()
208
+ else:
209
+ post = post[0], int(post[1])
210
+ if dev == (None, None):
211
+ dev = ()
212
+ else:
213
+ dev = dev[0], int(dev[1])
214
+ if local is None:
215
+ local = ()
216
+ else:
217
+ parts = []
218
+ for part in local.split('.'):
219
+ # to ensure that numeric compares as > lexicographic, avoid
220
+ # comparing them directly, but encode a tuple which ensures
221
+ # correct sorting
222
+ if part.isdigit():
223
+ part = (1, int(part))
224
+ else:
225
+ part = (0, part)
226
+ parts.append(part)
227
+ local = tuple(parts)
228
+ if not pre:
229
+ # either before pre-release, or final release and after
230
+ if not post and dev:
231
+ # before pre-release
232
+ pre = ('a', -1) # to sort before a0
233
+ else:
234
+ pre = ('z',) # to sort after all pre-releases
235
+ # now look at the state of post and dev.
236
+ if not post:
237
+ post = ('_',) # sort before 'a'
238
+ if not dev:
239
+ dev = ('final',)
240
+
241
+ #print('%s -> %s' % (s, m.groups()))
242
+ return epoch, nums, pre, post, dev, local
243
+
244
+
245
+ _normalized_key = _pep_440_key
246
+
247
+
248
+ class NormalizedVersion(Version):
249
+ """A rational version.
250
+
251
+ Good:
252
+ 1.2 # equivalent to "1.2.0"
253
+ 1.2.0
254
+ 1.2a1
255
+ 1.2.3a2
256
+ 1.2.3b1
257
+ 1.2.3c1
258
+ 1.2.3.4
259
+ TODO: fill this out
260
+
261
+ Bad:
262
+ 1 # minimum two numbers
263
+ 1.2a # release level must have a release serial
264
+ 1.2.3b
265
+ """
266
+ def parse(self, s):
267
+ result = _normalized_key(s)
268
+ # _normalized_key loses trailing zeroes in the release
269
+ # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0
270
+ # However, PEP 440 prefix matching needs it: for example,
271
+ # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0).
272
+ m = PEP440_VERSION_RE.match(s) # must succeed
273
+ groups = m.groups()
274
+ self._release_clause = tuple(int(v) for v in groups[1].split('.'))
275
+ return result
276
+
277
+ PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev'])
278
+
279
+ @property
280
+ def is_prerelease(self):
281
+ return any(t[0] in self.PREREL_TAGS for t in self._parts if t)
282
+
283
+
284
+ def _match_prefix(x, y):
285
+ x = str(x)
286
+ y = str(y)
287
+ if x == y:
288
+ return True
289
+ if not x.startswith(y):
290
+ return False
291
+ n = len(y)
292
+ return x[n] == '.'
293
+
294
+
295
+ class NormalizedMatcher(Matcher):
296
+ version_class = NormalizedVersion
297
+
298
+ # value is either a callable or the name of a method
299
+ _operators = {
300
+ '~=': '_match_compatible',
301
+ '<': '_match_lt',
302
+ '>': '_match_gt',
303
+ '<=': '_match_le',
304
+ '>=': '_match_ge',
305
+ '==': '_match_eq',
306
+ '===': '_match_arbitrary',
307
+ '!=': '_match_ne',
308
+ }
309
+
310
+ def _adjust_local(self, version, constraint, prefix):
311
+ if prefix:
312
+ strip_local = '+' not in constraint and version._parts[-1]
313
+ else:
314
+ # both constraint and version are
315
+ # NormalizedVersion instances.
316
+ # If constraint does not have a local component,
317
+ # ensure the version doesn't, either.
318
+ strip_local = not constraint._parts[-1] and version._parts[-1]
319
+ if strip_local:
320
+ s = version._string.split('+', 1)[0]
321
+ version = self.version_class(s)
322
+ return version, constraint
323
+
324
+ def _match_lt(self, version, constraint, prefix):
325
+ version, constraint = self._adjust_local(version, constraint, prefix)
326
+ if version >= constraint:
327
+ return False
328
+ release_clause = constraint._release_clause
329
+ pfx = '.'.join([str(i) for i in release_clause])
330
+ return not _match_prefix(version, pfx)
331
+
332
+ def _match_gt(self, version, constraint, prefix):
333
+ version, constraint = self._adjust_local(version, constraint, prefix)
334
+ if version <= constraint:
335
+ return False
336
+ release_clause = constraint._release_clause
337
+ pfx = '.'.join([str(i) for i in release_clause])
338
+ return not _match_prefix(version, pfx)
339
+
340
+ def _match_le(self, version, constraint, prefix):
341
+ version, constraint = self._adjust_local(version, constraint, prefix)
342
+ return version <= constraint
343
+
344
+ def _match_ge(self, version, constraint, prefix):
345
+ version, constraint = self._adjust_local(version, constraint, prefix)
346
+ return version >= constraint
347
+
348
+ def _match_eq(self, version, constraint, prefix):
349
+ version, constraint = self._adjust_local(version, constraint, prefix)
350
+ if not prefix:
351
+ result = (version == constraint)
352
+ else:
353
+ result = _match_prefix(version, constraint)
354
+ return result
355
+
356
+ def _match_arbitrary(self, version, constraint, prefix):
357
+ return str(version) == str(constraint)
358
+
359
+ def _match_ne(self, version, constraint, prefix):
360
+ version, constraint = self._adjust_local(version, constraint, prefix)
361
+ if not prefix:
362
+ result = (version != constraint)
363
+ else:
364
+ result = not _match_prefix(version, constraint)
365
+ return result
366
+
367
+ def _match_compatible(self, version, constraint, prefix):
368
+ version, constraint = self._adjust_local(version, constraint, prefix)
369
+ if version == constraint:
370
+ return True
371
+ if version < constraint:
372
+ return False
373
+ # if not prefix:
374
+ # return True
375
+ release_clause = constraint._release_clause
376
+ if len(release_clause) > 1:
377
+ release_clause = release_clause[:-1]
378
+ pfx = '.'.join([str(i) for i in release_clause])
379
+ return _match_prefix(version, pfx)
380
+
381
+ _REPLACEMENTS = (
382
+ (re.compile('[.+-]$'), ''), # remove trailing puncts
383
+ (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start
384
+ (re.compile('^[.-]'), ''), # remove leading puncts
385
+ (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses
386
+ (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion)
387
+ (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion)
388
+ (re.compile('[.]{2,}'), '.'), # multiple runs of '.'
389
+ (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha
390
+ (re.compile(r'\b(pre-alpha|prealpha)\b'),
391
+ 'pre.alpha'), # standardise
392
+ (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses
393
+ )
394
+
395
+ _SUFFIX_REPLACEMENTS = (
396
+ (re.compile('^[:~._+-]+'), ''), # remove leading puncts
397
+ (re.compile('[,*")([\\]]'), ''), # remove unwanted chars
398
+ (re.compile('[~:+_ -]'), '.'), # replace illegal chars
399
+ (re.compile('[.]{2,}'), '.'), # multiple runs of '.'
400
+ (re.compile(r'\.$'), ''), # trailing '.'
401
+ )
402
+
403
+ _NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)')
404
+
405
+
406
+ def _suggest_semantic_version(s):
407
+ """
408
+ Try to suggest a semantic form for a version for which
409
+ _suggest_normalized_version couldn't come up with anything.
410
+ """
411
+ result = s.strip().lower()
412
+ for pat, repl in _REPLACEMENTS:
413
+ result = pat.sub(repl, result)
414
+ if not result:
415
+ result = '0.0.0'
416
+
417
+ # Now look for numeric prefix, and separate it out from
418
+ # the rest.
419
+ #import pdb; pdb.set_trace()
420
+ m = _NUMERIC_PREFIX.match(result)
421
+ if not m:
422
+ prefix = '0.0.0'
423
+ suffix = result
424
+ else:
425
+ prefix = m.groups()[0].split('.')
426
+ prefix = [int(i) for i in prefix]
427
+ while len(prefix) < 3:
428
+ prefix.append(0)
429
+ if len(prefix) == 3:
430
+ suffix = result[m.end():]
431
+ else:
432
+ suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():]
433
+ prefix = prefix[:3]
434
+ prefix = '.'.join([str(i) for i in prefix])
435
+ suffix = suffix.strip()
436
+ if suffix:
437
+ #import pdb; pdb.set_trace()
438
+ # massage the suffix.
439
+ for pat, repl in _SUFFIX_REPLACEMENTS:
440
+ suffix = pat.sub(repl, suffix)
441
+
442
+ if not suffix:
443
+ result = prefix
444
+ else:
445
+ sep = '-' if 'dev' in suffix else '+'
446
+ result = prefix + sep + suffix
447
+ if not is_semver(result):
448
+ result = None
449
+ return result
450
+
451
+
452
+ def _suggest_normalized_version(s):
453
+ """Suggest a normalized version close to the given version string.
454
+
455
+ If you have a version string that isn't rational (i.e. NormalizedVersion
456
+ doesn't like it) then you might be able to get an equivalent (or close)
457
+ rational version from this function.
458
+
459
+ This does a number of simple normalizations to the given string, based
460
+ on observation of versions currently in use on PyPI. Given a dump of
461
+ those version during PyCon 2009, 4287 of them:
462
+ - 2312 (53.93%) match NormalizedVersion without change
463
+ with the automatic suggestion
464
+ - 3474 (81.04%) match when using this suggestion method
465
+
466
+ @param s {str} An irrational version string.
467
+ @returns A rational version string, or None, if couldn't determine one.
468
+ """
469
+ try:
470
+ _normalized_key(s)
471
+ return s # already rational
472
+ except UnsupportedVersionError:
473
+ pass
474
+
475
+ rs = s.lower()
476
+
477
+ # part of this could use maketrans
478
+ for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'),
479
+ ('beta', 'b'), ('rc', 'c'), ('-final', ''),
480
+ ('-pre', 'c'),
481
+ ('-release', ''), ('.release', ''), ('-stable', ''),
482
+ ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''),
483
+ ('final', '')):
484
+ rs = rs.replace(orig, repl)
485
+
486
+ # if something ends with dev or pre, we add a 0
487
+ rs = re.sub(r"pre$", r"pre0", rs)
488
+ rs = re.sub(r"dev$", r"dev0", rs)
489
+
490
+ # if we have something like "b-2" or "a.2" at the end of the
491
+ # version, that is probably beta, alpha, etc
492
+ # let's remove the dash or dot
493
+ rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs)
494
+
495
+ # 1.0-dev-r371 -> 1.0.dev371
496
+ # 0.1-dev-r79 -> 0.1.dev79
497
+ rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs)
498
+
499
+ # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1
500
+ rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs)
501
+
502
+ # Clean: v0.3, v1.0
503
+ if rs.startswith('v'):
504
+ rs = rs[1:]
505
+
506
+ # Clean leading '0's on numbers.
507
+ #TODO: unintended side-effect on, e.g., "2003.05.09"
508
+ # PyPI stats: 77 (~2%) better
509
+ rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs)
510
+
511
+ # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers
512
+ # zero.
513
+ # PyPI stats: 245 (7.56%) better
514
+ rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs)
515
+
516
+ # the 'dev-rNNN' tag is a dev tag
517
+ rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs)
518
+
519
+ # clean the - when used as a pre delimiter
520
+ rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs)
521
+
522
+ # a terminal "dev" or "devel" can be changed into ".dev0"
523
+ rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs)
524
+
525
+ # a terminal "dev" can be changed into ".dev0"
526
+ rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs)
527
+
528
+ # a terminal "final" or "stable" can be removed
529
+ rs = re.sub(r"(final|stable)$", "", rs)
530
+
531
+ # The 'r' and the '-' tags are post release tags
532
+ # 0.4a1.r10 -> 0.4a1.post10
533
+ # 0.9.33-17222 -> 0.9.33.post17222
534
+ # 0.9.33-r17222 -> 0.9.33.post17222
535
+ rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs)
536
+
537
+ # Clean 'r' instead of 'dev' usage:
538
+ # 0.9.33+r17222 -> 0.9.33.dev17222
539
+ # 1.0dev123 -> 1.0.dev123
540
+ # 1.0.git123 -> 1.0.dev123
541
+ # 1.0.bzr123 -> 1.0.dev123
542
+ # 0.1a0dev.123 -> 0.1a0.dev123
543
+ # PyPI stats: ~150 (~4%) better
544
+ rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs)
545
+
546
+ # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage:
547
+ # 0.2.pre1 -> 0.2c1
548
+ # 0.2-c1 -> 0.2c1
549
+ # 1.0preview123 -> 1.0c123
550
+ # PyPI stats: ~21 (0.62%) better
551
+ rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs)
552
+
553
+ # Tcl/Tk uses "px" for their post release markers
554
+ rs = re.sub(r"p(\d+)$", r".post\1", rs)
555
+
556
+ try:
557
+ _normalized_key(rs)
558
+ except UnsupportedVersionError:
559
+ rs = None
560
+ return rs
561
+
562
+ #
563
+ # Legacy version processing (distribute-compatible)
564
+ #
565
+
566
+ _VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I)
567
+ _VERSION_REPLACE = {
568
+ 'pre': 'c',
569
+ 'preview': 'c',
570
+ '-': 'final-',
571
+ 'rc': 'c',
572
+ 'dev': '@',
573
+ '': None,
574
+ '.': None,
575
+ }
576
+
577
+
578
+ def _legacy_key(s):
579
+ def get_parts(s):
580
+ result = []
581
+ for p in _VERSION_PART.split(s.lower()):
582
+ p = _VERSION_REPLACE.get(p, p)
583
+ if p:
584
+ if '0' <= p[:1] <= '9':
585
+ p = p.zfill(8)
586
+ else:
587
+ p = '*' + p
588
+ result.append(p)
589
+ result.append('*final')
590
+ return result
591
+
592
+ result = []
593
+ for p in get_parts(s):
594
+ if p.startswith('*'):
595
+ if p < '*final':
596
+ while result and result[-1] == '*final-':
597
+ result.pop()
598
+ while result and result[-1] == '00000000':
599
+ result.pop()
600
+ result.append(p)
601
+ return tuple(result)
602
+
603
+
604
+ class LegacyVersion(Version):
605
+ def parse(self, s):
606
+ return _legacy_key(s)
607
+
608
+ @property
609
+ def is_prerelease(self):
610
+ result = False
611
+ for x in self._parts:
612
+ if (isinstance(x, string_types) and x.startswith('*') and
613
+ x < '*final'):
614
+ result = True
615
+ break
616
+ return result
617
+
618
+
619
+ class LegacyMatcher(Matcher):
620
+ version_class = LegacyVersion
621
+
622
+ _operators = dict(Matcher._operators)
623
+ _operators['~='] = '_match_compatible'
624
+
625
+ numeric_re = re.compile(r'^(\d+(\.\d+)*)')
626
+
627
+ def _match_compatible(self, version, constraint, prefix):
628
+ if version < constraint:
629
+ return False
630
+ m = self.numeric_re.match(str(constraint))
631
+ if not m:
632
+ logger.warning('Cannot compute compatible match for version %s '
633
+ ' and constraint %s', version, constraint)
634
+ return True
635
+ s = m.groups()[0]
636
+ if '.' in s:
637
+ s = s.rsplit('.', 1)[0]
638
+ return _match_prefix(version, s)
639
+
640
+ #
641
+ # Semantic versioning
642
+ #
643
+
644
+ _SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)'
645
+ r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?'
646
+ r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I)
647
+
648
+
649
+ def is_semver(s):
650
+ return _SEMVER_RE.match(s)
651
+
652
+
653
+ def _semantic_key(s):
654
+ def make_tuple(s, absent):
655
+ if s is None:
656
+ result = (absent,)
657
+ else:
658
+ parts = s[1:].split('.')
659
+ # We can't compare ints and strings on Python 3, so fudge it
660
+ # by zero-filling numeric values so simulate a numeric comparison
661
+ result = tuple([p.zfill(8) if p.isdigit() else p for p in parts])
662
+ return result
663
+
664
+ m = is_semver(s)
665
+ if not m:
666
+ raise UnsupportedVersionError(s)
667
+ groups = m.groups()
668
+ major, minor, patch = [int(i) for i in groups[:3]]
669
+ # choose the '|' and '*' so that versions sort correctly
670
+ pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*')
671
+ return (major, minor, patch), pre, build
672
+
673
+
674
+ class SemanticVersion(Version):
675
+ def parse(self, s):
676
+ return _semantic_key(s)
677
+
678
+ @property
679
+ def is_prerelease(self):
680
+ return self._parts[1][0] != '|'
681
+
682
+
683
+ class SemanticMatcher(Matcher):
684
+ version_class = SemanticVersion
685
+
686
+
687
+ class VersionScheme(object):
688
+ def __init__(self, key, matcher, suggester=None):
689
+ self.key = key
690
+ self.matcher = matcher
691
+ self.suggester = suggester
692
+
693
+ def is_valid_version(self, s):
694
+ try:
695
+ self.matcher.version_class(s)
696
+ result = True
697
+ except UnsupportedVersionError:
698
+ result = False
699
+ return result
700
+
701
+ def is_valid_matcher(self, s):
702
+ try:
703
+ self.matcher(s)
704
+ result = True
705
+ except UnsupportedVersionError:
706
+ result = False
707
+ return result
708
+
709
+ def is_valid_constraint_list(self, s):
710
+ """
711
+ Used for processing some metadata fields
712
+ """
713
+ return self.is_valid_matcher('dummy_name (%s)' % s)
714
+
715
+ def suggest(self, s):
716
+ if self.suggester is None:
717
+ result = None
718
+ else:
719
+ result = self.suggester(s)
720
+ return result
721
+
722
+ _SCHEMES = {
723
+ 'normalized': VersionScheme(_normalized_key, NormalizedMatcher,
724
+ _suggest_normalized_version),
725
+ 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s),
726
+ 'semantic': VersionScheme(_semantic_key, SemanticMatcher,
727
+ _suggest_semantic_version),
728
+ }
729
+
730
+ _SCHEMES['default'] = _SCHEMES['normalized']
731
+
732
+
733
+ def get_scheme(name):
734
+ if name not in _SCHEMES:
735
+ raise ValueError('unknown scheme name: %r' % name)
736
+ return _SCHEMES[name]