rigid 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (364) hide show
  1. checksums.yaml +7 -0
  2. data/bin/rigid +4 -0
  3. data/rigid +16 -0
  4. data/vendor/PyYAML-3.12.dist-info/DESCRIPTION.rst +12 -0
  5. data/vendor/PyYAML-3.12.dist-info/INSTALLER +1 -0
  6. data/vendor/PyYAML-3.12.dist-info/METADATA +35 -0
  7. data/vendor/PyYAML-3.12.dist-info/RECORD +42 -0
  8. data/vendor/PyYAML-3.12.dist-info/WHEEL +5 -0
  9. data/vendor/PyYAML-3.12.dist-info/metadata.json +1 -0
  10. data/vendor/PyYAML-3.12.dist-info/top_level.txt +2 -0
  11. data/vendor/_yaml.so +0 -0
  12. data/vendor/click/__init__.py +98 -0
  13. data/vendor/click/__init__.pyc +0 -0
  14. data/vendor/click/_bashcomplete.py +83 -0
  15. data/vendor/click/_bashcomplete.pyc +0 -0
  16. data/vendor/click/_compat.py +642 -0
  17. data/vendor/click/_compat.pyc +0 -0
  18. data/vendor/click/_termui_impl.py +547 -0
  19. data/vendor/click/_termui_impl.pyc +0 -0
  20. data/vendor/click/_textwrap.py +38 -0
  21. data/vendor/click/_textwrap.pyc +0 -0
  22. data/vendor/click/_unicodefun.py +119 -0
  23. data/vendor/click/_unicodefun.pyc +0 -0
  24. data/vendor/click/_winconsole.py +273 -0
  25. data/vendor/click/_winconsole.pyc +0 -0
  26. data/vendor/click/core.py +1738 -0
  27. data/vendor/click/core.pyc +0 -0
  28. data/vendor/click/decorators.py +304 -0
  29. data/vendor/click/decorators.pyc +0 -0
  30. data/vendor/click/exceptions.py +201 -0
  31. data/vendor/click/exceptions.pyc +0 -0
  32. data/vendor/click/formatting.py +256 -0
  33. data/vendor/click/formatting.pyc +0 -0
  34. data/vendor/click/globals.py +48 -0
  35. data/vendor/click/globals.pyc +0 -0
  36. data/vendor/click/parser.py +426 -0
  37. data/vendor/click/parser.pyc +0 -0
  38. data/vendor/click/termui.py +539 -0
  39. data/vendor/click/termui.pyc +0 -0
  40. data/vendor/click/testing.py +322 -0
  41. data/vendor/click/testing.pyc +0 -0
  42. data/vendor/click/types.py +550 -0
  43. data/vendor/click/types.pyc +0 -0
  44. data/vendor/click/utils.py +415 -0
  45. data/vendor/click/utils.pyc +0 -0
  46. data/vendor/click-6.6.dist-info/DESCRIPTION.rst +3 -0
  47. data/vendor/click-6.6.dist-info/INSTALLER +1 -0
  48. data/vendor/click-6.6.dist-info/METADATA +16 -0
  49. data/vendor/click-6.6.dist-info/RECORD +41 -0
  50. data/vendor/click-6.6.dist-info/WHEEL +6 -0
  51. data/vendor/click-6.6.dist-info/metadata.json +1 -0
  52. data/vendor/click-6.6.dist-info/top_level.txt +1 -0
  53. data/vendor/easy_install.py +5 -0
  54. data/vendor/easy_install.pyc +0 -0
  55. data/vendor/pip-9.0.1.dist-info/DESCRIPTION.rst +39 -0
  56. data/vendor/pip-9.0.1.dist-info/INSTALLER +1 -0
  57. data/vendor/pip-9.0.1.dist-info/METADATA +69 -0
  58. data/vendor/pip-9.0.1.dist-info/RECORD +501 -0
  59. data/vendor/pip-9.0.1.dist-info/WHEEL +6 -0
  60. data/vendor/pip-9.0.1.dist-info/entry_points.txt +5 -0
  61. data/vendor/pip-9.0.1.dist-info/metadata.json +1 -0
  62. data/vendor/pip-9.0.1.dist-info/top_level.txt +1 -0
  63. data/vendor/pkg_resources/__init__.py +3051 -0
  64. data/vendor/pkg_resources/__init__.pyc +0 -0
  65. data/vendor/pkg_resources/_vendor/__init__.py +0 -0
  66. data/vendor/pkg_resources/_vendor/__init__.pyc +0 -0
  67. data/vendor/pkg_resources/_vendor/appdirs.py +552 -0
  68. data/vendor/pkg_resources/_vendor/appdirs.pyc +0 -0
  69. data/vendor/pkg_resources/_vendor/packaging/__about__.py +21 -0
  70. data/vendor/pkg_resources/_vendor/packaging/__about__.pyc +0 -0
  71. data/vendor/pkg_resources/_vendor/packaging/__init__.py +14 -0
  72. data/vendor/pkg_resources/_vendor/packaging/__init__.pyc +0 -0
  73. data/vendor/pkg_resources/_vendor/packaging/_compat.py +30 -0
  74. data/vendor/pkg_resources/_vendor/packaging/_compat.pyc +0 -0
  75. data/vendor/pkg_resources/_vendor/packaging/_structures.py +68 -0
  76. data/vendor/pkg_resources/_vendor/packaging/_structures.pyc +0 -0
  77. data/vendor/pkg_resources/_vendor/packaging/markers.py +287 -0
  78. data/vendor/pkg_resources/_vendor/packaging/markers.pyc +0 -0
  79. data/vendor/pkg_resources/_vendor/packaging/requirements.py +127 -0
  80. data/vendor/pkg_resources/_vendor/packaging/requirements.pyc +0 -0
  81. data/vendor/pkg_resources/_vendor/packaging/specifiers.py +774 -0
  82. data/vendor/pkg_resources/_vendor/packaging/specifiers.pyc +0 -0
  83. data/vendor/pkg_resources/_vendor/packaging/utils.py +14 -0
  84. data/vendor/pkg_resources/_vendor/packaging/utils.pyc +0 -0
  85. data/vendor/pkg_resources/_vendor/packaging/version.py +393 -0
  86. data/vendor/pkg_resources/_vendor/packaging/version.pyc +0 -0
  87. data/vendor/pkg_resources/_vendor/pyparsing.py +5696 -0
  88. data/vendor/pkg_resources/_vendor/pyparsing.pyc +0 -0
  89. data/vendor/pkg_resources/_vendor/six.py +868 -0
  90. data/vendor/pkg_resources/_vendor/six.pyc +0 -0
  91. data/vendor/pkg_resources/extern/__init__.py +73 -0
  92. data/vendor/pkg_resources/extern/__init__.pyc +0 -0
  93. data/vendor/requests/__init__.py +86 -0
  94. data/vendor/requests/__init__.pyc +0 -0
  95. data/vendor/requests/adapters.py +503 -0
  96. data/vendor/requests/adapters.pyc +0 -0
  97. data/vendor/requests/api.py +148 -0
  98. data/vendor/requests/api.pyc +0 -0
  99. data/vendor/requests/auth.py +252 -0
  100. data/vendor/requests/auth.pyc +0 -0
  101. data/vendor/requests/cacert.pem +5616 -0
  102. data/vendor/requests/certs.py +25 -0
  103. data/vendor/requests/certs.pyc +0 -0
  104. data/vendor/requests/compat.py +66 -0
  105. data/vendor/requests/compat.pyc +0 -0
  106. data/vendor/requests/cookies.py +540 -0
  107. data/vendor/requests/cookies.pyc +0 -0
  108. data/vendor/requests/exceptions.py +114 -0
  109. data/vendor/requests/exceptions.pyc +0 -0
  110. data/vendor/requests/hooks.py +34 -0
  111. data/vendor/requests/hooks.pyc +0 -0
  112. data/vendor/requests/models.py +873 -0
  113. data/vendor/requests/models.pyc +0 -0
  114. data/vendor/requests/packages/__init__.py +36 -0
  115. data/vendor/requests/packages/__init__.pyc +0 -0
  116. data/vendor/requests/packages/chardet/__init__.py +32 -0
  117. data/vendor/requests/packages/chardet/__init__.pyc +0 -0
  118. data/vendor/requests/packages/chardet/big5freq.py +925 -0
  119. data/vendor/requests/packages/chardet/big5freq.pyc +0 -0
  120. data/vendor/requests/packages/chardet/big5prober.py +42 -0
  121. data/vendor/requests/packages/chardet/big5prober.pyc +0 -0
  122. data/vendor/requests/packages/chardet/chardetect.py +80 -0
  123. data/vendor/requests/packages/chardet/chardetect.pyc +0 -0
  124. data/vendor/requests/packages/chardet/chardistribution.py +231 -0
  125. data/vendor/requests/packages/chardet/chardistribution.pyc +0 -0
  126. data/vendor/requests/packages/chardet/charsetgroupprober.py +106 -0
  127. data/vendor/requests/packages/chardet/charsetgroupprober.pyc +0 -0
  128. data/vendor/requests/packages/chardet/charsetprober.py +62 -0
  129. data/vendor/requests/packages/chardet/charsetprober.pyc +0 -0
  130. data/vendor/requests/packages/chardet/codingstatemachine.py +61 -0
  131. data/vendor/requests/packages/chardet/codingstatemachine.pyc +0 -0
  132. data/vendor/requests/packages/chardet/compat.py +34 -0
  133. data/vendor/requests/packages/chardet/compat.pyc +0 -0
  134. data/vendor/requests/packages/chardet/constants.py +39 -0
  135. data/vendor/requests/packages/chardet/constants.pyc +0 -0
  136. data/vendor/requests/packages/chardet/cp949prober.py +44 -0
  137. data/vendor/requests/packages/chardet/cp949prober.pyc +0 -0
  138. data/vendor/requests/packages/chardet/escprober.py +86 -0
  139. data/vendor/requests/packages/chardet/escprober.pyc +0 -0
  140. data/vendor/requests/packages/chardet/escsm.py +242 -0
  141. data/vendor/requests/packages/chardet/escsm.pyc +0 -0
  142. data/vendor/requests/packages/chardet/eucjpprober.py +90 -0
  143. data/vendor/requests/packages/chardet/eucjpprober.pyc +0 -0
  144. data/vendor/requests/packages/chardet/euckrfreq.py +596 -0
  145. data/vendor/requests/packages/chardet/euckrfreq.pyc +0 -0
  146. data/vendor/requests/packages/chardet/euckrprober.py +42 -0
  147. data/vendor/requests/packages/chardet/euckrprober.pyc +0 -0
  148. data/vendor/requests/packages/chardet/euctwfreq.py +428 -0
  149. data/vendor/requests/packages/chardet/euctwfreq.pyc +0 -0
  150. data/vendor/requests/packages/chardet/euctwprober.py +41 -0
  151. data/vendor/requests/packages/chardet/euctwprober.pyc +0 -0
  152. data/vendor/requests/packages/chardet/gb2312freq.py +472 -0
  153. data/vendor/requests/packages/chardet/gb2312freq.pyc +0 -0
  154. data/vendor/requests/packages/chardet/gb2312prober.py +41 -0
  155. data/vendor/requests/packages/chardet/gb2312prober.pyc +0 -0
  156. data/vendor/requests/packages/chardet/hebrewprober.py +283 -0
  157. data/vendor/requests/packages/chardet/hebrewprober.pyc +0 -0
  158. data/vendor/requests/packages/chardet/jisfreq.py +569 -0
  159. data/vendor/requests/packages/chardet/jisfreq.pyc +0 -0
  160. data/vendor/requests/packages/chardet/jpcntx.py +227 -0
  161. data/vendor/requests/packages/chardet/jpcntx.pyc +0 -0
  162. data/vendor/requests/packages/chardet/langbulgarianmodel.py +229 -0
  163. data/vendor/requests/packages/chardet/langbulgarianmodel.pyc +0 -0
  164. data/vendor/requests/packages/chardet/langcyrillicmodel.py +329 -0
  165. data/vendor/requests/packages/chardet/langcyrillicmodel.pyc +0 -0
  166. data/vendor/requests/packages/chardet/langgreekmodel.py +225 -0
  167. data/vendor/requests/packages/chardet/langgreekmodel.pyc +0 -0
  168. data/vendor/requests/packages/chardet/langhebrewmodel.py +201 -0
  169. data/vendor/requests/packages/chardet/langhebrewmodel.pyc +0 -0
  170. data/vendor/requests/packages/chardet/langhungarianmodel.py +225 -0
  171. data/vendor/requests/packages/chardet/langhungarianmodel.pyc +0 -0
  172. data/vendor/requests/packages/chardet/langthaimodel.py +200 -0
  173. data/vendor/requests/packages/chardet/langthaimodel.pyc +0 -0
  174. data/vendor/requests/packages/chardet/latin1prober.py +139 -0
  175. data/vendor/requests/packages/chardet/latin1prober.pyc +0 -0
  176. data/vendor/requests/packages/chardet/mbcharsetprober.py +86 -0
  177. data/vendor/requests/packages/chardet/mbcharsetprober.pyc +0 -0
  178. data/vendor/requests/packages/chardet/mbcsgroupprober.py +54 -0
  179. data/vendor/requests/packages/chardet/mbcsgroupprober.pyc +0 -0
  180. data/vendor/requests/packages/chardet/mbcssm.py +572 -0
  181. data/vendor/requests/packages/chardet/mbcssm.pyc +0 -0
  182. data/vendor/requests/packages/chardet/sbcharsetprober.py +120 -0
  183. data/vendor/requests/packages/chardet/sbcharsetprober.pyc +0 -0
  184. data/vendor/requests/packages/chardet/sbcsgroupprober.py +69 -0
  185. data/vendor/requests/packages/chardet/sbcsgroupprober.pyc +0 -0
  186. data/vendor/requests/packages/chardet/sjisprober.py +91 -0
  187. data/vendor/requests/packages/chardet/sjisprober.pyc +0 -0
  188. data/vendor/requests/packages/chardet/universaldetector.py +170 -0
  189. data/vendor/requests/packages/chardet/universaldetector.pyc +0 -0
  190. data/vendor/requests/packages/chardet/utf8prober.py +76 -0
  191. data/vendor/requests/packages/chardet/utf8prober.pyc +0 -0
  192. data/vendor/requests/packages/urllib3/__init__.py +96 -0
  193. data/vendor/requests/packages/urllib3/__init__.pyc +0 -0
  194. data/vendor/requests/packages/urllib3/_collections.py +324 -0
  195. data/vendor/requests/packages/urllib3/_collections.pyc +0 -0
  196. data/vendor/requests/packages/urllib3/connection.py +330 -0
  197. data/vendor/requests/packages/urllib3/connection.pyc +0 -0
  198. data/vendor/requests/packages/urllib3/connectionpool.py +866 -0
  199. data/vendor/requests/packages/urllib3/connectionpool.pyc +0 -0
  200. data/vendor/requests/packages/urllib3/contrib/__init__.py +0 -0
  201. data/vendor/requests/packages/urllib3/contrib/__init__.pyc +0 -0
  202. data/vendor/requests/packages/urllib3/contrib/appengine.py +231 -0
  203. data/vendor/requests/packages/urllib3/contrib/appengine.pyc +0 -0
  204. data/vendor/requests/packages/urllib3/contrib/ntlmpool.py +115 -0
  205. data/vendor/requests/packages/urllib3/contrib/ntlmpool.pyc +0 -0
  206. data/vendor/requests/packages/urllib3/contrib/pyopenssl.py +358 -0
  207. data/vendor/requests/packages/urllib3/contrib/pyopenssl.pyc +0 -0
  208. data/vendor/requests/packages/urllib3/contrib/socks.py +172 -0
  209. data/vendor/requests/packages/urllib3/contrib/socks.pyc +0 -0
  210. data/vendor/requests/packages/urllib3/exceptions.py +209 -0
  211. data/vendor/requests/packages/urllib3/exceptions.pyc +0 -0
  212. data/vendor/requests/packages/urllib3/fields.py +178 -0
  213. data/vendor/requests/packages/urllib3/fields.pyc +0 -0
  214. data/vendor/requests/packages/urllib3/filepost.py +94 -0
  215. data/vendor/requests/packages/urllib3/filepost.pyc +0 -0
  216. data/vendor/requests/packages/urllib3/packages/__init__.py +5 -0
  217. data/vendor/requests/packages/urllib3/packages/__init__.pyc +0 -0
  218. data/vendor/requests/packages/urllib3/packages/ordered_dict.py +259 -0
  219. data/vendor/requests/packages/urllib3/packages/ordered_dict.pyc +0 -0
  220. data/vendor/requests/packages/urllib3/packages/six.py +868 -0
  221. data/vendor/requests/packages/urllib3/packages/six.pyc +0 -0
  222. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +13 -0
  223. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc +0 -0
  224. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +105 -0
  225. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyc +0 -0
  226. data/vendor/requests/packages/urllib3/poolmanager.py +367 -0
  227. data/vendor/requests/packages/urllib3/poolmanager.pyc +0 -0
  228. data/vendor/requests/packages/urllib3/request.py +151 -0
  229. data/vendor/requests/packages/urllib3/request.pyc +0 -0
  230. data/vendor/requests/packages/urllib3/response.py +530 -0
  231. data/vendor/requests/packages/urllib3/response.pyc +0 -0
  232. data/vendor/requests/packages/urllib3/util/__init__.py +46 -0
  233. data/vendor/requests/packages/urllib3/util/__init__.pyc +0 -0
  234. data/vendor/requests/packages/urllib3/util/connection.py +144 -0
  235. data/vendor/requests/packages/urllib3/util/connection.pyc +0 -0
  236. data/vendor/requests/packages/urllib3/util/request.py +72 -0
  237. data/vendor/requests/packages/urllib3/util/request.pyc +0 -0
  238. data/vendor/requests/packages/urllib3/util/response.py +74 -0
  239. data/vendor/requests/packages/urllib3/util/response.pyc +0 -0
  240. data/vendor/requests/packages/urllib3/util/retry.py +300 -0
  241. data/vendor/requests/packages/urllib3/util/retry.pyc +0 -0
  242. data/vendor/requests/packages/urllib3/util/ssl_.py +320 -0
  243. data/vendor/requests/packages/urllib3/util/ssl_.pyc +0 -0
  244. data/vendor/requests/packages/urllib3/util/timeout.py +242 -0
  245. data/vendor/requests/packages/urllib3/util/timeout.pyc +0 -0
  246. data/vendor/requests/packages/urllib3/util/url.py +217 -0
  247. data/vendor/requests/packages/urllib3/util/url.pyc +0 -0
  248. data/vendor/requests/sessions.py +712 -0
  249. data/vendor/requests/sessions.pyc +0 -0
  250. data/vendor/requests/status_codes.py +91 -0
  251. data/vendor/requests/status_codes.pyc +0 -0
  252. data/vendor/requests/structures.py +105 -0
  253. data/vendor/requests/structures.pyc +0 -0
  254. data/vendor/requests/utils.py +817 -0
  255. data/vendor/requests/utils.pyc +0 -0
  256. data/vendor/requests-2.11.1.dist-info/DESCRIPTION.rst +1294 -0
  257. data/vendor/requests-2.11.1.dist-info/INSTALLER +1 -0
  258. data/vendor/requests-2.11.1.dist-info/METADATA +1323 -0
  259. data/vendor/requests-2.11.1.dist-info/RECORD +170 -0
  260. data/vendor/requests-2.11.1.dist-info/WHEEL +6 -0
  261. data/vendor/requests-2.11.1.dist-info/metadata.json +1 -0
  262. data/vendor/requests-2.11.1.dist-info/top_level.txt +1 -0
  263. data/vendor/rigid/__init__.py +1 -0
  264. data/vendor/rigid/__init__.pyc +0 -0
  265. data/vendor/rigid/api.py +129 -0
  266. data/vendor/rigid/api.pyc +0 -0
  267. data/vendor/rigid/commands/__init__.py +260 -0
  268. data/vendor/rigid/commands/__init__.pyc +0 -0
  269. data/vendor/rigid/commands/deploy.py +0 -0
  270. data/vendor/rigid/commands/deploy.pyc +0 -0
  271. data/vendor/rigid/deploy.py +70 -0
  272. data/vendor/rigid/deploy.pyc +0 -0
  273. data/vendor/rigid/file_scanner.py +63 -0
  274. data/vendor/rigid/file_scanner.pyc +0 -0
  275. data/vendor/rigid/utils.py +17 -0
  276. data/vendor/rigid/utils.pyc +0 -0
  277. data/vendor/rigid-0.2.0.dist-info/DESCRIPTION.rst +3 -0
  278. data/vendor/rigid-0.2.0.dist-info/INSTALLER +1 -0
  279. data/vendor/rigid-0.2.0.dist-info/METADATA +23 -0
  280. data/vendor/rigid-0.2.0.dist-info/RECORD +49 -0
  281. data/vendor/rigid-0.2.0.dist-info/WHEEL +5 -0
  282. data/vendor/rigid-0.2.0.dist-info/entry_points.txt +3 -0
  283. data/vendor/rigid-0.2.0.dist-info/metadata.json +1 -0
  284. data/vendor/rigid-0.2.0.dist-info/top_level.txt +2 -0
  285. data/vendor/setuptools-28.8.0.dist-info/DESCRIPTION.rst +243 -0
  286. data/vendor/setuptools-28.8.0.dist-info/INSTALLER +1 -0
  287. data/vendor/setuptools-28.8.0.dist-info/METADATA +272 -0
  288. data/vendor/setuptools-28.8.0.dist-info/RECORD +143 -0
  289. data/vendor/setuptools-28.8.0.dist-info/WHEEL +6 -0
  290. data/vendor/setuptools-28.8.0.dist-info/dependency_links.txt +2 -0
  291. data/vendor/setuptools-28.8.0.dist-info/entry_points.txt +63 -0
  292. data/vendor/setuptools-28.8.0.dist-info/metadata.json +1 -0
  293. data/vendor/setuptools-28.8.0.dist-info/top_level.txt +3 -0
  294. data/vendor/setuptools-28.8.0.dist-info/zip-safe +1 -0
  295. data/vendor/tests/__init__.py +0 -0
  296. data/vendor/tests/__init__.pyc +0 -0
  297. data/vendor/tests/integration/__init__.py +0 -0
  298. data/vendor/tests/integration/__init__.pyc +0 -0
  299. data/vendor/tests/integration/test_app.py +63 -0
  300. data/vendor/tests/integration/test_app.pyc +0 -0
  301. data/vendor/tests/integration/test_apps.py +27 -0
  302. data/vendor/tests/integration/test_apps.pyc +0 -0
  303. data/vendor/tests/integration/test_deploy.py +128 -0
  304. data/vendor/tests/integration/test_deploy.pyc +0 -0
  305. data/vendor/tests/integration/test_domains.py +35 -0
  306. data/vendor/tests/integration/test_domains.pyc +0 -0
  307. data/vendor/tests/integration/test_login.py +37 -0
  308. data/vendor/tests/integration/test_login.pyc +0 -0
  309. data/vendor/tests/integration/test_promote.py +24 -0
  310. data/vendor/tests/integration/test_promote.pyc +0 -0
  311. data/vendor/tests/integration/test_token.py +33 -0
  312. data/vendor/tests/integration/test_token.pyc +0 -0
  313. data/vendor/tests/integration/test_whoami.py +24 -0
  314. data/vendor/tests/integration/test_whoami.pyc +0 -0
  315. data/vendor/tests/test_deploy.py +33 -0
  316. data/vendor/tests/test_deploy.pyc +0 -0
  317. data/vendor/tests/test_file_scanner.py +89 -0
  318. data/vendor/tests/test_file_scanner.pyc +0 -0
  319. data/vendor/tests/utils.py +78 -0
  320. data/vendor/tests/utils.pyc +0 -0
  321. data/vendor/wheel-0.30.0a0.dist-info/DESCRIPTION.rst +325 -0
  322. data/vendor/wheel-0.30.0a0.dist-info/INSTALLER +1 -0
  323. data/vendor/wheel-0.30.0a0.dist-info/LICENSE.txt +22 -0
  324. data/vendor/wheel-0.30.0a0.dist-info/METADATA +357 -0
  325. data/vendor/wheel-0.30.0a0.dist-info/RECORD +86 -0
  326. data/vendor/wheel-0.30.0a0.dist-info/WHEEL +6 -0
  327. data/vendor/wheel-0.30.0a0.dist-info/entry_points.txt +6 -0
  328. data/vendor/wheel-0.30.0a0.dist-info/metadata.json +1 -0
  329. data/vendor/wheel-0.30.0a0.dist-info/top_level.txt +1 -0
  330. data/vendor/yaml/__init__.py +315 -0
  331. data/vendor/yaml/__init__.pyc +0 -0
  332. data/vendor/yaml/composer.py +139 -0
  333. data/vendor/yaml/composer.pyc +0 -0
  334. data/vendor/yaml/constructor.py +675 -0
  335. data/vendor/yaml/constructor.pyc +0 -0
  336. data/vendor/yaml/cyaml.py +85 -0
  337. data/vendor/yaml/cyaml.pyc +0 -0
  338. data/vendor/yaml/dumper.py +62 -0
  339. data/vendor/yaml/dumper.pyc +0 -0
  340. data/vendor/yaml/emitter.py +1140 -0
  341. data/vendor/yaml/emitter.pyc +0 -0
  342. data/vendor/yaml/error.py +75 -0
  343. data/vendor/yaml/error.pyc +0 -0
  344. data/vendor/yaml/events.py +86 -0
  345. data/vendor/yaml/events.pyc +0 -0
  346. data/vendor/yaml/loader.py +40 -0
  347. data/vendor/yaml/loader.pyc +0 -0
  348. data/vendor/yaml/nodes.py +49 -0
  349. data/vendor/yaml/nodes.pyc +0 -0
  350. data/vendor/yaml/parser.py +589 -0
  351. data/vendor/yaml/parser.pyc +0 -0
  352. data/vendor/yaml/reader.py +190 -0
  353. data/vendor/yaml/reader.pyc +0 -0
  354. data/vendor/yaml/representer.py +486 -0
  355. data/vendor/yaml/representer.pyc +0 -0
  356. data/vendor/yaml/resolver.py +227 -0
  357. data/vendor/yaml/resolver.pyc +0 -0
  358. data/vendor/yaml/scanner.py +1453 -0
  359. data/vendor/yaml/scanner.pyc +0 -0
  360. data/vendor/yaml/serializer.py +111 -0
  361. data/vendor/yaml/serializer.pyc +0 -0
  362. data/vendor/yaml/tokens.py +104 -0
  363. data/vendor/yaml/tokens.pyc +0 -0
  364. metadata +407 -0
