summaryrefslogtreecommitdiffstats
path: root/meta-python/recipes-devtools/python/python3-django
diff options
context:
space:
mode:
authorGyorgy Sarvari <skandigraun@gmail.com>2026-01-16 16:33:09 +0100
committerKhem Raj <raj.khem@gmail.com>2026-01-16 09:39:26 -0800
commita1537e21289ec8616656dc6e575a25f5e2e20649 (patch)
tree5e87c5df8ce41a8495788e15dde4bc2802ab2935 /meta-python/recipes-devtools/python/python3-django
parent6c03c47febee3b39d51a35dbdfcb9b24afb95715 (diff)
downloadmeta-openembedded-a1537e21289ec8616656dc6e575a25f5e2e20649.tar.gz
python3-django: add ptest support
Execute the standard, non-selenium tests. The execution is on the slower side: on my idle machine, KVM enabled it takes a bit more than 2.5 minutes to execute it (executing tests with 4 threads parallel, 1/core, the default configuration). If the machine is under load, it easily grows to over 10 minutes. Added two backported patches for Django 5.2 to fix some tests that would otherwise fail: 0001-Fix-test_strip_tags-test.patch: tag stripping tests failed due to changed Python behavior 0001-fix-test_msgfmt_error_including_non_ascii-test.patch: tests were updated to work with msgfmt 0.25 Most of the skipped tests require some specific database backend (Postgres, MySQL, Oracle...) or are Selenium tests. When the default parallelism is used for the execution, the package needs 3GB RAM at least. The output is very long (the suite contains way over 15k tests), so I omit the example output here. The current summary (for v5.2.9): Ran 18121 tests in 140.891s OK (skipped=1394, expected failures=5) Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-python/recipes-devtools/python/python3-django')
-rw-r--r--meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch76
-rw-r--r--meta-python/recipes-devtools/python/python3-django/0001-fix-test_msgfmt_error_including_non_ascii-test.patch71
-rw-r--r--meta-python/recipes-devtools/python/python3-django/run-ptest19
3 files changed, 166 insertions, 0 deletions
diff --git a/meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch b/meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch
new file mode 100644
index 0000000000..f77c3b963a
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch
@@ -0,0 +1,76 @@
1From 7b80b2186300620931009fd62c2969f108fe7a62 Mon Sep 17 00:00:00 2001
2From: Jacob Walls <jacobtylerwalls@gmail.com>
3Date: Thu, 11 Dec 2025 08:44:19 -0500
4Subject: [PATCH] Refs #36499 -- Adjusted test_strip_tags following Python
5 behavior change for incomplete entities.
6
7Upstream-Status: Backport [https://github.com/django/django/commit/7b80b2186300620931009fd62c2969f108fe7a62]
8Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
9---
10 tests/utils_tests/test_html.py | 25 ++++++++++++++++++++-----
11 1 file changed, 20 insertions(+), 5 deletions(-)
12
13diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py
14index 7412c2624c73..ee115aaf1cf2 100644
15--- a/tests/utils_tests/test_html.py
16+++ b/tests/utils_tests/test_html.py
17@@ -1,3 +1,4 @@
18+import math
19 import os
20 import sys
21 from datetime import datetime
22@@ -124,7 +125,7 @@
23 # old and new results. The check below is temporary until all supported
24 # Python versions and CI workers include the fix. See:
25 # https://github.com/python/cpython/commit/6eb6c5db
26- min_fixed = {
27+ min_fixed_security = {
28 (3, 14): (3, 14),
29 (3, 13): (3, 13, 6),
30 (3, 12): (3, 12, 12),
31@@ -132,7 +133,21 @@
32 (3, 10): (3, 10, 19),
33 (3, 9): (3, 9, 24),
34 }
35- htmlparser_fixed = sys.version_info >= min_fixed[sys.version_info[:2]]
36+ # Similarly, there was a fix for terminating incomplete entities. See:
37+ # https://github.com/python/cpython/commit/95296a9d
38+ min_fixed_incomplete_entities = {
39+ (3, 14): (3, 14, 1),
40+ (3, 13): (3, 13, 10),
41+ (3, 12): (3, 12, math.inf), # not fixed in 3.12.
42+ }
43+ major_version = sys.version_info[:2]
44+ htmlparser_fixed_security = sys.version_info >= min_fixed_security.get(
45+ major_version, major_version
46+ )
47+ htmlparser_fixed_incomplete_entities = (
48+ sys.version_info
49+ >= min_fixed_incomplete_entities.get(major_version, major_version)
50+ )
51 items = (
52 (
53 "<p>See: &#39;&eacute; is an apostrophe followed by e acute</p>",
54@@ -159,16 +174,19 @@
55 # https://bugs.python.org/issue20288
56 ("&gotcha&#;<>", "&gotcha&#;<>"),
57 ("<sc<!-- -->ript>test<<!-- -->/script>", "ript>test"),
58- ("<script>alert()</script>&h", "alert()h"),
59+ (
60+ "<script>alert()</script>&h",
61+ "alert()&h;" if htmlparser_fixed_incomplete_entities else "alert()h",
62+ ),
63 (
64 "><!" + ("&" * 16000) + "D",
65- ">" if htmlparser_fixed else "><!" + ("&" * 16000) + "D",
66+ ">" if htmlparser_fixed_security else "><!" + ("&" * 16000) + "D",
67 ),
68 ("X<<<<br>br>br>br>X", "XX"),
69 ("<" * 50 + "a>" * 50, ""),
70 (
71 ">" + "<a" * 500 + "a",
72- ">" if htmlparser_fixed else ">" + "<a" * 500 + "a",
73+ ">" if htmlparser_fixed_security else ">" + "<a" * 500 + "a",
74 ),
75 ("<a" * 49 + "a" * 951, "<a" * 49 + "a" * 951),
76 ("<" + "a" * 1_002, "<" + "a" * 1_002),
diff --git a/meta-python/recipes-devtools/python/python3-django/0001-fix-test_msgfmt_error_including_non_ascii-test.patch b/meta-python/recipes-devtools/python/python3-django/0001-fix-test_msgfmt_error_including_non_ascii-test.patch
new file mode 100644
index 0000000000..6f887b3015
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/0001-fix-test_msgfmt_error_including_non_ascii-test.patch
@@ -0,0 +1,71 @@
1From 1960ecd879ce351226b36e7ac0aa25616241b6f6 Mon Sep 17 00:00:00 2001
2From: Jericho Serrano <118679068+jericho1050@users.noreply.github.com>
3Date: Fri, 6 Jun 2025 04:58:29 +0800
4Subject: [PATCH] Fixed #36421 -- Made test_msgfmt_error_including_non_ascii
5 compatible with msgfmt 0.25.
6
7Upstream-Status: Backport [https://github.com/django/django/commit/1960ecd879ce351226b36e7ac0aa25616241b6f6]
8Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
9---
10 tests/i18n/test_compilation.py | 25 +++++++++++++++++++++++--
11 1 file changed, 23 insertions(+), 2 deletions(-)
12
13diff --git a/tests/i18n/test_compilation.py b/tests/i18n/test_compilation.py
14index 4b0bb9f6bb16..3a57dbf0765f 100644
15--- a/tests/i18n/test_compilation.py
16+++ b/tests/i18n/test_compilation.py
17@@ -1,5 +1,6 @@
18 import gettext as gettext_module
19 import os
20+import re
21 import stat
22 import unittest
23 from io import StringIO
24@@ -8,10 +9,12 @@
25 from unittest import mock
26
27 from django.core.management import CommandError, call_command, execute_from_command_line
28-from django.core.management.utils import find_command
29+from django.core.management.utils import find_command, popen_wrapper
30 from django.test import SimpleTestCase, override_settings
31 from django.test.utils import captured_stderr, captured_stdout
32 from django.utils import translation
33+from django.utils.encoding import DEFAULT_LOCALE_ENCODING
34+from django.utils.functional import cached_property
35 from django.utils.translation import gettext
36
37 from .utils import RunInTmpDirMixin, copytree
38@@ -254,6 +257,17 @@ def test_no_dirs_accidentally_skipped(self):
39
40
41 class CompilationErrorHandling(MessageCompilationTests):
42+ @cached_property
43+ def msgfmt_version(self):
44+ # Note that msgfmt is installed via GNU gettext tools, hence the msgfmt
45+ # version should align to gettext.
46+ out, err, status = popen_wrapper(
47+ ["msgfmt", "--version"],
48+ stdout_encoding=DEFAULT_LOCALE_ENCODING,
49+ )
50+ m = re.search(r"(\d+)\.(\d+)\.?(\d+)?", out)
51+ return tuple(int(d) for d in m.groups() if d is not None)
52+
53 def test_error_reported_by_msgfmt(self):
54 # po file contains wrong po formatting.
55 with self.assertRaises(CommandError):
56@@ -278,7 +292,14 @@ def test_msgfmt_error_including_non_ascii(self):
57 call_command(
58 "compilemessages", locale=["ko"], stdout=StringIO(), stderr=stderr
59 )
60- self.assertIn("' cannot start a field name", stderr.getvalue())
61+ if self.msgfmt_version < (0, 25):
62+ error_msg = "' cannot start a field name"
63+ else:
64+ error_msg = (
65+ "a field name starts with a character that is not alphanumerical "
66+ "or underscore"
67+ )
68+ self.assertIn(error_msg, stderr.getvalue())
69
70
71 class ProjectAndAppTests(MessageCompilationTests):
diff --git a/meta-python/recipes-devtools/python/python3-django/run-ptest b/meta-python/recipes-devtools/python/python3-django/run-ptest
new file mode 100644
index 0000000000..dd257cc843
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/run-ptest
@@ -0,0 +1,19 @@
1#!/bin/sh
2useradd tester || echo test user exists already
3
4# We need $(pwd), because some tests import modules from the actual tests folder
5# Also, there is one module in the docs/_ext folder that is imported, and that
6# module accesses other modules by a relative path to itself.
7export PYTHONPATH=$(pwd):$(pwd)/docs/_ext:$PYTHONPATH
8
9cd tests
10
11su tester -c "./runtests.py --noinput -v 2" 2>&1 | \
12 tee ../testoutput.log | \
13 sed -e '/\.\.\. ok/ s/^/PASS: /g' \
14 -e '/\.\.\. [ERROR|FAIL]/ s/^/FAIL: /g' \
15 -e '/\.\.\. skipped/ s/^/SKIP: /g' \
16 -e 's/ \.\.\. ok//g' \
17 -e 's/ \.\.\. ERROR//g' \
18 -e 's/ \.\.\. FAIL//g' \
19 -e 's/ \.\.\. skipped//g'