Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
Re: [WIP] databases/py-redis: update to 5.0.8
To:
"Kirill A. Korinsky" <kirill@korins.ky>, OpenBSD ports <ports@openbsd.org>, Klemens Nanni <kn@openbsd.org>, Remi Pointel <rpointel@openbsd.org>
Date:
Wed, 04 Sep 2024 12:26:39 +0200

Download raw body.

Thread
On Wed, 04 Sep 2024 10:43:32 +0200,
Stuart Henderson <stu@spacehopper.org> wrote:
>
> On 2024/09/04 01:55, Kirill A. Korinsky wrote:
> > ports@, Remi,
> >
> > Here an update for databases/py-redis to 5.0.8, as far as I can see the last
> > attempt was two about years ago and lead to no where
> > https://marc.info/?t=166300641000002&r=1&w=2
>
> It's always a problem to know how hard to push when maintainers are non
> responsive.
>

Well, I see the catch.

Current version from ports 3.5.3 was released in 2020, so its 4 year old. It
is that old that it's immune for CVE-2023-28859.

This version of py-redis supports redis <= 6.2, and if we decided to update
redis, we need to update this port as well.

> > So, here make test works like this:
> >
> >   = 138 failed, 971 passed, 1701 skipped, 7 xfailed, 2210 warnings, 383 errors in 220.12s (0:03:40) =
> >
> > as far as I can say tests fails due to missed redis cluster, but I can't be
> > 100% sure. Probably it contains something else.
>
> That's why I disabled cluster tests in my diff, I would prefer to be
> confident that basic things are working ok than test a load of things
> that we know will fail.
>

Thanks, incorporated.

> > +SITES.keys =		https://github.com/redis/redis-py/raw/v${MODPY_EGG_VERSION}/dockers/stunnel/keys/
> > +
> > +DISTFILES.keys =	ca-cert.pem \
> > +			ca-key.pem \
> > +			client-cert.pem \
> > +			client-key.pem \
> > +			server-cert.pem \
> > +			server-key.pem
>
> This is a lot of effort to fetch the keys, if you want files from github
> to run tests then I think it would be better to keep using the github
> download rather than doing this. (Also those filenames are too generic
> to go in DISTDIR, but easier to fix that by using a github dl rather
> than using {url} renaming).
>

Moved, and I had also discovered that they had missed the last release on
pypi, see https://github.com/redis/redis-py/issues/3344

Here an updated version which passed make test:

Index: Makefile
===================================================================
RCS file: /cvs/ports/databases/py-redis/Makefile,v
retrieving revision 1.45
diff -u -p -r1.45 Makefile
--- Makefile	6 May 2024 12:22:36 -0000	1.45
+++ Makefile	4 Sep 2024 10:25:09 -0000
@@ -1,16 +1,11 @@
 COMMENT =		Python interface to Redis
 
-MODPY_EGG_VERSION =	3.5.3
+DIST_TUPLE =		github redis redis-py v5.0.9 .
 
-GH_ACCOUNT =		andymccurdy
-GH_PROJECT =		redis-py
-GH_TAGNAME =		${MODPY_EGG_VERSION}
-
-PKGNAME =		py-redis-${MODPY_EGG_VERSION}
+PKGNAME =		py-${DISTNAME:S/-py//}
 CATEGORIES =		databases
-REVISION =		5
 
-HOMEPAGE =		https://github.com/andymccurdy/redis-py/
+HOMEPAGE =		https://github.com/redis/redis-py
 
 MAINTAINER =		Remi Pointel <rpointel@openbsd.org>
 
@@ -23,11 +18,22 @@ FLAVORS =		python3
 FLAVOR =		python3
 
 MODPY_PYBUILD =		setuptools
+MODPY_PYTEST_ARGS =	--disable-pytest-warnings \
+			-m "onlynoncluster and not redismod"
 
 # Be sure to have a redis server running on localhost
 TEST_IS_INTERACTIVE =	Yes
 
+RUN_DEPENDS =		devel/py-async-timeout${MODPY_FLAVOR} \
+
 TEST_DEPENDS =		databases/redis \
-			devel/py-mock${MODPY_FLAVOR}
+			devel/py-cachetools${MODPY_FLAVOR} \
+			devel/py-invoke${MODPY_FLAVOR} \
+			devel/py-mock${MODPY_FLAVOR} \
+			devel/py-test-asyncio${MODPY_FLAVOR} \
+			devel/py-test-cov${MODPY_FLAVOR} \
+			devel/py-uvloop${MODPY_FLAVOR} \
+			math/py-numpy${MODPY_FLAVOR} \
+			textproc/py-ujson${MODPY_FLAVOR} \
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/databases/py-redis/distinfo,v
retrieving revision 1.25
diff -u -p -r1.25 distinfo
--- distinfo	6 Oct 2020 20:29:16 -0000	1.25
+++ distinfo	4 Sep 2024 10:25:09 -0000
@@ -1,2 +1,2 @@
-SHA256 (redis-py-3.5.3.tar.gz) = Dj7wSvV9FyB8LxOklkGmO5jgBAoQdWqCR+gzRotaggY=
-SIZE (redis-py-3.5.3.tar.gz) = 129884
+SHA256 (redis-redis-py-v5.0.9.tar.gz) = wQf926pAQUVZ3dIfCni8fUZs1rIKgAg5rBi5u1TlwVA=
+SIZE (redis-redis-py-v5.0.9.tar.gz) = 4796534
Index: patches/patch-tests_test_commands_py
===================================================================
RCS file: patches/patch-tests_test_commands_py
diff -N patches/patch-tests_test_commands_py
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-tests_test_commands_py	4 Sep 2024 10:25:10 -0000
@@ -0,0 +1,28 @@
+https://github.com/redis/redis-py/pull/3369
+Index: tests/test_commands.py
+--- tests/test_commands.py.orig
++++ tests/test_commands.py
+@@ -4970,6 +4970,7 @@ class TestRedisCommands:
+     def test_latency_reset(self, r: redis.Redis):
+         assert r.latency_reset() == 0
+ 
++    @pytest.mark.redismod
+     @skip_if_server_version_lt("4.0.0")
+     @skip_if_redis_enterprise()
+     def test_module_list(self, r):
+@@ -5049,6 +5050,7 @@ class TestRedisCommands:
+             ],
+         )
+ 
++    @pytest.mark.redismod
+     @pytest.mark.onlynoncluster
+     @skip_if_server_version_lt("4.0.0")
+     @skip_if_redis_enterprise()
+@@ -5061,6 +5063,7 @@ class TestRedisCommands:
+             stack_r.module_load("/some/fake/path", "arg1", "arg2", "arg3", "arg4")
+             assert "Error loading the extension." in str(excinfo.value)
+ 
++    @pytest.mark.redismod
+     @pytest.mark.onlynoncluster
+     @skip_if_server_version_lt("7.0.0")
+     @skip_if_redis_enterprise()
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/databases/py-redis/pkg/PLIST,v
retrieving revision 1.13
diff -u -p -r1.13 PLIST
--- pkg/PLIST	14 Nov 2022 15:50:13 -0000	1.13
+++ pkg/PLIST	4 Sep 2024 10:25:10 -0000
@@ -1,33 +1,236 @@
 @pkgpath databases/py-redis
 lib/python${MODPY_VERSION}/site-packages/redis/
-lib/python${MODPY_VERSION}/site-packages/redis-${MODPY_EGG_VERSION}.dist-info/
-lib/python${MODPY_VERSION}/site-packages/redis-${MODPY_EGG_VERSION}.dist-info/LICENSE
-lib/python${MODPY_VERSION}/site-packages/redis-${MODPY_EGG_VERSION}.dist-info/METADATA
-lib/python${MODPY_VERSION}/site-packages/redis-${MODPY_EGG_VERSION}.dist-info/RECORD
-lib/python${MODPY_VERSION}/site-packages/redis-${MODPY_EGG_VERSION}.dist-info/WHEEL
-lib/python${MODPY_VERSION}/site-packages/redis-${MODPY_EGG_VERSION}.dist-info/top_level.txt
+lib/python${MODPY_VERSION}/site-packages/redis-5.0.8.dist-info/
+lib/python${MODPY_VERSION}/site-packages/redis-5.0.8.dist-info/LICENSE
+lib/python${MODPY_VERSION}/site-packages/redis-5.0.8.dist-info/METADATA
+lib/python${MODPY_VERSION}/site-packages/redis-5.0.8.dist-info/RECORD
+lib/python${MODPY_VERSION}/site-packages/redis-5.0.8.dist-info/WHEEL
+lib/python${MODPY_VERSION}/site-packages/redis-5.0.8.dist-info/top_level.txt
 lib/python${MODPY_VERSION}/site-packages/redis/__init__.py
 ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}/
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
-lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}_compat.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
-lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}_compat.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}backoff.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}backoff.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}client.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}client.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}cluster.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}cluster.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}compat.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}compat.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}connection.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}connection.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}crc.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}crc.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}credentials.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}credentials.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}lock.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}lock.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}ocsp.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}ocsp.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}retry.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}retry.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}sentinel.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}sentinel.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}typing.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}typing.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
 lib/python${MODPY_VERSION}/site-packages/redis/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc
