diff --git a/pkgs/development/python-modules/cached-property/default.nix b/pkgs/development/python-modules/cached-property/default.nix index 9ed1f388f06f..fdc0789c86f4 100644 --- a/pkgs/development/python-modules/cached-property/default.nix +++ b/pkgs/development/python-modules/cached-property/default.nix @@ -19,6 +19,13 @@ buildPythonPackage rec { hash = "sha256-sOThFJs18DR9aBgIpqkORU4iRmhCVKehyM3DLYUt/Wc="; }; + patches = [ + # fix Python 3.14, replace deprecated asyncio.iscoroutinefunction + # https://github.com/pydanny/cached-property/pull/359 + # vendoring because the PR is not yet merged + ./python-3.14-compat.patch + ]; + build-system = [ setuptools ]; nativeCheckInputs = [ diff --git a/pkgs/development/python-modules/cached-property/python-3.14-compat.patch b/pkgs/development/python-modules/cached-property/python-3.14-compat.patch new file mode 100644 index 000000000000..9cebe5aa55d2 --- /dev/null +++ b/pkgs/development/python-modules/cached-property/python-3.14-compat.patch @@ -0,0 +1,60 @@ +From cb1f82b160e053819f41c87fcb41a48d4d44b0ea Mon Sep 17 00:00:00 2001 +From: Petr Viktorin +Date: Thu, 2 Dec 2021 11:26:20 +0100 +Subject: [PATCH] Use iscoroutinefunction from inspect not asyncio + +Python 3.14 will deprecate asyncio.iscoroutinefunction: +https://github.com/python/cpython/pull/122875 + +inspect.iscoroutinefunction exists since 3.5 and our baseline +is 3.8, so we can just use it unconditionally. + +Using a wrapper with @asyncio.coroutine in __get__ wasn't +necessary (the future from asyncio.ensure_future is awaitable, +and the wrapper doesn't do anything asynchronous), so the +logic can be simplified to just call asyncio.ensure_future +(to schedule the task and store the result when it's +available). +--- + cached_property.py | 18 ++++++------------ + 1 file changed, 6 insertions(+), 12 deletions(-) + +diff --git a/cached_property.py b/cached_property.py +index e83ecca..fe06b34 100644 +--- a/cached_property.py ++++ b/cached_property.py +@@ -4,6 +4,7 @@ + __license__ = "BSD" + + from functools import wraps ++from inspect import iscoroutinefunction + from time import time + import threading + import asyncio +@@ -24,21 +25,14 @@ def __get__(self, obj, cls): + if obj is None: + return self + +- if asyncio.iscoroutinefunction(self.func): +- return self._wrap_in_coroutine(obj) ++ if iscoroutinefunction(self.func): ++ value = asyncio.ensure_future(self.func(obj)) ++ else: ++ value = self.func(obj) + +- value = obj.__dict__[self.func.__name__] = self.func(obj) ++ obj.__dict__[self.func.__name__] = value + return value + +- def _wrap_in_coroutine(self, obj): +- @wraps(obj) +- def wrapper(): +- future = asyncio.ensure_future(self.func(obj)) +- obj.__dict__[self.func.__name__] = future +- return future +- +- return wrapper() +- + + class threaded_cached_property: + """ diff --git a/pkgs/development/python-modules/py-evm/default.nix b/pkgs/development/python-modules/py-evm/default.nix index ea9f490bfb62..a79e143c2262 100644 --- a/pkgs/development/python-modules/py-evm/default.nix +++ b/pkgs/development/python-modules/py-evm/default.nix @@ -3,7 +3,6 @@ fetchFromGitHub, # python module stuff buildPythonPackage, - pythonAtLeast, setuptools, # dependencies cached-property, @@ -30,9 +29,6 @@ buildPythonPackage (finalAttrs: { version = "0.12.1-beta.1"; pyproject = true; - # py-evm project has been archived by upstream; its support should be deprecated from "3.14". - disabled = pythonAtLeast "3.14"; - src = fetchFromGitHub { owner = "ethereum"; repo = "py-evm"; diff --git a/pkgs/development/python-modules/web3/default.nix b/pkgs/development/python-modules/web3/default.nix index 70221aee96e4..5ce5cd84cc7e 100644 --- a/pkgs/development/python-modules/web3/default.nix +++ b/pkgs/development/python-modules/web3/default.nix @@ -2,6 +2,7 @@ lib, buildPythonPackage, fetchFromGitHub, + fetchpatch, # build-system setuptools, @@ -39,16 +40,26 @@ buildPythonPackage rec { pname = "web3"; - version = "7.15.0"; + version = "7.16.0"; pyproject = true; src = fetchFromGitHub { owner = "ethereum"; repo = "web3.py"; tag = "v${version}"; - hash = "sha256-BStkLH7lCnhVs2Fc3c0EBXzyZtEgI8ywA01OEBYLUeQ="; + hash = "sha256-Dgkmmx4gmVJa4P26X1waaQaKc75COC17OSeJz43EZZ0="; }; + patches = [ + # fix Python 3.14, avoid copying itertools.count, which is no longer supported + # https://github.com/ethereum/web3.py/pull/3779 + (fetchpatch { + url = "https://github.com/ethereum/web3.py/commit/9923ee46cab6a49af4d7bdb3f922c4f8d9670633.patch"; + includes = [ "web3/_utils/module_testing/utils.py" ]; + hash = "sha256-N6v3QVDN0fCEWqs34uZ+B18+WXOPoY+Lyk9rIM+btjk="; + }) + ]; + build-system = [ setuptools ]; pythonRelaxDeps = [