summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/python-property-cached-asyncio-3_11.patch
diff options
context:
space:
mode:
authorNicolas Graves <ngraves@ngraves.fr>2025-04-04 21:16:43 +0200
committerAndreas Enge <andreas@enge.fr>2025-04-16 11:46:27 +0200
commite4750cbff9f3c4120aabb059d61f4102a83e5d68 (patch)
tree003357f158464b17c118dfed6df9bc43a08e88bd /gnu/packages/patches/python-property-cached-asyncio-3_11.patch
parent1c27ceac6501eb7597b28b1ac23bcab3dd15ebd7 (diff)
gnu: python-property-cached: Fix build.
* gnu/packages/python-xyz.scm (python-property-cached): Fix build. * gnu/packages/patches/python-property-cached-asyncio-3_11.patch: Add patch. * gnu/local.mk: Record patch. Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Diffstat (limited to 'gnu/packages/patches/python-property-cached-asyncio-3_11.patch')
-rw-r--r--gnu/packages/patches/python-property-cached-asyncio-3_11.patch201
1 files changed, 201 insertions, 0 deletions
diff --git a/gnu/packages/patches/python-property-cached-asyncio-3_11.patch b/gnu/packages/patches/python-property-cached-asyncio-3_11.patch
new file mode 100644
index 0000000000..21c176947e
--- /dev/null
+++ b/gnu/packages/patches/python-property-cached-asyncio-3_11.patch
@@ -0,0 +1,201 @@
+From d89186b47dc25c5ef5907c146edf3f792d50774b Mon Sep 17 00:00:00 2001
+Message-ID: <d89186b47dc25c5ef5907c146edf3f792d50774b.1743608515.git.ngraves@ngraves.fr>
+From: Nicolas Graves <ngraves@ngraves.fr>
+Date: Wed, 2 Apr 2025 17:29:45 +0200
+Subject: [PATCH] Update to python 3.11
+
+---
+ property_cached/__init__.py | 21 +++-------
+ tests/test_async_cached_property.py | 3 +-
+ tests/test_coroutine_cached_property.py | 51 ++++++++++---------------
+ 3 files changed, 27 insertions(+), 48 deletions(-)
+
+diff --git a/property_cached/__init__.py b/property_cached/__init__.py
+index 3353048..c033542 100644
+--- a/property_cached/__init__.py
++++ b/property_cached/__init__.py
+@@ -3,6 +3,7 @@ import functools
+ import pkg_resources
+ import threading
+ import weakref
++from inspect import iscoroutinefunction
+ from time import time
+
+
+@@ -31,12 +32,12 @@ class cached_property(property):
+ if obj is None:
+ return self
+
+- if asyncio and asyncio.iscoroutinefunction(self.func):
+- return self._wrap_in_coroutine(obj)
+-
+ value = self.cache.get(obj, self._sentinel)
+ if value is self._sentinel:
+- value = self.cache[obj] = self.func(obj)
++ if iscoroutinefunction(self.func):
++ self.cache[obj] = value = asyncio.ensure_future(self.func(obj))
++ else:
++ self.cache[obj] = value = self.func(obj)
+
+ return value
+
+@@ -49,18 +50,6 @@ class cached_property(property):
+ def __delete__(self, obj):
+ del self.cache[obj]
+
+- def _wrap_in_coroutine(self, obj):
+-
+- @functools.wraps(obj)
+- @asyncio.coroutine
+- def wrapper():
+- value = self.cache.get(obj, self._sentinel)
+- if value is self._sentinel:
+- self.cache[obj] = value = asyncio.ensure_future(self.func(obj))
+- return value
+-
+- return wrapper()
+-
+
+ class threaded_cached_property(cached_property):
+ """
+diff --git a/tests/test_async_cached_property.py b/tests/test_async_cached_property.py
+index 1af139d..32b3410 100644
+--- a/tests/test_async_cached_property.py
++++ b/tests/test_async_cached_property.py
+@@ -9,8 +9,7 @@ import property_cached as cached_property
+
+ def unittest_run_loop(f):
+ def wrapper(*args, **kwargs):
+- coro = asyncio.coroutine(f)
+- future = coro(*args, **kwargs)
++ future = f(*args, **kwargs)
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(future)
+
+diff --git a/tests/test_coroutine_cached_property.py b/tests/test_coroutine_cached_property.py
+index 40e443b..5864301 100644
+--- a/tests/test_coroutine_cached_property.py
++++ b/tests/test_coroutine_cached_property.py
+@@ -14,8 +14,7 @@ import property_cached as cached_property
+
+ def unittest_run_loop(f):
+ def wrapper(*args, **kwargs):
+- coro = asyncio.coroutine(f)
+- future = coro(*args, **kwargs)
++ future = f(*args, **kwargs)
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(future)
+
+@@ -33,14 +32,12 @@ def CheckFactory(cached_property_decorator):
+ self.control_total = 0
+ self.cached_total = 0
+
+- @asyncio.coroutine
+- def add_control(self):
++ async def add_control(self):
+ self.control_total += 1
+ return self.control_total
+
+ @cached_property_decorator
+- @asyncio.coroutine
+- def add_cached(self):
++ async def add_cached(self):
+ self.cached_total += 1
+ return self.cached_total
+
+@@ -52,74 +49,68 @@ class TestCachedProperty(unittest.TestCase):
+
+ cached_property_factory = cached_property.cached_property
+
+- @asyncio.coroutine
+- def assert_control(self, check, expected):
++ async def assert_control(self, check, expected):
+ """
+ Assert that both `add_control` and 'control_total` equal `expected`
+ """
+- value = yield from check.add_control()
++ value = await check.add_control()
+ self.assertEqual(value, expected)
+ self.assertEqual(check.control_total, expected)
+
+- @asyncio.coroutine
+- def assert_cached(self, check, expected):
++ async def assert_cached(self, check, expected):
+ """
+ Assert that both `add_cached` and 'cached_total` equal `expected`
+ """
+ print("assert_cached", check.add_cached)
+- value = yield from check.add_cached
++ value = await check.add_cached
+ self.assertEqual(value, expected)
+ self.assertEqual(check.cached_total, expected)
+
+ @unittest_run_loop
+- @asyncio.coroutine
+- def test_cached_property(self):
++ async def test_cached_property(self):
+ Check = CheckFactory(self.cached_property_factory)
+ check = Check()
+
+ # The control shows that we can continue to add 1
+- yield from self.assert_control(check, 1)
+- yield from self.assert_control(check, 2)
++ await self.assert_control(check, 1)
++ await self.assert_control(check, 2)
+
+ # The cached version demonstrates how nothing is added after the first
+- yield from self.assert_cached(check, 1)
+- yield from self.assert_cached(check, 1)
++ await self.assert_cached(check, 1)
++ await self.assert_cached(check, 1)
+
+ # The cache does not expire
+ with freeze_time("9999-01-01"):
+- yield from self.assert_cached(check, 1)
++ await self.assert_cached(check, 1)
+
+ # Typically descriptors return themselves if accessed though the class
+ # rather than through an instance.
+ self.assertTrue(isinstance(Check.add_cached, self.cached_property_factory))
+
+ @unittest_run_loop
+- @asyncio.coroutine
+- def test_reset_cached_property(self):
++ async def test_reset_cached_property(self):
+ Check = CheckFactory(self.cached_property_factory)
+ check = Check()
+
+ # Run standard cache assertion
+- yield from self.assert_cached(check, 1)
+- yield from self.assert_cached(check, 1)
++ await self.assert_cached(check, 1)
++ await self.assert_cached(check, 1)
+
+ # Clear the cache
+ del check.add_cached
+
+ # Value is cached again after the next access
+- yield from self.assert_cached(check, 2)
+- yield from self.assert_cached(check, 2)
++ await self.assert_cached(check, 2)
++ await self.assert_cached(check, 2)
+
+ @unittest_run_loop
+- @asyncio.coroutine
+- def test_none_cached_property(self):
++ async def test_none_cached_property(self):
+ class Check(object):
+ def __init__(self):
+ self.cached_total = None
+
+ @self.cached_property_factory
+- @asyncio.coroutine
+- def add_cached(self):
++ async def add_cached(self):
+ return self.cached_total
+
+- yield from self.assert_cached(Check(), None)
++ await self.assert_cached(Check(), None)
+--
+2.49.0
+