rigid 0.2.0 → 0.2.1

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 (229) hide show
  1. checksums.yaml +4 -4
  2. data/vendor/click/__init__.pyc +0 -0
  3. data/vendor/click/_bashcomplete.pyc +0 -0
  4. data/vendor/click/_compat.pyc +0 -0
  5. data/vendor/click/_termui_impl.pyc +0 -0
  6. data/vendor/click/_textwrap.pyc +0 -0
  7. data/vendor/click/_unicodefun.pyc +0 -0
  8. data/vendor/click/_winconsole.pyc +0 -0
  9. data/vendor/click/core.pyc +0 -0
  10. data/vendor/click/decorators.pyc +0 -0
  11. data/vendor/click/exceptions.pyc +0 -0
  12. data/vendor/click/formatting.pyc +0 -0
  13. data/vendor/click/globals.pyc +0 -0
  14. data/vendor/click/parser.pyc +0 -0
  15. data/vendor/click/termui.pyc +0 -0
  16. data/vendor/click/testing.pyc +0 -0
  17. data/vendor/click/types.pyc +0 -0
  18. data/vendor/click/utils.pyc +0 -0
  19. data/vendor/easy_install.pyc +0 -0
  20. data/vendor/pkg_resources/__init__.pyc +0 -0
  21. data/vendor/pkg_resources/_vendor/__init__.pyc +0 -0
  22. data/vendor/pkg_resources/_vendor/appdirs.pyc +0 -0
  23. data/vendor/pkg_resources/_vendor/packaging/__about__.pyc +0 -0
  24. data/vendor/pkg_resources/_vendor/packaging/__init__.pyc +0 -0
  25. data/vendor/pkg_resources/_vendor/packaging/_compat.pyc +0 -0
  26. data/vendor/pkg_resources/_vendor/packaging/_structures.pyc +0 -0
  27. data/vendor/pkg_resources/_vendor/packaging/markers.pyc +0 -0
  28. data/vendor/pkg_resources/_vendor/packaging/requirements.pyc +0 -0
  29. data/vendor/pkg_resources/_vendor/packaging/specifiers.pyc +0 -0
  30. data/vendor/pkg_resources/_vendor/packaging/utils.pyc +0 -0
  31. data/vendor/pkg_resources/_vendor/packaging/version.pyc +0 -0
  32. data/vendor/pkg_resources/_vendor/pyparsing.pyc +0 -0
  33. data/vendor/pkg_resources/_vendor/six.pyc +0 -0
  34. data/vendor/pkg_resources/extern/__init__.pyc +0 -0
  35. data/vendor/{requests-2.11.1.dist-info/METADATA → requests-2.12.1.dist-info/DESCRIPTION.rst} +51 -30
  36. data/vendor/{requests-2.11.1.dist-info → requests-2.12.1.dist-info}/INSTALLER +0 -0
  37. data/vendor/{requests-2.11.1.dist-info/DESCRIPTION.rst → requests-2.12.1.dist-info/METADATA} +80 -1
  38. data/vendor/{requests-2.11.1.dist-info → requests-2.12.1.dist-info}/RECORD +61 -41
  39. data/vendor/{requests-2.11.1.dist-info → requests-2.12.1.dist-info}/WHEEL +1 -1
  40. data/vendor/requests-2.12.1.dist-info/metadata.json +1 -0
  41. data/vendor/{requests-2.11.1.dist-info → requests-2.12.1.dist-info}/top_level.txt +0 -0
  42. data/vendor/requests/__init__.py +2 -2
  43. data/vendor/requests/__init__.pyc +0 -0
  44. data/vendor/requests/_internal_utils.py +27 -0
  45. data/vendor/requests/_internal_utils.pyc +0 -0
  46. data/vendor/requests/adapters.py +1 -1
  47. data/vendor/requests/adapters.pyc +0 -0
  48. data/vendor/requests/api.py +3 -1
  49. data/vendor/requests/api.pyc +0 -0
  50. data/vendor/requests/auth.py +2 -1
  51. data/vendor/requests/auth.pyc +0 -0
  52. data/vendor/requests/cacert.pem +448 -375
  53. data/vendor/requests/certs.pyc +0 -0
  54. data/vendor/requests/compat.py +2 -0
  55. data/vendor/requests/compat.pyc +0 -0
  56. data/vendor/requests/cookies.py +3 -1
  57. data/vendor/requests/cookies.pyc +0 -0
  58. data/vendor/requests/exceptions.py +2 -0
  59. data/vendor/requests/exceptions.pyc +0 -0
  60. data/vendor/requests/hooks.pyc +0 -0
  61. data/vendor/requests/models.py +53 -29
  62. data/vendor/requests/models.pyc +0 -0
  63. data/vendor/requests/packages/__init__.py +6 -0
  64. data/vendor/requests/packages/__init__.pyc +0 -0
  65. data/vendor/requests/packages/chardet/__init__.pyc +0 -0
  66. data/vendor/requests/packages/chardet/big5freq.pyc +0 -0
  67. data/vendor/requests/packages/chardet/big5prober.pyc +0 -0
  68. data/vendor/requests/packages/chardet/chardetect.pyc +0 -0
  69. data/vendor/requests/packages/chardet/chardistribution.pyc +0 -0
  70. data/vendor/requests/packages/chardet/charsetgroupprober.pyc +0 -0
  71. data/vendor/requests/packages/chardet/charsetprober.pyc +0 -0
  72. data/vendor/requests/packages/chardet/codingstatemachine.pyc +0 -0
  73. data/vendor/requests/packages/chardet/compat.pyc +0 -0
  74. data/vendor/requests/packages/chardet/constants.pyc +0 -0
  75. data/vendor/requests/packages/chardet/cp949prober.pyc +0 -0
  76. data/vendor/requests/packages/chardet/escprober.pyc +0 -0
  77. data/vendor/requests/packages/chardet/escsm.pyc +0 -0
  78. data/vendor/requests/packages/chardet/eucjpprober.pyc +0 -0
  79. data/vendor/requests/packages/chardet/euckrfreq.pyc +0 -0
  80. data/vendor/requests/packages/chardet/euckrprober.pyc +0 -0
  81. data/vendor/requests/packages/chardet/euctwfreq.pyc +0 -0
  82. data/vendor/requests/packages/chardet/euctwprober.pyc +0 -0
  83. data/vendor/requests/packages/chardet/gb2312freq.pyc +0 -0
  84. data/vendor/requests/packages/chardet/gb2312prober.pyc +0 -0
  85. data/vendor/requests/packages/chardet/hebrewprober.pyc +0 -0
  86. data/vendor/requests/packages/chardet/jisfreq.pyc +0 -0
  87. data/vendor/requests/packages/chardet/jpcntx.pyc +0 -0
  88. data/vendor/requests/packages/chardet/langbulgarianmodel.pyc +0 -0
  89. data/vendor/requests/packages/chardet/langcyrillicmodel.pyc +0 -0
  90. data/vendor/requests/packages/chardet/langgreekmodel.pyc +0 -0
  91. data/vendor/requests/packages/chardet/langhebrewmodel.pyc +0 -0
  92. data/vendor/requests/packages/chardet/langhungarianmodel.pyc +0 -0
  93. data/vendor/requests/packages/chardet/langthaimodel.pyc +0 -0
  94. data/vendor/requests/packages/chardet/latin1prober.pyc +0 -0
  95. data/vendor/requests/packages/chardet/mbcharsetprober.pyc +0 -0
  96. data/vendor/requests/packages/chardet/mbcsgroupprober.pyc +0 -0
  97. data/vendor/requests/packages/chardet/mbcssm.pyc +0 -0
  98. data/vendor/requests/packages/chardet/sbcharsetprober.pyc +0 -0
  99. data/vendor/requests/packages/chardet/sbcsgroupprober.pyc +0 -0
  100. data/vendor/requests/packages/chardet/sjisprober.pyc +0 -0
  101. data/vendor/requests/packages/chardet/universaldetector.pyc +0 -0
  102. data/vendor/requests/packages/chardet/utf8prober.pyc +0 -0
  103. data/vendor/requests/packages/idna/__init__.py +1 -0
  104. data/vendor/requests/packages/idna/__init__.pyc +0 -0
  105. data/vendor/requests/packages/idna/codec.py +118 -0
  106. data/vendor/requests/packages/idna/codec.pyc +0 -0
  107. data/vendor/requests/packages/idna/compat.py +12 -0
  108. data/vendor/requests/packages/idna/compat.pyc +0 -0
  109. data/vendor/requests/packages/idna/core.py +387 -0
  110. data/vendor/requests/packages/idna/core.pyc +0 -0
  111. data/vendor/requests/packages/idna/idnadata.py +1584 -0
  112. data/vendor/requests/packages/idna/idnadata.pyc +0 -0
  113. data/vendor/requests/packages/idna/intranges.py +46 -0
  114. data/vendor/requests/packages/idna/intranges.pyc +0 -0
  115. data/vendor/requests/packages/idna/uts46data.py +7267 -0
  116. data/vendor/requests/packages/idna/uts46data.pyc +0 -0
  117. data/vendor/requests/packages/urllib3/__init__.py +2 -1
  118. data/vendor/requests/packages/urllib3/__init__.pyc +0 -0
  119. data/vendor/requests/packages/urllib3/_collections.pyc +0 -0
  120. data/vendor/requests/packages/urllib3/connection.py +62 -26
  121. data/vendor/requests/packages/urllib3/connection.pyc +0 -0
  122. data/vendor/requests/packages/urllib3/connectionpool.py +25 -20
  123. data/vendor/requests/packages/urllib3/connectionpool.pyc +0 -0
  124. data/vendor/requests/packages/urllib3/contrib/__init__.pyc +0 -0
  125. data/vendor/requests/packages/urllib3/contrib/appengine.py +87 -22
  126. data/vendor/requests/packages/urllib3/contrib/appengine.pyc +0 -0
  127. data/vendor/requests/packages/urllib3/contrib/ntlmpool.py +2 -5
  128. data/vendor/requests/packages/urllib3/contrib/ntlmpool.pyc +0 -0
  129. data/vendor/requests/packages/urllib3/contrib/pyopenssl.py +191 -118
  130. data/vendor/requests/packages/urllib3/contrib/pyopenssl.pyc +0 -0
  131. data/vendor/requests/packages/urllib3/contrib/socks.py +11 -5
  132. data/vendor/requests/packages/urllib3/contrib/socks.pyc +0 -0
  133. data/vendor/requests/packages/urllib3/exceptions.py +32 -0
  134. data/vendor/requests/packages/urllib3/exceptions.pyc +0 -0
  135. data/vendor/requests/packages/urllib3/fields.py +1 -1
  136. data/vendor/requests/packages/urllib3/fields.pyc +0 -0
  137. data/vendor/requests/packages/urllib3/filepost.py +1 -1
  138. data/vendor/requests/packages/urllib3/filepost.pyc +0 -0
  139. data/vendor/requests/packages/urllib3/packages/__init__.pyc +0 -0
  140. data/vendor/requests/packages/urllib3/packages/backports/__init__.py +0 -0
  141. data/vendor/requests/packages/urllib3/packages/backports/__init__.pyc +0 -0
  142. data/vendor/requests/packages/urllib3/packages/backports/makefile.py +53 -0
  143. data/vendor/requests/packages/urllib3/packages/backports/makefile.pyc +0 -0
  144. data/vendor/requests/packages/urllib3/packages/ordered_dict.pyc +0 -0
  145. data/vendor/requests/packages/urllib3/packages/six.pyc +0 -0
  146. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +7 -1
  147. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc +0 -0
  148. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +55 -3
  149. data/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyc +0 -0
  150. data/vendor/requests/packages/urllib3/poolmanager.py +2 -6
  151. data/vendor/requests/packages/urllib3/poolmanager.pyc +0 -0
  152. data/vendor/requests/packages/urllib3/request.py +1 -4
  153. data/vendor/requests/packages/urllib3/request.pyc +0 -0
  154. data/vendor/requests/packages/urllib3/response.py +94 -6
  155. data/vendor/requests/packages/urllib3/response.pyc +0 -0
  156. data/vendor/requests/packages/urllib3/util/__init__.pyc +0 -0
  157. data/vendor/requests/packages/urllib3/util/connection.py +1 -0
  158. data/vendor/requests/packages/urllib3/util/connection.pyc +0 -0
  159. data/vendor/requests/packages/urllib3/util/request.pyc +0 -0
  160. data/vendor/requests/packages/urllib3/util/response.py +7 -0
  161. data/vendor/requests/packages/urllib3/util/response.pyc +0 -0
  162. data/vendor/requests/packages/urllib3/util/retry.py +93 -17
  163. data/vendor/requests/packages/urllib3/util/retry.pyc +0 -0
  164. data/vendor/requests/packages/urllib3/util/ssl_.py +28 -12
  165. data/vendor/requests/packages/urllib3/util/ssl_.pyc +0 -0
  166. data/vendor/requests/packages/urllib3/util/timeout.py +9 -6
  167. data/vendor/requests/packages/urllib3/util/timeout.pyc +0 -0
  168. data/vendor/requests/packages/urllib3/util/url.py +14 -5
  169. data/vendor/requests/packages/urllib3/util/url.pyc +0 -0
  170. data/vendor/requests/sessions.py +18 -5
  171. data/vendor/requests/sessions.pyc +0 -0
  172. data/vendor/requests/status_codes.pyc +0 -0
  173. data/vendor/requests/structures.pyc +0 -0
  174. data/vendor/requests/utils.py +42 -32
  175. data/vendor/requests/utils.pyc +0 -0
  176. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/DESCRIPTION.rst +0 -0
  177. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/INSTALLER +0 -0
  178. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/METADATA +2 -2
  179. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/RECORD +18 -18
  180. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/WHEEL +0 -0
  181. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/entry_points.txt +0 -0
  182. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/metadata.json +1 -1
  183. data/vendor/{rigid-0.2.0.dist-info → rigid-0.2.1.dist-info}/top_level.txt +0 -0
  184. data/vendor/rigid/__init__.pyc +0 -0
  185. data/vendor/rigid/api.py +39 -2
  186. data/vendor/rigid/api.pyc +0 -0
  187. data/vendor/rigid/commands/__init__.py +71 -11
  188. data/vendor/rigid/commands/__init__.pyc +0 -0
  189. data/vendor/rigid/commands/deploy.pyc +0 -0
  190. data/vendor/rigid/deploy.py +1 -1
  191. data/vendor/rigid/deploy.pyc +0 -0
  192. data/vendor/rigid/file_scanner.py +1 -1
  193. data/vendor/rigid/file_scanner.pyc +0 -0
  194. data/vendor/rigid/utils.pyc +0 -0
  195. data/vendor/tests/__init__.pyc +0 -0
  196. data/vendor/tests/integration/__init__.pyc +0 -0
  197. data/vendor/tests/integration/test_app.py +12 -0
  198. data/vendor/tests/integration/test_app.pyc +0 -0
  199. data/vendor/tests/integration/test_apps.pyc +0 -0
  200. data/vendor/tests/integration/test_deploy.pyc +0 -0
  201. data/vendor/tests/integration/test_domains.pyc +0 -0
  202. data/vendor/tests/integration/test_login.pyc +0 -0
  203. data/vendor/tests/integration/test_promote.py +2 -2
  204. data/vendor/tests/integration/test_promote.pyc +0 -0
  205. data/vendor/tests/integration/test_token.pyc +0 -0
  206. data/vendor/tests/integration/test_whoami.pyc +0 -0
  207. data/vendor/tests/test_deploy.pyc +0 -0
  208. data/vendor/tests/test_file_scanner.pyc +0 -0
  209. data/vendor/tests/utils.py +5 -2
  210. data/vendor/tests/utils.pyc +0 -0
  211. data/vendor/yaml/__init__.pyc +0 -0
  212. data/vendor/yaml/composer.pyc +0 -0
  213. data/vendor/yaml/constructor.pyc +0 -0
  214. data/vendor/yaml/cyaml.pyc +0 -0
  215. data/vendor/yaml/dumper.pyc +0 -0
  216. data/vendor/yaml/emitter.pyc +0 -0
  217. data/vendor/yaml/error.pyc +0 -0
  218. data/vendor/yaml/events.pyc +0 -0
  219. data/vendor/yaml/loader.pyc +0 -0
  220. data/vendor/yaml/nodes.pyc +0 -0
  221. data/vendor/yaml/parser.pyc +0 -0
  222. data/vendor/yaml/reader.pyc +0 -0
  223. data/vendor/yaml/representer.pyc +0 -0
  224. data/vendor/yaml/resolver.pyc +0 -0
  225. data/vendor/yaml/scanner.pyc +0 -0
  226. data/vendor/yaml/serializer.pyc +0 -0
  227. data/vendor/yaml/tokens.pyc +0 -0
  228. metadata +37 -17
  229. data/vendor/requests-2.11.1.dist-info/metadata.json +0 -1
