From 86edfad3823ae90a09f762e9eb4752f48a3dec81 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 15 Jun 2024 13:47:58 +0200 Subject: [PATCH 1/7] python313Packages.greenlet: backport build fixes --- .../python-modules/greenlet/default.nix | 5 + .../greenlet/python-3.13-compat.patch | 313 ++++++++++++++++++ 2 files changed, 318 insertions(+) create mode 100644 pkgs/development/python-modules/greenlet/python-3.13-compat.patch diff --git a/pkgs/development/python-modules/greenlet/default.nix b/pkgs/development/python-modules/greenlet/default.nix index 5c41e8845541..2ea828cd4174 100644 --- a/pkgs/development/python-modules/greenlet/default.nix +++ b/pkgs/development/python-modules/greenlet/default.nix @@ -24,6 +24,11 @@ let hash = "sha256-QzdEQjUyWVVM4zWZ2otpLVqpb4l21WfUut8mM3H75JE="; }; + patches = [ + # https://github.com/python-greenlet/greenlet/pull/396 + ./python-3.13-compat.patch + ]; + nativeBuildInputs = [ setuptools ]; # tests in passthru, infinite recursion via objgraph/graphviz diff --git a/pkgs/development/python-modules/greenlet/python-3.13-compat.patch b/pkgs/development/python-modules/greenlet/python-3.13-compat.patch new file mode 100644 index 000000000000..9f5488b831d3 --- /dev/null +++ b/pkgs/development/python-modules/greenlet/python-3.13-compat.patch @@ -0,0 +1,313 @@ +Port of https://github.com/python-greenlet/greenlet/pull/396 + +From 94979488f841fcb41bd2bd3b80b5c0b011af4c94 Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Wed, 14 Feb 2024 16:37:42 +0100 +Subject: [PATCH 1/5] Fix #392: Port to Python 3.13 + +* Replace C_RECURSION_LIMIT with Py_C_RECURSION_LIMIT. +* Add Py_C_RECURSION_LIMIT for Python 3.12 and older. +* Disable GREENLET_USE_CFRAME on Python 3.13. +* Define Py_BUILD_CORE to include pycore_frame.h. +--- + src/greenlet/TPythonState.cpp | 10 +++++++--- + src/greenlet/greenlet_cpython_compat.hpp | 13 +++++++++++-- + src/greenlet/greenlet_greenlet.hpp | 1 + + 3 files changed, 19 insertions(+), 5 deletions(-) + +diff --git a/src/greenlet/TPythonState.cpp b/src/greenlet/TPythonState.cpp +index 465d4174..c0dbf703 100644 +--- a/src/greenlet/TPythonState.cpp ++++ b/src/greenlet/TPythonState.cpp +@@ -130,11 +130,13 @@ void PythonState::operator<<(const PyThreadState *const tstate) noexcept + #if GREENLET_PY311 + #if GREENLET_PY312 + this->py_recursion_depth = tstate->py_recursion_limit - tstate->py_recursion_remaining; +- this->c_recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; ++ this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; + #else // not 312 + this->recursion_depth = tstate->recursion_limit - tstate->recursion_remaining; + #endif // GREENLET_PY312 ++ #if GREENLET_USE_CFRAME + this->current_frame = tstate->cframe->current_frame; ++ #endif + this->datastack_chunk = tstate->datastack_chunk; + this->datastack_top = tstate->datastack_top; + this->datastack_limit = tstate->datastack_limit; +@@ -199,12 +201,14 @@ void PythonState::operator>>(PyThreadState *const tstate) noexcept + #if GREENLET_PY311 + #if GREENLET_PY312 + tstate->py_recursion_remaining = tstate->py_recursion_limit - this->py_recursion_depth; +- tstate->c_recursion_remaining = C_RECURSION_LIMIT - this->c_recursion_depth; ++ tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth; + this->unexpose_frames(); + #else // \/ 3.11 + tstate->recursion_remaining = tstate->recursion_limit - this->recursion_depth; + #endif // GREENLET_PY312 ++ #if GREENLET_USE_CFRAME + tstate->cframe->current_frame = this->current_frame; ++ #endif + tstate->datastack_chunk = this->datastack_chunk; + tstate->datastack_top = this->datastack_top; + tstate->datastack_limit = this->datastack_limit; +@@ -238,7 +242,7 @@ void PythonState::set_initial_state(const PyThreadState* const tstate) noexcept + #if GREENLET_PY312 + this->py_recursion_depth = tstate->py_recursion_limit - tstate->py_recursion_remaining; + // XXX: TODO: Comment from a reviewer: +- // Should this be ``C_RECURSION_LIMIT - tstate->c_recursion_remaining``? ++ // Should this be ``Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining``? + // But to me it looks more like that might not be the right + // initialization either? + this->c_recursion_depth = tstate->py_recursion_limit - tstate->py_recursion_remaining; +diff --git a/src/greenlet/greenlet_cpython_compat.hpp b/src/greenlet/greenlet_cpython_compat.hpp +index cdc1617f..c0fb94c5 100644 +--- a/src/greenlet/greenlet_cpython_compat.hpp ++++ b/src/greenlet/greenlet_cpython_compat.hpp +@@ -12,19 +12,24 @@ + + #if PY_VERSION_HEX >= 0x30A00B1 + # define GREENLET_PY310 1 ++#else ++# define GREENLET_PY310 0 ++#endif ++ + /* + Python 3.10 beta 1 changed tstate->use_tracing to a nested cframe member. + See https://github.com/python/cpython/pull/25276 + We have to save and restore this as well. ++ ++Python 3.13 removed PyThreadState.cframe (GH-108035). + */ ++#if GREENLET_PY310 && PY_VERSION_HEX < 0x30D0000 + # define GREENLET_USE_CFRAME 1 + #else + # define GREENLET_USE_CFRAME 0 +-# define GREENLET_PY310 0 + #endif + + +- + #if PY_VERSION_HEX >= 0x30B00A4 + /* + Greenlet won't compile on anything older than Python 3.11 alpha 4 (see +@@ -124,4 +129,8 @@ static inline void PyThreadState_LeaveTracing(PyThreadState *tstate) + } + #endif + ++#if !defined(Py_C_RECURSION_LIMIT) && defined(C_RECURSION_LIMIT) ++# define Py_C_RECURSION_LIMIT C_RECURSION_LIMIT ++#endif ++ + #endif /* GREENLET_CPYTHON_COMPAT_H */ +diff --git a/src/greenlet/greenlet_greenlet.hpp b/src/greenlet/greenlet_greenlet.hpp +index d52ce1fd..6da6841f 100644 +--- a/src/greenlet/greenlet_greenlet.hpp ++++ b/src/greenlet/greenlet_greenlet.hpp +@@ -23,6 +23,7 @@ using greenlet::refs::BorrowedGreenlet; + #endif + + #if GREENLET_PY312 ++# define Py_BUILD_CORE + # include "internal/pycore_frame.h" + #endif + + +From 00611d7567d09869973fe314f60575674cc877d8 Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Mon, 3 Jun 2024 10:55:14 +0200 +Subject: [PATCH 3/5] Support delete_later + +--- + src/greenlet/TPythonState.cpp | 14 ++++++++++++-- + src/greenlet/greenlet.cpp | 4 ++++ + src/greenlet/greenlet_cpython_compat.hpp | 6 ++++++ + src/greenlet/greenlet_greenlet.hpp | 4 ++++ + 4 files changed, 26 insertions(+), 2 deletions(-) + +diff --git a/src/greenlet/TPythonState.cpp b/src/greenlet/TPythonState.cpp +index c0dbf703..bfb40cac 100644 +--- a/src/greenlet/TPythonState.cpp ++++ b/src/greenlet/TPythonState.cpp +@@ -18,7 +18,11 @@ PythonState::PythonState() + #else + ,recursion_depth(0) + #endif ++#if GREENLET_PY313 ++ ,delete_later(nullptr) ++#else + ,trash_delete_nesting(0) ++#endif + #if GREENLET_PY311 + ,current_frame(nullptr) + ,datastack_chunk(nullptr) +@@ -145,7 +149,9 @@ void PythonState::operator<<(const PyThreadState *const tstate) noexcept + Py_XDECREF(frame); // PyThreadState_GetFrame gives us a new + // reference. + this->_top_frame.steal(frame); +- #if GREENLET_PY312 ++ #if GREENLET_PY313 ++ this->delete_later = Py_XNewRef(tstate->delete_later); ++ #elif GREENLET_PY312 + this->trash_delete_nesting = tstate->trash.delete_nesting; + #else // not 312 + this->trash_delete_nesting = tstate->trash_delete_nesting; +@@ -213,7 +219,11 @@ void PythonState::operator>>(PyThreadState *const tstate) noexcept + tstate->datastack_top = this->datastack_top; + tstate->datastack_limit = this->datastack_limit; + this->_top_frame.relinquish_ownership(); +- #if GREENLET_PY312 ++ #if GREENLET_PY313 ++ Py_XDECREF(tstate->delete_later); ++ tstate->delete_later = this->delete_later; ++ Py_CLEAR(this->delete_later); ++ #elif GREENLET_PY312 + tstate->trash.delete_nesting = this->trash_delete_nesting; + #else // not 3.12 + tstate->trash_delete_nesting = this->trash_delete_nesting; +diff --git a/src/greenlet/greenlet.cpp b/src/greenlet/greenlet.cpp +index 5a9818e8..dfc748a8 100644 +--- a/src/greenlet/greenlet.cpp ++++ b/src/greenlet/greenlet.cpp +@@ -1328,6 +1328,7 @@ mod_enable_optional_cleanup(PyObject* UNUSED(module), PyObject* flag) + Py_RETURN_NONE; + } + ++#if !GREENLET_PY313 + PyDoc_STRVAR(mod_get_tstate_trash_delete_nesting_doc, + "get_tstate_trash_delete_nesting() -> Integer\n" + "\n" +@@ -1343,6 +1344,7 @@ mod_get_tstate_trash_delete_nesting(PyObject* UNUSED(module)) + return PyLong_FromLong(tstate->trash_delete_nesting); + #endif + } ++#endif + + static PyMethodDef GreenMethods[] = { + {"getcurrent", +@@ -1356,7 +1358,9 @@ static PyMethodDef GreenMethods[] = { + {"get_total_main_greenlets", (PyCFunction)mod_get_total_main_greenlets, METH_NOARGS, mod_get_total_main_greenlets_doc}, + {"get_clocks_used_doing_optional_cleanup", (PyCFunction)mod_get_clocks_used_doing_optional_cleanup, METH_NOARGS, mod_get_clocks_used_doing_optional_cleanup_doc}, + {"enable_optional_cleanup", (PyCFunction)mod_enable_optional_cleanup, METH_O, mod_enable_optional_cleanup_doc}, ++#if !GREENLET_PY313 + {"get_tstate_trash_delete_nesting", (PyCFunction)mod_get_tstate_trash_delete_nesting, METH_NOARGS, mod_get_tstate_trash_delete_nesting_doc}, ++#endif + {NULL, NULL} /* Sentinel */ + }; + +diff --git a/src/greenlet/greenlet_cpython_compat.hpp b/src/greenlet/greenlet_cpython_compat.hpp +index c0fb94c5..ce5fd882 100644 +--- a/src/greenlet/greenlet_cpython_compat.hpp ++++ b/src/greenlet/greenlet_cpython_compat.hpp +@@ -55,6 +55,12 @@ Greenlet won't compile on anything older than Python 3.11 alpha 4 (see + # define GREENLET_PY312 0 + #endif + ++#if PY_VERSION_HEX >= 0x30D0000 ++# define GREENLET_PY313 1 ++#else ++# define GREENLET_PY313 0 ++#endif ++ + #ifndef Py_SET_REFCNT + /* Py_REFCNT and Py_SIZE macros are converted to functions + https://bugs.python.org/issue39573 */ +diff --git a/src/greenlet/greenlet_greenlet.hpp b/src/greenlet/greenlet_greenlet.hpp +index 6da6841f..fbfdfbfc 100644 +--- a/src/greenlet/greenlet_greenlet.hpp ++++ b/src/greenlet/greenlet_greenlet.hpp +@@ -111,7 +111,11 @@ namespace greenlet + #else + int recursion_depth; + #endif ++#if GREENLET_PY313 ++ PyObject *delete_later; ++#else + int trash_delete_nesting; ++#endif + #if GREENLET_PY311 + _PyInterpreterFrame* current_frame; + _PyStackChunk* datastack_chunk; + +From b65558ec962d3d81ae09787ebca8686d233e2a4c Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Wed, 5 Jun 2024 12:04:21 +0200 +Subject: [PATCH 4/5] Fix current_frame + +--- + src/greenlet/TPythonState.cpp | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/greenlet/TPythonState.cpp b/src/greenlet/TPythonState.cpp +index bfb40cac..82eb34f0 100644 +--- a/src/greenlet/TPythonState.cpp ++++ b/src/greenlet/TPythonState.cpp +@@ -138,7 +138,9 @@ void PythonState::operator<<(const PyThreadState *const tstate) noexcept + #else // not 312 + this->recursion_depth = tstate->recursion_limit - tstate->recursion_remaining; + #endif // GREENLET_PY312 +- #if GREENLET_USE_CFRAME ++ #if GREENLET_PY313 ++ this->current_frame = tstate->current_frame; ++ #elif GREENLET_USE_CFRAME + this->current_frame = tstate->cframe->current_frame; + #endif + this->datastack_chunk = tstate->datastack_chunk; +@@ -212,7 +214,9 @@ void PythonState::operator>>(PyThreadState *const tstate) noexcept + #else // \/ 3.11 + tstate->recursion_remaining = tstate->recursion_limit - this->recursion_depth; + #endif // GREENLET_PY312 +- #if GREENLET_USE_CFRAME ++ #if GREENLET_PY313 ++ tstate->current_frame = this->current_frame; ++ #elif GREENLET_USE_CFRAME + tstate->cframe->current_frame = this->current_frame; + #endif + tstate->datastack_chunk = this->datastack_chunk; + +From b7cfc1748766cac351fe5fca32fa7c8cacdea2ae Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Wed, 5 Jun 2024 12:17:28 +0200 +Subject: [PATCH 5/5] Update tests + +--- + src/greenlet/tests/test_greenlet.py | 4 +++- + src/greenlet/tests/test_greenlet_trash.py | 9 +++++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/greenlet/tests/test_greenlet.py b/src/greenlet/tests/test_greenlet.py +index 51849cd6..259707ae 100644 +--- a/src/greenlet/tests/test_greenlet.py ++++ b/src/greenlet/tests/test_greenlet.py +@@ -471,7 +471,9 @@ def creator(): + # Unfortunately, this doesn't actually clear the references, they're in the + # fast local array. + if not wait_for_cleanup: +- result[0].gr_frame.f_locals.clear() ++ # f_locals has no clear method in Python 3.13 ++ if hasattr(result[0].gr_frame.f_locals, 'clear'): ++ result[0].gr_frame.f_locals.clear() + else: + self.assertIsNone(result[0].gr_frame) + +diff --git a/src/greenlet/tests/test_greenlet_trash.py b/src/greenlet/tests/test_greenlet_trash.py +index 8d9716e9..2bce8fd0 100644 +--- a/src/greenlet/tests/test_greenlet_trash.py ++++ b/src/greenlet/tests/test_greenlet_trash.py +@@ -29,8 +29,17 @@ + + import unittest + ++try: ++ from greenlet._greenlet import get_tstate_trash_delete_nesting ++except ImportError: ++ get_tstate_trash_delete_nesting = None ++ ++ + class TestTrashCanReEnter(unittest.TestCase): + ++ # Python 3.13 has not "trash delete nesting" anymore (but "delete later") ++ @unittest.skipIf(get_tstate_trash_delete_nesting is None, ++ 'need get_tstate_trash_delete_nesting()') + def test_it(self): + # Try several times to trigger it, because it isn't 100% + # reliable. From dc9640a12e0c9de3cc4130cd197af38b12cfc4cc Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 15 Jun 2024 14:51:29 +0200 Subject: [PATCH 2/7] python313Packages.cffi: fix build --- pkgs/development/python-modules/cffi/default.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkgs/development/python-modules/cffi/default.nix b/pkgs/development/python-modules/cffi/default.nix index 7d03ab82c7bc..ba0e67c9bc7c 100644 --- a/pkgs/development/python-modules/cffi/default.nix +++ b/pkgs/development/python-modules/cffi/default.nix @@ -4,6 +4,7 @@ buildPythonPackage, isPyPy, fetchPypi, + fetchpatch2, setuptools, pytestCheckHook, libffi, @@ -38,6 +39,19 @@ else # deemed safe to trust in cffi. # ./darwin-use-libffi-closures.diff + + (fetchpatch2 { + # https://github.com/python-cffi/cffi/pull/34 + name = "python-3.13-compat-1.patch"; + url = "https://github.com/python-cffi/cffi/commit/49127c6929bfc7186fbfd3819dd5e058ad888de4.patch"; + hash = "sha256-RbspsjwDf4uwJxMqG0JZGvipd7/JqXJ2uVB7PO4Qcms="; + }) + (fetchpatch2 { + # https://github.com/python-cffi/cffi/pull/24 + name = "python-3.13-compat-2.patch"; + url = "https://github.com/python-cffi/cffi/commit/14723b0bbd127790c450945099db31018d80fa83.patch"; + hash = "sha256-H5rFgRRTr27l5S6REo8+7dmPDQW7WXhP4f4DGZjdi+s="; + }) ] ++ lib.optionals (stdenv.cc.isClang && lib.versionAtLeast (lib.getVersion stdenv.cc) "13") [ # -Wnull-pointer-subtraction is enabled with -Wextra. Suppress it to allow the following tests From 79510630263700ce787e50e1484176e781918c7c Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 15 Jun 2024 15:56:52 +0200 Subject: [PATCH 3/7] python312Packages.zope-interface: 5.5.2 -> 6.4.post2 https://github.com/zopefoundation/zope.interface/blob/6.4.post2/CHANGES.rst --- .../python-modules/zope-interface/default.nix | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkgs/development/python-modules/zope-interface/default.nix b/pkgs/development/python-modules/zope-interface/default.nix index 3cc208094d26..c94e4a0366c5 100644 --- a/pkgs/development/python-modules/zope-interface/default.nix +++ b/pkgs/development/python-modules/zope-interface/default.nix @@ -2,25 +2,30 @@ lib, buildPythonPackage, fetchPypi, + setuptools, zope-event, }: buildPythonPackage rec { pname = "zope.interface"; - version = "5.5.2"; + version = "6.4.post2"; + pyproject = true; src = fetchPypi { inherit pname version; - hash = "sha256-v+4fP/YhQ4GUmeNI9bin86oCWfmspeDdrnOR0Fnc5nE="; + hash = "sha256-HCB+b239V0mib1pf2WZgLWuCTsANLfhKfpqSTokzZU4="; }; - propagatedBuildInputs = [ zope-event ]; + build-system = [ setuptools ]; + + dependencies = [ zope-event ]; doCheck = false; # Circular deps. meta = with lib; { + changelog = "https://github.com/zopefoundation/zope.interface/blob/${version}/CHANGES.rst"; description = "Zope.Interface"; - homepage = "https://zope.org/Products/ZopeInterface"; + homepage = "https://github.com/zopefoundation/zope.interface"; license = licenses.zpl20; maintainers = [ maintainers.goibhniu ]; }; From 1f944ceaf583e95d1e53a6004adb312d7e037f63 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 15 Jun 2024 11:32:54 +0200 Subject: [PATCH 4/7] python313Packages.sphinx: fix tests --- pkgs/development/python-modules/sphinx/default.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/development/python-modules/sphinx/default.nix b/pkgs/development/python-modules/sphinx/default.nix index d00f5b191f09..16e2a81e5043 100644 --- a/pkgs/development/python-modules/sphinx/default.nix +++ b/pkgs/development/python-modules/sphinx/default.nix @@ -4,6 +4,7 @@ pythonAtLeast, pythonOlder, fetchFromGitHub, + fetchpatch2, isPyPy, # build-system @@ -57,6 +58,14 @@ buildPythonPackage rec { hash = "sha256-XGGRWEvd1SbQsK8W5yxDzBd5hlvXcDzr8t5Qa6skH/M="; }; + patches = [ + (fetchpatch2 { + name = "python-3.13-compat.patch"; + url = "https://github.com/sphinx-doc/sphinx/commit/3496de62b743942115acb486cf35dfcc102586c3.patch"; + hash = "sha256-5VBPOQeGyj3a8VBq4hc9S/eKaeVZeGCTNislwgsauZo="; + }) + ]; + build-system = [ flit-core ]; dependencies = From 4aab2f4d6c30291ee13f2b27b5fcdc5f1d5c777d Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 15 Jun 2024 17:19:50 +0200 Subject: [PATCH 5/7] python312Packages.freezegun: 1.4.0 -> 1.5.1 https://github.com/spulec/freezegun/blob/1.5.1/CHANGELOG --- .../development/python-modules/freezegun/default.nix | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/freezegun/default.nix b/pkgs/development/python-modules/freezegun/default.nix index ab170e3ee916..cc15733d053b 100644 --- a/pkgs/development/python-modules/freezegun/default.nix +++ b/pkgs/development/python-modules/freezegun/default.nix @@ -4,20 +4,21 @@ fetchPypi, pytestCheckHook, python-dateutil, + pythonAtLeast, pythonOlder, setuptools, }: buildPythonPackage rec { pname = "freezegun"; - version = "1.4.0"; + version = "1.5.1"; pyproject = true; disabled = pythonOlder "3.7"; src = fetchPypi { inherit pname version; - hash = "sha256-EJObC6D/Wtrs87BqXC9zBx2WeOUHxertsjx2HVasd0s="; + hash = "sha256-sp3t/NptXo4IPOcbK1QnU61Iz+xEA3s/x5cC4pgKiek="; }; nativeBuildInputs = [ setuptools ]; @@ -26,6 +27,13 @@ buildPythonPackage rec { nativeCheckInputs = [ pytestCheckHook ]; + disabledTests = lib.optionals (pythonAtLeast "3.13") [ + # https://github.com/spulec/freezegun/issues/547 + "test_method_decorator_works_on_unittest_kwarg_frozen_time" + "test_method_decorator_works_on_unittest_kwarg_frozen_time_with_func" + "test_method_decorator_works_on_unittest_kwarg_hello" + ]; + pythonImportsCheck = [ "freezegun" ]; meta = with lib; { From 7b11c3513fa71aae8d8b35fe3b91e54c7ba366c7 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sat, 15 Jun 2024 17:51:46 +0200 Subject: [PATCH 6/7] python313Packages.jinja2: disable failing tests --- pkgs/development/python-modules/jinja2/default.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/development/python-modules/jinja2/default.nix b/pkgs/development/python-modules/jinja2/default.nix index ba8f7048c5b6..da220641dbe2 100644 --- a/pkgs/development/python-modules/jinja2/default.nix +++ b/pkgs/development/python-modules/jinja2/default.nix @@ -2,6 +2,7 @@ lib, stdenv, python, + pythonAtLeast, buildPythonPackage, pythonOlder, fetchPypi, @@ -44,6 +45,14 @@ buildPythonPackage rec { nativeCheckInputs = [ pytestCheckHook ] ++ passthru.optional-dependencies.i18n; + disabledTests = lib.optionals (pythonAtLeast "3.13") [ + # https://github.com/pallets/jinja/issues/1900 + "test_custom_async_iteratable_filter" + "test_first" + "test_loop_errors" + "test_package_zip_list" + ]; + passthru.doc = stdenv.mkDerivation { # Forge look and feel of multi-output derivation as best as we can. # From 259f830fc41007e3722adc795116ffc90e3ada3e Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sun, 16 Jun 2024 02:42:53 +0200 Subject: [PATCH 7/7] defusedxml: 0.7.1 -> 0.8.0rc2 https://github.com/tiran/defusedxml/blob/v0.8.0rc2/CHANGES.txt --- .../python-modules/defusedxml/default.nix | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/pkgs/development/python-modules/defusedxml/default.nix b/pkgs/development/python-modules/defusedxml/default.nix index ee23d66e59d7..ce997d1fcb82 100644 --- a/pkgs/development/python-modules/defusedxml/default.nix +++ b/pkgs/development/python-modules/defusedxml/default.nix @@ -1,27 +1,38 @@ { lib, buildPythonPackage, - fetchPypi, + fetchFromGitHub, + setuptools, + lxml, python, }: buildPythonPackage rec { pname = "defusedxml"; - version = "0.7.1"; - format = "setuptools"; + version = "0.8.0rc2"; + pyproject = true; - src = fetchPypi { - inherit pname version; - sha256 = "1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"; + src = fetchFromGitHub { + owner = "tiran"; + repo = "defusedxml"; + rev = "refs/tags/v${version}"; + hash = "sha256-X88A5V9uXP3wJQ+olK6pZJT66LP2uCXLK8goa5bPARA="; }; + build-system = [ setuptools ] ; + + nativeCheckInputs = [ lxml ]; + checkPhase = '' + runHook preCheck ${python.interpreter} tests.py + runHook postCheck ''; pythonImportsCheck = [ "defusedxml" ]; meta = with lib; { + changelog = "https://github.com/tiran/defusedxml/blob/v${version}/CHANGES.txt"; description = "Python module to defuse XML issues"; homepage = "https://github.com/tiran/defusedxml"; license = licenses.psfl;