Blame packages/p/python-cached-property/python311.patch

Bernhard M. Wiedemann 4db387
From 297031687679762849dedeaf24aa3a19116f095b Mon Sep 17 00:00:00 2001
Bernhard M. Wiedemann 4db387
From: Petr Viktorin <encukou@gmail.com>
Bernhard M. Wiedemann 4db387
Date: Thu, 2 Dec 2021 11:26:20 +0100
Bernhard M. Wiedemann 4db387
Subject: [PATCH 1/2] Don't use asyncio.coroutinefunction if it's not available
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
Python 3.11 drops the deprecated @asyncio.coroutine and
Bernhard M. Wiedemann 4db387
asyncio.iscoroutinefunction.
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
Using a wrapper with @asyncio.coroutine in __get__ wasn't
Bernhard M. Wiedemann 4db387
necessary (the future from asyncio.ensure_future is awaitable,
Bernhard M. Wiedemann 4db387
and the wrapper doesn't do anything asynchronous), so the
Bernhard M. Wiedemann 4db387
logic can be simplified to just call asyncio.ensure_future
Bernhard M. Wiedemann 4db387
(to schedule the task and store the result when it's
Bernhard M. Wiedemann 4db387
available).
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
Tests for @asyncio.coroutine are skipped on 3.11+.
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
An unnecessary call to asyncio.coroutine in tests is
Bernhard M. Wiedemann 4db387
removed: it's not necessary to call this for `async def`
Bernhard M. Wiedemann 4db387
functions.
Bernhard M. Wiedemann 4db387
---
Bernhard M. Wiedemann 4db387
 cached_property.py                  | 24 +++++++++++-------------
Bernhard M. Wiedemann 4db387
 conftest.py                         |  6 +++++-
Bernhard M. Wiedemann 4db387
 tests/test_async_cached_property.py |  3 +--
Bernhard M. Wiedemann 4db387
 3 files changed, 17 insertions(+), 16 deletions(-)
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
diff --git a/cached_property.py b/cached_property.py
Bernhard M. Wiedemann 4db387
index 3135871..254739c 100644
Bernhard M. Wiedemann 4db387
--- a/cached_property.py
Bernhard M. Wiedemann 4db387
+++ b/cached_property.py
Bernhard M. Wiedemann 4db387
@@ -13,6 +13,12 @@
Bernhard M. Wiedemann 4db387
     import asyncio
Bernhard M. Wiedemann 4db387
 except (ImportError, SyntaxError):
Bernhard M. Wiedemann 4db387
     asyncio = None
Bernhard M. Wiedemann 4db387
+try:
Bernhard M. Wiedemann 4db387
+    iscoroutinefunction = asyncio.iscoroutinefunction
Bernhard M. Wiedemann 4db387
+except AttributeError:
Bernhard M. Wiedemann 4db387
+    # Python 3.11: @asyncio.coroutine was removed
Bernhard M. Wiedemann 4db387
+    from inspect import iscoroutinefunction
Bernhard M. Wiedemann 4db387
+
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 class cached_property(object):
Bernhard M. Wiedemann 4db387
@@ -30,22 +36,14 @@ def __get__(self, obj, cls):
Bernhard M. Wiedemann 4db387
         if obj is None:
Bernhard M. Wiedemann 4db387
             return self
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
-        if asyncio and asyncio.iscoroutinefunction(self.func):
Bernhard M. Wiedemann 4db387
-            return self._wrap_in_coroutine(obj)
Bernhard M. Wiedemann 4db387
+        if asyncio and iscoroutinefunction(self.func):
Bernhard M. Wiedemann 4db387
+            value = asyncio.ensure_future(self.func(obj))
Bernhard M. Wiedemann 4db387
+        else:
Bernhard M. Wiedemann 4db387
+            value = self.func(obj)
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
-        value = obj.__dict__[self.func.__name__] = self.func(obj)
Bernhard M. Wiedemann 4db387
+        obj.__dict__[self.func.__name__] = value
Bernhard M. Wiedemann 4db387
         return value
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
-    def _wrap_in_coroutine(self, obj):
Bernhard M. Wiedemann 4db387
-        @wraps(obj)
Bernhard M. Wiedemann 4db387
-        @asyncio.coroutine
Bernhard M. Wiedemann 4db387
-        def wrapper():
Bernhard M. Wiedemann 4db387
-            future = asyncio.ensure_future(self.func(obj))
Bernhard M. Wiedemann 4db387
-            obj.__dict__[self.func.__name__] = future
Bernhard M. Wiedemann 4db387
-            return future
Bernhard M. Wiedemann 4db387
-
Bernhard M. Wiedemann 4db387
-        return wrapper()
Bernhard M. Wiedemann 4db387
-
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 class threaded_cached_property(object):
Bernhard M. Wiedemann 4db387
     """
Bernhard M. Wiedemann 4db387
diff --git a/conftest.py b/conftest.py
Bernhard M. Wiedemann 4db387
index 0563f64..1c4b618 100644
Bernhard M. Wiedemann 4db387
--- a/conftest.py
Bernhard M. Wiedemann 4db387
+++ b/conftest.py
Bernhard M. Wiedemann 4db387
@@ -7,13 +7,17 @@
Bernhard M. Wiedemann 4db387
 # Whether the async and await keywords work
Bernhard M. Wiedemann 4db387
 has_async_await = sys.version_info[0] == 3 and sys.version_info[1] >= 5
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
+# Whether "from asyncio import coroutine" *fails*
Bernhard M. Wiedemann 4db387
+version_info = sys.version_info
Bernhard M. Wiedemann 4db387
+dropped_asyncio_coroutine = version_info[0] == 3 and version_info[1] >= 11
Bernhard M. Wiedemann 4db387
+
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 print("conftest.py", has_asyncio, has_async_await)
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 collect_ignore = []
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
-if not has_asyncio:
Bernhard M. Wiedemann 4db387
+if not has_asyncio or dropped_asyncio_coroutine:
Bernhard M. Wiedemann 4db387
     collect_ignore.append("tests/test_coroutine_cached_property.py")
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 if not has_async_await:
Bernhard M. Wiedemann 4db387
diff --git a/tests/test_async_cached_property.py b/tests/test_async_cached_property.py
Bernhard M. Wiedemann 4db387
index 4ba84f3..d61cc28 100644
Bernhard M. Wiedemann 4db387
--- a/tests/test_async_cached_property.py
Bernhard M. Wiedemann 4db387
+++ b/tests/test_async_cached_property.py
Bernhard M. Wiedemann 4db387
@@ -9,8 +9,7 @@
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 def unittest_run_loop(f):
Bernhard M. Wiedemann 4db387
     def wrapper(*args, **kwargs):
Bernhard M. Wiedemann 4db387
-        coro = asyncio.coroutine(f)
Bernhard M. Wiedemann 4db387
-        future = coro(*args, **kwargs)
Bernhard M. Wiedemann 4db387
+        future = f(*args, **kwargs)
Bernhard M. Wiedemann 4db387
         loop = asyncio.get_event_loop()
Bernhard M. Wiedemann 4db387
         loop.run_until_complete(future)
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
From 9b210d12fa73c91743378ba4a966417846e7ea9a Mon Sep 17 00:00:00 2001
Bernhard M. Wiedemann 4db387
From: Petr Viktorin <encukou@gmail.com>
Bernhard M. Wiedemann 4db387
Date: Thu, 2 Dec 2021 11:44:18 +0100
Bernhard M. Wiedemann 4db387
Subject: [PATCH 2/2] Restore	compatibility with python 2.7
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
This is	still necessary	according to the Contributing Guidelines.
Bernhard M. Wiedemann 4db387
---
Bernhard M. Wiedemann 4db387
 cached_property.py | 12 ++++++------
Bernhard M. Wiedemann 4db387
 1 file changed, 6 insertions(+), 6 deletions(-)
Bernhard M. Wiedemann 4db387
Bernhard M. Wiedemann 4db387
diff --git a/cached_property.py b/cached_property.py
Bernhard M. Wiedemann 4db387
index 254739c..944e2f5 100644
Bernhard M. Wiedemann 4db387
--- a/cached_property.py
Bernhard M. Wiedemann 4db387
+++ b/cached_property.py
Bernhard M. Wiedemann 4db387
@@ -13,12 +13,12 @@
Bernhard M. Wiedemann 4db387
     import asyncio
Bernhard M. Wiedemann 4db387
 except (ImportError, SyntaxError):
Bernhard M. Wiedemann 4db387
     asyncio = None
Bernhard M. Wiedemann 4db387
-try:
Bernhard M. Wiedemann 4db387
-    iscoroutinefunction = asyncio.iscoroutinefunction
Bernhard M. Wiedemann 4db387
-except AttributeError:
Bernhard M. Wiedemann 4db387
-    # Python 3.11: @asyncio.coroutine was removed
Bernhard M. Wiedemann 4db387
-    from inspect import iscoroutinefunction
Bernhard M. Wiedemann 4db387
-
Bernhard M. Wiedemann 4db387
+if asyncio:
Bernhard M. Wiedemann 4db387
+    try:
Bernhard M. Wiedemann 4db387
+        iscoroutinefunction = asyncio.iscoroutinefunction
Bernhard M. Wiedemann 4db387
+    except AttributeError:
Bernhard M. Wiedemann 4db387
+        # Python 3.11: @asyncio.coroutine was removed
Bernhard M. Wiedemann 4db387
+        from inspect import iscoroutinefunction
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 
Bernhard M. Wiedemann 4db387
 class cached_property(object):