Binary file
@@ -20,13 +20,16 @@ import warnings
20
20
 
21
21
  from . import __version__
22
22
  from . import certs
23
+ # to_native_string is unused here, but imported here for backwards compatibility
24
+ from ._internal_utils import to_native_string
23
25
  from .compat import parse_http_list as _parse_list_header
24
- from .compat import (quote, urlparse, bytes, str, OrderedDict, unquote, is_py2,
25
- builtin_str, getproxies, proxy_bypass, urlunparse,
26
- basestring)
26
+ from .compat import (
27
+ quote, urlparse, bytes, str, OrderedDict, unquote, getproxies,
28
+ proxy_bypass, urlunparse, basestring, integer_types)
27
29
  from .cookies import RequestsCookieJar, cookiejar_from_dict
28
30
  from .structures import CaseInsensitiveDict
29
- from .exceptions import InvalidURL, InvalidHeader, FileModeWarning
31
+ from .exceptions import (
32
+ InvalidURL, InvalidHeader, FileModeWarning, UnrewindableBodyError)
30
33
 
31
34
  _hush_pyflakes = (RequestsCookieJar,)
32
35
 
@@ -45,7 +48,7 @@ def dict_to_sequence(d):
45
48
 
46
49
 
47
50
  def super_len(o):
48
- total_length = 0
51
+ total_length = None
49
52
  current_position = 0
50
53
 
51
54
  if hasattr(o, '__len__'):
@@ -54,10 +57,6 @@ def super_len(o):
54
57
  elif hasattr(o, 'len'):
55
58
  total_length = o.len
56
59
 
57
- elif hasattr(o, 'getvalue'):
58
- # e.g. BytesIO, cStringIO.StringIO
59
- total_length = len(o.getvalue())
60
-
61
60
  elif hasattr(o, 'fileno'):
62
61
  try:
63
62
  fileno = o.fileno()
@@ -87,7 +86,22 @@ def super_len(o):
87
86
  # is actually a special file descriptor like stdin. In this
88
87
  # instance, we don't know what the length is, so set it to zero and
89
88
  # let requests chunk it instead.
90
- current_position = total_length
89
+ if total_length is not None:
90
+ current_position = total_length
91
+ else:
92
+ if hasattr(o, 'seek') and total_length is None:
93
+ # StringIO and BytesIO have seek but no useable fileno
94
+
95
+ # seek to end of file
96
+ o.seek(0, 2)
97
+ total_length = o.tell()
98
+
99
+ # seek back to current position to support
100
+ # partially read file-like objects
101
+ o.seek(current_position or 0)
102
+
103
+ if total_length is None:
104
+ total_length = 0
91
105
 
