Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR removes support for Python 3.9 and fully adopts Python 3.10+ syntax and tooling.
- Migrated all
Optional[...]andUnion[...]type hints to PEP 604 union syntax (X | None,A | B). - Updated project configuration, CI, pre-commit, and documentation to require Python >= 3.10.
- Adjusted examples and docs to match the new minimum Python version.
Reviewed Changes
Copilot reviewed 218 out of 218 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/telegram/_chatfullinfo.py | Switched Optional[...] annotations to PEP 604 union syntax. |
| src/telegram/_chatboost.py | Updated api_kwargs and type hints to union syntax in boost classes. |
| src/telegram/_chatbackground.py | Migrated Optional to union syntax for chat background classes. |
| src/telegram/_chatadministratorrights.py | Replaced Optional[bool] with `bool |
| src/telegram/_callbackquery.py | Updated function signatures and return types to union syntax. |
| src/telegram/_business.py | Converted Optional annotations to union syntax in business classes. |
| src/telegram/_botname.py | Adjusted api_kwargs type to union syntax. |
| src/telegram/_botdescription.py | Changed api_kwargs annotation to union syntax in description classes. |
| src/telegram/_botcommandscope.py | Removed legacy Optional/Union imports and applied union annotations. |
| src/telegram/_botcommand.py | Updated api_kwargs annotation to union syntax in bot command. |
| src/telegram/_birthdate.py | Migrated Optional[int] to `int |
| src/telegram/main.py | Changed _git_revision return type to `str |
| pyproject.toml | Bumped requires-python to >=3.10 and updated Python version fields. |
| examples/contexttypesbot.py | Updated example optional parameters to union syntax. |
| examples/chatmemberbot.py | Changed return type of extract_status_change to union syntax. |
| docs/auxil/admonition_inserter.py | Adjusted type hints in admonition inserter for union syntax. |
| changes/config.py | Migrated Optional to union syntax in chango config. |
| README.rst | Updated compatibility statement to Python 3.10+. |
| .pre-commit-config.yaml | Adjusted pyupgrade hook args to --py310-plus. |
| .github/workflows/unit_tests.yml | Removed Python 3.9 from test matrix. |
Comments suppressed due to low confidence (2)
pyproject.toml:34
- Update the project classifiers to include Python 3.13 and 3.14 to match the CI test matrix and declared compatibility.
"Programming Language :: Python :: 3.12",
pyproject.toml:11
- [nitpick] Consider adding an upper bound to the Python requirement (e.g., ">=3.10,<4.0") to prevent unintended installation on Python 4.x releases.
requires-python = ">=3.10"
|
So apparently python recommends using X | Y syntax but this fails in subtle ways and makes life harder in instances like these: >>> from typing import TypeAlias
>>> a: TypeAlias = "int"
>>> def this(arg: a | None):pass
...
Traceback (most recent call last):
File "<python-input-3>", line 1, in <module>
def this(arg: a | None):pass
~~^~~~~~
TypeError: unsupported operand type(s) for |: 'str' and 'NoneType'Now doing
type A = int | str
b = A | float
expected = int | float | str
b == expected # False
b = A.__value__ | float # Force evaluation
b == expected # TrueAnyway so for now it seems we'll have to settle and keep using Optional/Union in some places... |
Bibo-Joshi
left a comment
There was a problem hiding this comment.
October is finally coming up 🥳
I skimmed through the changes - the overwhelming part apparently is intruducing | :D A few files looked more interesting and I've left some comments :)
Thanks for keeping track of this!
|
Should be good to merge! Hopefully there aren't more subtle merge artifacts in critical files. I would expect the test suite to fail then. |
Bibo-Joshi
left a comment
There was a problem hiding this comment.
I did more skim-reading but found only one file where I have a question. thanks for the updates!
To be merged after #4825 and after python 3.9 reaches EOL in October
A lot of find and replace along with copilot agent edits.
Didn't use the new TypeGuard feature yet.
matchstatements is also not used right now.