Mercurial > public > mercurial-scm > hg-stable
diff mercurial/utils/procutil.py @ 49888:8147abc05794
pytype: stop excluding mercurial/ui.py
ui.extractchoices() is perhaps making assumptions that it shouldn't about the
pattern always matching, but presumably we have test coverage for that.
PyCharm flags the updated classes with a warning "Class xxx must implement all
abstract methods", and suggests adding `abc.ABC` to the superclasses. I'm not
sure why, unless it doesn't recognize the `__getattr__()` delegation pattern.
Additionally, we can't unconditionally subclass `typing.BinaryIO` because that
defeats the `__getattr__` delegation to the wrapped object at runtime. Instead,
it has to only subclass during the type checking phase[1].
In any event, this fixes:
File "/mnt/c/Users/Matt/hg/mercurial/ui.py", line 1518, in _runpager:
Function subprocess.Popen.__new__ was called with the wrong arguments [wrong-arg-types]
Expected: (cls, args, bufsize, executable, stdin,
stdout: Optional[Union[IO, int]] = ..., ...)
Actually passed: (cls, args, bufsize, stdin,
stdout: Union[mercurial.utils.procutil.WriteAllWrapper,
mercurial.windows.winstdout], ...)
File "/mnt/c/Users/Matt/hg/mercurial/ui.py", line 1798, in extractchoices:
No attribute 'group' on None [attribute-error]
In Optional[Match[bytes]]
File "/mnt/c/Users/Matt/hg/mercurial/ui.py", line 1799, in extractchoices:
No attribute 'group' on None [attribute-error]
In Optional[Match[bytes]]
[1] https://stackoverflow.com/q/71365594
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 25 Nov 2022 18:39:47 -0500 |
parents | 094a5fa3cf52 |
children | a9faacdc5943 |
line wrap: on
line diff
--- a/mercurial/utils/procutil.py Wed Dec 07 20:12:23 2022 +0100 +++ b/mercurial/utils/procutil.py Fri Nov 25 18:39:47 2022 -0500 @@ -18,6 +18,10 @@ import threading import time +from typing import ( + BinaryIO, +) + from ..i18n import _ from ..pycompat import ( getattr, @@ -29,6 +33,7 @@ error, policy, pycompat, + typelib, ) # Import like this to keep import-checker happy @@ -118,8 +123,8 @@ return stream -class WriteAllWrapper: - def __init__(self, orig): +class WriteAllWrapper(typelib.BinaryIO_Proxy): + def __init__(self, orig: BinaryIO): self.orig = orig def __getattr__(self, attr):