Mercurial > hg
diff mercurial/archival.py @ 49803:55d45d0de4e7
typing: add type hints to pycompat.bytestr
The problem with leaving pytype to its own devices here was that for functions
that returned a bytestr, pytype inferred `Union[bytes, int]`. It now accepts
that it can be treated as plain bytes.
I wasn't able to figure out the arg type for `__getitem__`- `SupportsIndex`
(which PyCharm indicated is how the superclass function is typed) got flagged:
File "/mnt/c/Users/Matt/hg/mercurial/pycompat.py", line 236, in __getitem__:
unsupported operand type(s) for item retrieval: bytestr and SupportsIndex [unsupported-operands]
Function __getitem__ on bytestr expects int
But some caller got flagged when I marked it as `int`.
There's some minor spillover problems elsewhere- pytype doesn't seem to
recognize that `bytes.startswith()` can optionally take a 3rd and 4th arg, so
those few places have the warning disabled. It also flags where the tar API is
being abused, but that would be a tricky refactor (and would require typing
extensions until py3.7 is dropped), so disable those too.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 14 Dec 2022 01:51:33 -0500 |
parents | 642e31cb55f0 |
children |
line wrap: on
line diff
--- a/mercurial/archival.py Wed Dec 14 01:38:52 2022 -0500 +++ b/mercurial/archival.py Wed Dec 14 01:51:33 2022 -0500 @@ -154,9 +154,14 @@ ) self.fileobj = gzfileobj return ( + # taropen() wants Literal['a', 'r', 'w', 'x'] for the mode, + # but Literal[] is only available in 3.8+ without the + # typing_extensions backport. + # pytype: disable=wrong-arg-types tarfile.TarFile.taropen( # pytype: disable=attribute-error name, pycompat.sysstr(mode), gzfileobj ) + # pytype: enable=wrong-arg-types ) else: try: