build: bound dependencies to tested versions, release 1.7.0 - #275
Conversation
Both dependencies were declared with a lower bound only, so a fresh install always resolved to whatever was newest on PyPI. That is how redis 8.1 reached users unannounced and broke Is_Cluster(). Cap both at the next incompatible release so an install only picks versions this client has been tested against, and raise redis's lower bound to 7.2: falkordb imports redis.driver_info, which does not exist in 7.1, so the declared floor was never actually installable.
Minor rather than patch: the release narrows the redis range, so it changes which environments can install the client. Since 1.6.2: - fix: Is_Cluster() no longer forwards pool-only kwargs to redis.Redis, which broke every async client on redis 8.1 (#262) - fix: the execution plan parser attaches every sibling operation to its parent instead of nesting siblings under each other (#267) - build: redis and python-dateutil bounded to tested versions
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe project version changes to 1.7.0. Redis and python-dateutil dependencies now include compatibility bounds and explanatory comments. ChangesRelease metadata and dependency bounds
Estimated code review effort: 1 (Trivial) | ~5 minutes Mergeability Score: ⚪ Minimal · up to This change narrows dependency versions and updates the release version; no actionable merge-blocking risk remains after normal checks and review. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #275 +/- ##
=======================================
Coverage 92.84% 92.84%
=======================================
Files 39 39
Lines 3088 3088
=======================================
Hits 2867 2867
Misses 221 221 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
What
Two commits:
build:— boundredisandpython-dateutilto the versions this client is tested againstchore(release):— bump to1.7.0Why
Both dependencies had a lower bound only, so a fresh
pip install falkordbalways resolved to whatever was newest on PyPI. Nothing in this repo decided that — PyPI did.That is exactly how redis 8.1 reached users: it added five pool-only keyword arguments to
ConnectionPool.connection_kwargs,Is_Cluster()forwarded them to the synchronousredis.Redis()constructor, and every async client died withTypeError: Redis.__init__() got an unexpected keyword argument 'himport_registry'before a single query ran. Fixed in #262, but it reached users first because nothing constrained the resolve.Our
uv.lockpins redis 7.4.0, which is why CI stayed green throughout — the lockfile governs this repo's own CI and nothing downstream. Consumers only ever see the range inpyproject.toml.The lower bound was also wrong
falkordb/falkordb.py:4doesfrom redis.driver_info import DriverInfo. That module first appears in redis 7.2, so>=7.1.0advertised a floor that fails on import. Raised to>=7.2.Why 1.7.0 and not 1.6.3
The bug fixes alone would be a patch, but narrowing the redis range changes which environments can install the client, which is more than a patch should do.
Since 1.6.2:
Is_Cluster()no longer forwards pool-only kwargs toredis.Redis(fix: only forward accepted kwargs from Is_Cluster to redis.Redis #262)Tradeoff worth naming
Upper bounds on a library are not free. If a user installs
falkordbalongside a package that requiresredis>=8.2, pip cannot satisfy both and the install fails withResolutionImpossible— and there is nothing the user can do except wait for a release from us. That is the cost we are accepting in exchange for never shipping an untested transitive version again.Two things keep that cost small:
<8.2still allows redis 8.1.x, which is current, so no one is held back todayThe bound should be raised as a routine chore whenever that daily job passes on a newer version — not left to drift until it blocks someone.
Testing
103 passedagainstfalkordb/falkordb:edgepip install .resolves redis 8.1.0 — inside the new bound, and working with fix: only forward accepted kwargs from Is_Cluster to redis.Redis #262uv sync --extra testleavesuv.lockunmodifieduv.lockcarries only the three lines that had to change (thefalkordbversion and the two specifier strings). Note it was generated by a neweruvthan 0.7.19 — runninguv lockon an older uv rewritesrevision = 3to2and drops apython_full_version < '3.13'marker, so it was hand-edited to keep the diff honest.Summary by CodeRabbit
python-dateutilto improve compatibility and stability.