Skip to content

fix(deps): update python dependencies (major) [python] (major) - #4497

Open
renovate[bot] wants to merge 2 commits into
masterfrom
renovate/major-python-major
Open

fix(deps): update python dependencies (major) [python] (major)#4497
renovate[bot] wants to merge 2 commits into
masterfrom
renovate/major-python-major

Conversation

@renovate

@renovate renovate Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
croniter ==2.0.7==6.2.4 age confidence
redis (changelog) ==7.4.1==8.1.0 age confidence

Release Notes

pallets-eco/croniter (croniter)

v6.2.4

Compare Source

Bugfixes

- Fix ``expand_from_start_time`` day-of-week low bound so Sunday wraps correctly for stepped day-of-week ranges (``isoweekday() % 7`` instead of ``weekday() + 1``). [44e3090, #​239, @​alhudz]

Packaging

v6.2.3

Compare Source

Features and Improvements

- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, #​231, @​alhudz]

Bugfixes
~~~~~~~~
- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, #​232, @​alhudz]
- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, #​235, @​alhudz]

Packaging
~~~~~~~~~
- Fix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, #​230]
- Bump pinned build and CI dependencies via dependabot.
- Upgrade locked development and build dependencies (``uv lock --upgrade``).

6.2.2 (2026-03-15)
------------------

Packaging
~~~~~~~~~
- Switch build backend from ``flit_core`` to ``hatchling`` with pinned dependencies. [4cce160]
- Add PEP 639 license expression (``license = "MIT"``) to project metadata. [4cce160]
- Pin all GitHub Actions to SHA hashes across CI workflows. [4cce160]
- Add dependabot for automated dependency updates. [4cce160]
- Add zizmor workflow for CI security scanning. [4cce160]

6.2.1 (2026-03-15)
------------------

Bugfixes
~~~~~~~~
- Fix ``get_prev`` skipping Feb 29 on leap years for day-of-month expressions. [441a0b5, #​203, @​Souls-R]

Packaging
~~~~~~~~~
- Add ``License :: OSI Approved :: MIT License`` classifier. [270cbbc, @​cdheiser]

6.2.0 (2026-03-14)
------------------

Features and Improvements
  • Add support for W (nearest weekday) in the day-of-month field. [c79d88a]
  • Add precision_in_seconds parameter to match() and match_range() to allow overriding the default matching precision. [7415d1e, #​58]
  • Add strict parameter to is_valid() and expand() for cross-field validation of impossible day/month combinations. [0352d48, #​199]

Bugfixes

- Fix memory leak by removing ``EXPRESSIONS`` global dict cache. [6ebfe56, @​Souls-R]

Testing and Documentation
  • Document day_or and implement_cron_bug parameters for day-of-month/day-of-week interaction. [289bf73, #​75]
  • Document precision_in_seconds parameter and default precision behavior for match(). [7415d1e, #​58]

v6.2.2

Compare Source

Packaging

- Switch build backend from ``flit_core`` to ``hatchling`` with pinned dependencies. [4cce160]
- Add PEP 639 license expression (``license = "MIT"``) to project metadata. [4cce160]
- Pin all GitHub Actions to SHA hashes across CI workflows. [4cce160]
- Add dependabot for automated dependency updates. [4cce160]
- Add zizmor workflow for CI security scanning. [4cce160]

6.2.1 (2026-03-15)
------------------

Bugfixes
~~~~~~~~
- Fix ``get_prev`` skipping Feb 29 on leap years for day-of-month expressions. [441a0b5, #​203, @​Souls-R]

Packaging

v6.2.1

Compare Source

v6.2.0

Compare Source

Features and Improvements

- Add support for ``W`` (nearest weekday) in the day-of-month field. [c79d88a]
- Add ``precision_in_seconds`` parameter to ``match()`` and ``match_range()`` to allow overriding the default matching precision. [7415d1e, #​58]
- Add ``strict`` parameter to ``is_valid()`` and ``expand()`` for cross-field validation of impossible day/month combinations. [0352d48, #​199]

Bugfixes
~~~~~~~~
- Fix memory leak by removing ``EXPRESSIONS`` global dict cache. [6ebfe56, @​Souls-R]

Testing and Documentation
  • Document day_or and implement_cron_bug parameters for day-of-month/day-of-week interaction. [289bf73, #​75]
  • Document precision_in_seconds parameter and default precision behavior for match(). [7415d1e, #​58]

v6.1.0

Compare Source

Features and Improvements

- Support for `zoneinfo` timezones. [b4e7295, Benjamin Drung (@​bdrung)]
- Add type hints to `croniter.__init__`, `timestamp_to_datetime`, and property initializations. [b171ea9, 257741e, c4f5e44, Benjamin Drung (@​bdrung)]
- Simplify code for `max_years_between_matches`. [e065efa, Benjamin Drung (@​bdrung)]
- Extend type check for `hash_id` to empty str/bytes. [6fe1d43, Benjamin Drung (@​bdrung)]
- Drop unused `_get_next_nearest` and `_get_prev_nearest`. [d7dab3a, Benjamin Drung (@​bdrung)]
- Reduce line length to 99 and unfold long Python code lines. [ecea402, f38d5f4, Benjamin Drung (@​bdrung)]

Bugfixes
~~~~~~~~
- Fix memory leak by removing `TIMESTAMP_TO_DT_CACHE` global dict cache. [1a9d3c0, Rafał Safin (@​rafsaf)]
- Fix memory leak by removing `EXPRESSIONS` global dict cache. [1883e15, @​Souls-R]
- Fix default value of `second_at_beginning` to a boolean. [dc63ed2, Benjamin Drung (@​bdrung)]
- Fix always missing the timestamp to datetime cache. [18eb299, Benjamin Drung (@​bdrung)]
- Fix skipping first of March. [de21a9d, Benjamin Drung (@​bdrung)]
- Fix DST handling by rewriting the DST logic. [f48387b, Benjamin Drung (@​bdrung)]
- Fix all flake8 complaints. [08c1f83, Benjamin Drung (@​bdrung)]

Testing and Documentation
  • Test: fix date in DST test. [871e391, Benjamin Drung (@​bdrung)]
  • Test: document time jumps in DST test cases. [2d72258, Benjamin Drung (@​bdrung)]
  • Test: use isoformat() to compare dates with timezone information. [1dd3562, Benjamin Drung (@​bdrung)]

Other

- Announce back that croniter is maintained now as part of pallets-eco. [Jarek Potiuk (@​jarekpotiuk)]

6.0.0 (2024-12-17)
------------------
- Announce for now that croniter dev is ended (CRA).
- Rework timestamp_to_datetime to use whatever timezone [kiorky]
- Make datetime_to_timestamp & timestamp_to_datetime public [kiorky]
- Fix EPOCH calculation in case of non UTC & 32 bits based systems [kiorky]
- Apply isort formatter [kiorky]
- Reintegrate test_speed [kiorky]
- Apply black formatter [evanpurkhiser, kiorky]
- Code quality changes [evanpurkhiser, kiorky]
    - Remove unused _get_caller_globals_and_locals [evanpurkhiser]
    - Remove single-use bad_length [evanpurkhiser]
    - Remove unused `days` in `proc_month` [evanpurkhiser]
    - Use `field_index` over `i` for readability [evanpurkhiser]
    - Always use `"""` for docstrings [evanpurkhiser]
    - Make helper instance methods that do not use self static [evanpurkhiser]
    - Remove unusd call to sys.exc_info [evanpurkhiser]
    - Remove unused `ALPHAS` [evanpurkhiser]
    - Improve `croniter.expand` documentation [evanpurkhiser]

5.0.1 (2024-10-29)
------------------

- Community wanted: Reintroduce 7 as DayOfWeek in deviation from standard cron (#​90). [kiorky]

4.0.0 (2024-10-28)
------------------

- Remove DayOfWeek alias 7 to DayOfWeek 0 to stick to standard cron (#​90). [kiorky]
- Fix DOW ranges calculations when lastday is a Sunday. [kiorky]

3.0.4 (2024-10-25)
------------------

- Fix overflow on 32bits systems (#​87) [kiorky]
- Fix python2 testing (related to #​93) [kiorky]
- Modernize packaging. Special thanks to Aarni Koskela (akx) for all the inputs. [kiorky, akx]

3.0.3 (2024-07-26)
------------------

- fix lint [kiorky]

3.0.2 (2024-07-26)
------------------

- Fix start_time not respected in get_next/get_prev/all_next/all_prev (#​86) [hesstobi, kiorky]

3.0.1 (2024-07-25)
------------------

- Add an `update_current` argument to get_next/get_prev/all_next/all_prev to facilitate writing of some downstream code, see #​83. [kiorky]

3.0.0 (2024-07-23)
------------------

- Support for year field [zhouyizhen, kiorky]
- Better support for 6 fields (second), and 7 fields crons [zhouyizhen, kiorky]
- Better fix hashed expressions omitting some entries (#​82, #​42, #​30) fix is retained over #​42 initial fix [zhouyizhen, kiorky]
- Ensure match return false when not time available (#​81) [zhouyizhen, kiorky]

2.0.7 (2024-07-16)
------------------

- fix doc

2.0.6 (2024-07-16)
------------------

- Implement second_at_beginning [zhouyizhen, kiorky]
- Support question mark as wildcard [zhouyizhen, kiorky]
- Support to start a cron from a reference start time [mghextreme, kiorky]

2.0.5 (2024-04-20)
------------------

- No changes, fix lint [kiorky]

2.0.4 (2024-04-20)
------------------

- Support hashid strings in is_valid [george-kuanli-peng, kiorky]
- Avoid over-optimization in crontab expansions [Cherie0125, liqirui <liqirui@baidu.com>, kiorky]

2.0.3 (2024-03-19)
------------------

- Add match_range function [salitaba]

2.0.2 (2024-02-29)
------------------

- fix leap year (29 days in February) [zed2015]

2.0.1 (2023-10-11)
------------------

- Fix release issue [kiorky]

2.0.0 (2023-10-10)
------------------

- Add Python 3.12 support [rafsaf]
- Make major release instructions [kiorky]

1.4.1 (2023-06-15)
------------------

- Make a retrocompatible version of 1.4.0 change about supporting VIXIECRON bug. (fix #&#8203;47)
  [kiorky]

1.4.0 (2023-06-15)
------------------

- Added "implement_cron_bug" flag to make the cron parser compatible with a bug in Vixie/ISC Cron
  [kiorky, David White <dwhite2@&#8203;cisco.com>]
  *WARNING*: EXPAND METHOD CHANGES RETURN VALUE

1.3.15 (2023-05-25)
-------------------

- Fix hashed expressions omitting some entries
  [@&#8203;waltervos/Walter Vos <walter.vos@ns.nl>]
- Enhance .match() precision for 6 position expressions
  [@&#8203;szpol/szymon <szymon.polinkiewicz@gmail.com>]

1.3.14 (2023-04-12)
-------------------

- Lint

1.3.13 (2023-04-12)
-------------------

- Add check for range begin/end

1.3.12 (2023-04-12)
-------------------

- restore py2 compat

1.3.11 (2023-04-12)
-------------------

-  Do not expose `i` into global namespace

1.3.10 (2023-04-07)
-------------------

- Fix DOW hash parsing [kiorky]
- better error handling on py3 [kiorky]

1.3.8 (2022-11-22)
------------------

- Add Python 3.11 support and move docs files to main folder [rafsaf]

1.3.7 (2022-09-06)
------------------

- fix tests
- Fix croniter_range infinite loop  [Shachar Snapiri <ssnapiri@paloaltonetworks.com>]

1.3.5 (2022-05-14)
------------------

- Add Python 3.10 support [eelkevdbos]

1.3.4 (2022-02-18)
------------------

- Really fix compat for tests under py27
  [kiorky]

1.3.3 (2022-02-18)
------------------

- Fix compat for tests under py27
  [kiorky]

1.3.2 (2022-02-18)
------------------

- Fix #&#8203;12: regressions with set_current
  [kiorky, agateblue]

1.3.1 (2022-02-15)
------------------

- Restore compat with python2
  [kiorky]

1.3.0 (2022-02-15)
------------------

- Add a way to make next() easier to use. This fixes #&#8203;11
  [kiorky]

1.2.0 (2022-01-14)
------------------

- Enforce validation for day=1. Before this release we used to support day=0 and it was silently glided to day=1 to support having both day in day in 4th field when it came to have 6fields cron forms (second repeat). It will now raises a CroniterBadDateError. See https://github.com/kiorky/croniter/issues/6
  [kiorky]

1.1.0 (2021-12-03)
------------------

- Enforce validation for month=1. Before this release we used to support month=0 and it was silently glided to month=1 to support having both day in month in 4th field when it came to have 6fields cron forms (second repeat). It will now raises a CroniterBadDateError. See https://github.com/kiorky/croniter/issues/6
  [kiorky]

1.0.15 (2021-06-25)
-------------------

- restore py2 [kiorky]

1.0.14 (2021-06-25)
-------------------

- better type checks [kiorky]

1.0.13 (2021-05-06)
-------------------

- Fix ZeroDivisionError with ``* * R/0 * *``
  [cuu508]

1.0.12 (2021-04-13)
-------------------

- Add support for hashed/random/keyword expressions
  Ryan Finnie (rfinnie)
- Review support support for hashed/random/keyword expression and add expanders reactor
  [ kiorky ]

1.0.11 (2021-04-07)
-------------------

- fix bug: bad case:``0 6 30 3 *``
  [zed2015(zhangchi)]
- Add support for ``L`` in the day_of_week component.  This enable expressions like ``* * * * L4``, which means last Thursday of the month.  This resolves #&#8203;159.
  [Kintyre]
- Create ``CroniterUnsupportedSyntaxError`` exception for situations where CRON syntax may be valid but some combinations of features is not supported.
  Currently, this is used when the ``day_of_week`` component has a combination of literal values and nth/last syntax at the same time.
  For example, ``0 0 * * 1,L6`` or ``0 0 * * 15,sat#1`` will both raise this exception because of mixing literal days of the week with nth-weekday or last-weekday syntax.
  This *may* impact existing cron expressions in prior releases, because ``0 0 * * 15,sat#1`` was previously allowed but incorrectly handled.
  [Kintyre]

- Update ``croniter_range()`` to allow an alternate ``croniter`` class to be used.  Helpful when using a custom class derived from croniter.
  [Kintyre]

1.0.10 (2021-03-25)
-------------------

- Remove external library ``natsort``.
  Sorting of cron expression components now handled with ``sorted()`` with a custom ``key`` function.
  [Kintyre]

1.0.9 (2021-03-23)
------------------

- Remove futures dependency
  [kiorky]

1.0.8 (2021-03-06)
------------------

- Update `_expand` to lowercase each component of the expression.
  This is in relation to #&#8203;157. With this change, croniter accepts and correctly handles `* * 10-L * *`.
  [cuu508]

1.0.7 (2021-03-02)
------------------

- Fix _expand to reject int literals with underscores
  [cuu508]
- Remove a debug statement to make flake8 happy
  [cuu508]

1.0.6 (2021-02-01)
------------------

- Fix combination of star and invalid expression bugs
  [kiorky]

1.0.5 (2021-01-29)
------------------

- Security fix: fix overflow when using cron ranges
  [kiorky]

1.0.4 (2021-01-29)
------------------

- Spelling fix release

1.0.3 (2021-01-29)
------------------

- Fix #&#8203;155: raise CroniterBadCronError when error syntax
  [kiorky]

1.0.2 (2021-01-19)
------------------

- Fix match when datetime has microseconds
  [kiorky]

1.0.1 (2021-01-06)
------------------
- no changes, just to make sense with new semver2 (making croniter on a stable state)
  [kiorky]

0.3.37 (2020-12-31)
-------------------

- Added Python 3.8 and 3.9 support
  [eumiro]

0.3.36 (2020-11-02)
-------------------

- Updated docs section regarding ``max_years_between_matches`` to be more shorter and hopefully more relevant.
  [Kintyre]
- Don't install tests
  [scop]

0.3.35 (2020-10-11)
-------------------

- Handle L in ranges. This fixes #&#8203;142.
  [kiorky]
- Add a new initialization parameter ``max_years_between_matches`` to support finding the next/previous date beyond the default 1 year window, if so desired.  Updated README to include additional notes and example of this usage.  Fixes #&#8203;145.
  [Kintyre]
- The ``croniter_range()`` function was updated to automatically determines the appropriate ``max_years_between_matches`` value, this preventing handling of the ``CroniterBadDateError`` exception.
  [Kintyre]
- Updated exception handling classes:  ``CroniterBadDateError`` now only
  applies during date finding operations (next/prev), and all parsing errors can now be caught using ``CroniterBadCronError``.  The ``CroniterNotAlphaError`` exception is now a subclass of ``CroniterBadCronError``.  A brief description of each exception class was added as an inline docstring.
  [Kintyre]
- Updated iterable interfaces to replace the ``CroniterBadDateError`` with ``StopIteration`` if (and only if) the ``max_years_between_matches`` argument is provided.  The rationale here is that if the user has specified the max tolerance between matches, then there's no need to further inform them of no additional matches.  Just stop the iteration.  This also keeps backwards compatibility.
  [Kintyre]
- Minor docs update
  [Kintyre]

0.3.34 (2020-06-19)
-------------------

- Feat ``croniter_range(start, stop, cron)``
  [Kintyre]
- Optimization for poorly written cron expression
  [Kintyre]

0.3.33 (2020-06-15)
-------------------

- Make dateutil tz support more official
  [Kintyre]
- Feat/support for day or
  [田口信元]

0.3.32 (2020-05-27)
-------------------

- document seconds repeats, fixes #&#8203;122
  [kiorky]
- Implement match method, fixes #&#8203;54
  [kiorky]
- Adding tests for #&#8203;127 (test more DSTs and croniter behavior around)
  [kiorky]
- Changed lag_hours comparison to absolute to manage dst boundary when getting previous
  [Sokkka]

0.3.31 (2020-01-02)
-------------------

- Fix get_next() when start_time less then 1s before next instant
  [AlexHill]

0.3.30 (2019-04-20)
-------------------

- credits

0.3.29 (2019-03-26)
-------------------

- credits
- history stripping (security)
- Handle -Sun notation, This fixes `#&#8203;119 <https://github.com/taichino/croniter/issues/119>`_.
  [kiorky]
- Handle invalid ranges correctly,  This fixes `#&#8203;114 <https://github.com/taichino/croniter/issues/114>`_.
  [kiorky]

0.3.25 (2018-08-07)
-------------------
- Pypi hygiene
  [hugovk]

0.3.24 (2018-06-20)
-------------------
- fix `#&#8203;107 <https://github.com/taichino/croniter/issues/107>`_: microsecond threshold
  [kiorky]

0.3.23 (2018-05-23)
-------------------

- fix ``get_next`` while preserving the fix of ``get_prev`` in 7661c2aaa
  [Avikam Agur <avikam@pagaya-inv.com>]

0.3.22 (2018-05-16)
-------------------
- Don't count previous minute if now is dynamic
  If the code is triggered from 5-asterisk based cron
  ``get_prev`` based on ``datetime.now()`` is expected to return
  current cron iteration and not previous execution.
  [Igor Khrol <igor.khrol@toptal.com>]

0.3.20 (2017-11-06)
-------------------

- More DST fixes
  [Kevin Rose <kbrose@github>]

0.3.19 (2017-08-31)
-------------------

- fix #&#8203;87: backward dst changes
  [kiorky]

0.3.18 (2017-08-31)
-------------------

- Add is valid method, refactor errors
  [otherpirate, Mauro Murari <mauro_murari@hotmail.com>]

0.3.17 (2017-05-22)
-------------------
- DOW occurrence sharp style support.
  [kiorky, Kengo Seki <sekikn@apache.org>]

0.3.16 (2017-03-15)
-------------------

- Better test suite [mrcrilly@github]
- DST support [kiorky]

0.3.15 (2017-02-16)
-------------------

- fix bug around multiple conditions and range_val in
  _get_prev_nearest_diff.
  [abeja-yuki@github]

0.3.14 (2017-01-25)
-------------------

- issue #&#8203;69: added day_or option to change behavior when day-of-month and
  day-of-week is given
  [Andreas Vogl <a.vogl@hackner-security.com>]

0.3.13 (2016-11-01)
-------------------

- `Real fix for #&#8203;34 <https://github.com/taichino/croniter/pull/73>`_
  [kiorky@github]
- `Modernize test infra <https://github.com/taichino/croniter/pull/72>`_
  [kiorky@github]
- `Release as a universal wheel <https://github.com/kiorky/croniter/pull/16>`_
  [adamchainz@github]
- `Raise ValueError on negative numbers <https://github.com/taichino/croniter/pull/63>`_
  [josegonzalez@github]
- `Compare types using "issubclass" instead of exact match <https://github.com/taichino/croniter/pull/70>`_
  [darkk@github]
- `Implement step cron with a variable base <https://github.com/taichino/croniter/pull/60>`_
  [josegonzalez@github]

0.3.12 (2016-03-10)
-------------------
- support setting ret_type in __init__ [Brent Tubbs <brent.tubbs@gmail.com>]

0.3.11 (2016-01-13)
-------------------

- Bug fix: The get_prev API crashed when last day of month token was used. Some
  essential logic was missing.
  [Iddo Aviram <iddo.aviram@similarweb.com>]

0.3.10 (2015-11-29)
-------------------

- The functionality of 'l' as day of month was broken, since the month variable
  was not properly updated
  [Iddo Aviram <iddo.aviram@similarweb.com>]

0.3.9 (2015-11-19)
------------------

- Don't use datetime functions python 2.6 doesn't support
  [petervtzand]

0.3.8 (2015-06-23)
------------------
- Truncate microseconds by setting to 0
  [Corey Wright]

0.3.7 (2015-06-01)
------------------

- converting sun in range sun-thu transforms to int 0 which is
  recognized as empty string; the solution was to convert sun to string "0"

0.3.6 (2015-05-29)
------------------

- Fix default behavior when no start_time given
  Default value for ``start_time`` parameter is calculated at module init time rather than call time.
- Fix timezone support and stop depending on the system time zone

0.3.5 (2014-08-01)
------------------

- support for 'l' (last day of month)

0.3.4 (2014-01-30)
------------------

- Python 3 compat
- QA Release

0.3.3 (2012-09-29)
------------------
- proper packaging

#

##

v6.0.0

Compare Source

v5.0.1

Compare Source

v4.0.0

Compare Source

v3.0.4

Compare Source

v3.0.3

Compare Source

v3.0.2

Compare Source

v3.0.1

Compare Source

v3.0.0

Compare Source

redis/redis-py (redis)

v8.1.0: 8.1.0

Compare Source

Changes

✨ Highlights

Async maintenance notifications

redis-py now supports server-pushed maintenance notifications in the asyncio stack for both
standalone and cluster clients, bringing the async client to parity with the sync implementation.
When a Redis deployment signals maintenance events (such as node migration or failover windows), the
async client reacts through the maintenance-notifications handler (redis/maint_notifications.py and
its async integration under redis/asyncio/), allowing applications to adapt connection handling
during maintenance without downtime. (#​4177)

Expanded command coverage

This release adds a batch of new command surfaces across core data types and modules:

  • ListsLMOVEM / BLMOVEM for moving multiple elements between lists (#​4174).
  • SetsSDIFFCARD and SUNIONCARD cardinality commands (#​4171).
  • StreamsMAXCOUNT / MAXSIZE options for XREAD and XREADGROUP (#​4173).
  • Time SeriesTS.READ (#​4170), TS.QUERYLABELS (#​4197), TS.NRANGE / TS.NREVRANGE (#​4163),
    and an exclude_empty (EXCLUDEEMPTY) option for TS.MRANGE / TS.MREVRANGE (#​4188).
  • SearchFT.ALIASLIST (#​4198) and a COLLECT reducer for aggregations (#​4179).
  • Sentinel — replica sentinel aliases (#​4127).

🚀 New Features

  • Add replica sentinel aliases (#​4127)
  • Add TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (#​4163)
  • feat: add TS.READ command support to the timeseries module (#​4170)
  • feat: add SDIFFCARD and SUNIONCARD command support (#​4171)
  • feat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (#​4173)
  • feat: add LMOVEM and BLMOVEM commands for moving multiple list elements (#​4174)
  • feat: add async maintenance-notifications support for standalone and cluster clients (#​4177)
  • feat: add COLLECT reducer support to search aggregations (#​4179)
  • feat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (#​4188)
  • feat: add TS.QUERYLABELS support to the timeseries command surface (#​4197)
  • feat: add FT.ALIASLIST support (#​4198)

⚠️ Experimental

  • feat: add client-side HIMPORT fieldset support for standalone and cluster clients (#​4205)

The feature considered unstable and public API might be changed in the future minor version

🐛 Bug Fixes

  • fix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (#​4156)
  • Fix Sentinel pool capacity loss after failover (#​4193)
  • fix: Restore NEVER_DECODE option for FT.SEARCH with protocol=3 (#​4196)
  • Decode ACL LOG string values on the default RESP3 legacy callback (#​4201)
  • fix: Fixed double decoding issue with unquote() (#​4222)
  • Fix lat/lon swap in search querystring geo() helper (#​4223)
  • Fix FIELDNAME alias dropping first character of un-prefixed fields (#​4224)

🧰 Maintenance

  • ci: report test duration metrics to Grafana Cloud (PAWS) (#​4132)
  • fix(hiredis): raise ConnectionError instead of AttributeError on concurrent disconnect (#​4136)
  • docs: consolidate AI-agent guidance into root AGENTS.md and portable agents/skills (#​4159)
  • Bump actions/checkout from 6 to 7 (#​4160)
  • Bump rojopolis/spellcheck-github-actions from 0.60.0 to 0.62.0 (#​4161)
  • test(search): add multi-language RediSearch coverage, re-enable search module pipeline tests, add 8.10 to CI matrix (#​4162)
  • Remove stale "connection" arg from get_resolved_ip docstring (#​4164)
  • Add context manager support to ConnectionPool (#​4167)
  • test: add unit tests for cluster key_slot hash-tag logic (#​4168)
  • Add unit tests for string helper utilities (#​4180)
  • test: add unit tests for decode_field_value (#​4181)
  • Add unit tests for extract_expire_flags and truncate_text (#​4183)
  • fix: add close()/aclose() to Sentinel to release sentinel client pools (#​4184)
  • test: add FT.SEARCH server-timeout coverage for return and fail policies (#​4186)
  • test: run the standard suite against an external Redis Enterprise database (#​4189)
  • build: bump Read the Docs build.os from ubuntu-20.04 to ubuntu-24.04 (#​4190)
  • fix: add missing type annotations to LockError and RedisClusterException (#​4194)
  • test: add VectorField RERANK serialization tests for sync and async search (#​4202)

We'd like to thank all the contributors who worked on this release!
@​LOGESHWAR123 @​kiryazovi-redis @​Stunned1 @​eeshsaxena @​sean-kim05 @​Brumbelow @​Sanjays2402 @​nazarli-shabnam @​chuenchen309 @​petyaslavova

v8.0.1: 8.0.1

Compare Source

Changes

🐛 Bug Fixes

  • Fix Unix socket maintenance notification handling and tests (#​4097)
  • Fix async cluster node connection release on write errors (#​4111)
  • Fixed async MultiDBClient with underlying RedisCluster (#​4108)
  • Fix hiredis readiness checks for high file descriptors (#​4115)
  • fix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys (#​4109)
  • Fixing pubsub's listen method to be blocking. (#​4119)
  • fix(asyncio): release pooled connection when Pipeline.reset() is cancelled (#​4123)
  • Avoid per-check fd allocation in hiredis _socket_can_read() — use poll() instead of a per-call selector (#​4118)

🧰 Maintenance

  • Updating PyJWT dependency. (#​4100)
  • Update CI badge in README.md (#​4099)
  • Add missing url query argument parser for ssl_min_version (#​4047)
  • ci: least-privilege permissions on spellcheck (read) and stale-issues (job-level write for actions/stale) (#​4080)
  • Bumping github-versions actions (#​4102)
  • Updating lib version + supported Redis versions in README.md + updating the Redis versions in CI test matrix (#​4092)

We'd like to thank all the contributors who worked on this release!
@​violuke @​mokashang @​arpitjain099 @​coredumperror @​elena-kolevska @​vladvildanov @​petyaslavova

v8.0.0: 8.0.0

Compare Source

Changes

🚀 Highlights

Async Cluster PubSub

This release introduces full asyncio Cluster PubSub support, bringing shard-channel capabilities (SSUBSCRIBE, SUNSUBSCRIBE, SPUBLISH) to the async RedisCluster client. The new ClusterPubSub class in redis.asyncio.cluster automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via RedisCluster.pubsub() and use ssubscribe(), sunsubscribe(), and get_sharded_message() just as they would with the sync cluster client.

Keyspace and subkey notifications

Redis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — KeyspaceNotifications, ClusterKeyspaceNotifications, AsyncKeyspaceNotifications, and AsyncClusterKeyspaceNotifications — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: subkeyspace, subkeyevent, subkeyspaceitem, and subkeyspaceevent. Convenience methods like subscribe_keyspace(), subscribe_keyevent(), subscribe_subkeyspace(), subscribe_subkeyevent(), subscribe_subkeyspaceitem(), and subscribe_subkeyspaceevent() simplify common patterns, with channel classes for both key and subkey channels.

In cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync run_in_thread() and async listen() workflows are supported.

Redis Array commands(https://redis.io/docs/latest/develop/data-types/arrays/)

redis-py now supports Redis Arrays, a preview Redis data type for sparse, index-addressable sequences of strings. New AR* command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including ARGET, ARSET, ARMGET, ARMSET, ARSCAN, ARGREP, ARRING, and AROP.

Type Hints Improvements (breaking changes)

The @overload pattern has been applied systematically across core commands (core.py), VectorSet commands, and module commands (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined ResponseT (i.e., Union[Awaitable[Any], Any]), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., int, bool, list[str]) while async clients see Awaitable[...] wrappers. This is a breaking change for type-checking only—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, SyncClientProtocol and AsyncClientProtocol, are used in overload signatures to enable this distinction.

RESP3 by default with opt-in unified responses

redis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications (#​4052). Protocol-independent unified response shapes are available by setting legacy_responses=False, so affected commands return the same Python structure with RESP2 or RESP3.

Use protocol=2 to force RESP2 on the wire, protocol=3 to opt into native RESP3 response shapes, or legacy_responses=False to migrate to unified responses. See docs/unified_responses.rst and specs/unified_responses_migration_guide.md for the affected commands and migration details.

Connection and retry defaults

Default connection settings were updated: socket_timeout and socket_connect_timeout now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to max_connections=100, and retry defaults now use 10 attempts with exponential jitter backoff.

Note: socket_timeout can affect blocking commands such as BLPOP/BRPOP; if a command blocks longer than the client socket timeout, it may raise TimeoutError before the command timeout elapses (#​2807).

🧪 Experimental Features

  • Added support for new array commands (#​4055)

🚀 New Features

  • Support Cluster PubSub in asyncio (#​3736)
  • Add Redis Keyspace Notifications Support for Redis Cluster (#​3962)
  • Add random load balancing strategy which allows for use of the primary (#​4027)
  • Add FPHA (floating-point homogeneous array) arg support to JSON.SET (#​4011)
  • Added custom Claude command + XNACK command support (#​4030)
  • Adding Time Series Multiple Aggregators support (#​4035)
  • Adding support for new COUNT aggregator for some sorted set commands - ZINTER, ZINTERSTORE, ZUNION, ZUNIONSTORE (#​4034)
  • Adding support for new INCREX command (#​4067 #​4077)
  • Add support for PubSub subscriptions with binary channel names and handlers (#​4068)

🔥 Breaking changes

  • Type hints improvements - fixing static code analysis issues related to combined sync and async return types(vectorsets + commands in core.py) (#​3991)
  • Type hints improvements - fixing static code analysis issues related to combined sync and async return types - modules (#​4005)
  • Add Redis Keyspace Notifications Support for Redis Cluster (#​3962)
  • Added support for subkey notifications (#​4040)
  • Changing the default protocol used to RESP3, keeping the responses for the default config compatible with the current RESP2 shape. Adding the possibility to opt-in for unified responses for both protocols. (#​4025 #​4031 #​4052 #​4046)
  • Type Lock.extend and Lock.reacquire as Literal[True] (#​4045)
  • Handle cluster slot migration in ClusterPubSub (shard subscription reconciliation) (#​4044)
  • Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can_read_destructive with non-destructive can_read. (#​4063)
  • Updates in default connection and retry settings (#​4082)

🐛 Bug Fixes

  • fix: guard disconnect() against RuntimeError on Python 3.13+ (#​3856) (#​4013)
  • Fix CacheProxyConnection hang when invalidation arrives on another connection (#​3600) (#​4014)
  • fix: handle scientific notation in score_cast_func for RESP2 (#​4016)
  • Fix TypeError in CacheProxyConnection when cached response is non-bytes (#​4017)
  • Fix async cluster connection cleanup on topology refresh (#​4057)
  • Normalize scalar prefixes in IndexDefinition (#​3983)
  • Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can_read_destructive with non-destructive can_read. (#​4063)
  • Preserve explicit None for client metadata config (#​4081)

⚠️ Deprecations

  • Align deprecation of lib_name/lib_version in async cluster (#​3995)
  • Add deprecation notice to setex() method documentation (#​4051)
  • Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can_read_destructive with non-destructive can_read. (#​4063)

🧰 Maintenance

  • Adding unstable 8.8 build to pipeline test matrix. Updating the lib version in master. (#​4004)
  • Fix type hints for register_script to support RedisCluster (#​3876)
  • Updating dependencies to fix reported vulnerabilities (#​4012)
  • Bump release-drafter/release-drafter from 6 to 7 (#​4019)
  • Bump rojopolis/spellcheck-github-actions from 0.58.0 to 0.60.0 (#​4018)
  • Reorganize unit tests grouping - extracting the tests that define their hardcoded client configuration separately (#​4029)
  • Update home_json.py - this will make the docs examples interactive (#​4020)
  • Fix Sync ClusterPubSub.disconnect() — Potential AttributeError (#​4036)
  • Refactor ClusterPubSub to reuse NodesManager-managed connections. (#​4037)
  • Fix CROSSSLOT on sharded pubsub resubscription by grouping channels per slot (#​4038)
  • fix(cluster): enable health check in ClusterNode command execution (#​4043)
  • Add Python version '3.14t' to CI matrix (#​4058)
  • docs: fix typos in messages, docstrings, and comments (#​4062)
  • Updating hash commands type hints and jsonget return type hints (#​4054)
  • Fix flaky tests (#​4071)
  • Add CLAUDE.md and /sync-claude-md skill for managing (#​4066)
  • Randomize cluster startup node order during topology refresh (#​4060)

We'd like to thank all the contributors who worked on this release!
@​hydroblaze @​Br1an67 @​mokashang @​swoutch @​armorbreak001 @​Brumbelow @​paoloredis @​Pack-Yak1 @​abersheeran @​alisaifee @​majiayu000 @​uglide @​dmaier-redislabs @​vladvildanov @​petyaslavova


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • "before 9am"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Pull requests that update a dependency file label Aug 4, 2026
manast
manast previously approved these changes Aug 4, 2026
@renovate

renovate Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

Copilot stopped work on behalf of manast due to an error August 4, 2026 09:48
Copilot AI requested a review from manast August 4, 2026 09:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants