Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork1.9k
Deprecate_typeshed.Supports{Read,Write}
#14149
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Replace with `typing_extensions.{Reader,Writer}` in stdlib
Draft until typing_extensions 4.14.0 final is released. I'll give the third-party stubs a week or two after the release. |
This comment has been minimized.
This comment has been minimized.
srittau commentedMay 26, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
This is a bit more primer output than expected (due to
|
This comment has been minimized.
This comment has been minimized.
Diff frommypy_primer, showing the effect of this PR on open source code: django-stubs (https://github.com/typeddjango/django-stubs)+ django-stubs/core/management/utils.pyi:4: error: class _typeshed.SupportsWrite is deprecated: Use typing_extensions.Writer instead. Will be removed in December 2025 or later. [deprecated]+ django-stubs/core/serializers/json.pyi:8: error: class _typeshed.SupportsRead is deprecated: Use typing_extensions.Reader instead. Will be removed in December 2025 or later. [deprecated]sphinx (https://github.com/sphinx-doc/sphinx)+ sphinx/util/logging.py: note: In class "WarningStreamHandler":+ sphinx/util/logging.py:204:50: error: Type argument "SafeEncodingWriter" of "StreamHandler" must be a subtype of "Writer[str]" [type-var]+ sphinx/util/logging.py: note: In class "NewLineStreamHandler":+ sphinx/util/logging.py:210:50: error: Type argument "SafeEncodingWriter" of "StreamHandler" must be a subtype of "Writer[str]" [type-var]+ sphinx/util/logging.py: note: In function "setup":+ sphinx/util/logging.py:636:26: error: No overload variant of "StreamHandler" matches argument type "LastMessagesWriter" [call-overload]+ sphinx/util/logging.py:636:26: note: Possible overload variants:+ sphinx/util/logging.py:636:26: note: def [_StreamT: Writer[str]] __init__(self, stream: None = ...) -> StreamHandler[TextIO]+ sphinx/util/logging.py:636:26: note: def [_StreamT: Writer[str]] __init__(self, stream: _StreamT) -> StreamHandler[_StreamT]+ sphinx/_cli/util/errors.py: note: In function "handle_exception":+ sphinx/_cli/util/errors.py:183:9: error: No overload variant of "print" matches argument types "tuple[str, ...]", "SupportsWrite" [call-overload]+ sphinx/_cli/util/errors.py:183:9: note: Possible overload variants:+ sphinx/_cli/util/errors.py:183:9: note: def print(*values: object, sep: str | None = ..., end: str | None = ..., file: Writer[str] | None = ..., flush: Literal[False] = ...) -> None+ sphinx/_cli/util/errors.py:183:9: note: def print(*values: object, sep: str | None = ..., end: str | None = ..., file: _SupportsWriteAndFlush[str] | None = ..., flush: bool) -> Nonepandas (https://github.com/pandas-dev/pandas)+ pandas/util/_print_versions.py:147: error: Argument 2 to "dump" has incompatible type "StreamReaderWriter"; expected "Writer[str]" [arg-type]+ pandas/util/_print_versions.py:147: note: Following member(s) of "StreamReaderWriter" have conflicts:+ pandas/util/_print_versions.py:147: note: Expected:+ pandas/util/_print_versions.py:147: note: def write(self, str, /) -> int+ pandas/util/_print_versions.py:147: note: Got:+ pandas/util/_print_versions.py:147: note: def write(self, data: str) -> Nonecwltool (https://github.com/common-workflow-language/cwltool)+ cwltool/executors.py: note: In member "run_jobs" of class "SingleJobExecutor":+ cwltool/executors.py:243:34: error: Argument "file" to "print" has incompatible type "SupportsWrite[str] | None"; expected "Writer[str] | None" [arg-type] |
AA-Turner commentedJun 3, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
sphinx-doc/sphinx#13595 points to this issue for background, but I'm still missing context. Why is this change required? It breaks working code. |
The discussions inpython/cpython#134706 andsphinx-doc/sphinx#13595 make me think that we should update the new |
|
AA-Turner commentedJun 3, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Given how old the A |
I'm unwilling to change the protocol. As the primer hits show, there is no problem with returning |
And anyway, this discussion is off topic for this PR. |
I think the discussion is pretty on-topic. Looking at the proposed change here purely in terms of the types, rather than which protocol is in the standard library for this PR: this PR switches lots of annotations so that various functions now require an object with a I think we should aim to give users of type checkers the best experience possible, so I'm not sure why we should accept any mypy_primer fallout here unless there's a good argument that there were type-safety issues or false positives there beforehand. |
As pointed out above the fallout is minimal. Projects need to switch away from |
To take the Sphinx case as an example, the classes wereadded a decade ago and are mostly unchanged since then. I am unconvinved by the 'minimal fallout' argument, we should be convinced that a change is correct, rather than that doesn't impact many people. The A few examples I quickly found of the documentation not following the
A |
I've answered these arguments in the CPython PR. As I said before, I believe (sync) |
It should be fairly easy to change the return type at any point before the release candidates come out. We've made much bigger changes to new features during beta periods in the past over at CPython; the purpose of beta periods is meant to be for users to play with new features and report sharp edges in them before the release-candidate phase. |
This convention is needed for Python's |
Replace with
typing_extensions.{Reader,Writer}
in stdlib