Mercurial > hg
comparison hgext/phabricator.py @ 41017:d7d3164e6a31 stable
phabricator: properly encode boolean types in the request body
I tripped over this playing with `hg debugcallconduit` to query for valid
reviewers. If the JSON on stdin is written as 'True' or 'False', python
complains it isn't valid JSON. If it's written as 'true' or 'false', it made it
to the server, but got kicked back with this:
abort: Conduit Error (ERR-CONDUIT-CORE): Error while reading "isBot":
Expected boolean (true or false), got something else.
The test isn't really relevant here (the code can be reverted, and it will
pass), but this gives us coverage for the debug command.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 21 Dec 2018 17:36:12 -0500 |
parents | 7e2c58b08e74 |
children | 46e0563c67db |
comparison
equal
deleted
inserted
replaced
40988:03f7d0822ec1 | 41017:d7d3164e6a31 |
---|---|
153 flattened to {'a[0]': 'b', 'a[1]': 'c', 'd[e]': 'f'} and then passed to | 153 flattened to {'a[0]': 'b', 'a[1]': 'c', 'd[e]': 'f'} and then passed to |
154 urlencode. Note: the encoding is consistent with PHP's http_build_query. | 154 urlencode. Note: the encoding is consistent with PHP's http_build_query. |
155 """ | 155 """ |
156 flatparams = util.sortdict() | 156 flatparams = util.sortdict() |
157 def process(prefix, obj): | 157 def process(prefix, obj): |
158 if isinstance(obj, bool): | |
159 obj = {True: b'true', False: b'false'}[obj] # Python -> PHP form | |
158 items = {list: enumerate, dict: lambda x: x.items()}.get(type(obj)) | 160 items = {list: enumerate, dict: lambda x: x.items()}.get(type(obj)) |
159 if items is None: | 161 if items is None: |
160 flatparams[prefix] = obj | 162 flatparams[prefix] = obj |
161 else: | 163 else: |
162 for k, v in items(obj): | 164 for k, v in items(obj): |