diff mbox series

[4/5] python3-jinja2: backport a patch to address python 3.13 ptest fails

Message ID 20241016193606.3459951-4-alex.kanavin@gmail.com
State New
Headers show
Series [1/5] python3-installer: add a patch to ensure RECORD file reproducibility | expand

Commit Message

Alexander Kanavin Oct. 16, 2024, 7:36 p.m. UTC
From: Alexander Kanavin <alex@linutronix.de>

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
 .../python/python3-jinja2/fix-3.13.patch      | 87 +++++++++++++++++++
 .../python/python3-jinja2_3.1.4.bb            |  1 +
 2 files changed, 88 insertions(+)
 create mode 100644 meta/recipes-devtools/python/python3-jinja2/fix-3.13.patch
diff mbox series

Patch

diff --git a/meta/recipes-devtools/python/python3-jinja2/fix-3.13.patch b/meta/recipes-devtools/python/python3-jinja2/fix-3.13.patch
new file mode 100644
index 00000000000..34ecd15176c
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-jinja2/fix-3.13.patch
@@ -0,0 +1,87 @@ 
+From cf6ba7732b49ab4637aa747186cf1d1572688584 Mon Sep 17 00:00:00 2001
+From: Thomas Grainger <tagrain@gmail.com>
+Date: Mon, 13 May 2024 18:02:35 +0100
+Subject: [PATCH] fix test_package_zip_list on 3.13
+
+Upstream-Status: Backport [https://github.com/pallets/jinja/pull/1979]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ src/jinja2/loaders.py | 32 ++++++++++++++++++++++++++------
+ tests/test_loader.py  |  4 ++--
+ 2 files changed, 28 insertions(+), 8 deletions(-)
+
+diff --git a/src/jinja2/loaders.py b/src/jinja2/loaders.py
+index 9eaf647..8c2c86c 100644
+--- a/src/jinja2/loaders.py
++++ b/src/jinja2/loaders.py
+@@ -238,6 +238,30 @@ class FileSystemLoader(BaseLoader):
+         return sorted(found)
+ 
+ 
++if sys.version_info >= (3, 13):
++
++    def _get_zipimporter_files(z: t.Any) -> t.Dict[str, object]:
++        try:
++            get_files = z._get_files
++        except AttributeError as e:
++            raise TypeError(
++                "This zip import does not have the required"
++                " metadata to list templates."
++            ) from e
++        return get_files()
++else:
++
++    def _get_zipimporter_files(z: t.Any) -> t.Dict[str, object]:
++        try:
++            files = z._files
++        except AttributeError as e:
++            raise TypeError(
++                "This zip import does not have the required"
++                " metadata to list templates."
++            ) from e
++        return files  # type: ignore[no-any-return]
++
++
+ class PackageLoader(BaseLoader):
+     """Load templates from a directory in a Python package.
+ 
+@@ -382,11 +406,7 @@ class PackageLoader(BaseLoader):
+                     for name in filenames
+                 )
+         else:
+-            if not hasattr(self._loader, "_files"):
+-                raise TypeError(
+-                    "This zip import does not have the required"
+-                    " metadata to list templates."
+-                )
++            files = _get_zipimporter_files(self._loader)
+ 
+             # Package is a zip file.
+             prefix = (
+@@ -395,7 +415,7 @@ class PackageLoader(BaseLoader):
+             )
+             offset = len(prefix)
+ 
+-            for name in self._loader._files.keys():
++            for name in files:
+                 # Find names under the templates directory that aren't directories.
+                 if name.startswith(prefix) and name[-1] != os.path.sep:
+                     results.append(name[offset:].replace(os.path.sep, "/"))
+diff --git a/tests/test_loader.py b/tests/test_loader.py
+index 77d686e..e0683e4 100644
+--- a/tests/test_loader.py
++++ b/tests/test_loader.py
+@@ -364,8 +364,8 @@ def test_package_zip_source(package_zip_loader, template, expect):
+ 
+ 
+ @pytest.mark.xfail(
+-    platform.python_implementation() == "PyPy",
+-    reason="PyPy's zipimporter doesn't have a '_files' attribute.",
++    sys.implementation.name == "pypy",
++    reason="zipimporter doesn't have a '_files' attribute",
+     raises=TypeError,
+ )
+ def test_package_zip_list(package_zip_loader):
+-- 
+2.39.5
+
diff --git a/meta/recipes-devtools/python/python3-jinja2_3.1.4.bb b/meta/recipes-devtools/python/python3-jinja2_3.1.4.bb
index f2de1983ced..a11878496c6 100644
--- a/meta/recipes-devtools/python/python3-jinja2_3.1.4.bb
+++ b/meta/recipes-devtools/python/python3-jinja2_3.1.4.bb
@@ -17,6 +17,7 @@  UPSTREAM_CHECK_PYPI_PACKAGE = "Jinja2"
 
 SRC_URI += " \
 	file://run-ptest \
+	file://fix-3.13.patch \
 "
 
 do_install_ptest() {