build(deps): bump minimum Python to 3.12, update deps, drop typed_ast - #473
Conversation
…nters - Require Python ^3.12 (from ^3.7.2) - Drop typing-extensions: Concatenate/ParamSpec now in stdlib typing (3.10+) - Drop black and flake8: superseded by ruff (already in pre-commit config) - Bump pytest ^6 → ^8, Sphinx * → ^9 (requires Python 3.12) - Unpin pydata-sphinx-theme (sphinx-book-theme#711 long resolved) - Drop allow-prereleases on web3 (stable 6.x line is sufficient) - Loosen click ^8.0.3 → ^8 - Update build backend: poetry.masonry.api → poetry.core.masonry.api - CI: test and typecheck jobs now use Python 3.12 - Move [tool.ruff] → [tool.ruff.lint] (deprecation fix) - Silence unused _token_two variable (second-token approval was never wired up) Note: web3 7.x upgrade deferred (major async-first rewrite, breaking API changes).
Greptile SummaryThe PR raises the minimum supported Python version and modernizes development, documentation, and dependency tooling.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Reviews (3): Last reviewed commit: "fix(deps): add ruff as explicit dev depe..." | Re-trigger Greptile |
- Remove deprecated 'installer.modern-installation' setting (removed in Poetry 2.0) - Bump docs.yml from Python 3.8 to 3.12 to match the new package floor (Python 3.8 + cytoolz 0.12.1 failed to build via Cython under PEP 517)
flake8 and black were removed as direct dependencies in the Python 3.12 dep bump; the Makefile still referenced them. Ruff already handles both roles.
…ckages cytoolz 0.12.1, frozenlist 1.3.3, yarl 1.8.2, and multidict 6.0.4 all declare python-versions=>=3.6 but have no pre-built cp312 wheels, causing Cython compilation failures when installing under Python 3.12. Add explicit minimum constraints in pyproject.toml so poetry resolves to versions that ship cp312 wheels: - cytoolz >=0.12.3 (locked to 1.1.0) - frozenlist >=1.5.0 (locked to 1.8.0) - multidict >=6.0.5 (locked to 6.7.1) - yarl >=1.10.0 (locked to 1.24.5) propcache 0.5.2 added as a new transitive dep from yarl 1.24.5.
|
CI was failing because several transitive Cython packages (cytoolz, frozenlist, yarl, multidict) declared Fixed by adding explicit minimum floors in
Lock file regenerated and pushed. CI re-running now. |
aiohttp 3.8.4 (transitive via web3) has no cp312 wheels and fails to build from source on Python 3.12 — PyLongObject.ob_digit was removed in 3.12. Added aiohttp = ">=3.9.0" (first release with cp312 wheels) as a direct dependency constraint; poetry re-locked to 3.14.3 which ships cp312 wheels. This fixes all 6 failing CI jobs (build + 4 test matrix + typecheck).
|
All Greptile P1 findings now addressed: Docs workflow Python version — fixed in Makefile lint/format targets — fixed in Transitive Cython packages without cp312 wheels — fixed across two commits:
Lock file re-generated; CI running now. |
….12 CI
Two independent CI failures after the Python 3.12 bump:
- Test/typecheck jobs: eth-keyfile (pulled in via web3->eth-account) still
imports pkg_resources, which setuptools dropped starting in 82.0.0 (last
shipped in 81.0.0). eth-account>=0.12 fixes this upstream but requires
hexbytes>=1.2.0, which conflicts with web3 6.x's hexbytes<0.4.0 pin — that
needs the (deliberately deferred) web3 7.x migration. Pin setuptools<82 as
a stopgap; also floor typing-extensions>=4.12.0, since 4.5.0 crashes under
Python 3.12.13's stricter TypeVar base-class check (docs build failure).
- Docs build: sphinx-book-theme was resolving to 0.0.11 (a 2020-era release,
incompatible with Sphinx 9's theme API — missing 'get_edit_url'). Floor it
to ^1.1, which also pulls a compatible pydata-sphinx-theme (0.20.0).
Along the way, Sphinx 9 hard-fails on the old implicit-%s extlinks caption
format ("issue #" -> "issue #%s").
Verified locally: full install, docs build (make html), pytest collection
(250 tests), and mypy --pretty all pass in an isolated poetry venv.
|
CI was still failing after the aiohttp fix, from two separate causes:
Verified locally in an isolated poetry venv: full install, |
|
@greptileai review |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #473 +/- ##
==========================================
+ Coverage 73.19% 73.23% +0.04%
==========================================
Files 12 12
Lines 2309 2313 +4
==========================================
+ Hits 1690 1694 +4
Misses 619 619 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Makefile lint/format targets call `poetry run ruff` but ruff was absent from [tool.poetry.dev-dependencies]. A fresh `poetry install` would succeed without it, making `make lint` fail immediately. Lock file regenerated with Poetry 2.3.2 / Python 3.12.3.
|
Greptile round 2 correctly flagged that Fixed in |
|
@greptileai review |
|
Ready to merge — Greptile round 3 returned 5/5 ("The PR appears safe to merge") on head What was fixed across the review rounds:
No blocking findings remain. Deferred item still in scope: web3 7.x upgrade (async-first rewrite, deliberately left for a separate PR per the original description). |
Builds on the intent of #410 but targets Python 3.12 (as requested) instead of 3.9.
Changes
Python floor:
^3.7.2→^3.12Removed dependencies:
typing-extensions:ConcatenateandParamSpecare stdlib since Python 3.10; no longer needed at 3.12black: superseded by ruff formatter (already in.pre-commit-config.yaml)flake8: superseded by ruff linter (already in.pre-commit-config.yaml)Updated dependencies:
pytest:^6.0→^8(9.1.1 available, requires Python 3.10+)Sphinx:*→^9(9.1.0 now requires Python 3.12, fits the new floor perfectly)pydata-sphinx-theme: unpinned from0.13.1—executablebooks/sphinx-book-theme#711was resolved long ago; latest is 0.20.0click: loosened^8.0.3→^8web3: droppedallow-prereleases = true— stable 6.x (currently 6.20.4) is sufficientCode:
decorators.py: migratefrom typing_extensions import Concatenate, ParamSpec→ stdlibtypingdecorators.py: rename unusedtoken_two→_token_two(second-token approval was never wired up; now surfaced by ruff replacing flake8)Config:
[tool.ruff]→[tool.ruff.lint](deprecation fix for ruff 0.15+)poetry.masonry.api→poetry.core.masonry.apiLock file regenerated with Poetry 2.3.2 / Python 3.12.3.
Deferred
^6.5.0(resolves to 6.20.4). Upgrade warrants its own PR once the call sites are audited.