D7296: pycompat: kludge around pytype being confused by __new__

durin42 (Augie Fackler) phabricator at mercurial-scm.org
Tue Nov 19 13:20:52 EST 2019


durin42 updated this revision to Diff 18243.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D7296?vs=18240&id=18243

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D7296/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D7296

AFFECTED FILES
  mercurial/pycompat.py

CHANGE DETAILS

diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
--- a/mercurial/pycompat.py
+++ b/mercurial/pycompat.py
@@ -48,6 +48,17 @@
         f.set_exception(exc_info[0])
 
 
+if not globals():  # hide this from non-pytype users
+    from typing import (
+        Callable,
+        Union,
+    )
+
+    # keep pyflakes happy
+    for t in (Callable, Union):
+        assert t
+
+
 def identity(a):
     return a
 
@@ -154,7 +165,7 @@
     bytechr = struct.Struct('>B').pack
     byterepr = b'%r'.__mod__
 
-    class bytestr(bytes):
+    class _bytestr(bytes):
         """A bytes which mostly acts as a Python 2 str
 
         >>> bytestr(), bytestr(bytearray(b'foo')), bytestr(u'ascii'), bytestr(1)
@@ -291,6 +302,8 @@
 
         return w
 
+    bytestr = _bytestr  # Callable[[Union[bytes, str]], bytestr]
+
     # these wrappers are automagically imported by hgloader
     delattr = _wrapattrfunc(builtins.delattr)
     getattr = _wrapattrfunc(builtins.getattr)
@@ -398,7 +411,7 @@
     unicode = unicode
     bytechr = chr
     byterepr = repr
-    bytestr = str
+    bytestr = str  # type: Callable[[Union[bytes, str]], bytestr]
     iterbytestr = iter
     maybebytestr = identity
     sysbytes = identity



To: durin42, #hg-reviewers, indygreg, dlax
Cc: mjpieters, dlax, indygreg, mercurial-devel


More information about the Mercurial-devel mailing list