From 5c851f1d28d37108908025a29017497950069414 Mon Sep 17 00:00:00 2001 From: Anas Date: Mon, 18 Apr 2022 11:21:54 +0300 Subject: [PATCH 01/13] Added blocking parameter to lock --- django_redis/client/default.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/django_redis/client/default.py b/django_redis/client/default.py index 1df90a27..ac01a531 100644 --- a/django_redis/client/default.py +++ b/django_redis/client/default.py @@ -338,9 +338,10 @@ def lock( self, key, version: Optional[int] = None, - timeout=None, - sleep=0.1, - blocking_timeout=None, + timeout: Optional[float] = None, + sleep: float = 0.1, + blocking: bool = True, + blocking_timeout: Optional[float] = None, client: Optional[Redis] = None, thread_local=True, ): @@ -352,6 +353,7 @@ def lock( key, timeout=timeout, sleep=sleep, + blocking=blocking, blocking_timeout=blocking_timeout, thread_local=thread_local, ) From 1b225fe4f9ddd89b3ef9005751cb06a700dcee99 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 17:47:09 +0300 Subject: [PATCH 02/13] Added blocking parameter to lock --- django_redis/client/default.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/django_redis/client/default.py b/django_redis/client/default.py index b9a5c1b0..f6fd23bb 100644 --- a/django_redis/client/default.py +++ b/django_redis/client/default.py @@ -374,6 +374,7 @@ def lock( version: Optional[int] = None, timeout: Optional[float] = None, sleep: float = 0.1, + blocking: bool = True, blocking_timeout: Optional[float] = None, client: Optional[Redis] = None, thread_local: bool = True, @@ -386,6 +387,7 @@ def lock( key, timeout=timeout, sleep=sleep, + blocking=blocking, blocking_timeout=blocking_timeout, thread_local=thread_local, ) From 277f2eb07d7d49a895ac7b6de0ce4b2e5a483e55 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:11:22 +0300 Subject: [PATCH 03/13] Added tests for not blocking lock timeout --- tests/test_backend.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/test_backend.py b/tests/test_backend.py index 4ff60983..1714996a 100644 --- a/tests/test_backend.py +++ b/tests/test_backend.py @@ -677,7 +677,19 @@ def test_expire_at(self, cache: RedisCache): def test_lock(self, cache: RedisCache): lock = cache.lock("foobar") - lock.acquire(blocking=True) + assert lock.acquire(blocking=True) + + assert cache.has_key("foobar") + lock.release() + assert not cache.has_key("foobar") + + def test_lock_not_blocking(self, cache: RedisCache): + lock = cache.lock("foobar") + assert lock.acquire(blocking=False) + + lock2 = cache.lock("foobar") + + assert not lock2.acquire(blocking=False) assert cache.has_key("foobar") lock.release() @@ -685,7 +697,7 @@ def test_lock(self, cache: RedisCache): def test_lock_released_by_thread(self, cache: RedisCache): lock = cache.lock("foobar", thread_local=False) - lock.acquire(blocking=True) + assert lock.acquire(blocking=True) def release_lock(lock_): lock_.release() From 9cecd04a7125158cb2b196e5f18a6b8a308a7f93 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 17:47:09 +0300 Subject: [PATCH 04/13] Added blocking parameter to lock --- django_redis/client/default.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/django_redis/client/default.py b/django_redis/client/default.py index 3219f7c9..1c34e5ac 100644 --- a/django_redis/client/default.py +++ b/django_redis/client/default.py @@ -393,6 +393,7 @@ def lock( version: Optional[int] = None, timeout: Optional[float] = None, sleep: float = 0.1, + blocking: bool = True, blocking_timeout: Optional[float] = None, client: Optional[Redis] = None, thread_local: bool = True, @@ -405,6 +406,7 @@ def lock( key, timeout=timeout, sleep=sleep, + blocking=blocking, blocking_timeout=blocking_timeout, thread_local=thread_local, ) From b45d68df33505616e6059e4c350068b3a7b287fd Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:11:22 +0300 Subject: [PATCH 05/13] Added tests for not blocking lock timeout --- tests/test_backend.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/test_backend.py b/tests/test_backend.py index 8619931e..e5c54e18 100644 --- a/tests/test_backend.py +++ b/tests/test_backend.py @@ -677,7 +677,19 @@ def test_expire_at(self, cache: RedisCache): def test_lock(self, cache: RedisCache): lock = cache.lock("foobar") - lock.acquire(blocking=True) + assert lock.acquire(blocking=True) + + assert cache.has_key("foobar") + lock.release() + assert not cache.has_key("foobar") + + def test_lock_not_blocking(self, cache: RedisCache): + lock = cache.lock("foobar") + assert lock.acquire(blocking=False) + + lock2 = cache.lock("foobar") + + assert not lock2.acquire(blocking=False) assert cache.has_key("foobar") lock.release() @@ -685,7 +697,7 @@ def test_lock(self, cache: RedisCache): def test_lock_released_by_thread(self, cache: RedisCache): lock = cache.lock("foobar", thread_local=False) - lock.acquire(blocking=True) + assert lock.acquire(blocking=True) def release_lock(lock_): lock_.release() From 16427f2d54bc30f1c62afc2f2ca9efbf75530e0a Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:24:29 +0300 Subject: [PATCH 06/13] Add support to django 5.1 --- .github/workflows/ci.yml | 3 ++- setup.cfg | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30b52ba9..eb46a604 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,7 @@ jobs: django-version: - '4.2' - '5.0' + - '5,1' redis-version: - 'latest' @@ -36,7 +37,7 @@ jobs: python-version: '3.9' # latest Django with pre-release redis - - django-version: '5.0' + - django-version: '5.1' redis-version: 'master' python-version: '3.11' diff --git a/setup.cfg b/setup.cfg index fbbc9113..08781667 100644 --- a/setup.cfg +++ b/setup.cfg @@ -14,6 +14,7 @@ classifiers = Framework :: Django Framework :: Django :: 4.2 Framework :: Django :: 5.0 + Framework :: Django :: 5.1 Intended Audience :: Developers License :: OSI Approved :: BSD License Operating System :: OS Independent @@ -56,9 +57,9 @@ envlist = ruff mypy # tests against released versions - py{38,39,310,311}-dj{42,50}-redislatest + py{38,39,310,311}-dj{42,50,51}-redislatest # tests against unreleased versions - py311-dj50-redismaster + py311-dj51-redismaster py311-djmain-redis{latest,master} [gh-actions] @@ -72,6 +73,7 @@ python = DJANGO = 4.2: dj42 5.0: dj50 + 5.1: dj51 main: djmain REDIS = latest: redislatest @@ -98,6 +100,7 @@ commands = deps = dj42: Django>=4.2,<5.0 dj50: Django>=5.0,<5.1 + dj51: Django>=5.1,<5.2 djmain: https://github.com/django/django/archive/main.tar.gz msgpack>=0.6.0 pytest From 910eab8871c904cb1c7fa5f97aa3cbc121d01412 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:35:19 +0300 Subject: [PATCH 07/13] Added CHANGELOG --- changelog.d/754.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/754.misc diff --git a/changelog.d/754.misc b/changelog.d/754.misc new file mode 100644 index 00000000..4945394e --- /dev/null +++ b/changelog.d/754.misc @@ -0,0 +1 @@ +Added support for django 5.1 \ No newline at end of file From 95df61940c4bd8d23d9fd52cbeab50286d28f8d9 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:36:13 +0300 Subject: [PATCH 08/13] Added CHANGELOG --- changelog.d/752.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/752.bugfix diff --git a/changelog.d/752.bugfix b/changelog.d/752.bugfix new file mode 100644 index 00000000..68c94278 --- /dev/null +++ b/changelog.d/752.bugfix @@ -0,0 +1 @@ +Added blocking parameter for `cache.lock` \ No newline at end of file From 17b4a50a7b1a55e302634f98f6ac440ba7b12bb2 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:37:27 +0300 Subject: [PATCH 09/13] Added simplification --- django_redis/client/herd.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/django_redis/client/herd.py b/django_redis/client/herd.py index 94d539cd..c5c6d7d8 100644 --- a/django_redis/client/herd.py +++ b/django_redis/client/herd.py @@ -26,9 +26,7 @@ def _is_expired(x, herd_timeout: int) -> bool: return True val = x + random.randint(1, herd_timeout) - if val >= herd_timeout: - return True - return False + return val >= herd_timeout class HerdClient(DefaultClient): From 673064a2a0610e9ce5e84cdaed8e9429a826c09d Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:39:55 +0300 Subject: [PATCH 10/13] Fixed types --- django_redis/client/default.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/django_redis/client/default.py b/django_redis/client/default.py index 1c34e5ac..940e1a0e 100644 --- a/django_redis/client/default.py +++ b/django_redis/client/default.py @@ -326,9 +326,7 @@ def expire( key = self.make_key(key, version=version) - # for some strange reason mypy complains, - # saying that timeout type is float | timedelta - return client.expire(key, timeout) # type: ignore + return client.expire(key, timeout) def pexpire( self, @@ -345,11 +343,7 @@ def pexpire( key = self.make_key(key, version=version) - # Temporary casting until https://github.com/redis/redis-py/issues/1664 - # is fixed. - # for some strange reason mypy complains, - # saying that timeout type is float | timedelta - return bool(client.pexpire(key, timeout)) # type: ignore + return bool(client.pexpire(key, timeout)) def pexpire_at( self, From 6e07a13d3cf7f8fb032a4ebe4e902c466f4df0b1 Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:24:29 +0300 Subject: [PATCH 11/13] Add support to django 5.1 --- .github/workflows/ci.yml | 3 ++- setup.cfg | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30b52ba9..eb46a604 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,7 @@ jobs: django-version: - '4.2' - '5.0' + - '5,1' redis-version: - 'latest' @@ -36,7 +37,7 @@ jobs: python-version: '3.9' # latest Django with pre-release redis - - django-version: '5.0' + - django-version: '5.1' redis-version: 'master' python-version: '3.11' diff --git a/setup.cfg b/setup.cfg index fbbc9113..08781667 100644 --- a/setup.cfg +++ b/setup.cfg @@ -14,6 +14,7 @@ classifiers = Framework :: Django Framework :: Django :: 4.2 Framework :: Django :: 5.0 + Framework :: Django :: 5.1 Intended Audience :: Developers License :: OSI Approved :: BSD License Operating System :: OS Independent @@ -56,9 +57,9 @@ envlist = ruff mypy # tests against released versions - py{38,39,310,311}-dj{42,50}-redislatest + py{38,39,310,311}-dj{42,50,51}-redislatest # tests against unreleased versions - py311-dj50-redismaster + py311-dj51-redismaster py311-djmain-redis{latest,master} [gh-actions] @@ -72,6 +73,7 @@ python = DJANGO = 4.2: dj42 5.0: dj50 + 5.1: dj51 main: djmain REDIS = latest: redislatest @@ -98,6 +100,7 @@ commands = deps = dj42: Django>=4.2,<5.0 dj50: Django>=5.0,<5.1 + dj51: Django>=5.1,<5.2 djmain: https://github.com/django/django/archive/main.tar.gz msgpack>=0.6.0 pytest From fae0b01de917e0d292ceb6484e4fdf074ead7b4c Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:35:19 +0300 Subject: [PATCH 12/13] Added CHANGELOG --- changelog.d/754.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/754.misc diff --git a/changelog.d/754.misc b/changelog.d/754.misc new file mode 100644 index 00000000..4945394e --- /dev/null +++ b/changelog.d/754.misc @@ -0,0 +1 @@ +Added support for django 5.1 \ No newline at end of file From ece49972c24f6c57695d4c4a8bbf7d0c04d0819f Mon Sep 17 00:00:00 2001 From: WisdomPill Date: Sun, 20 Oct 2024 18:50:14 +0300 Subject: [PATCH 13/13] Fixed django 5.1 version in ci.yml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb46a604..f42b4ef9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: django-version: - '4.2' - '5.0' - - '5,1' + - '5.1' redis-version: - 'latest'