92
106
  return max(0, total_length - current_position)
93
107
 
@@ -319,9 +333,7 @@ def add_dict_to_cookiejar(cj, cookie_dict):
319
333
  :rtype: CookieJar
320
334
  """
321
335
 
322
- cj2 = cookiejar_from_dict(cookie_dict)
323
- cj.update(cj2)
324
- return cj
336
+ return cookiejar_from_dict(cookie_dict, cj)
325
337
 
326
338
 
327
339
  def get_encodings_from_content(content):
@@ -617,13 +629,13 @@ def select_proxy(url, proxies):
617
629
  proxies = proxies or {}
618
630
  urlparts = urlparse(url)
619
631
  if urlparts.hostname is None:
620
- return proxies.get('all', proxies.get(urlparts.scheme))
632
+ return proxies.get(urlparts.scheme, proxies.get('all'))
621
633
 
622
634
  proxy_keys = [
623
- 'all://' + urlparts.hostname,
624
- 'all',
625
635
  urlparts.scheme + '://' + urlparts.hostname,
626
636
  urlparts.scheme,
637
+ 'all://' + urlparts.hostname,
638
+ 'all',
627
639
  ]
628
640
  proxy = None
629
641
  for proxy_key in proxy_keys:
@@ -759,22 +771,6 @@ def get_auth_from_url(url):
759
771
  return auth
760
772
 
761
773
 
762
- def to_native_string(string, encoding='ascii'):
763
- """Given a string object, regardless of type, returns a representation of
764
- that string in the native string type, encoding and decoding where
765
- necessary. This assumes ASCII unless told otherwise.
766
- """
767
- if isinstance(string, builtin_str):
768
- out = string
769
- else:
770
- if is_py2:
771
- out = string.encode(encoding)
772
- else:
773
- out = string.decode(encoding)
774
-
775
- return out
776
-
777
-
778
774
  # Moved outside of function to avoid recompile every call
779
775
  _CLEAN_HEADER_REGEX_BYTE = re.compile(b'^\\S[^\\r\\n]*$|^$')
780
776
  _CLEAN_HEADER_REGEX_STR = re.compile(r'^\S[^\r\n]*$|^$')
@@ -815,3 +811,17 @@ def urldefragauth(url):
815
811
  netloc = netloc.rsplit('@', 1)[-1]
816
812
 
817
813
  return urlunparse((scheme, netloc, path, params, query, ''))
814
+
815
+ def rewind_body(prepared_request):
816
+ """Move file pointer back to its recorded starting position
817
+ so it can be read again on redirect.
818
+ """
819
+ body_seek = getattr(prepared_request.body, 'seek', None)
820
+ if body_seek is not None and isinstance(prepared_request._body_position, integer_types):
821
+ try:
822
+ body_seek(prepared_request._body_position)
823
+ except (IOError, OSError):
824
+ raise UnrewindableBodyError("An error occured when rewinding request "
825
+ "body for redirect.")
826
+ else:
827
+ raise UnrewindableBodyError("Unable to rewind request body for redirect.")
Binary file
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.0
2
2
  Name: rigid
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Rig up your web application in seconds
5
- Home-page: http://rigidapp.com/
5
+ Home-page: https://rigidapp.com/
6
6
  Author: Kyle Fuller
7
7
  Author-email: kyle@cocode.org
8
8
  License: BSD
@@ -1,48 +1,48 @@
1
1
  rigid/__init__.py,sha256=FVHPBGkfhbQDi_z3v0PiKJrXXqXOx0vGW_1VaqNJi7U,22
2
- rigid/api.py,sha256=-V1Vh6cbXgDlN-YqOR_DlnwTGGXMDpeH75mV6ueguPw,4193
3
- rigid/deploy.py,sha256=0gnooMal1IbOQFznuonR1KJq42nKpfBCBs_5SnY4ozY,2175
4
- rigid/file_scanner.py,sha256=UMlJkD7YXnozMkWDxmpnQEhyJan2zoZXWtEiuJPZ-pg,1479
2
+ rigid/api.py,sha256=4-NhL1MonAfOMIt19ElLx-urqXdQU3cjU6-1FmvvPn4,5316
3
+ rigid/deploy.py,sha256=mu9H4sxJy_kf8oxrc1e-zWUAT9HiYs8FZCFZPCn51P0,2181
4
+ rigid/file_scanner.py,sha256=-BX0LpLPsG_6Pj4UqMtkWk-egVftUDzNzC0xCmc0_iQ,1485
5
5
  rigid/utils.py,sha256=eJPmktA9Gm83TaG9uwbs1413LTpJP-EiG_DYECEZMEA,428
6
- rigid/commands/__init__.py,sha256=hFNGlIKsNnIKzmluMOjTB5iMtstvCVKueMIGSKiSIEg,6959
6
+ rigid/commands/__init__.py,sha256=1jWdHvZv1EhYD0tja6HeaUkvTPB29IsxbFus3MwBAsc,8650
7
7
  rigid/commands/deploy.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- rigid-0.2.0.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10
9
- rigid-0.2.0.dist-info/METADATA,sha256=tekFsMJr4NHv4eDDySfXrJ3ul_NKgayRuhJHb87dGiY,638
10
- rigid-0.2.0.dist-info/RECORD,,
11
- rigid-0.2.0.dist-info/WHEEL,sha256=u6Fy2U76CDFJ6q2P27rqtBo3AN6qpylFiMaYzNr2lJg,95
12
- rigid-0.2.0.dist-info/entry_points.txt,sha256=MPjHcNW_6-u5NuSAzeVAqVfmIbo2A47LSotTigvTa_c,46
13
- rigid-0.2.0.dist-info/metadata.json,sha256=vAq9h69JatHvPjCDoKvQyHrtZG-ikLekqousZAwUeeo,967
14
- rigid-0.2.0.dist-info/top_level.txt,sha256=LbeTr3maOGl8NwALmksu6EESy4CVZ_nltVNtdqLBKWY,12
8
+ rigid-0.2.1.dist-info/DESCRIPTION.rst,sha256=OCTuuN6LcWulhHS3d5rfjdsQtW22n7HENFRh6jC6ego,10
9
+ rigid-0.2.1.dist-info/METADATA,sha256=C7JsLjtl5HiCAorhNrnT1ivymLtRAaJbsY_dFfJyfp4,639
10
+ rigid-0.2.1.dist-info/RECORD,,
11
+ rigid-0.2.1.dist-info/WHEEL,sha256=u6Fy2U76CDFJ6q2P27rqtBo3AN6qpylFiMaYzNr2lJg,95
12
+ rigid-0.2.1.dist-info/entry_points.txt,sha256=MPjHcNW_6-u5NuSAzeVAqVfmIbo2A47LSotTigvTa_c,46
13
+ rigid-0.2.1.dist-info/metadata.json,sha256=EXtJCWwdQh58xaYZL3CpOz7QaJ20J1UBfZXxtI5EWBw,968
14
+ rigid-0.2.1.dist-info/top_level.txt,sha256=LbeTr3maOGl8NwALmksu6EESy4CVZ_nltVNtdqLBKWY,12
15
15
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  tests/test_deploy.py,sha256=ob_v3v2KZV_x258imkCQqvOA_un1qkloPqZWh9QzBfY,893
17
17
  tests/test_file_scanner.py,sha256=PFGwRr4lnyXj7WBoa9OnENCGB6gttuFq50XZB6VYzOM,2753
18
- tests/utils.py,sha256=qfqcNn4iI3nE59wXfp1AiuJ2XWlBiY6VY4PLK5mzFwU,2292
18
+ tests/utils.py,sha256=oq2wfPzvnX--6SkuarBHOpa1OTQeN74TyQy-gPQ5_E8,2398
19
19
  tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- tests/integration/test_app.py,sha256=l5zMxUMyzJMoQw1bNKSHHAQYvOR-7MmO-KSscezExkM,2232
20
+ tests/integration/test_app.py,sha256=JN4FSA8kjibM4tBh4ny46sJ2holExeIPbVjf7YN7hxQ,2757
21
21
  tests/integration/test_apps.py,sha256=kWv_JHQp7YxbBfaenefeFTdjje63REiF9LRtg2dHSu8,762
22
22
  tests/integration/test_deploy.py,sha256=NMNPlpHbuRUjbPQehIACzKbNvSiqtoxa3ZmXiWzSaWY,4986
23
23
  tests/integration/test_domains.py,sha256=YP-xlWIR-KmpmW-usaRUQg5aC5pY2vvpkjVkM_RpvC4,1341
24
24
  tests/integration/test_login.py,sha256=7jpgY7EkLdbd0ahWBpxbJyuZMXPUPENAHvQAyJBSYFU,1507
25
- tests/integration/test_promote.py,sha256=vmEH89H-_IeLfHCRXSs3rMJ9UTtfWwXkxKI71VJOaJM,809
25
+ tests/integration/test_promote.py,sha256=7RfIsIA5N8R0Uv34gLk7i14UGxJ8OQZhTMi3lpiTQPw,859
26
26
  tests/integration/test_token.py,sha256=xsMxtrPYb6zt48TvP--sjC-P7750IeZEFjcgZGh7t0w,1117
27
27
  tests/integration/test_whoami.py,sha256=rJ5j5VaauKnddduo7PYfHwXbt47ccgHQY1tEMhGtVkQ,730
28
28
  ../../../bin/rigid,sha256=siJK-1C1K5gmtBOVFKUYHZLx_8Q4hz27OPaGyFfGADA,265
29
- rigid-0.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
29
+ rigid-0.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
30
30
  tests/integration/test_promote.pyc,,
31
31
  tests/test_file_scanner.pyc,,
32
32
  rigid/deploy.pyc,,
33
33
  tests/__init__.pyc,,
34
- tests/utils.pyc,,
34
+ rigid/commands/deploy.pyc,,
35
35
  rigid/utils.pyc,,
36
- tests/integration/test_token.pyc,,
37
36
  tests/integration/test_domains.pyc,,
38
- rigid/commands/deploy.pyc,,
39
37
  tests/integration/__init__.pyc,,
40
38
  rigid/api.pyc,,
41
39
  tests/integration/test_app.pyc,,
40
+ tests/integration/test_token.pyc,,
42
41
  tests/integration/test_apps.pyc,,
43
42
  rigid/__init__.pyc,,
44
43
  rigid/commands/__init__.pyc,,
45
44
  tests/integration/test_deploy.pyc,,
45
+ tests/utils.pyc,,
46
46
  tests/test_deploy.pyc,,
47
47
  tests/integration/test_whoami.pyc,,
48
48
  tests/integration/test_login.pyc,,
@@ -1 +1 @@
1
- {"classifiers": ["Development Status :: 5 - Production/Stable", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "License :: OSI Approved :: BSD License"], "extensions": {"python.commands": {"wrap_console": {"rigid": "rigid.commands:cli"}}, "python.details": {"contacts": [{"email": "kyle@cocode.org", "name": "Kyle Fuller", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://rigidapp.com/"}}, "python.exports": {"console_scripts": {"rigid": "rigid.commands:cli"}}}, "extras": [], "generator": "bdist_wheel (0.30.0.a0)", "license": "BSD", "metadata_version": "2.0", "name": "rigid", "run_requires": [{"requires": ["click", "pyyaml", "requests"]}], "summary": "Rig up your web application in seconds", "test_requires": [{"requires": ["six"]}], "version": "0.2.0"}
1
+ {"classifiers": ["Development Status :: 5 - Production/Stable", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "License :: OSI Approved :: BSD License"], "extensions": {"python.commands": {"wrap_console": {"rigid": "rigid.commands:cli"}}, "python.details": {"contacts": [{"email": "kyle@cocode.org", "name": "Kyle Fuller", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://rigidapp.com/"}}, "python.exports": {"console_scripts": {"rigid": "rigid.commands:cli"}}}, "extras": [], "generator": "bdist_wheel (0.30.0.a0)", "license": "BSD", "metadata_version": "2.0", "name": "rigid", "run_requires": [{"requires": ["click", "pyyaml", "requests"]}], "summary": "Rig up your web application in seconds", "test_requires": [{"requires": ["six"]}], "version": "0.2.1"}
Binary file
@@ -1,13 +1,19 @@
1
1
  import os
2
2
  import sys
3
3
  import platform
4
- import urlparse
4
+
5
+ try:
6
+ import urlparse
7
+ except ImportError:
8
+ # Python 3
9
+ from urllib import parse as urlparse
10
+
5
11
  import requests
6
12
  import click
7
13
 
8
14
  from rigid import __version__
9
15
 
10
- DEFAULT_API_BASE = 'https://rigid-api.herokuapp.com'
16
+ DEFAULT_API_BASE = 'https://api.rigidapp.com'
11
17
 
12
18
 
13
19
  class Client(object):
@@ -107,6 +113,11 @@ class Client(object):
107
113
  response = self.session.delete(self.url('apps', name))
108
114
  self.validate(response)
109
115
 
116
+ def update_app(self, name, payload):
117
+ response = self.session.patch(self.url('apps', name), json=payload)
118
+ self.validate(response)
119
+ return response.json()
120
+
110
121
  def promote(self, app, alias, version, config=None):
111
122
  payload = {
112
123
  'version': version,
@@ -127,3 +138,29 @@ class Client(object):
127
138
  def remove_domain(self, app, alias, domain):
128
139
  response = self.session.delete(self.url('apps', app, 'aliases', alias, 'domains', domain))
129
140
  self.validate(response)
141
+
142
+ # Organisations
143
+
144
+ def orgs(self):
145
+ response = self.session.get(self.url('organisations'))
146
+ self.validate(response)
147
+ return response.json()
148
+
149
+ def org(self, name):
150
+ response = self.session.get(self.url('organisations', name))
151
+ self.validate(response)
152
+ return response.json()
153
+
154
+ def create_organisation(self, name):
155
+ response = self.session.post(self.url('organisations'), json=dict(name=name))
156
+ self.validate(response)
157
+ return response.json()
158
+
159
+ def update_organisation(self, name, payload):
160
+ response = self.session.patch(self.url('organisations', name), json=payload)
161
+ self.validate(response)
162
+ return response.json()
163
+
164
+ def delete_organisation(self, name):
165
+ response = self.session.delete(self.url('organisations', name))
166
+ self.validate(response)
Binary file
@@ -88,8 +88,9 @@ def token(ctx, scope):
88
88
  @click.argument('app')
89
89
  @click.option('--create', is_flag=True)
90
90
  @click.option('--delete', is_flag=True)
91
+ @click.option('--rename')
91
92
  @click.pass_context
92
- def app(ctx, app, create, delete):
93
+ def app(ctx, app, create, delete, rename):
93
94
  """View or manage a specific application"""
94
95
 
95
96
  if create:
@@ -103,6 +104,11 @@ def app(ctx, app, create, delete):
103
104
  click.echo('{} has been deleted.'.format(app))
104
105
  return
105
106
 
107
+ if rename:
108
+ payload = ctx.obj.update_app(app, {'name': rename})
109
+ click.echo('{} has been renamed to {}.'.format(app, payload['name']))
110
+ return
111
+
106
112
  payload = ctx.obj.app(app)
107
113
 
108
114
  click.echo('{} - {}'.format(payload['name'], payload['web_url']))
@@ -173,35 +179,37 @@ def deploy(ctx, source, app, alias, create, config, verbose):
173
179
  if create:
174
180
  new_app = ctx.obj.create_app(app)
175
181
  app = new_app['name']
176
- click.echo('Application {} has been created.'.format(app))
182
+ click.echo('=> Application {} has been created'.format(app))
177
183
  else:
178
184
  deploy.validate(app)
179
185
 
180
186
  if verbose:
181
187
  files = deploy.collect_files()
182
- click.echo('{} source files:'.format(len(files)))
188
+ click.echo(' -> {} source files:'.format(len(files)))
183
189
 
184
190
  for name in files:
185
- click.echo('- {}'.format(name))
191
+ click.echo(' - {}'.format(name))
186
192
 
187
193
  uploader, length = deploy.upload(app)
188
194
 
189
- with click.progressbar(length=length, label='Uploading Source') as progress:
195
+ with click.progressbar(length=length, label='=> Uploading Source') as progress:
190
196
  source_uuid = uploader(progress.update)
191
197
 
192
198
  version_uuid = deploy.upload_version(app, source_uuid)
193
199
 
194
- click.echo('Version {} has been created'.format(version_uuid))
200
+ click.echo('=> Created version {}'.format(version_uuid))
195
201
 
196
- with click.progressbar(length=100, label='Promoting to {}'.format(alias)) as progress:
202
+ with click.progressbar(length=100, label='=> Promoting to {}'.format(alias)) as progress:
203
+ progress.update(5)
197
204
  counter = 0
198
205
 
199
206
  while True:
200
207
  try:
201
- ctx.obj.promote(app, alias, version_uuid, config)
208
+ alias = ctx.obj.promote(app, alias, version_uuid, config)
209
+ progress.update(100)
202
210
  break
203
211
  except click.ClickException as e:
204
- progress.update(1)
212
+ progress.update(10)
205
213
 
206
214
  if hasattr(e, 'response') and e.response.status_code == 400:
207
215
  payload = e.response.json()
@@ -219,7 +227,7 @@ def deploy(ctx, source, app, alias, create, config, verbose):
219
227
  if counter % 2:
220
228
  time.sleep(2)
221
229
 
222
- click.echo('{} ({}) has been deployed.'.format(app, alias))
230
+ click.echo('=> {} deployed'.format(alias.get('web_url')))
223
231
 
224
232
 
225
233
  @cli.command('domains')
@@ -256,5 +264,57 @@ def promote(ctx, app, alias, config, version):
256
264
  """Promote a version to an alias."""
257
265
 
258
266
  config = load_config(config, alias)
267
+ click.echo('=> Promoting {} to {}'.format(version, alias))
259
268
  payload = ctx.obj.promote(app, alias, version, config)
260
- click.echo('{}/{} is now running {}.'.format(app, alias, payload['version']))
269
+ click.echo('=> {} deployed'.format(payload.get('web_url')))
270
+
271
+
272
+ @cli.command('org')
273
+ @click.argument('name')
274
+ @click.option('--create', is_flag=True)
275
+ @click.option('--delete', is_flag=True)
276
+ @click.option('--rename')
277
+ @click.pass_context
278
+ def app(ctx, name, create, delete, rename):
279
+ """View or manage a specific organisation"""
280
+
281
+ if create:
282
+ payload = ctx.obj.create_organisation(name)
283
+ click.echo('{name} has been created.'.format(**payload))
284
+ return
285
+
286
+ if delete:
287
+ click.confirm('Are you sure you want to delete {}?'.format(name), abort=True)
288
+ ctx.obj.delete_organisation(name)
289
+ click.echo('{} has been deleted.'.format(name))
290
+ return
291
+
292
+ if rename:
293
+ payload = ctx.obj.update_organisation(name, {'name': rename})
294
+ click.echo('{} has been renamed to {}.'.format(name, payload['name']))
295
+ return
296
+
297
+ payload = ctx.obj.org(name)
298
+ click.echo(payload['name'])
299
+
300
+
301
+ @cli.command('orgs')
302
+ @click.pass_context
303
+ def apps(ctx):
304
+ """List your Rigid organisations"""
305
+
306
+ orgs = ctx.obj.orgs()
307
+
308
+ for org in orgs:
309
+ click.echo(org['name'])
310
+
311
+ if len(orgs) == 0:
312
+ click.echo("You don't have any organisations yet.")
313
+
314
+
315
+ # TODO add `hidden=True` in click 7.0
316
+ # https://github.com/pallets/click/pull/500#issuecomment-221018003
317
+ @cli.command('help')
318
+ @click.pass_context
319
+ def help(ctx):
320
+ ctx.fail('No such command "help". Did you mean `--help`?')
@@ -22,7 +22,7 @@ class Deploy(object):
22
22
  else:
23
23
  skipper = Skipper([])
24
24
 
25
- return filter(skipper, scan(self.source))
25
+ return list(filter(skipper, scan(self.source)))
26
26
 
27
27
  def create_tarball(self, path):
28
28
  tar(path, self.collect_files(), self.source)
Binary file