##// END OF EJS Templates
typing: lock in new pytype gains from making revlog related classes typeable...
typing: lock in new pytype gains from making revlog related classes typeable These were pretty clean changes in the pyi files from earlier in this series, so add them to the code to make it more understandable. There's one more trivial hint that can be added to the return of `mercurial.revlogutils.rewrite._filelog_from_filename()`, however it needs to be imported from '..' under the conditional of `typing.TYPE_CHECKING`, and that seems to confuse the import checker- possibly because there's already an import block from that level. (I would have expected a message about multiple import statements in this case, but got one about higher level imports should come first, no matter where I put the import statement.)

File last commit:

r52614:ed280858 default
r52719:0338fb20 default
Show More
charencode.py
86 lines | 2.3 KiB | text/x-python | PythonLexer
Yuya Nishihara
encoding: drop circular import by proxying through '<policy>.charencode'...
r33756 # charencode.py - miscellaneous character encoding
#
Raphaël Gomès
contributor: change mentions of mpm to olivia...
r47575 # Copyright 2005-2009 Olivia Mackall <olivia@selenic.com> and others
Yuya Nishihara
encoding: drop circular import by proxying through '<policy>.charencode'...
r33756 #
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 import array
Augie Fackler
formatting: blacken the codebase...
r43346 from .. import pycompat
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925
Matt Harbison
typing: explicitly type some `mercurial.util` eol code to avoid @overload...
r52614 def isasciistr(s: bytes) -> bool:
Yuya Nishihara
encoding: add function to test if a str consists of ASCII characters...
r33927 try:
s.decode('ascii')
return True
except UnicodeDecodeError:
return False
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Harbison
typing: explicitly type some `mercurial.util` eol code to avoid @overload...
r52614 def asciilower(s: bytes) -> bytes:
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """convert a string to lowercase if ASCII
Yuya Nishihara
encoding: drop circular import by proxying through '<policy>.charencode'...
r33756
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 Raises UnicodeDecodeError if non-ASCII characters are found."""
Yuya Nishihara
encoding: drop circular import by proxying through '<policy>.charencode'...
r33756 s.decode('ascii')
return s.lower()
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Harbison
typing: explicitly type some `mercurial.util` eol code to avoid @overload...
r52614 def asciiupper(s: bytes) -> bytes:
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """convert a string to uppercase if ASCII
Yuya Nishihara
encoding: drop circular import by proxying through '<policy>.charencode'...
r33756
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 Raises UnicodeDecodeError if non-ASCII characters are found."""
Yuya Nishihara
encoding: drop circular import by proxying through '<policy>.charencode'...
r33756 s.decode('ascii')
return s.upper()
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925
Augie Fackler
formatting: blacken the codebase...
r43346
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 _jsonmap = []
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 _jsonmap.extend(b"\\u%04x" % x for x in range(32))
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 _jsonmap.extend(pycompat.bytechr(x) for x in range(32, 127))
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 _jsonmap.append(b'\\u007f')
_jsonmap[0x09] = b'\\t'
_jsonmap[0x0A] = b'\\n'
_jsonmap[0x22] = b'\\"'
_jsonmap[0x5C] = b'\\\\'
_jsonmap[0x08] = b'\\b'
_jsonmap[0x0C] = b'\\f'
_jsonmap[0x0D] = b'\\r'
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 _paranoidjsonmap = _jsonmap[:]
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 _paranoidjsonmap[0x3C] = b'\\u003c' # '<' (e.g. escape "</script>")
_paranoidjsonmap[0x3E] = b'\\u003e' # '>'
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 _jsonmap.extend(pycompat.bytechr(x) for x in range(128, 256))
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Harbison
typing: explicitly type some `mercurial.util` eol code to avoid @overload...
r52614 def jsonescapeu8fast(u8chars: bytes, paranoid: bool) -> bytes:
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 """Convert a UTF-8 byte string to JSON-escaped form (fast path)
Raises ValueError if non-ASCII characters have to be escaped.
"""
if paranoid:
jm = _paranoidjsonmap
else:
jm = _jsonmap
try:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 return b''.join(jm[x] for x in bytearray(u8chars))
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 except IndexError:
raise ValueError
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
charencode: remove Python 2 support code...
r49762 _utf8strict = r'surrogatepass'
Yuya Nishihara
py3: use 'surrogatepass' error handler to process U+DCxx transparently...
r34215
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Harbison
typing: explicitly type some `mercurial.util` eol code to avoid @overload...
r52614 def jsonescapeu8fallback(u8chars: bytes, paranoid: bool) -> bytes:
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 """Convert a UTF-8 byte string to JSON-escaped form (slow path)
Escapes all non-ASCII characters no matter if paranoid is False.
"""
if paranoid:
jm = _paranoidjsonmap
else:
jm = _jsonmap
# non-BMP char is represented as UTF-16 surrogate pair
Yuya Nishihara
py3: use 'surrogatepass' error handler to process U+DCxx transparently...
r34215 u16b = u8chars.decode('utf-8', _utf8strict).encode('utf-16', _utf8strict)
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 u16codes = array.array('H', u16b)
Yuya Nishihara
encoding: extract stub for fast JSON escape...
r33925 u16codes.pop(0) # drop BOM
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 return b''.join(jm[x] if x < 128 else b'\\u%04x' % x for x in u16codes)