-
-
Notifications
You must be signed in to change notification settings - Fork 348
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
Update to mypy 1.15 #3201
base: main
Are you sure you want to change the base?
Update to mypy 1.15 #3201
Conversation
In python/typeshed#13372, the type of the stdlib's `socket.getaddrinfo` was updated to add a union member for cases where Python was compiled with `--disable-ipv6`. This causes custom resolvers that use the stdlib function to fail mypy This is probably going to (mypy) break everyone's custom `HostnameResolver`, since the parent type is changing
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #3201 +/- ##
====================================================
- Coverage 100.00000% 99.95744% -0.04256%
====================================================
Files 124 124
Lines 18792 18796 +4
Branches 1268 1268
====================================================
- Hits 18792 18788 -4
- Misses 0 8 +8
|
I guess this PR should be more generally "update to mypy 1.15"... And major typing changes are fine, type hints are optional/not at runtime anyways. |
OK, I'll take a look at the other typing changes needed for 1.15 as well |
looks like we need to replace a lot of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually just was looking at doing this and thinking through what I would prefer, but I actually prefer the choices you made here (e.g. pushing up the CoroutineType
change rather than littering code with assert isinstance(task.coro, CoroutineType)
)
A couple comments, but most are very nitpicky so feel free to ignore.
additional_dependencies: | ||
- tomli |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Without this change, pre-commit was not picking up the config settings in pyproject.toml
. I'm curious how others haven't been running into this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well I have Python 3.13 locally and so maybe it uses tomllib
(3.11+) instead? Wouldn't be surprised if it's just a variant of that for everyone ... or they just don't run pre-commit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I'm using 3.10 in the venv I do trio work in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've been meaning to add this for quite some time, thanks for catching this!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Superb!
class RunSync(Generic[RetT]): # type: ignore[explicit-any] | ||
fn: Callable[..., RetT] # type: ignore[explicit-any] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you use Unpack[Ts]
here too?
match that of the stdlib `socket.getaddrinfo`, which was updated in mypy 1.15 (via | ||
a typeshed update) to include the possibility of ``tuple[int, bytes]`` for the | ||
``sockaddr`` field of the result. This happens in situations where Python was compiled | ||
with ``--disable-ipv6``. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's probably worth calling out the improved typing around to_thread
/from_thread
functions too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if any @_public
users have overloads, but if so:
|
||
|
||
# Decorator to mark methods public. This does nothing by itself, but | ||
# trio/_tools/gen_exports.py looks for it. | ||
# Explicit "Any" is not allowed | ||
def _public(fn: F) -> F: # type: ignore[misc] | ||
def _public(fn: Callable[P, T]) -> Callable[P, T]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should not be ParamSpec
. There's a subtle difference between this and a callable-bound TypeVar
- ParamSpec
can't capture an overload since the return type might change, but the typevar form preserves it, so it would be passed through unchanged.
In python/typeshed#13372, the type of the stdlib's
socket.getaddrinfo
was updated to add a union member for cases where Python was compiled with--disable-ipv6
. This causes custom resolvers that use the stdlib function to fail mypyThis is probably going to (mypy) break everyone's custom
HostnameResolver
, since the parent type is changing