public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Lumir Balhar <lbalhar@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/python-twisted] rawhide: Fix compatibility with Python 3.15
Date: Wed, 03 Jun 2026 09:55:51 GMT [thread overview]
Message-ID: <178048055175.1.11548442803604536684.rpms-python-twisted-e22482a304fb@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/python-twisted
Branch : rawhide
Commit : e22482a304fbc7a55b4120718dc0bfc59cdc9cd9
Author : Lumir Balhar <lbalhar@redhat.com>
Date : 2026-04-01T14:00:33+02:00
Stats : +126/-0 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/python-twisted/c/e22482a304fbc7a55b4120718dc0bfc59cdc9cd9?branch=rawhide
Log:
Fix compatibility with Python 3.15
---
diff --git a/0004-Fix-Python-3.15-compatibility-issues.patch b/0004-Fix-Python-3.15-compatibility-issues.patch
new file mode 100644
index 0000000..08e5e4d
--- /dev/null
+++ b/0004-Fix-Python-3.15-compatibility-issues.patch
@@ -0,0 +1,123 @@
+From c18ad3ebbd778545acc1104ecdc78137aa5534f1 Mon Sep 17 00:00:00 2001
+From: Lumir Balhar <lbalhar@redhat.com>
+Date: Wed, 1 Apr 2026 11:46:56 +0200
+Subject: [PATCH] Fix Python 3.15 compatibility issues
+
+- Replace deprecated SourceFileLoader.load_module() with exec_module()
+- Add addSubTest() method to _AdaptedReporter for Python 3.15 doctest support
+- Update test expectations for Python 3.15 doctest changes:
+ - Different success/failure counts
+ - Changed error output format
+---
+ src/twisted/trial/reporter.py | 13 +++++++++++++
+ src/twisted/trial/runner.py | 6 +++++-
+ src/twisted/trial/test/test_doctest.py | 9 +++++++--
+ src/twisted/trial/test/test_reporter.py | 18 +++++++++++++-----
+ 4 files changed, 38 insertions(+), 8 deletions(-)
+
+diff --git a/src/twisted/trial/reporter.py b/src/twisted/trial/reporter.py
+index 2034a83..a1b91e9 100644
+--- a/src/twisted/trial/reporter.py
++++ b/src/twisted/trial/reporter.py
+@@ -381,6 +381,19 @@ class _AdaptedReporter(TestResultDecorator):
+ """
+ return self._originalReporter.stopTest(self.testAdapter(test))
+
++ def addSubTest(self, test, subtest, outcome):
++ """
++ See L{unittest.TestResult.addSubTest}.
++
++ Called by the doctest runner in Python 3.15+ when reporting sub-test results.
++ """
++ test = self.testAdapter(test)
++ if hasattr(self._originalReporter, "addSubTest"):
++ return self._originalReporter.addSubTest(test, subtest, outcome)
++ # If the underlying reporter doesn't support subtests, treat as error/success
++ if outcome is not None:
++ return self._originalReporter.addError(test, outcome)
++
+
+ @implementer(itrial.IReporter)
+ class Reporter(TestResult):
+diff --git a/src/twisted/trial/runner.py b/src/twisted/trial/runner.py
+index ffc554e..c7ba6f9 100644
+--- a/src/twisted/trial/runner.py
++++ b/src/twisted/trial/runner.py
+@@ -760,7 +760,11 @@ class TestLoader:
+ """
+ name = reflect.filenameToModuleName(fileName)
+ try:
+- module = SourceFileLoader(name, fileName).load_module()
++ loader = SourceFileLoader(name, fileName)
++ spec = importlib.util.spec_from_loader(name, loader)
++ module = importlib.util.module_from_spec(spec)
++ sys.modules[name] = module
++ spec.loader.exec_module(module)
+ return self.loadAnything(module, recurse=recurse)
+ except OSError:
+ raise ValueError(f"{fileName} is not a Python file.")
+diff --git a/src/twisted/trial/test/test_doctest.py b/src/twisted/trial/test/test_doctest.py
+index 05d57d4..5f6a1c1 100644
+--- a/src/twisted/trial/test/test_doctest.py
++++ b/src/twisted/trial/test/test_doctest.py
+@@ -4,6 +4,7 @@
+ """
+ Test Twisted's doctest support.
+ """
++import sys
+ import unittest as pyunit
+
+ from twisted.trial import itrial, reporter, runner, unittest
+@@ -40,8 +41,12 @@ class RunnersTests(unittest.SynchronousTestCase):
+ """
+ result = reporter.TestResult()
+ suite.run(result)
+- self.assertEqual(5, result.successes)
+- self.assertEqual(2, len(result.failures))
++ # Python 3.15+ counts doctest examples differently, resulting in more successes
++ # and also consolidates some failures
++ expected_successes = 7 if sys.version_info >= (3, 15) else 5
++ expected_failures = 1 if sys.version_info >= (3, 15) else 2
++ self.assertEqual(expected_successes, result.successes)
++ self.assertEqual(expected_failures, len(result.failures))
+
+ def test_expectedResults(self, count: int = 1) -> None:
+ """
+diff --git a/src/twisted/trial/test/test_reporter.py b/src/twisted/trial/test/test_reporter.py
+index 76172e7..0b47f24 100644
+--- a/src/twisted/trial/test/test_reporter.py
++++ b/src/twisted/trial/test/test_reporter.py
+@@ -200,17 +200,25 @@ class ErrorReportingTests(StringTest):
+ stream with a I{FAIL} or I{ERROR} tag along with a summary of what
+ problem was encountered and the ID of the test.
+ """
++ import sys
+ from twisted.trial.test import erroneous
+
+ suite = unittest.decorate(self.loader.loadDoctests(erroneous), itrial.ITestCase)
+ output = self.getOutput(suite)
+ path = "twisted.trial.test.erroneous.unexpectedException"
+- for substring in ["1/0", "ZeroDivisionError", "Exception raised:", path]:
++ # Python 3.15+ changed doctest error output format
++ if sys.version_info >= (3, 15):
++ substrings = ["1/0", "ZeroDivisionError", path]
++ else:
++ substrings = ["1/0", "ZeroDivisionError", "Exception raised:", path]
++ for substring in substrings:
+ self.assertSubstring(substring, output)
+- self.assertTrue(
+- re.search("Fail(ed|ure in) example:", output),
+- "Couldn't match 'Failure in example: ' " "or 'Failed example: '",
+- )
++ # Python 3.15+ no longer uses "Failed example:" format
++ if sys.version_info < (3, 15):
++ self.assertTrue(
++ re.search("Fail(ed|ure in) example:", output),
++ "Couldn't match 'Failure in example: ' " "or 'Failed example: '",
++ )
+ expect = [self.doubleSeparator, re.compile(r"\[(ERROR|FAIL)\]")]
+ self.stringComparison(expect, output.splitlines())
+
+--
+2.53.0
+
diff --git a/python-twisted.spec b/python-twisted.spec
index 5c3d27a..7f53bff 100644
--- a/python-twisted.spec
+++ b/python-twisted.spec
@@ -22,6 +22,9 @@ Patch1: 0001-Fix-asyncio-get_event_loop-for-Python-3-14.patch
Patch2: 0002-Fix-web-client-urljoin-for-Python-3-14.patch
# https://github.com/twisted/twisted/pull/12551
Patch3: 0003-Fix-tests-for-Python-3-14-2.patch
+# Fix Python 3.15 compatibility issues
+# https://github.com/twisted/twisted/pull/12602
+Patch4: 0004-Fix-Python-3.15-compatibility-issues.patch
BuildArch: noarch
reply other threads:[~2026-06-03 9:55 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178048055175.1.11548442803604536684.rpms-python-twisted-e22482a304fb@fedoraproject.org \
--to=lbalhar@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox