public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Yaakov Selkowitz <yselkowi@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/pychess] rawhide: Update to 1.1.0
Date: Tue, 04 Aug 2026 22:48:03 GMT [thread overview]
Message-ID: <178588368310.1.5021466455645117151.rpms-pychess-ba918865285a@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/pychess
Branch : rawhide
Commit : ba918865285a60b5a30adf58ca4b3a2a251a7864
Author : Yaakov Selkowitz <yselkowi@redhat.com>
Date : 2026-08-04T18:47:29-04:00
Stats : +47/-671 in 9 file(s)
URL : https://src.fedoraproject.org/rpms/pychess/c/ba918865285a60b5a30adf58ca4b3a2a251a7864?branch=rawhide
Log:
Update to 1.1.0
- Use pyproject macros
- Use xwayland-run for testing
---
diff --git a/.gitignore b/.gitignore
index 5ad74af..cb83573 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/pychess-0.12.4.tar.gz
/pychess-1.0.3.tar.gz
/pychess-1.0.5.tar.gz
+/pychess-1.1.0.tar.gz
diff --git a/0001-Adjust-test-usage-of-get_event_loop-for-Python-3.14-.patch b/0001-Adjust-test-usage-of-get_event_loop-for-Python-3.14-.patch
deleted file mode 100644
index a65ccc2..0000000
--- a/0001-Adjust-test-usage-of-get_event_loop-for-Python-3.14-.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 387fa9208ac14665a5d81f88e47ef52710eeeb65 Mon Sep 17 00:00:00 2001
-From: Adam Williamson <awilliam@redhat.com>
-Date: Tue, 22 Jul 2025 03:57:05 -0700
-Subject: [PATCH] Adjust test usage of get_event_loop() for Python 3.14 changes
- (#2361)
-
-As of Python 3.14, get_event_loop() no longer automatically sets
-up a new loop if there currently isn't one, instead it raises a
-RuntimeError. This adjusts several usages of get_event_loop() in
-the tests to work with the change. It also adds a loop setup step
-to learn.py - currently it doesn't have one, but calls
-asyncio.create_task, so it is implicitly relying on an earlier
-test having set up an event loop. If you run learn.py alone, it
-fails because of this.
-
-Signed-off-by: Adam Williamson <awilliam@redhat.com>
----
- testing/analysis.py | 6 +++++-
- testing/ficsmanagers.py | 6 +++++-
- testing/learn.py | 6 ++++++
- testing/polyglot.py | 6 +++++-
- testing/savegame.py | 6 +++++-
- 5 files changed, 26 insertions(+), 4 deletions(-)
-
-diff --git a/testing/analysis.py b/testing/analysis.py
-index 40b4da66..2aba0145 100755
---- a/testing/analysis.py
-+++ b/testing/analysis.py
-@@ -78,7 +78,11 @@ class CECPTests(EmittingTestCase):
- self.assertEqual(results, ([(ply, moves, score, depth, nps)],))
-
- def setUp(self):
-- self.loop = asyncio.get_event_loop()
-+ try:
-+ self.loop = asyncio.get_event_loop()
-+ except RuntimeError:
-+ self.loop = asyncio.new_event_loop()
-+ asyncio.set_event_loop(self.loop)
-
- self.engineA, self.analyzerA = self._setupengine(ANALYZING)
- self.engineI, self.analyzerI = self._setupengine(INVERSE_ANALYZING)
-diff --git a/testing/ficsmanagers.py b/testing/ficsmanagers.py
-index 1004f3a5..bcd0c779 100755
---- a/testing/ficsmanagers.py
-+++ b/testing/ficsmanagers.py
-@@ -139,7 +139,11 @@ class EmittingTestCase(unittest.TestCase):
- Warning: Strong connection to fics managers"""
-
- def setUp(self):
-- self.loop = asyncio.get_event_loop()
-+ try:
-+ self.loop = asyncio.get_event_loop()
-+ except RuntimeError:
-+ self.loop = asyncio.new_event_loop()
-+ asyncio.set_event_loop(self.loop)
-
- self.connection = DummyConnection()
- self.connection.players = FICSPlayers(self.connection)
-diff --git a/testing/learn.py b/testing/learn.py
-index c7f6b96c..faa68cb3 100644
---- a/testing/learn.py
-+++ b/testing/learn.py
-@@ -23,6 +23,12 @@ discoverer.pre_discover()
-
- class LearnTests(unittest.TestCase):
- def setUp(self):
-+ try:
-+ self.loop = asyncio.get_event_loop()
-+ except RuntimeError:
-+ self.loop = asyncio.new_event_loop()
-+ asyncio.set_event_loop(self.loop)
-+
- widgets = uistuff.GladeWidgets("PyChess.glade")
- gamewidget.setWidgets(widgets)
- perspective_manager.set_widgets(widgets)
-diff --git a/testing/polyglot.py b/testing/polyglot.py
-index 9abd9c24..9d66188d 100644
---- a/testing/polyglot.py
-+++ b/testing/polyglot.py
-@@ -157,7 +157,11 @@ class PolyglotTestCase(unittest.TestCase):
-
- await event.wait()
-
-- loop = asyncio.get_event_loop()
-+ try:
-+ loop = asyncio.get_event_loop()
-+ except RuntimeError:
-+ loop = asyncio.new_event_loop()
-+ asyncio.set_event_loop(loop)
- loop.set_debug(enabled=True)
-
- loop.run_until_complete(coro())
-diff --git a/testing/savegame.py b/testing/savegame.py
-index 3d2fec3d..051a38a4 100644
---- a/testing/savegame.py
-+++ b/testing/savegame.py
-@@ -54,7 +54,11 @@ class DatabaseTests(unittest.TestCase):
- def test1(self):
- """Play and save Human-Human 1 min game"""
-
-- loop = asyncio.get_event_loop()
-+ try:
-+ loop = asyncio.get_event_loop()
-+ except RuntimeError:
-+ loop = asyncio.new_event_loop()
-+ asyncio.set_event_loop(loop)
- loop.set_debug(enabled=True)
-
- async def coro():
---
-2.50.1
-
diff --git a/0001-TimeSeal.py-make-IAC_WONT_ECHO-a-literal-as-telnetli.patch b/0001-TimeSeal.py-make-IAC_WONT_ECHO-a-literal-as-telnetli.patch
deleted file mode 100644
index bcc4cf9..0000000
--- a/0001-TimeSeal.py-make-IAC_WONT_ECHO-a-literal-as-telnetli.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 8d8431c3e8023adbdffea9782b6f2370bb367673 Mon Sep 17 00:00:00 2001
-From: Adam Williamson <adam@blueradius.ca>
-Date: Tue, 25 Jun 2024 11:19:53 -0700
-Subject: [PATCH] TimeSeal.py: make IAC_WONT_ECHO a literal as telnetlib is
- gone (#2233) (#2235)
-
-telnetlib was removed in Python 3.13. As we only used it to
-create a bytestring from these constants, let's just make it a
-literal instead.
-
-Signed-off-by: Adam Williamson <awilliam@redhat.com>
----
- lib/pychess/ic/TimeSeal.py | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/lib/pychess/ic/TimeSeal.py b/lib/pychess/ic/TimeSeal.py
-index 0d09ff1e..1e99b721 100644
---- a/lib/pychess/ic/TimeSeal.py
-+++ b/lib/pychess/ic/TimeSeal.py
-@@ -1,6 +1,5 @@
- import asyncio
- import sys
--import telnetlib
- import random
- import time
- import platform
-@@ -23,7 +22,9 @@ ENCODE = [ord(i) for i in "Timestamp (FICS) v1.0 - programmed by Henrik Gram."]
- ENCODELEN = len(ENCODE)
- G_RESPONSE = "\x029"
- FILLER = b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
--IAC_WONT_ECHO = b"".join([telnetlib.IAC, telnetlib.WONT, telnetlib.ECHO])
-+# was: b"".join([telnetlib.IAC, telnetlib.WONT, telnetlib.ECHO])
-+# but telnetlib was removed in Python 3.13
-+IAC_WONT_ECHO = b"\xff\xfc\x01"
-
- _DEFAULT_LIMIT = 2**16
-
---
-2.50.1
-
diff --git a/2359.patch b/2359.patch
deleted file mode 100644
index d4912c0..0000000
--- a/2359.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From beccc10e4ae5d0c6a1a7a3de0592f5913f646761 Mon Sep 17 00:00:00 2001
-From: Adam Williamson <awilliam@redhat.com>
-Date: Mon, 21 Jul 2025 15:05:18 -0700
-Subject: [PATCH] Fix GHA workflow so test failure is properly caught
-
-The current GHA "Run the test suite" workflow will virtually
-never fail, because run_tests.py never exits anything but 0. It
-effectively runs the tests, but ignores the results. The tests
-have actually been failing for months - likely since 983e138 -
-but nobody noticed because of this problem.
-
-This changes run_tests.py so it exits 1 if the tests fail, and
-tweaks run-tests.yml so we will still kill xvfb before exiting
-if the tests fail.
-
-Signed-off-by: Adam Williamson <awilliam@redhat.com>
----
- .github/workflows/run-tests.yml | 4 +++-
- testing/run_tests.py | 6 +++++-
- 2 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
-index bd9739c39..e19697013 100644
---- a/.github/workflows/run-tests.yml
-+++ b/.github/workflows/run-tests.yml
-@@ -77,6 +77,8 @@ jobs:
- xvfb_pid=$!
-
- cd testing
-- ./run3 run_tests.py
-+ ./run3 run_tests.py || touch FAILED
-
- kill -s SIGTERM "${xvfb_pid}"
-+ [ -f FAILED ] && exit 1
-+ exit 0
-diff --git a/testing/run_tests.py b/testing/run_tests.py
-index 4a288d439..1f693daeb 100755
---- a/testing/run_tests.py
-+++ b/testing/run_tests.py
-@@ -1,3 +1,4 @@
-+import sys
- import unittest
-
- modules_to_test = (
-@@ -45,4 +46,7 @@ def suite():
-
-
- if __name__ == "__main__":
-- unittest.TextTestRunner(verbosity=2).run(suite())
-+ ret = unittest.TextTestRunner(verbosity=2).run(suite())
-+ if ret.wasSuccessful():
-+ sys.exit(0)
-+ sys.exit(1)
diff --git a/2362.patch b/2362.patch
deleted file mode 100644
index 1990a19..0000000
--- a/2362.patch
+++ /dev/null
@@ -1,331 +0,0 @@
-From 33deede4d77efab91b8e2d2cbe502182095b0c4b Mon Sep 17 00:00:00 2001
-From: Sebastian Pipping <sebastian@pipping.org>
-Date: Tue, 22 Jul 2025 16:58:40 +0200
-Subject: [PATCH 2/7] Fix use of asyncio.create_task from non-async context
-
----
- lib/pychess/Players/CECPEngine.py | 6 ++++--
- lib/pychess/Utils/SetupModel.py | 2 +-
- lib/pychess/ic/ICGameModel.py | 2 +-
- lib/pychess/perspectives/learn/EndgamesPanel.py | 2 +-
- lib/pychess/perspectives/learn/LecturesPanel.py | 4 ++--
- lib/pychess/perspectives/learn/LessonsPanel.py | 2 +-
- lib/pychess/perspectives/learn/PuzzlesPanel.py | 2 +-
- lib/pychess/perspectives/learn/generateLessonsSidepanel.py | 2 +-
- testing/learn.py | 2 +-
- 9 files changed, 13 insertions(+), 11 deletions(-)
-
-diff --git a/lib/pychess/Players/CECPEngine.py b/lib/pychess/Players/CECPEngine.py
-index 25e50ddb8..c551d04aa 100644
---- a/lib/pychess/Players/CECPEngine.py
-+++ b/lib/pychess/Players/CECPEngine.py
-@@ -171,7 +171,9 @@ def __init__(self, subprocess, color, protover, md5):
- self.lastpong = 0
-
- self.queue = asyncio.Queue()
-- self.parse_line_task = asyncio.create_task(self.parseLine(self.engine))
-+ self.parse_line_task = asyncio.get_event_loop().create_task(
-+ self.parseLine(self.engine)
-+ )
- self.died_cid = self.engine.connect(
- "died", lambda e: self.queue.put_nowait("die")
- )
-@@ -204,7 +206,7 @@ def prestart(self):
- # we will do it after feature accept/reject is completed.
-
- def start(self, event, is_dead):
-- asyncio.create_task(self.__startBlocking(event, is_dead))
-+ asyncio.get_event_loop().create_task(self.__startBlocking(event, is_dead))
-
- async def __startBlocking(self, event, is_dead):
- if self.protover == 1:
-diff --git a/lib/pychess/Utils/SetupModel.py b/lib/pychess/Utils/SetupModel.py
-index a72bc594f..2660fc1c0 100644
---- a/lib/pychess/Utils/SetupModel.py
-+++ b/lib/pychess/Utils/SetupModel.py
-@@ -108,4 +108,4 @@ async def coro():
- # print("CLOSE")
- break
-
-- asyncio.create_task(coro())
-+ asyncio.get_event_loop().create_task(coro())
-diff --git a/lib/pychess/ic/ICGameModel.py b/lib/pychess/ic/ICGameModel.py
-index f3cb7c911..d80e33330 100755
---- a/lib/pychess/ic/ICGameModel.py
-+++ b/lib/pychess/ic/ICGameModel.py
-@@ -360,7 +360,7 @@ async def coro():
- return
- self.emit("message_received", name, text)
-
-- self.kibitz_task = asyncio.create_task(coro())
-+ self.kibitz_task = asyncio.get_event_loop().create_task(coro())
-
- def onWhisperMessage(self, cm, name, gameno, text):
- if gameno != self.ficsgame.gameno:
-diff --git a/lib/pychess/perspectives/learn/EndgamesPanel.py b/lib/pychess/perspectives/learn/EndgamesPanel.py
-index c6f2c9ed1..5455964a1 100644
---- a/lib/pychess/perspectives/learn/EndgamesPanel.py
-+++ b/lib/pychess/perspectives/learn/EndgamesPanel.py
-@@ -161,7 +161,7 @@ def on_game_started(gamemodel):
- gamemodel.connect("game_started", on_game_started)
-
- perspective = perspective_manager.get_perspective("games")
-- asyncio.create_task(
-+ asyncio.get_event_loop().create_task(
- perspective.generalStart(
- gamemodel, p0, p1, loaddata=(StringIO(fen), fen_loader, 0, -1)
- )
-diff --git a/lib/pychess/perspectives/learn/LecturesPanel.py b/lib/pychess/perspectives/learn/LecturesPanel.py
-index b6ea9e6aa..5bb2c2faf 100644
---- a/lib/pychess/perspectives/learn/LecturesPanel.py
-+++ b/lib/pychess/perspectives/learn/LecturesPanel.py
-@@ -129,7 +129,7 @@ def on_game_started(gamemodel):
- gamemodel.connect("game_started", on_game_started)
-
- perspective = perspective_manager.get_perspective("games")
-- asyncio.create_task(perspective.generalStart(gamemodel, p0, p1))
-+ asyncio.get_event_loop().create_task(perspective.generalStart(gamemodel, p0, p1))
-
- def lecture_steps(lecture_file):
- with open(lecture_file) as f:
-@@ -308,4 +308,4 @@ async def coro(gamemodel, steps):
- # connection.client.run_command("kibitz That concludes this lecture.")
- break
-
-- asyncio.create_task(coro(gamemodel, steps))
-+ asyncio.get_event_loop().create_task(coro(gamemodel, steps))
-diff --git a/lib/pychess/perspectives/learn/LessonsPanel.py b/lib/pychess/perspectives/learn/LessonsPanel.py
-index f75c08323..e66d0bfa6 100644
---- a/lib/pychess/perspectives/learn/LessonsPanel.py
-+++ b/lib/pychess/perspectives/learn/LessonsPanel.py
-@@ -104,7 +104,7 @@ def on_game_started(gamemodel):
-
- gamemodel.status = WAITING_TO_START
- perspective = perspective_manager.get_perspective("games")
-- asyncio.create_task(perspective.generalStart(gamemodel, p0, p1))
-+ asyncio.get_event_loop().create_task(perspective.generalStart(gamemodel, p0, p1))
-
-
- # Sidepanel is a class
-diff --git a/lib/pychess/perspectives/learn/PuzzlesPanel.py b/lib/pychess/perspectives/learn/PuzzlesPanel.py
-index 1d80bfe19..b727d10b5 100644
---- a/lib/pychess/perspectives/learn/PuzzlesPanel.py
-+++ b/lib/pychess/perspectives/learn/PuzzlesPanel.py
-@@ -181,7 +181,7 @@ def goal_checked(gamemodle):
- gamemodel.status = WAITING_TO_START
-
- perspective = perspective_manager.get_perspective("games")
-- asyncio.create_task(perspective.generalStart(gamemodel, p0, p1))
-+ asyncio.get_event_loop().create_task(perspective.generalStart(gamemodel, p0, p1))
-
-
- # Sidepanel is a class
-diff --git a/lib/pychess/perspectives/learn/generateLessonsSidepanel.py b/lib/pychess/perspectives/learn/generateLessonsSidepanel.py
-index 1d3ff7b14..8cec9aeb2 100644
---- a/lib/pychess/perspectives/learn/generateLessonsSidepanel.py
-+++ b/lib/pychess/perspectives/learn/generateLessonsSidepanel.py
-@@ -80,7 +80,7 @@ async def coro():
- )
- await asyncio.sleep(0)
-
-- asyncio.create_task(coro())
-+ asyncio.get_event_loop().create_task(coro())
-
- self.tv.set_model(self.store)
- self.tv.get_selection().set_mode(Gtk.SelectionMode.BROWSE)
-diff --git a/testing/learn.py b/testing/learn.py
-index faa68cb31..dbb5bf31e 100644
---- a/testing/learn.py
-+++ b/testing/learn.py
-@@ -43,7 +43,7 @@ def setUp(self):
- perspective_manager.current_perspective = self.learn_persp
-
- dd = DiscovererDialog(discoverer)
-- self.dd_task = asyncio.create_task(dd.start())
-+ self.dd_task = asyncio.get_event_loop().create_task(dd.start())
-
- def test0(self):
- """Init layout"""
-
-From 30018d0de7c1a447d549e411079b052ff4fbbb4c Mon Sep 17 00:00:00 2001
-From: Sebastian Pipping <sebastian@pipping.org>
-Date: Tue, 22 Jul 2025 18:21:15 +0200
-Subject: [PATCH 3/7] Revert "Adjust test usage of get_event_loop() for Python
- 3.14 changes (#2361)"
-
-This reverts commit 387fa9208ac14665a5d81f88e47ef52710eeeb65.
----
- testing/analysis.py | 6 +-----
- testing/ficsmanagers.py | 6 +-----
- testing/learn.py | 6 ------
- testing/polyglot.py | 6 +-----
- testing/savegame.py | 6 +-----
- 5 files changed, 4 insertions(+), 26 deletions(-)
-
-diff --git a/testing/analysis.py b/testing/analysis.py
-index 2aba0145a..40b4da665 100755
---- a/testing/analysis.py
-+++ b/testing/analysis.py
-@@ -78,11 +78,7 @@ async def _testLine(
- self.assertEqual(results, ([(ply, moves, score, depth, nps)],))
-
- def setUp(self):
-- try:
-- self.loop = asyncio.get_event_loop()
-- except RuntimeError:
-- self.loop = asyncio.new_event_loop()
-- asyncio.set_event_loop(self.loop)
-+ self.loop = asyncio.get_event_loop()
-
- self.engineA, self.analyzerA = self._setupengine(ANALYZING)
- self.engineI, self.analyzerI = self._setupengine(INVERSE_ANALYZING)
-diff --git a/testing/ficsmanagers.py b/testing/ficsmanagers.py
-index bcd0c7797..1004f3a54 100755
---- a/testing/ficsmanagers.py
-+++ b/testing/ficsmanagers.py
-@@ -139,11 +139,7 @@ class EmittingTestCase(unittest.TestCase):
- Warning: Strong connection to fics managers"""
-
- def setUp(self):
-- try:
-- self.loop = asyncio.get_event_loop()
-- except RuntimeError:
-- self.loop = asyncio.new_event_loop()
-- asyncio.set_event_loop(self.loop)
-+ self.loop = asyncio.get_event_loop()
-
- self.connection = DummyConnection()
- self.connection.players = FICSPlayers(self.connection)
-diff --git a/testing/learn.py b/testing/learn.py
-index dbb5bf31e..ea0da3c2b 100644
---- a/testing/learn.py
-+++ b/testing/learn.py
-@@ -23,12 +23,6 @@
-
- class LearnTests(unittest.TestCase):
- def setUp(self):
-- try:
-- self.loop = asyncio.get_event_loop()
-- except RuntimeError:
-- self.loop = asyncio.new_event_loop()
-- asyncio.set_event_loop(self.loop)
--
- widgets = uistuff.GladeWidgets("PyChess.glade")
- gamewidget.setWidgets(widgets)
- perspective_manager.set_widgets(widgets)
-diff --git a/testing/polyglot.py b/testing/polyglot.py
-index 9d66188d4..9abd9c24a 100644
---- a/testing/polyglot.py
-+++ b/testing/polyglot.py
-@@ -157,11 +157,7 @@ def on_book_created(persp, event):
-
- await event.wait()
-
-- try:
-- loop = asyncio.get_event_loop()
-- except RuntimeError:
-- loop = asyncio.new_event_loop()
-- asyncio.set_event_loop(loop)
-+ loop = asyncio.get_event_loop()
- loop.set_debug(enabled=True)
-
- loop.run_until_complete(coro())
-diff --git a/testing/savegame.py b/testing/savegame.py
-index 051a38a4f..3d2fec3d4 100644
---- a/testing/savegame.py
-+++ b/testing/savegame.py
-@@ -54,11 +54,7 @@ def setUp(self):
- def test1(self):
- """Play and save Human-Human 1 min game"""
-
-- try:
-- loop = asyncio.get_event_loop()
-- except RuntimeError:
-- loop = asyncio.new_event_loop()
-- asyncio.set_event_loop(loop)
-+ loop = asyncio.get_event_loop()
- loop.set_debug(enabled=True)
-
- async def coro():
-
-From d7728cbb80527c681f0917914fe91065ce2fa38a Mon Sep 17 00:00:00 2001
-From: Sebastian Pipping <sebastian@pipping.org>
-Date: Tue, 22 Jul 2025 15:52:44 +0200
-Subject: [PATCH 4/7] testing: Simplify loop creation code in DialogTests and
- CECPTests
-
----
- testing/dialogs.py | 5 ++---
- testing/selfplay.py | 4 +---
- 2 files changed, 3 insertions(+), 6 deletions(-)
-
-diff --git a/testing/dialogs.py b/testing/dialogs.py
-index ed04d8bfd..effc3671f 100644
---- a/testing/dialogs.py
-+++ b/testing/dialogs.py
-@@ -27,12 +27,11 @@ def setUp(self):
- from asyncio.windows_events import ProactorEventLoop
-
- loop = ProactorEventLoop()
-- asyncio.set_event_loop(loop)
- else:
- loop = asyncio.SelectorEventLoop()
-- asyncio.set_event_loop(loop)
-
-- self.loop = asyncio.get_event_loop()
-+ asyncio.set_event_loop(loop)
-+ self.loop = loop
- self.loop.set_debug(enabled=True)
-
- widgets = uistuff.GladeWidgets("PyChess.glade")
-diff --git a/testing/selfplay.py b/testing/selfplay.py
-index 93501aae6..bc38f6b22 100644
---- a/testing/selfplay.py
-+++ b/testing/selfplay.py
-@@ -78,12 +78,10 @@ def test(self):
- from asyncio.windows_events import ProactorEventLoop
-
- loop = ProactorEventLoop()
-- asyncio.set_event_loop(loop)
- else:
- loop = asyncio.SelectorEventLoop()
-- asyncio.set_event_loop(loop)
-
-- loop = asyncio.get_event_loop()
-+ asyncio.set_event_loop(loop)
- loop.set_debug(enabled=True)
-
- for vari in PYCHESS_VARIANTS:
-
-From b4074c09648506a0c665a370bf60a2967cc9495d Mon Sep 17 00:00:00 2001
-From: Sebastian Pipping <sebastian@pipping.org>
-Date: Tue, 22 Jul 2025 18:33:47 +0200
-Subject: [PATCH 6/7] run_tests.py: Auto-create async event loop for Python
- >=3.14
-
----
- testing/run_tests.py | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/testing/run_tests.py b/testing/run_tests.py
-index 1f693daeb..fd9e733b8 100755
---- a/testing/run_tests.py
-+++ b/testing/run_tests.py
-@@ -1,3 +1,4 @@
-+import asyncio
- import sys
- import unittest
-
-@@ -46,6 +47,12 @@ def suite():
-
-
- if __name__ == "__main__":
-+ # Python >=3.14 does not auto-create an asyncio event loop for us
-+ try:
-+ asyncio.get_event_loop()
-+ except RuntimeError:
-+ asyncio.set_event_loop(asyncio.new_event_loop())
-+
- ret = unittest.TextTestRunner(verbosity=2).run(suite())
- if ret.wasSuccessful():
- sys.exit(0)
diff --git a/2364.patch b/2364.patch
deleted file mode 100644
index b002a19..0000000
--- a/2364.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From b2b04c667fcd273bc93100093cd2985fc9bb9e9a Mon Sep 17 00:00:00 2001
-From: gbtami <gbtami@gmail.com>
-Date: Wed, 23 Jul 2025 12:32:20 +0200
-Subject: [PATCH 1/2] Fix dialogs unit test local run
-
----
- testing/dialogs.py | 12 +++++++-----
- 1 file changed, 7 insertions(+), 5 deletions(-)
-
-diff --git a/testing/dialogs.py b/testing/dialogs.py
-index effc3671f..1aa6d4a50 100644
---- a/testing/dialogs.py
-+++ b/testing/dialogs.py
-@@ -10,7 +10,8 @@
- from pychess.widgets import gamewidget
- from pychess.widgets import enginesDialog
- from pychess.widgets import newGameDialog
--from pychess.widgets.newGameDialog import COPY, CLEAR, PASTE, INITIAL
-+
-+# from pychess.widgets.newGameDialog import COPY, CLEAR, PASTE, INITIAL
- from pychess.widgets import preferencesDialog
- from pychess.widgets.discovererDialog import DiscovererDialog
- from pychess.perspectives.games import Games
-@@ -87,10 +88,11 @@ def on_gmwidg_created(persp, gmwidg, event):
- self.games_persp.connect("gmwidg_created", on_gmwidg_created, event)
-
- dialog.run(FEN_START, NORMALCHESS)
-- dialog.widgets["newgamedialog"].response(INITIAL)
-- dialog.widgets["newgamedialog"].response(COPY)
-- dialog.widgets["newgamedialog"].response(CLEAR)
-- dialog.widgets["newgamedialog"].response(PASTE)
-+ # TODO: automate ECO code input handling
-+ # dialog.widgets["newgamedialog"].response(INITIAL)
-+ # dialog.widgets["newgamedialog"].response(COPY)
-+ # dialog.widgets["newgamedialog"].response(CLEAR)
-+ # dialog.widgets["newgamedialog"].response(PASTE)
- dialog.widgets["newgamedialog"].response(Gtk.ResponseType.OK)
-
- await event.wait()
-
-From 8e5f06efd96ac8e060dac25dcd3ad5bf95b75003 Mon Sep 17 00:00:00 2001
-From: gbtami <gbtami@gmail.com>
-Date: Wed, 23 Jul 2025 15:50:09 +0200
-Subject: [PATCH 2/2] Use the StreamWriter we already set in
- client_connected_cb
-
----
- lib/pychess/ic/TimeSeal.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/pychess/ic/TimeSeal.py b/lib/pychess/ic/TimeSeal.py
-index 1e99b7218..61b0c197e 100644
---- a/lib/pychess/ic/TimeSeal.py
-+++ b/lib/pychess/ic/TimeSeal.py
-@@ -90,7 +90,7 @@ def cook_some(self, data):
-
- if self.timeseal:
- for i in range(g_count):
-- self._stream_writer.write(
-+ self._stream_reader.writer.write(
- self.encode(bytearray(G_RESPONSE, "utf-8")) + b"\n"
- )
- return data
diff --git a/65f609da762eded553d618d711f944fbfe39d2f5.patch b/65f609da762eded553d618d711f944fbfe39d2f5.patch
deleted file mode 100644
index feec0d2..0000000
--- a/65f609da762eded553d618d711f944fbfe39d2f5.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 65f609da762eded553d618d711f944fbfe39d2f5 Mon Sep 17 00:00:00 2001
-From: gbtami <gbtami@gmail.com>
-Date: Wed, 23 Jul 2025 18:59:44 +0200
-Subject: [PATCH] Heh, 'writer' is 'stream_writer'
-
----
- lib/pychess/ic/TimeSeal.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/pychess/ic/TimeSeal.py b/lib/pychess/ic/TimeSeal.py
-index 61b0c197e..3adacb402 100644
---- a/lib/pychess/ic/TimeSeal.py
-+++ b/lib/pychess/ic/TimeSeal.py
-@@ -90,7 +90,7 @@ def cook_some(self, data):
-
- if self.timeseal:
- for i in range(g_count):
-- self._stream_reader.writer.write(
-+ self._stream_reader.stream_writer.write(
- self.encode(bytearray(G_RESPONSE, "utf-8")) + b"\n"
- )
- return data
diff --git a/pychess.spec b/pychess.spec
index cc65471..2e90532 100644
--- a/pychess.spec
+++ b/pychess.spec
@@ -1,8 +1,10 @@
-%bcond_without docs
-%bcond_without tests
+%bcond docs 1
+%bcond tests 1
+# extras
+%bcond gbulb 1
Name: pychess
-Version: 1.0.5
+Version: 1.1.0
Release: %autorelease
Summary: Chess game for GNOME
@@ -10,32 +12,17 @@ Summary: Chess game for GNOME
License: GPL-3.0-only
URL: http://pychess.github.io
Source0: https://github.com/pychess/pychess/archive/%{version}/%{name}-%{version}.tar.gz
-# PR#2235 Python 3.13: Drop use of telnetlib
-# https://github.com/pychess/pychess/pull/2235
-Patch: 0001-TimeSeal.py-make-IAC_WONT_ECHO-a-literal-as-telnetli.patch
-# PR #2361 Adjust test usage of get_event_loop() for Python 3.14 changes
-# Backported to 1.0.3
-# https://github.com/pychess/pychess/pull/2361
-Patch: 0001-Adjust-test-usage-of-get_event_loop-for-Python-3.14-.patch
-# Fix run_tests.py so it exits 1 on failure
-# https://github.com/pychess/pychess/pull/2359
-Patch: 2359.patch
-# Fix some async test failures
-# https://github.com/pychess/pychess/pull/2362
-Patch: 2362.patch
-# Initial incorrect fix for FICS issues with Python 3.13+
-# https://github.com/pychess/pychess/pull/2364
-Patch: 2364.patch
-# Corrected fix for FICS issues with Python 3.13+
-# https://github.com/pychess/pychess/commit/65f609da762eded553d618d711f944fbfe39d2f5
-Patch: 65f609da762eded553d618d711f944fbfe39d2f5.patch
BuildArch: noarch
+BuildRequires: pyproject-rpm-macros
BuildRequires: python3-devel
-BuildRequires: python3-gobject
+BuildRequires: python3-pip
+BuildRequires: python3-pytest
BuildRequires: python3dist(setuptools)
BuildRequires: python3dist(pexpect)
BuildRequires: python3dist(sqlalchemy) >= 2
+BuildRequires: python3-gobject
+BuildRequires: gobject-introspection
BuildRequires: gtk3
BuildRequires: librsvg2
BuildRequires: gettext
@@ -48,31 +35,33 @@ BuildRequires: python3dist(psutil)
BuildRequires: python3dist(websockets)
%endif
%if %{with docs}
-BuildRequires: python3dist(mock)
BuildRequires: python3dist(sphinx)
BuildRequires: python3-sphinx_rtd_theme
BuildRequires: python3-docs
-Suggests: %{name}-doc
%endif
%if %{with tests}
-BuildRequires: /usr/bin/xvfb-run
-BuildRequires: python3dist(coverage)
-BuildRequires: gtksourceview3
+BuildRequires: xwayland-run
+BuildRequires: gtksourceview4
BuildRequires: stockfish
%endif
+%if %{with gbulb}
+BuildRequires: python3dist(gbulb)
+%endif
-Requires: python3dist(psutil)
-Requires: python3dist(sqlalchemy) >= 2
-Requires: python3dist(websockets)
-# gnome-settings-daemon
-Requires: python3-gobject
-Requires: librsvg2
Requires: hicolor-icon-theme
+# gi.repository deps
+Requires: gobject-introspection
+Requires: gtk3
+Requires: librsvg2
Requires: python3-gstreamer1
# for editing .pgn files
-Requires: gtksourceview3
-
+Requires: gtksourceview4
+# chess engines
+Recommends: dreamchess-engine
+Recommends: fruit
+Recommends: gnuchess
Recommends: stockfish
+Recommends: toga2
%description
PyChess is a GTK+ chess game for Linux. It is designed to at the same time
@@ -90,6 +79,11 @@ This package contains additional documentation for PyChess.
%endif
+%if %{with gbulb}
+%pyproject_extras_subpkg -n %{name} gbulb
+%endif
+
+
%prep
%autosetup -n %{name}-%{version} -p1
@@ -110,10 +104,11 @@ sed -r \
-i docs/conf.py
%endif
+
%build
PYTHONPATH=${PWD}/lib %{python3} pgn2ecodb.py
PYTHONPATH=${PWD}/lib %{python3} create_theme_preview.py
-%py3_build
+%pyproject_wheel
%if %{with docs}
# generate html docs
PYTHONPATH=${PWD}/lib sphinx-build-3 docs html
@@ -121,7 +116,8 @@ PYTHONPATH=${PWD}/lib sphinx-build-3 docs html
%install
-%py3_install
+%pyproject_install
+%pyproject_save_files -l %{name}
desktop-file-install --delete-original \
--dir=%{buildroot}%{_datadir}/applications \
@@ -136,26 +132,26 @@ appstream-util validate-relax --nonet \
%if %{with tests}
%check
+# these tests hang
+rm -f testing/{dialogs,fics*,savegame}.py
+# this test requires network access
+rm -f testing/remotegame.py
# run tests
-pushd testing
-PYCHESS_UNITTEST=true PYTHONPATH=../lib xvfb-run -a %{python3} ./run_tests.py
+PYCHESS_UNITTEST=true PYTHONPATH=lib xwfb-run -- pytest testing/*.py
%endif
-%files -f %{name}.lang
+%files -f %{name}.lang -f %{pyproject_files}
%doc README.md AUTHORS ARTISTS DOCUMENTERS TRANSLATORS
%doc utilities
-%license LICENSE
-%{python3_sitelib}/%{name}
-%{python3_sitelib}/%{name}-%{version}-py%{python3_version}.egg-info
%{_bindir}/%{name}
%{_datadir}/%{name}
-%{_datadir}/gtksourceview-3.0/language-specs/pgn.lang
-%{_datadir}/applications/*
-%{_datadir}/icons/hicolor/*/apps/*
+%{_datadir}/gtksourceview-4/language-specs/pgn.lang
+%{_datadir}/applications/%{name}.desktop
+%{_datadir}/icons/hicolor/*/apps/%{name}.*
%{_datadir}/mime/packages/%{name}.xml
-%{_mandir}/man?/*
-%{_metainfodir}/*.metainfo.xml
+%{_mandir}/man1/%{name}.1*
+%{_metainfodir}/%{name}.metainfo.xml
%if %{with docs}
diff --git a/sources b/sources
index 0c3527b..0a071c2 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pychess-1.0.5.tar.gz) = e2c10e8d6885e85e65c28ced057fbfc3525d151441d8be73501ed025accda47e691c6b0fb49cf1181983225fdb14d538358a1777e2d65f7738537056746263ee
+SHA512 (pychess-1.1.0.tar.gz) = 8a5f34e4fd1aea5347f5f2e85effb511702dc382094be943f400eba14ac71920f10bc338bc7c2128cbc404477d6158d0920b061390efc242a6a389ee22d1a251
reply other threads:[~2026-08-04 22:48 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=178588368310.1.5021466455645117151.rpms-pychess-ba918865285a@fedoraproject.org \
--to=yselkowi@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