pycompat: remove json.loads polyfill for Python 3.5
authorGregory Szorc <gregory.szorc@gmail.com>
Tue, 08 Mar 2022 19:11:03 -0800
changeset 48960 c3a48dd506da
parent 48959 9ac1a4507bb3
child 48961 8dec9abf2669
pycompat: remove json.loads polyfill for Python 3.5 We no longer support Python 3.5 so this can be deleted. Differential Revision: https://phab.mercurial-scm.org/D12364
mercurial/pycompat.py
--- a/mercurial/pycompat.py	Tue Mar 08 19:10:19 2022 -0800
+++ b/mercurial/pycompat.py	Tue Mar 08 19:11:03 2022 -0800
@@ -376,47 +376,7 @@
 iteritems = lambda x: x.items()
 itervalues = lambda x: x.values()
 
-# Python 3.5's json.load and json.loads require str. We polyfill its
-# code for detecting encoding from bytes.
-if sys.version_info[0:2] < (3, 6):
-
-    def _detect_encoding(b):
-        bstartswith = b.startswith
-        if bstartswith((codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE)):
-            return 'utf-32'
-        if bstartswith((codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE)):
-            return 'utf-16'
-        if bstartswith(codecs.BOM_UTF8):
-            return 'utf-8-sig'
-
-        if len(b) >= 4:
-            if not b[0]:
-                # 00 00 -- -- - utf-32-be
-                # 00 XX -- -- - utf-16-be
-                return 'utf-16-be' if b[1] else 'utf-32-be'
-            if not b[1]:
-                # XX 00 00 00 - utf-32-le
-                # XX 00 00 XX - utf-16-le
-                # XX 00 XX -- - utf-16-le
-                return 'utf-16-le' if b[2] or b[3] else 'utf-32-le'
-        elif len(b) == 2:
-            if not b[0]:
-                # 00 XX - utf-16-be
-                return 'utf-16-be'
-            if not b[1]:
-                # XX 00 - utf-16-le
-                return 'utf-16-le'
-        # default
-        return 'utf-8'
-
-    def json_loads(s, *args, **kwargs):
-        if isinstance(s, (bytes, bytearray)):
-            s = s.decode(_detect_encoding(s), 'surrogatepass')
-
-        return json.loads(s, *args, **kwargs)
-
-else:
-    json_loads = json.loads
+json_loads = json.loads
 
 isjython = sysplatform.startswith(b'java')