public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Charalampos Stratakis <cstratak@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/python-twisted] rawhide: Update to 26.4.0
Date: Tue, 16 Jun 2026 15:02:41 GMT	[thread overview]
Message-ID: <178162216186.1.91674202797116781.rpms-python-twisted-a6f5baf4031d@fedoraproject.org> (raw)

            A new commit has been pushed.

            Repo   : rpms/python-twisted
            Branch : rawhide
            Commit : a6f5baf4031dd2fcc706cd48913244b8d130b9b5
            Author : Charalampos Stratakis <cstratak@redhat.com>
            Date   : 2026-06-16T01:52:39+02:00
            Stats  : +540/-252 in 9 file(s)
            URL    : https://src.fedoraproject.org/rpms/python-twisted/c/a6f5baf4031dd2fcc706cd48913244b8d130b9b5?branch=rawhide

            Log:
            Update to 26.4.0

- Fixes: rhbz#2463849, rhbz#2435033

---
diff --git a/.gitignore b/.gitignore
index 48fc6de..03f787a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,4 @@
 /twisted-24.10.0.tar.gz
 /twisted-24.11.0.tar.gz
 /twisted-25.5.0.tar.gz
+/twisted-26.4.0.tar.gz

diff --git a/0001-Fix-Python-3.15-compatibility-issues.patch b/0001-Fix-Python-3.15-compatibility-issues.patch
new file mode 100644
index 0000000..08e5e4d
--- /dev/null
+++ b/0001-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/0001-Fix-asyncio-get_event_loop-for-Python-3-14.patch b/0001-Fix-asyncio-get_event_loop-for-Python-3-14.patch
deleted file mode 100644
index a44ecaa..0000000
--- a/0001-Fix-asyncio-get_event_loop-for-Python-3-14.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From c8a4c700a71c283bd65faee69820f88ec97966cb Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Mark=C3=A9ta=20Cal=C3=A1bkov=C3=A1?=
- <meggy.calabkova@gmail.com>
-Date: Fri, 26 Sep 2025 14:37:57 +0200
-Subject: [PATCH] fix `asyncio.get_event_loop` call on Python 3.14
-
----
- src/twisted/internet/asyncioreactor.py | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/twisted/internet/asyncioreactor.py b/src/twisted/internet/asyncioreactor.py
-index cd1cf65f05d..bc5324180ca 100644
---- a/src/twisted/internet/asyncioreactor.py
-+++ b/src/twisted/internet/asyncioreactor.py
-@@ -9,7 +9,7 @@
- 
- import errno
- import sys
--from asyncio import AbstractEventLoop, get_event_loop
-+from asyncio import AbstractEventLoop, get_running_loop, new_event_loop, set_event_loop
- from typing import Dict, Optional, Type
- 
- from zope.interface import implementer
-@@ -47,7 +47,11 @@ class AsyncioSelectorReactor(PosixReactorBase):
- 
-     def __init__(self, eventloop: Optional[AbstractEventLoop] = None):
-         if eventloop is None:
--            _eventloop: AbstractEventLoop = get_event_loop()
-+            try:
-+                _eventloop: AbstractEventLoop = get_running_loop()
-+            except RuntimeError:
-+                _eventloop: AbstractEventLoop = new_event_loop()
-+            set_event_loop(_eventloop)
-         else:
-             _eventloop = eventloop
- 

