Mercurial > hg
diff hgext/phabricator.py @ 43380:579672b347d2 stable
py3: define and use json.loads polyfill
Python 3.5's json.loads() requires a str. Only Python 3.6+
supports passing a bytes or bytearray.
This commit implements a json.loads() polyfill on Python 3.5
so that we can use bytes. The added function to detect encodings
comes verbatim from Python 3.7.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 02 Nov 2019 12:09:35 -0700 |
parents | 132ddd1cba85 |
children | 742065def6ca |
line wrap: on
line diff
--- a/hgext/phabricator.py Sat Nov 02 11:48:38 2019 -0700 +++ b/hgext/phabricator.py Sat Nov 02 12:09:35 2019 -0700 @@ -152,8 +152,8 @@ value = r1params[key][0] # we want to compare json payloads without worrying about ordering if value.startswith(b'{') and value.endswith(b'}'): - r1json = json.loads(value) - r2json = json.loads(r2params[key][0]) + r1json = pycompat.json_loads(value) + r2json = pycompat.json_loads(r2params[key][0]) if r1json != r2json: return False elif r2params[key][0] != value: @@ -307,7 +307,7 @@ if isinstance(x, pycompat.unicode) else x, # json.loads only accepts bytes from py3.6+ - json.loads(encoding.unifromlocal(body)), + pycompat.json_loads(encoding.unifromlocal(body)), ) if parsed.get(b'error_code'): msg = _(b'Conduit Error (%s): %s') % ( @@ -332,7 +332,7 @@ lambda x: encoding.unitolocal(x) if isinstance(x, pycompat.unicode) else x, - json.loads(rawparams), + pycompat.json_loads(rawparams), ) # json.dumps only accepts unicode strings result = pycompat.rapply(