@@ -0,0 +1,547 @@
1
+ """
2
+ click._termui_impl
3
+ ~~~~~~~~~~~~~~~~~~
4
+
5
+ This module contains implementations for the termui module. To keep the
6
+ import time of Click down, some infrequently used functionality is placed
7
+ in this module and only imported as needed.
8
+
9
+ :copyright: (c) 2014 by Armin Ronacher.
10
+ :license: BSD, see LICENSE for more details.
11
+ """
12
+ import os
13
+ import sys
14
+ import time
15
+ import math
16
+ from ._compat import _default_text_stdout, range_type, PY2, isatty, \
17
+ open_stream, strip_ansi, term_len, get_best_encoding, WIN
18
+ from .utils import echo
19
+ from .exceptions import ClickException
20
+
21
+
22
+ if os.name == 'nt':
23
+ BEFORE_BAR = '\r'
24
+ AFTER_BAR = '\n'
25
+ else:
26
+ BEFORE_BAR = '\r\033[?25l'
27
+ AFTER_BAR = '\033[?25h\n'
28
+
29
+
30
+ def _length_hint(obj):
31
+ """Returns the length hint of an object."""
32
+ try:
33
+ return len(obj)
34
+ except TypeError:
35
+ try:
36
+ get_hint = type(obj).__length_hint__
37
+ except AttributeError:
38
+ return None
39
+ try:
40
+ hint = get_hint(obj)
41
+ except TypeError:
42
+ return None
43
+ if hint is NotImplemented or \
44
+ not isinstance(hint, (int, long)) or \
45
+ hint < 0:
46
+ return None
47
+ return hint
48
+
49
+
50
+ class ProgressBar(object):
51
+
52
+ def __init__(self, iterable, length=None, fill_char='#', empty_char=' ',
53
+ bar_template='%(bar)s', info_sep=' ', show_eta=True,
54
+ show_percent=None, show_pos=False, item_show_func=None,
55
+ label=None, file=None, color=None, width=30):
56
+ self.fill_char = fill_char
57
+ self.empty_char = empty_char
58
+ self.bar_template = bar_template
59
+ self.info_sep = info_sep
60
+ self.show_eta = show_eta
61
+ self.show_percent = show_percent
62
+ self.show_pos = show_pos
63
+ self.item_show_func = item_show_func
64
+ self.label = label or ''
65
+ if file is None:
66
+ file = _default_text_stdout()
67
+ self.file = file
68
+ self.color = color
69
+ self.width = width
70
+ self.autowidth = width == 0
71
+
72
+ if length is None:
73
+ length = _length_hint(iterable)
74
+ if iterable is None:
75
+ if length is None:
76
+ raise TypeError('iterable or length is required')
77
+ iterable = range_type(length)
78
+ self.iter = iter(iterable)
79
+ self.length = length
80
+ self.length_known = length is not None
81
+ self.pos = 0
82
+ self.avg = []
83
+ self.start = self.last_eta = time.time()
84
+ self.eta_known = False
85
+ self.finished = False
86
+ self.max_width = None
87
+ self.entered = False
88
+ self.current_item = None
89
+ self.is_hidden = not isatty(self.file)
90
+ self._last_line = None
91
+
92
+ def __enter__(self):
93
+ self.entered = True
94
+ self.render_progress()
95
+ return self
96
+
97
+ def __exit__(self, exc_type, exc_value, tb):
98
+ self.render_finish()
99
+
100
+ def __iter__(self):
101
+ if not self.entered:
102
+ raise RuntimeError('You need to use progress bars in a with block.')
103
+ self.render_progress()
104
+ return self
105
+
106
+ def render_finish(self):
107
+ if self.is_hidden:
108
+ return
109
+ self.file.write(AFTER_BAR)
110
+ self.file.flush()
111
+
112
+ @property
113
+ def pct(self):
114
+ if self.finished:
115
+ return 1.0
116
+ return min(self.pos / (float(self.length) or 1), 1.0)
117
+
118
+ @property
119
+ def time_per_iteration(self):
120
+ if not self.avg:
121
+ return 0.0
122
+ return sum(self.avg) / float(len(self.avg))
123
+
124
+ @property
125
+ def eta(self):
126
+ if self.length_known and not self.finished:
127
+ return self.time_per_iteration * (self.length - self.pos)
128
+ return 0.0
129
+
130
+ def format_eta(self):
131
+ if self.eta_known:
132
+ t = self.eta + 1
133
+ seconds = t % 60
134
+ t /= 60
135
+ minutes = t % 60
136
+ t /= 60
137
+ hours = t % 24
138
+ t /= 24
139
+ if t > 0:
140
+ days = t
141
+ return '%dd %02d:%02d:%02d' % (days, hours, minutes, seconds)
142
+ else:
143
+ return '%02d:%02d:%02d' % (hours, minutes, seconds)
144
+ return ''
145
+
146
+ def format_pos(self):
147
+ pos = str(self.pos)
148
+ if self.length_known:
149
+ pos += '/%s' % self.length
150
+ return pos
151
+
152
+ def format_pct(self):
153
+ return ('% 4d%%' % int(self.pct * 100))[1:]
154
+
155
+ def format_progress_line(self):
156
+ show_percent = self.show_percent
157
+
158
+ info_bits = []
159
+ if self.length_known:
160
+ bar_length = int(self.pct * self.width)
161
+ bar = self.fill_char * bar_length
162
+ bar += self.empty_char * (self.width - bar_length)
163
+ if show_percent is None:
164
+ show_percent = not self.show_pos
165
+ else:
166
+ if self.finished:
167
+ bar = self.fill_char * self.width
168
+ else:
169
+ bar = list(self.empty_char * (self.width or 1))
170
+ if self.time_per_iteration != 0:
171
+ bar[int((math.cos(self.pos * self.time_per_iteration)
172
+ / 2.0 + 0.5) * self.width)] = self.fill_char
173
+ bar = ''.join(bar)
174
+
175
+ if self.show_pos:
176
+ info_bits.append(self.format_pos())
177
+ if show_percent:
178
+ info_bits.append(self.format_pct())
179
+ if self.show_eta and self.eta_known and not self.finished:
180
+ info_bits.append(self.format_eta())
181
+ if self.item_show_func is not None:
182
+ item_info = self.item_show_func(self.current_item)
183
+ if item_info is not None:
184
+ info_bits.append(item_info)
185
+
186
+ return (self.bar_template % {
187
+ 'label': self.label,
188
+ 'bar': bar,
189
+ 'info': self.info_sep.join(info_bits)
190
+ }).rstrip()
191
+
192
+ def render_progress(self):
193
+ from .termui import get_terminal_size
194
+ nl = False
195
+
196
+ if self.is_hidden:
197
+ buf = [self.label]
198
+ nl = True
199
+ else:
200
+ buf = []
201
+ # Update width in case the terminal has been resized
202
+ if self.autowidth:
203
+ old_width = self.width
204
+ self.width = 0
205
+ clutter_length = term_len(self.format_progress_line())
206
+ new_width = max(0, get_terminal_size()[0] - clutter_length)
207
+ if new_width < old_width:
208
+ buf.append(BEFORE_BAR)
209
+ buf.append(' ' * self.max_width)
210
+ self.max_width = new_width
211
+ self.width = new_width
212
+
213
+ clear_width = self.width
214
+ if self.max_width is not None:
215
+ clear_width = self.max_width
216
+
217
+ buf.append(BEFORE_BAR)
218
+ line = self.format_progress_line()
219
+ line_len = term_len(line)
220
+ if self.max_width is None or self.max_width < line_len:
221
+ self.max_width = line_len
222
+ buf.append(line)
223
+
224
+ buf.append(' ' * (clear_width - line_len))
225
+ line = ''.join(buf)
226
+
227
+ # Render the line only if it changed.
228
+ if line != self._last_line:
229
+ self._last_line = line
230
+ echo(line, file=self.file, color=self.color, nl=nl)
231
+ self.file.flush()
232
+
233
+ def make_step(self, n_steps):
234
+ self.pos += n_steps
235
+ if self.length_known and self.pos >= self.length:
236
+ self.finished = True
237
+
238
+ if (time.time() - self.last_eta) < 1.0:
239
+ return
240
+
241
+ self.last_eta = time.time()
242
+ self.avg = self.avg[-6:] + [-(self.start - time.time()) / (self.pos)]
243
+
244
+ self.eta_known = self.length_known
245
+
246
+ def update(self, n_steps):
247
+ self.make_step(n_steps)
248
+ self.render_progress()
249
+
250
+ def finish(self):
251
+ self.eta_known = 0
252
+ self.current_item = None
253
+ self.finished = True
254
+
255
+ def next(self):
256
+ if self.is_hidden:
257
+ return next(self.iter)
258
+ try:
259
+ rv = next(self.iter)
260
+ self.current_item = rv
261
+ except StopIteration:
262
+ self.finish()
263
+ self.render_progress()
264
+ raise StopIteration()
265
+ else:
266
+ self.update(1)
267
+ return rv
268
+
269
+ if not PY2:
270
+ __next__ = next
271
+ del next
272
+
273
+
274
+ def pager(text, color=None):
275
+ """Decide what method to use for paging through text."""
276
+ stdout = _default_text_stdout()
277
+ if not isatty(sys.stdin) or not isatty(stdout):
278
+ return _nullpager(stdout, text, color)
279
+ pager_cmd = (os.environ.get('PAGER', None) or '').strip()
280
+ if pager_cmd:
281
+ if WIN:
282
+ return _tempfilepager(text, pager_cmd, color)
283
+ return _pipepager(text, pager_cmd, color)
284
+ if os.environ.get('TERM') in ('dumb', 'emacs'):
285
+ return _nullpager(stdout, text, color)
286
+ if WIN or sys.platform.startswith('os2'):
287
+ return _tempfilepager(text, 'more <', color)
288
+ if hasattr(os, 'system') and os.system('(less) 2>/dev/null') == 0:
289
+ return _pipepager(text, 'less', color)
290
+
291
+ import tempfile
292
+ fd, filename = tempfile.mkstemp()
293
+ os.close(fd)
294
+ try:
295
+ if hasattr(os, 'system') and os.system('more "%s"' % filename) == 0:
296
+ return _pipepager(text, 'more', color)
297
+ return _nullpager(stdout, text, color)
298
+ finally:
299
+ os.unlink(filename)
300
+
301
+
302
+ def _pipepager(text, cmd, color):
303
+ """Page through text by feeding it to another program. Invoking a
304
+ pager through this might support colors.
305
+ """
306
+ import subprocess
307
+ env = dict(os.environ)
308
+
309
+ # If we're piping to less we might support colors under the
310
+ # condition that
311
+ cmd_detail = cmd.rsplit('/', 1)[-1].split()
312
+ if color is None and cmd_detail[0] == 'less':
313
+ less_flags = os.environ.get('LESS', '') + ' '.join(cmd_detail[1:])
314
+ if not less_flags:
315
+ env['LESS'] = '-R'
316
+ color = True
317
+ elif 'r' in less_flags or 'R' in less_flags:
318
+ color = True
319
+
320
+ if not color:
321
+ text = strip_ansi(text)
322
+
323
+ c = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
324
+ env=env)
325
+ encoding = get_best_encoding(c.stdin)
326
+ try:
327
+ c.stdin.write(text.encode(encoding, 'replace'))
328
+ c.stdin.close()
329
+ except (IOError, KeyboardInterrupt):
330
+ pass
331
+
332
+ # Less doesn't respect ^C, but catches it for its own UI purposes (aborting
333
+ # search or other commands inside less).
334
+ #
335
+ # That means when the user hits ^C, the parent process (click) terminates,
336
+ # but less is still alive, paging the output and messing up the terminal.
337
+ #
338
+ # If the user wants to make the pager exit on ^C, they should set
339
+ # `LESS='-K'`. It's not our decision to make.
340
+ while True:
341
+ try:
342
+ c.wait()
343
+ except KeyboardInterrupt:
344
+ pass
345
+ else:
346
+ break
347
+
348
+
349
+ def _tempfilepager(text, cmd, color):
350
+ """Page through text by invoking a program on a temporary file."""
351
+ import tempfile
352
+ filename = tempfile.mktemp()
353
+ if not color:
354
+ text = strip_ansi(text)
355
+ encoding = get_best_encoding(sys.stdout)
356
+ with open_stream(filename, 'wb')[0] as f:
357
+ f.write(text.encode(encoding))
358
+ try:
359
+ os.system(cmd + ' "' + filename + '"')
360
+ finally:
361
+ os.unlink(filename)
362
+
363
+
364
+ def _nullpager(stream, text, color):
365
+ """Simply print unformatted text. This is the ultimate fallback."""
366
+ if not color:
367
+ text = strip_ansi(text)
368
+ stream.write(text)
369
+
370
+
371
+ class Editor(object):
372
+
373
+ def __init__(self, editor=None, env=None, require_save=True,
374
+ extension='.txt'):
375
+ self.editor = editor
376
+ self.env = env
377
+ self.require_save = require_save
378
+ self.extension = extension
379
+
380
+ def get_editor(self):
381
+ if self.editor is not None:
382
+ return self.editor
383
+ for key in 'VISUAL', 'EDITOR':
384
+ rv = os.environ.get(key)
385
+ if rv:
386
+ return rv
387
+ if WIN:
388
+ return 'notepad'
389
+ for editor in 'vim', 'nano':
390
+ if os.system('which %s >/dev/null 2>&1' % editor) == 0:
391
+ return editor
392
+ return 'vi'
393
+
394
+ def edit_file(self, filename):
395
+ import subprocess
396
+ editor = self.get_editor()
397
+ if self.env:
398
+ environ = os.environ.copy()
399
+ environ.update(self.env)
400
+ else:
401
+ environ = None
402
+ try:
403
+ c = subprocess.Popen('%s "%s"' % (editor, filename),
404
+ env=environ, shell=True)
405
+ exit_code = c.wait()
406
+ if exit_code != 0:
407
+ raise ClickException('%s: Editing failed!' % editor)
408
+ except OSError as e:
409
+ raise ClickException('%s: Editing failed: %s' % (editor, e))
410
+
411
+ def edit(self, text):
412
+ import tempfile
413
+
414
+ text = text or ''
415
+ if text and not text.endswith('\n'):
416
+ text += '\n'
417
+
418
+ fd, name = tempfile.mkstemp(prefix='editor-', suffix=self.extension)
419
+ try:
420
+ if WIN:
421
+ encoding = 'utf-8-sig'
422
+ text = text.replace('\n', '\r\n')
423
+ else:
424
+ encoding = 'utf-8'
425
+ text = text.encode(encoding)
426
+
427
+ f = os.fdopen(fd, 'wb')
428
+ f.write(text)
429
+ f.close()
430
+ timestamp = os.path.getmtime(name)
431
+
432
+ self.edit_file(name)
433
+
434
+ if self.require_save \
435
+ and os.path.getmtime(name) == timestamp:
436
+ return None
437
+
438
+ f = open(name, 'rb')
439
+ try:
440
+ rv = f.read()
441
+ finally:
442
+ f.close()
443
+ return rv.decode('utf-8-sig').replace('\r\n', '\n')
444
+ finally:
445
+ os.unlink(name)
446
+
447
+
448
+ def open_url(url, wait=False, locate=False):
449
+ import subprocess
450
+
451
+ def _unquote_file(url):
452
+ try:
453
+ import urllib
454
+ except ImportError:
455
+ import urllib
456
+ if url.startswith('file://'):
457
+ url = urllib.unquote(url[7:])
458
+ return url
459
+
460
+ if sys.platform == 'darwin':
461
+ args = ['open']
462
+ if wait:
463
+ args.append('-W')
464
+ if locate:
465
+ args.append('-R')
466
+ args.append(_unquote_file(url))
467
+ null = open('/dev/null', 'w')
468
+ try:
469
+ return subprocess.Popen(args, stderr=null).wait()
470
+ finally:
471
+ null.close()
472
+ elif WIN:
473
+ if locate:
474
+ url = _unquote_file(url)
475
+ args = 'explorer /select,"%s"' % _unquote_file(
476
+ url.replace('"', ''))
477
+ else:
478
+ args = 'start %s "" "%s"' % (
479
+ wait and '/WAIT' or '', url.replace('"', ''))
480
+ return os.system(args)
481
+
482
+ try:
483
+ if locate:
484
+ url = os.path.dirname(_unquote_file(url)) or '.'
485
+ else:
486
+ url = _unquote_file(url)
487
+ c = subprocess.Popen(['xdg-open', url])
488
+ if wait:
489
+ return c.wait()
490
+ return 0
491
+ except OSError:
492
+ if url.startswith(('http://', 'https://')) and not locate and not wait:
493
+ import webbrowser
494
+ webbrowser.open(url)
495
+ return 0
496
+ return 1
497
+
498
+
499
+ def _translate_ch_to_exc(ch):
500
+ if ch == '\x03':
501
+ raise KeyboardInterrupt()
502
+ if ch == '\x04':
503
+ raise EOFError()
504
+
505
+
506
+ if WIN:
507
+ import msvcrt
508
+
509
+ def getchar(echo):
510
+ rv = msvcrt.getch()
511
+ if echo:
512
+ msvcrt.putchar(rv)
513
+ _translate_ch_to_exc(rv)
514
+ if PY2:
515
+ enc = getattr(sys.stdin, 'encoding', None)
516
+ if enc is not None:
517
+ rv = rv.decode(enc, 'replace')
518
+ else:
519
+ rv = rv.decode('cp1252', 'replace')
520
+ return rv
521
+ else:
522
+ import tty
523
+ import termios
524
+
525
+ def getchar(echo):
526
+ if not isatty(sys.stdin):
527
+ f = open('/dev/tty')
528
+ fd = f.fileno()
529
+ else:
530
+ fd = sys.stdin.fileno()
531
+ f = None
532
+ try:
533
+ old_settings = termios.tcgetattr(fd)
534
+ try:
535
+ tty.setraw(fd)
536
+ ch = os.read(fd, 32)
537
+ if echo and isatty(sys.stdout):
538
+ sys.stdout.write(ch)
539
+ finally:
540
+ termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
541
+ sys.stdout.flush()
542
+ if f is not None:
543
+ f.close()
544
+ except termios.error:
545
+ pass
546
+ _translate_ch_to_exc(ch)
547
+ return ch.decode(get_best_encoding(sys.stdin), 'replace')
Binary file
@@ -0,0 +1,38 @@
1
+ import textwrap
2
+ from contextlib import contextmanager
3
+
4
+
5
+ class TextWrapper(textwrap.TextWrapper):
6
+
7
+ def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width):
8
+ space_left = max(width - cur_len, 1)
9
+
10
+ if self.break_long_words:
11
+ last = reversed_chunks[-1]
12
+ cut = last[:space_left]
13
+ res = last[space_left:]
14
+ cur_line.append(cut)
15
+ reversed_chunks[-1] = res
16
+ elif not cur_line:
17
+ cur_line.append(reversed_chunks.pop())
18
+
19
+ @contextmanager
20
+ def extra_indent(self, indent):
21
+ old_initial_indent = self.initial_indent
22
+ old_subsequent_indent = self.subsequent_indent
23
+ self.initial_indent += indent
24
+ self.subsequent_indent += indent
25
+ try:
26
+ yield
27
+ finally:
28
+ self.initial_indent = old_initial_indent
29
+ self.subsequent_indent = old_subsequent_indent
30
+
31
+ def indent_only(self, text):
32
+ rv = []
33
+ for idx, line in enumerate(text.splitlines()):
34
+ indent = self.initial_indent
35
+ if idx > 0:
36
+ indent = self.subsequent_indent
37
+ rv.append(indent + line)
38
+ return '\n'.join(rv)
Binary file
@@ -0,0 +1,119 @@
1
+ import os
2
+ import sys
3
+ import codecs
4
+
5
+ from ._compat import PY2
6
+
7
+
8
+ # If someone wants to vendor click, we want to ensure the
9
+ # correct package is discovered. Ideally we could use a
10
+ # relative import here but unfortunately Python does not
11
+ # support that.
12
+ click = sys.modules[__name__.rsplit('.', 1)[0]]
13
+
14
+
15
+ def _find_unicode_literals_frame():
16
+ import __future__
17
+ frm = sys._getframe(1)
18
+ idx = 1
19
+ while frm is not None:
20
+ if frm.f_globals.get('__name__', '').startswith('click.'):
21
+ frm = frm.f_back
22
+ idx += 1
23
+ elif frm.f_code.co_flags & __future__.unicode_literals.compiler_flag:
24
+ return idx
25
+ else:
26
+ break
27
+ return 0
28
+
29
+
30
+ def _check_for_unicode_literals():
31
+ if not __debug__:
32
+ return
33
+ if not PY2 or click.disable_unicode_literals_warning:
34
+ return
35
+ bad_frame = _find_unicode_literals_frame()
36
+ if bad_frame <= 0:
37
+ return
38
+ from warnings import warn
39
+ warn(Warning('Click detected the use of the unicode_literals '
40
+ '__future__ import. This is heavily discouraged '
41
+ 'because it can introduce subtle bugs in your '
42
+ 'code. You should instead use explicit u"" literals '
43
+ 'for your unicode strings. For more information see '
44
+ 'http://click.pocoo.org/python3/'),
45
+ stacklevel=bad_frame)
46
+
47
+
48
+ def _verify_python3_env():
49
+ """Ensures that the environment is good for unicode on Python 3."""
50
+ if PY2:
51
+ return
52
+ try:
53
+ import locale
54
+ fs_enc = codecs.lookup(locale.getpreferredencoding()).name
55
+ except Exception:
56
+ fs_enc = 'ascii'
57
+ if fs_enc != 'ascii':
58
+ return
59
+
60
+ extra = ''
61
+ if os.name == 'posix':
62
+ import subprocess
63
+ rv = subprocess.Popen(['locale', '-a'], stdout=subprocess.PIPE,
64
+ stderr=subprocess.PIPE).communicate()[0]
65
+ good_locales = set()
66
+ has_c_utf8 = False
67
+
68
+ # Make sure we're operating on text here.
69
+ if isinstance(rv, bytes):
70
+ rv = rv.decode('ascii', 'replace')
71
+
72
+ for line in rv.splitlines():
73
+ locale = line.strip()
74
+ if locale.lower().endswith(('.utf-8', '.utf8')):
75
+ good_locales.add(locale)
76
+ if locale.lower() in ('c.utf8', 'c.utf-8'):
77
+ has_c_utf8 = True
78
+
79
+ extra += '\n\n'
80
+ if not good_locales:
81
+ extra += (
82
+ 'Additional information: on this system no suitable UTF-8\n'
83
+ 'locales were discovered. This most likely requires resolving\n'
84
+ 'by reconfiguring the locale system.'
85
+ )
86
+ elif has_c_utf8:
87
+ extra += (
88
+ 'This system supports the C.UTF-8 locale which is recommended.\n'
89
+ 'You might be able to resolve your issue by exporting the\n'
90
+ 'following environment variables:\n\n'
91
+ ' export LC_ALL=C.UTF-8\n'
92
+ ' export LANG=C.UTF-8'
93
+ )
94
+ else:
95
+ extra += (
96
+ 'This system lists a couple of UTF-8 supporting locales that\n'
97
+ 'you can pick from. The following suitable locales where\n'
98
+ 'discovered: %s'
99
+ ) % ', '.join(sorted(good_locales))
100
+
101
+ bad_locale = None
102
+ for locale in os.environ.get('LC_ALL'), os.environ.get('LANG'):
103
+ if locale and locale.lower().endswith(('.utf-8', '.utf8')):
104
+ bad_locale = locale
105
+ if locale is not None:
106
+ break
107
+ if bad_locale is not None:
108
+ extra += (
109
+ '\n\nClick discovered that you exported a UTF-8 locale\n'
110
+ 'but the locale system could not pick up from it because\n'
111
+ 'it does not exist. The exported locale is "%s" but it\n'
112
+ 'is not supported'
113
+ ) % bad_locale
114
+
115
+ raise RuntimeError('Click will abort further execution because Python 3 '
116
+ 'was configured to use ASCII as encoding for the '
117
+ 'environment. Either run this under Python 2 or '
118
+ 'consult http://click.pocoo.org/python3/ for '
119
+ 'mitigation steps.' + extra)
Binary file