diff --git a/0002-Fix-web-client-urljoin-for-Python-3-14.patch b/0002-Fix-web-client-urljoin-for-Python-3-14.patch
deleted file mode 100644
index bca9ceb..0000000
--- a/0002-Fix-web-client-urljoin-for-Python-3-14.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 766980a7a9f78f75c61528a209cd51f231bb21cd Mon Sep 17 00:00:00 2001
-From: Adi Roiban <adiroiban@gmail.com>
-Date: Tue, 30 Sep 2025 19:04:07 +0100
-Subject: [PATCH] Fix test.
-
----
- src/twisted/web/client.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/twisted/web/client.py b/src/twisted/web/client.py
-index c7774fa209b..d1647bd1afc 100644
---- a/src/twisted/web/client.py
-+++ b/src/twisted/web/client.py
-@@ -220,7 +220,7 @@ def _urljoin(base, url):
-     """
-     base, baseFrag = urldefrag(base)
-     url, urlFrag = urldefrag(urljoin(base, url))
--    return urljoin(url, b"#" + (urlFrag or baseFrag))
-+    return urljoin(url, b"#" + (urlFrag or baseFrag)).strip('#')
- 
- 
- def _makeGetterFactory(url, factoryFactory, contextFactory=None, *args, **kwargs):
-From 16a9c6d123d0da729640f9855672958cbb5d3806 Mon Sep 17 00:00:00 2001
-From: Adi Roiban <adiroiban@gmail.com>
-Date: Tue, 30 Sep 2025 19:14:20 +0100
-Subject: [PATCH] Fix strip.
-
----
- src/twisted/web/client.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/twisted/web/client.py b/src/twisted/web/client.py
-index d1647bd1afc..fb71b01ba37 100644
---- a/src/twisted/web/client.py
-+++ b/src/twisted/web/client.py
-@@ -220,7 +220,7 @@ def _urljoin(base, url):
-     """
-     base, baseFrag = urldefrag(base)
-     url, urlFrag = urldefrag(urljoin(base, url))
--    return urljoin(url, b"#" + (urlFrag or baseFrag)).strip('#')
-+    return urljoin(url, b"#" + (urlFrag or baseFrag)).strip(b'#')
- 
- 
- def _makeGetterFactory(url, factoryFactory, contextFactory=None, *args, **kwargs):

diff --git a/0003-Fix-tests-for-Python-3-14-2.patch b/0003-Fix-tests-for-Python-3-14-2.patch
deleted file mode 100644
index b9a0b7e..0000000
--- a/0003-Fix-tests-for-Python-3-14-2.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From b035f4a1a952c93445a01f2e17df88689ddf9bdf Mon Sep 17 00:00:00 2001
-From: Glyph <code@glyph.im>
-Date: Wed, 10 Dec 2025 01:10:32 -0800
-Subject: [PATCH] use createElement in the test rather than instantiating
- Element
-
----
- src/twisted/newsfragments/12549.misc    | 0
- src/twisted/web/test/test_domhelpers.py | 6 +++---
- 2 files changed, 3 insertions(+), 3 deletions(-)
- create mode 100644 src/twisted/newsfragments/12549.misc
-
-diff --git a/src/twisted/newsfragments/12549.misc b/src/twisted/newsfragments/12549.misc
-new file mode 100644
-index 00000000000..e69de29bb2d
-diff --git a/src/twisted/web/test/test_domhelpers.py b/src/twisted/web/test/test_domhelpers.py
-index bbefd68516b..d28b89f30e8 100644
---- a/src/twisted/web/test/test_domhelpers.py
-+++ b/src/twisted/web/test/test_domhelpers.py
-@@ -109,14 +109,14 @@ def test_clearNode(self):
-         doc1 = self.dom.parseString("<a><b><c><d/></c></b></a>")
-         a_node = doc1.documentElement
-         domhelpers.clearNode(a_node)
--        self.assertEqual(a_node.toxml(), self.dom.Element("a").toxml())
-+        self.assertEqual(a_node.toxml(), doc1.createElement("a").toxml())
- 
-         doc2 = self.dom.parseString("<a><b><c><d/></c></b></a>")
-         b_node = doc2.documentElement.childNodes[0]
-         domhelpers.clearNode(b_node)
-         actual = doc2.documentElement.toxml()
--        expected = self.dom.Element("a")
--        expected.appendChild(self.dom.Element("b"))
-+        expected = doc2.createElement("a")
-+        expected.appendChild(doc2.createElement("b"))
-         self.assertEqual(actual, expected.toxml())
- 
-     def test_get(self):

