Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork1.9k
Add 3.14 Deprecations#14289
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?
Add 3.14 Deprecations#14289
Uh oh!
There was an error while loading.Please reload this page.
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
stdlib/pathlib/__init__.pyi Outdated
@@ -65,7 +65,12 @@ class PurePath(PathLike[str]): | |||
def__rtruediv__(self,key:StrPath)->Self: ... | |||
def__bytes__(self)->bytes: ... | |||
defas_posix(self)->str: ... | |||
defas_uri(self)->str: ... | |||
ifsys.version_info>= (3,14): | |||
@deprecated("PurePath.as_uri() is deprecated. Use Path.as_uri() instead.") |
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.
That's confusing, it's the same method. Also, we don't have an override forPath.as_uri
, so people will see this deprecation even if they call the method on aPath
.
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.
Missed the fact that we didn't have an override:7eccbac
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, the exact snippet from the release notes: pathlib.PurePath.as_uri() is deprecated and will be removed in Python 3.19. Usepathlib.Path.as_uri() instead
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.
You can also find a runtime warning:https://github.com/python/cpython/blob/e9b647dd30d22cef465972d898a34c4b1bb6615d/Lib/pathlib/__init__.py#L534
Uh oh!
There was an error while loading.Please reload this page.
@@ -59,7 +59,12 @@ class Pdb(Bdb, Cmd): | |||
stack: list[tuple[FrameType, int]] | |||
curindex: int | |||
curframe: FrameType | None | |||
curframe_locals: Mapping[str, Any] | |||
if sys.version_info >= (3, 13): |
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.
3.13 due as -The low overhead dynamic frame locals access added in Python 3.13 by PEP 667 means the frame locals cache reference previously stored in this attribute is no longer needed. Derived debuggers should access pdb.Pdb.curframe.f_locals directly in Python 3.13 and later versions
.
This comment has been minimized.
This comment has been minimized.
It seems that |
This comment has been minimized.
This comment has been minimized.
@JelleZijlstra CI fails, at the moment, so we shouldn't merge. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Diff frommypy_primer, showing the effect of this PR on open source code: aiohttp (https://github.com/aio-libs/aiohttp)+ aiohttp/worker.py:73:44: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ aiohttp/worker.py:73:44: note: See https://mypy.rtfd.io/en/stable/_refs.html#code-deprecated for more info [deprecated]core (https://github.com/home-assistant/core)+ homeassistant/util/__init__.py:128: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ homeassistant/core.py:387: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ homeassistant/helpers/http.py:48: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ homeassistant/helpers/frame.py:400: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ homeassistant/helpers/service.py:1000: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ homeassistant/helpers/trigger.py:410: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]+ homeassistant/helpers/condition.py:362: error: overload def (func: def (*Any, **Any) -> typing.Coroutine[Any, Any, Any]) -> builtins.bool of function asyncio.coroutines.iscoroutinefunction is deprecated: Deprecated in Python 3.14; use inspect.iscoroutinefunction() instead [deprecated]trio (https://github.com/python-trio/trio)+ src/trio/_path.py:258: error: Argument 1 to "as_uri" of "Path" has incompatible type "trio._path.Path"; expected "pathlib.Path" [arg-type] |
max-muoto commentedJul 13, 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.
@JelleZijlstra@srittau I had to an ignore for |
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.
Looks mostly good, a few final small suggestions below.
@@ -146,6 +146,8 @@ typing.SupportsRound.__type_params__ | |||
typing_extensions.SupportsAbs.__type_params__ | |||
typing_extensions.SupportsRound.__type_params__ | |||
# Don't always exist at runtime | |||
pdb.Pdb.curframe_locals |
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 is a bit safer, since it means that the symbol can or can not exist:
pdb.Pdb.curframe_locals | |
(pdb.Pdb.curframe_locals)? |
from typing import Any | ||
from typing_extensions import assert_type | ||
deftest_iscoroutinefunction( | ||
deftest_iscoroutinefunction_asyncio( |
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.
deftest_iscoroutinefunction_asyncio( | |
# asyncio.iscoroutinefunction is deprecated, expecting a warning. | |
deftest_iscoroutinefunction_asyncio( |
title: str | None = None, | ||
description: str | None = None, | ||
*, | ||
argument_default: 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.
While we're here:
argument_default:Any= ..., | |
#argument_default's type must be valid for the arguments in the group | |
argument_default:Any= ..., |
title: str | None = None, | ||
description: str | None = None, | ||
*, | ||
prefix_chars: str = ..., |
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.
prefix_chars:str= ..., | |
prefix_chars:str, |
description: str | None = None, | ||
*, | ||
prefix_chars: str = ..., | ||
argument_default: 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.
argument_default:Any= ..., | |
#argument_default's type must be valid for the arguments in the group | |
argument_default:Any= ..., |
Uh oh!
There was an error while loading.Please reload this page.
Add the following deprecations for 3.14:
pathlib.PurePath.as_uri
deprecation.pdb.curframe_locals
deprecation.asyncio.iscoroutinefunction
deprecation.codecs.open
deprecation.os.popen
andos.spawn*
function deprecations.