-lib/python${MODPY_VERSION}/site-packages/redis/_compat.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}encoders.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}encoders.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}helpers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}helpers.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}hiredis.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}hiredis.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}resp2.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}resp2.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}resp3.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}resp3.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}socket.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/${MODPY_PYCACHE}socket.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/base.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/commands.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/encoders.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/helpers.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/hiredis.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/resp2.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/resp3.py
+lib/python${MODPY_VERSION}/site-packages/redis/_parsers/socket.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}client.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}client.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}cluster.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}cluster.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}connection.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}connection.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}lock.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}lock.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}retry.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}retry.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}sentinel.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}sentinel.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/client.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/cluster.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/connection.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/lock.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/retry.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/sentinel.py
+lib/python${MODPY_VERSION}/site-packages/redis/asyncio/utils.py
+lib/python${MODPY_VERSION}/site-packages/redis/backoff.py
 lib/python${MODPY_VERSION}/site-packages/redis/client.py
+lib/python${MODPY_VERSION}/site-packages/redis/cluster.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}cluster.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}cluster.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}core.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}core.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}helpers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}helpers.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}redismodules.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}redismodules.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}sentinel.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/${MODPY_PYCACHE}sentinel.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}info.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/${MODPY_PYCACHE}info.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/commands.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/bf/info.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/cluster.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/core.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}edge.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}edge.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}execution_plan.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}execution_plan.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}node.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}node.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}path.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}path.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}query_result.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/${MODPY_PYCACHE}query_result.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/commands.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/edge.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/exceptions.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/execution_plan.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/node.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/path.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/graph/query_result.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/helpers.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}_util.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}_util.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}decoders.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}decoders.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}path.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/${MODPY_PYCACHE}path.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/_util.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/commands.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/decoders.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/json/path.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/redismodules.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}_util.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}_util.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}aggregation.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}aggregation.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}document.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}document.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}field.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}field.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}indexDefinition.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}indexDefinition.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}query.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}query.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}querystring.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}querystring.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}reducers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}reducers.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}result.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}result.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}suggestion.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/${MODPY_PYCACHE}suggestion.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/_util.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/aggregation.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/commands.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/document.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/field.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/indexDefinition.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/query.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/querystring.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/reducers.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/result.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/search/suggestion.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/sentinel.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/__init__.py
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}commands.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}info.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}info.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/commands.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/info.py
+lib/python${MODPY_VERSION}/site-packages/redis/commands/timeseries/utils.py
+lib/python${MODPY_VERSION}/site-packages/redis/compat.py
 lib/python${MODPY_VERSION}/site-packages/redis/connection.py
+lib/python${MODPY_VERSION}/site-packages/redis/crc.py
+lib/python${MODPY_VERSION}/site-packages/redis/credentials.py
 lib/python${MODPY_VERSION}/site-packages/redis/exceptions.py
 lib/python${MODPY_VERSION}/site-packages/redis/lock.py
+lib/python${MODPY_VERSION}/site-packages/redis/ocsp.py
+lib/python${MODPY_VERSION}/site-packages/redis/py.typed
+lib/python${MODPY_VERSION}/site-packages/redis/retry.py
 lib/python${MODPY_VERSION}/site-packages/redis/sentinel.py
+lib/python${MODPY_VERSION}/site-packages/redis/typing.py
 lib/python${MODPY_VERSION}/site-packages/redis/utils.py


--
wbr, Kirill