diff --git a/0004-Fix-Python-3.15-compatibility-issues.patch b/0004-Fix-Python-3.15-compatibility-issues.patch
deleted file mode 100644
index 08e5e4d..0000000
--- a/0004-Fix-Python-3.15-compatibility-issues.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-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-26.4.0-disable-tests.patch b/python-twisted-26.4.0-disable-tests.patch
new file mode 100644
index 0000000..98a0807
--- /dev/null
+++ b/python-twisted-26.4.0-disable-tests.patch
@@ -0,0 +1,410 @@
+diff --git a/src/twisted/conch/test/test_agent.py b/src/twisted/conch/test/test_agent.py
+index f5bf8f9..153d9fe 100644
+--- a/src/twisted/conch/test/test_agent.py
++++ b/src/twisted/conch/test/test_agent.py
+@@ -265,6 +265,7 @@ class AgentClientFailureTests(AgentTestBase):
+ 
+ 
+ class AgentIdentityRequestsTests(AgentTestBase):
++    skip = "UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     Test operations against a server with identities already loaded.
+     """
+diff --git a/src/twisted/conch/test/test_cftp.py b/src/twisted/conch/test/test_cftp.py
+index 5ffed39..f1b03b4 100644
+--- a/src/twisted/conch/test/test_cftp.py
++++ b/src/twisted/conch/test/test_cftp.py
+@@ -932,6 +932,7 @@ class CFTPClientTestBase(SFTPTestBase):
+ 
+ @skipIf(skipTests, "don't run w/o spawnProcess or cryptography")
+ class OurServerCmdLineClientTests(CFTPClientTestBase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Functional tests which launch a SFTP server over TCP on localhost and check
+     cftp command line interface using a spawned process.
+@@ -1331,6 +1332,7 @@ class OurServerCmdLineClientTests(CFTPClientTestBase):
+ 
+ @skipIf(skipTests, "don't run w/o spawnProcess or cryptography")
+ class OurServerBatchFileTests(CFTPClientTestBase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Functional tests which launch a SFTP server over localhost and checks csftp
+     in batch interface.
+@@ -1437,6 +1439,7 @@ exit
+ @skipIf(not which("ssh"), "no ssh command-line client available")
+ @skipIf(not which("sftp"), "no sftp command-line client available")
+ class OurServerSftpClientTests(CFTPClientTestBase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Test the sftp server against sftp command line client.
+     """
+diff --git a/src/twisted/conch/test/test_checkers.py b/src/twisted/conch/test/test_checkers.py
+index bec973b..4d17c3f 100644
+--- a/src/twisted/conch/test/test_checkers.py
++++ b/src/twisted/conch/test/test_checkers.py
+@@ -160,7 +160,7 @@ class SSHPublicKeyDatabaseTests(TestCase):
+     Tests for L{SSHPublicKeyDatabase}.
+     """
+ 
+-    skip = euidSkip or dependencySkip
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+ 
+     def setUp(self) -> None:
+         self.checker = checkers.SSHPublicKeyDatabase()
+@@ -803,7 +803,7 @@ class SSHPublicKeyCheckerTests(TestCase):
+     Tests for L{checkers.SSHPublicKeyChecker}.
+     """
+ 
+-    skip = dependencySkip
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+ 
+     def setUp(self):
+         self.credentials = SSHPrivateKey(
+diff --git a/src/twisted/conch/test/test_conch.py b/src/twisted/conch/test/test_conch.py
+index e7e99f8..c057206 100644
+--- a/src/twisted/conch/test/test_conch.py
++++ b/src/twisted/conch/test/test_conch.py
+@@ -59,6 +59,7 @@ else:
+ 
+ 
+ class FakeStdio:
++    skip = "Disabled in Fedora buildsys"
+     """
+     A fake for testing L{twisted.conch.scripts.conch.SSHSession.eofReceived} and
+     L{twisted.conch.scripts.cftp.SSHSession.eofReceived}.
+@@ -77,6 +78,7 @@ class FakeStdio:
+ 
+ 
+ class StdioInteractingSessionTests(TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Tests for L{twisted.conch.scripts.conch.SSHSession}.
+     """
+@@ -97,6 +99,7 @@ class StdioInteractingSessionTests(TestCase):
+ 
+ 
+ class Echo(protocol.Protocol):
++    skip = "Disabled in Fedora buildsys"
+     def connectionMade(self):
+         log.msg("ECHO CONNECTION MADE")
+ 
+@@ -110,10 +113,12 @@ class Echo(protocol.Protocol):
+ 
+ 
+ class EchoFactory(protocol.Factory):
++    skip = "Disabled in Fedora buildsys"
+     protocol = Echo
+ 
+ 
+ class ConchTestOpenSSHProcess(protocol.ProcessProtocol):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Test protocol for launching an OpenSSH client process.
+ 
+@@ -162,6 +167,7 @@ class ConchTestOpenSSHProcess(protocol.ProcessProtocol):
+ 
+ 
+ class ConchTestForwardingProcess(protocol.ProcessProtocol):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Manages a third-party process which launches a server.
+ 
+@@ -238,6 +244,7 @@ class ConchTestForwardingProcess(protocol.ProcessProtocol):
+ 
+ 
+ class ConchTestForwardingPort(protocol.Protocol):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Connects to server launched by a third-party process (managed by
+     L{ConchTestForwardingProcess}) sends data, then reports whatever it
+@@ -289,6 +296,7 @@ run()"""
+ 
+ 
+ class ConchServerSetupMixin:
++    skip = "Disabled in Fedora buildsys"
+     if not cryptography:
+         skip = "can't run without cryptography"
+ 
+@@ -365,6 +373,7 @@ class ConchServerSetupMixin:
+ 
+ 
+ class ForwardingMixin(ConchServerSetupMixin):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Template class for tests of the Conch server's ability to forward arbitrary
+     protocols over SSH.
+@@ -420,6 +429,7 @@ class ForwardingMixin(ConchServerSetupMixin):
+ # pass.
+ @implementer(ISession)
+ class RekeyAvatar(ConchUser):
++    skip = "Disabled in Fedora buildsys"
+     """
+     This avatar implements a shell which sends 60 numbered lines to whatever
+     connects to it, then closes the session with a 0 exit status.
+@@ -488,6 +498,7 @@ class RekeyAvatar(ConchUser):
+ 
+ 
+ class RekeyRealm:
++    skip = "Disabled in Fedora buildsys"
+     """
+     This realm gives out new L{RekeyAvatar} instances for any avatar request.
+     """
+@@ -497,6 +508,7 @@ class RekeyRealm:
+ 
+ 
+ class RekeyTestsMixin(ConchServerSetupMixin):
++    skip = "Disabled in Fedora buildsys"
+     """
+     TestCase mixin which defines tests exercising L{SSHTransportBase}'s handling
+     of rekeying messages.
+@@ -522,6 +534,7 @@ class RekeyTestsMixin(ConchServerSetupMixin):
+ 
+ 
+ class OpenSSHClientMixin:
++    skip = "Disabled in Fedora buildsys"
+     if not which("ssh"):
+         skip = "no ssh command-line client available"
+ 
+@@ -574,6 +587,7 @@ class OpenSSHClientMixin:
+ 
+ 
+ class OpenSSHKeyExchangeTests(ConchServerSetupMixin, OpenSSHClientMixin, TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Tests L{SSHTransportBase}'s key exchange algorithm compatibility with
+     OpenSSH.
+@@ -666,6 +680,7 @@ class OpenSSHKeyExchangeTests(ConchServerSetupMixin, OpenSSHClientMixin, TestCas
+ 
+ 
+ class OpenSSHClientForwardingTests(ForwardingMixin, OpenSSHClientMixin, TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Connection forwarding tests run against the OpenSSL command line client.
+     """
+@@ -685,12 +700,14 @@ class OpenSSHClientForwardingTests(ForwardingMixin, OpenSSHClientMixin, TestCase
+ 
+ 
+ class OpenSSHClientRekeyTests(RekeyTestsMixin, OpenSSHClientMixin, TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Rekeying tests run against the OpenSSL command line client.
+     """
+ 
+ 
+ class CmdLineClientTests(ForwardingMixin, TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Connection forwarding tests run against the Conch command line client.
+     """
+diff --git a/src/twisted/conch/test/test_endpoints.py b/src/twisted/conch/test/test_endpoints.py
+index add042c..685e794 100644
+--- a/src/twisted/conch/test/test_endpoints.py
++++ b/src/twisted/conch/test/test_endpoints.py
+@@ -699,6 +699,7 @@ class SSHCommandClientEndpointTestsMixin:
+ 
+ 
+ class NewConnectionTests(TestCase, SSHCommandClientEndpointTestsMixin):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     Tests for L{SSHCommandClientEndpoint} when using the C{newConnection}
+     constructor.
+@@ -1233,6 +1234,7 @@ class NewConnectionTests(TestCase, SSHCommandClientEndpointTestsMixin):
+         self.assertTrue(client.transport.disconnecting)
+ 
+     def test_agentAuthentication(self):
++        self.skip = "Disabled in Fedora buildsys"
+         """
+         If L{SSHCommandClientEndpoint} is initialized with an
+         L{SSHAgentClient}, the agent is used to authenticate with the SSH
+diff --git a/src/twisted/conch/test/test_keys.py b/src/twisted/conch/test/test_keys.py
+index be009f1..29a7c15 100644
+--- a/src/twisted/conch/test/test_keys.py
++++ b/src/twisted/conch/test/test_keys.py
+@@ -43,6 +43,7 @@ def skipWithoutEd25519(f):
+ class KeyTests(unittest.TestCase):
+     if cryptography is None:
+         skip = skipCryptography
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+ 
+     def setUp(self):
+         self.rsaObj = keys.Key._fromRSAComponents(
+@@ -1486,6 +1487,7 @@ xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
+         self.assertRaises(keys.BadKeyError, keys.Key(self.rsaObj).toString, "bad_type")
+ 
+     def test_signAndVerifyRSA(self):
++        self.skip = "Disabled in Fedora buildsys"
+         """
+         Signed data can be verified using RSA (with SHA-1, the default).
+         """
+@@ -1603,6 +1605,7 @@ xEm4DxjEoaIp8dW/JOzXQ2EF+WaSOgdYsw3Ac+rnnjnNptCdOEDGP6QBkt+oXj4P
+         )
+ 
+     def test_verifyRSA(self):
++        self.skip = "Disabled in Fedora buildsys"
+         """
+         A known-good RSA signature verifies successfully.
+         """
+diff --git a/src/twisted/conch/test/test_ssh.py b/src/twisted/conch/test/test_ssh.py
+index 7e5f797..df649e6 100644
+--- a/src/twisted/conch/test/test_ssh.py
++++ b/src/twisted/conch/test/test_ssh.py
+@@ -543,6 +543,7 @@ if cryptography is not None:
+ 
+ 
+ class SSHProtocolTests(unittest.TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Tests for communication between L{SSHServerTransport} and
+     L{SSHClientTransport}.
+diff --git a/src/twisted/conch/test/test_transport.py b/src/twisted/conch/test/test_transport.py
+index 0ef5c6c..02e5253 100644
+--- a/src/twisted/conch/test/test_transport.py
++++ b/src/twisted/conch/test/test_transport.py
+@@ -1461,6 +1461,7 @@ class ServerSSHTransportBaseCase(ServerAndClientSSHTransportBaseCase):
+ 
+ 
+ class ServerSSHTransportTests(ServerSSHTransportBaseCase, TransportTestCase):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     Tests for SSHServerTransport.
+     """
+@@ -2085,6 +2086,7 @@ class ServerSSHTransportDHGroupExchangeSHA1Tests(
+     DHGroupExchangeSHA1Mixin,
+     TransportTestCase,
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     diffie-hellman-group-exchange-sha1 tests for SSHServerTransport.
+     """
+@@ -2095,6 +2097,7 @@ class ServerSSHTransportDHGroupExchangeSHA256Tests(
+     DHGroupExchangeSHA256Mixin,
+     TransportTestCase,
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     diffie-hellman-group-exchange-sha256 tests for SSHServerTransport.
+     """
+@@ -2155,6 +2158,7 @@ class ServerSSHTransportECDHBaseCase(ServerSSHTransportBaseCase):
+ class ServerSSHTransportECDHTests(
+     ServerSSHTransportECDHBaseCase, ECDHMixin, TransportTestCase
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     ecdh-sha2-nistp256 tests for SSHServerTransport.
+     """
+@@ -2164,6 +2168,7 @@ class ServerSSHTransportECDHTests(
+ class ServerSSHTransportCurve25519SHA256Tests(
+     ServerSSHTransportECDHBaseCase, Curve25519SHA256Mixin, TransportTestCase
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     curve25519-sha256 tests for SSHServerTransport.
+     """
+@@ -2196,6 +2201,8 @@ class ClientSSHTransportBaseCase(ServerAndClientSSHTransportBaseCase):
+ 
+ 
+ class ClientSSHTransportTests(ClientSSHTransportBaseCase, TransportTestCase):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
++
+     """
+     Tests for SSHClientTransport.
+     """
+@@ -2679,6 +2686,7 @@ class ClientSSHTransportDHGroupExchangeSHA1Tests(
+     DHGroupExchangeSHA1Mixin,
+     TransportTestCase,
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     diffie-hellman-group-exchange-sha1 tests for SSHClientTransport.
+     """
+@@ -2689,6 +2697,7 @@ class ClientSSHTransportDHGroupExchangeSHA256Tests(
+     DHGroupExchangeSHA256Mixin,
+     TransportTestCase,
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     diffie-hellman-group-exchange-sha256 tests for SSHClientTransport.
+     """
+@@ -2783,6 +2792,7 @@ class ClientSSHTransportECDHBaseCase(ClientSSHTransportBaseCase):
+ class ClientSSHTransportECDHTests(
+     ClientSSHTransportECDHBaseCase, ECDHMixin, TransportTestCase
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     ecdh-sha2-nistp256 tests for SSHClientTransport.
+     """
+@@ -2792,6 +2802,7 @@ class ClientSSHTransportECDHTests(
+ class ClientSSHTransportCurve25519SHA256Tests(
+     ClientSSHTransportECDHBaseCase, Curve25519SHA256Mixin, TransportTestCase
+ ):
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
+     """
+     curve25519-sha256 tests for SSHClientTransport.
+     """
+@@ -3014,6 +3025,7 @@ class SSHCiphersTests(TestCase):
+ 
+ 
+ class TransportLoopbackTests(TestCase):
++    skip = "Disabled in Fedora buildsys"
+     """
+     Test the server transport and client transport against each other,
+     """
+diff --git a/src/twisted/conch/test/test_userauth.py b/src/twisted/conch/test/test_userauth.py
+index 3e775b4..6f9b7a0 100644
+--- a/src/twisted/conch/test/test_userauth.py
++++ b/src/twisted/conch/test/test_userauth.py
+@@ -242,6 +242,8 @@ class SSHUserAuthServerTests(unittest.TestCase):
+     if keys is None:
+         skip = "cannot run without cryptography"
+ 
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
++
+     def setUp(self) -> None:
+         self.realm = Realm()
+         self.portal = Portal(self.realm)
+@@ -945,6 +947,8 @@ class SSHUserAuthClientTests(unittest.TestCase):
+     if keys is None:
+         skip = "cannot run without cryptography"
+ 
++    skip = "Fedora UnsupportedAlgorithm: sha1 is not supported per crypto policy"
++
+     def setUp(self):
+         self.authClient = ClientUserAuth(b"foo", FakeTransport.Service())
+         self.authClient.transport = FakeTransport(None)
+@@ -1230,6 +1234,7 @@ class SSHUserAuthClientTests(unittest.TestCase):
+ 
+ 
+ class LoopbackTests(unittest.TestCase):
++    skip = "Disabled in Fedora buildsys"
+     if keys is None:
+         skip = "cannot run without cryptography"
+ 
+diff --git a/src/twisted/test/test_failure.py b/src/twisted/test/test_failure.py
+index 95ed9ec..8c90d68 100644
+--- a/src/twisted/test/test_failure.py
++++ b/src/twisted/test/test_failure.py
+@@ -20,7 +20,10 @@ from types import TracebackType
+ from typing import Any, cast
+ from unittest import skipIf
+ 
+-from cython_test_exception_raiser import raiser
++try:
++    from cython_test_exception_raiser import raiser
++except ModuleNotFoundError:
++    raiser = None
+ 
+ from twisted.python import failure, reflect
+ from twisted.trial.unittest import SynchronousTestCase
+diff --git a/src/twisted/test/test_udp.py b/src/twisted/test/test_udp.py
+index d69a56c..3970181 100644
+--- a/src/twisted/test/test_udp.py
++++ b/src/twisted/test/test_udp.py
+@@ -664,6 +664,8 @@ class MulticastTests(TestCase):
+     invalidGroup: str = "127.0.0.1"
+     wrongAddressFamily: str = "::1"
+ 
++    skip = "Disabled in Fedora buildsys"
++
+     def setUp(self):
+         self.server = Server()
+         self.client = Client()

diff --git a/python-twisted.spec b/python-twisted.spec
index 7f53bff..8251500 100644
--- a/python-twisted.spec
+++ b/python-twisted.spec
@@ -6,25 +6,19 @@ It contains a web server, numerous chat clients, chat servers, mail servers
 and more.}
 
 Name:           python-%{srcname}
-Version:        25.5.0
+Version:        26.4.0
 Release:        %autorelease
 Summary:        Twisted is a networking engine written in Python
 
 License:        MIT
 URL:            http://twistedmatrix.com/
 VCS:            https://github.com/twisted/twisted
-Source0:        %vcs/archive/%{srcname}-%{version}/%{srcname}-%{version}.tar.gz
+Source:         %vcs/archive/%{srcname}-%{version}/%{srcname}-%{version}.tar.gz
 # downstream-only disable tests that fail in the buildsystem or due to sha1
-Patch0:         python-twisted-25.5.0-disable-tests.patch
-# https://github.com/twisted/twisted/pull/12508
-Patch1:         0001-Fix-asyncio-get_event_loop-for-Python-3-14.patch
-# https://github.com/twisted/twisted/pull/12511
-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
+Patch:          python-twisted-26.4.0-disable-tests.patch
 # Fix Python 3.15 compatibility issues
-# https://github.com/twisted/twisted/pull/12602
-Patch4:         0004-Fix-Python-3.15-compatibility-issues.patch
+# https://github.com/twistWed/twisted/pull/12602
+Patch:          0001-Fix-Python-3.15-compatibility-issues.patch
 
 BuildArch:      noarch
 

diff --git a/sources b/sources
index d4e0dd6..469edc4 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (twisted-25.5.0.tar.gz) = 2cc54ace787b986a1682a500e41b64f2c17cc1c608b054e64ad932f6bf42ec19979cbdc3a6121e879e1b1d4578ea1f4a66b992489ee00a3a85e601d0f29b711a
+SHA512 (twisted-26.4.0.tar.gz) = 3ce57341b2fddf5c1fb0f0abef3dfb65f40caeaf35f72f3da2bf1e2e33776f47b877e0454f2687049dd476006a58e7d8256f359667b4f3fad4c9bca910256647

                 reply	other threads:[~2026-06-16 15:02 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=178162216186.1.91674202797116781.rpms-python-twisted-a6f5baf4031d@fedoraproject.org \
    --to=cstratak@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