Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"No Buffer in module typing, referenced from 'inferred + unknowns'" when importing from typing_extensions #1772

Open
mharbison72 opened this issue Sep 17, 2024 · 0 comments

Comments

@mharbison72
Copy link

Recent versions of pytype seem to have settled on from typing_extensions import Buffer and then using Buffer for things that can be bytes or memoryview, or... Here's the baseline file where it generates such a *.pyi:

node_py-start.zip

That runs successfully as part of a larger project, so I ran merge-pyi on it, and had to manually add the typing definitions for a few of the functions that used Buffer, due to the fact they're just aliased here instead of defined as functions. (We also want to narrow the allowed usage to disallow str and the extra arguments):

node_py-annotated.zip

That generates a huge error output in the *.pyi file:

node_pyi-error.zip

I first noticed this with pytype==2023.11.21, but it looks like the same error in 2024.09.13, both running Python 3.10.11. But when pytype annotates similar to this on its own, everything seems to work. The idea behind delaying the typing_extensions import is so that we don't have to vendor a copy of it for production builds, and can rely on whatever pytype provides when it is run.

saschazepter pushed a commit to saschazepter/hg that referenced this issue Nov 28, 2024
…sue6940)

Since Python 2.7 and 3.5, `typing.ByteString` was defined as an alias for
`bytes | bytearray | memoryview`, and `bytes` was also accepted as a shorthand
for this, so we have `bytes` sprinkled all over the codebase.  But then PEP-688
reversed all of that by deprecating `typing.ByteString` and its successor
`collections.abc.ByteString` in Python 3.12 (as well as the `bytes` shorthand)[1],
and removing it completely in Python 3.14.  That leaves us with a couple of
problems, namely defining something useful that spans py3.8-py3.13 and keeps
pytype happy, and finding all of the instances where `bytes` doesn't really mean
`bytes`.  The current successor to all of this is `collections.abc.Buffer` in
Python 3.12 (or `typing_extensions.Buffer` in previous versions).  However, the
current CI does type checking using Python 3.11 (so the former is not avaiable),
and pytype has issues with importing `typing_extensions.Buffer`[2].

The good news is we don't need to deal with this mess immediately, since the
type annotation evaluation is delayed to the type checking phase, and we're
making no effort at supporting it in all supported versions of Python.  So by
delaying the import of this particular symbol, we can still use it for type
checking purposes, but can start assessing Python 3.14 problems without doing a
lot of extra work.  Putting this on stable will allow people interested in 3.14
to work on it 4-5 extra months earlier (and apparently there's some interest).

[1] https://peps.python.org/pep-0688/#no-special-meaning-for-bytes
[2] google/pytype#1772
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant