[Buildroot] [git commit] package/python-gobject: bump to version 3.54.2

Julien Olivain ju.o at free.fr
Wed Sep 17 16:42:50 UTC 2025


commit: https://git.buildroot.net/buildroot/commit/?id=c95f07d59ae6384f4c1e84c41d1742d60a0a4476
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master

License hash changed due to formatting changes:
https://gitlab.gnome.org/GNOME/pygobject/-/commit/e80a612fd78c46c97a9d1f1bb29dc93344e24aba

Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
Signed-off-by: Julien Olivain <ju.o at free.fr>
---
 ...Selector.get_map-look-up-file-objects-by-.patch | 164 ---------------------
 package/python-gobject/python-gobject.hash         |   6 +-
 package/python-gobject/python-gobject.mk           |   4 +-
 3 files changed, 5 insertions(+), 169 deletions(-)

diff --git a/package/python-gobject/0001-gi.events._Selector.get_map-look-up-file-objects-by-.patch b/package/python-gobject/0001-gi.events._Selector.get_map-look-up-file-objects-by-.patch
deleted file mode 100644
index a275abd9c7..0000000000
--- a/package/python-gobject/0001-gi.events._Selector.get_map-look-up-file-objects-by-.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-From 4b97688d527276fc1e835fed71dbb73bbd09ac11 Mon Sep 17 00:00:00 2001
-From: Fiona Klute <fiona.klute at gmx.de>
-Date: Tue, 25 Mar 2025 13:29:04 +0100
-Subject: [PATCH] gi.events._Selector.get_map(): look up file objects by file
- descriptor
-
-File objects and their underlying file descriptors must be treated as
-equivalent for lookup, or one may incorrectly be treated as not
-registered when the other was used for the registration, leading to
-bugs.
-
-Fixes: #689
-Signed-off-by: Fiona Klute <fiona.klute at gmx.de>
-Upstream: https://gitlab.gnome.org/GNOME/pygobject/-/commit/4b97688d527276fc1e835fed71dbb73bbd09ac11
----
- gi/events.py         | 36 +++++++++++++++++++++-----
- tests/test_events.py | 61 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 90 insertions(+), 7 deletions(-)
-
-diff --git a/gi/events.py b/gi/events.py
-index da4775dc..9eba1629 100644
---- a/gi/events.py
-+++ b/gi/events.py
-@@ -28,6 +28,7 @@ import threading
- import selectors
- import weakref
- import warnings
-+from collections.abc import Mapping
- from contextlib import contextmanager
- from . import _ossighelper
- 
-@@ -508,9 +509,33 @@ if sys.platform != 'win32':
-         # Subclass to attach _tag
-         pass
- 
-+    class _FileObjectMapping(Mapping):
-+        def __init__(self, fd_dict):
-+            self.fd_dict = fd_dict
-+
-+        def __len__(self):
-+            return len(self.fd_dict)
-+
-+        def get(self, fileobj, default=None):
-+            fd = _fileobj_to_fd(fileobj)
-+            return self.fd_dict.get(fd, default)
-+
-+        def __getitem__(self, fileobj):
-+            value = self.get(fileobj)
-+            if value is None:
-+                raise KeyError("{!r} is not registered".format(fileobj))
-+            return value
-+
-+        def __iter__(self):
-+            return iter(self.fd_dict)
-+
-     class _Selector(_SelectorMixin, selectors.BaseSelector):
-         """A Selector for gi.events.GLibEventLoop registering python IO with GLib."""
- 
-+        def __init__(self, context, loop):
-+            super().__init__(context, loop)
-+            self._map = _FileObjectMapping(self._fd_to_key)
-+
-         def attach(self):
-             self._source.attach(self._loop._context)
- 
-@@ -559,15 +584,12 @@ if sys.platform != 'win32':
-         # We could override modify, but it is only slightly when the "events" change.
- 
-         def get_key(self, fileobj):
--            fd = _fileobj_to_fd(fileobj)
--            return self._fd_to_key[fd]
-+            return self._map[fileobj]
- 
-         def get_map(self):
--            """Return a mapping of file objects to selector keys."""
--            # Horribly inefficient
--            # It should never be called and exists just to prevent issues if e.g.
--            # python decides to use it for debug purposes.
--            return {k.fileobj: k for k in self._fd_to_key.values()}
-+            """Return a mapping of file objects or file descriptors to
-+            selector keys."""
-+            return self._map
- 
- 
- else:
-diff --git a/tests/test_events.py b/tests/test_events.py
-index a6585468..9dbf3827 100644
---- a/tests/test_events.py
-+++ b/tests/test_events.py
-@@ -46,6 +46,7 @@ import sys
- import gi
- import gi.events
- import asyncio
-+import socket
- import threading
- from gi.repository import GLib, Gio
- 
-@@ -344,3 +345,63 @@ class GLibEventLoopPolicyTests(unittest.TestCase):
-         self.assertEqual(order, [GLib.PRIORITY_HIGH] * 3 +
-                                 [GLib.PRIORITY_DEFAULT] * 3 +
-                                 [GLib.PRIORITY_DEFAULT_IDLE] * 3)
-+
-+    @unittest.skipIf(sys.platform == 'win32', 'add reader/writer not implemented')
-+    def test_source_fileobj_fd(self):
-+        """Regression test for
-+        https://gitlab.gnome.org/GNOME/pygobject/-/issues/689
-+        """
-+        class Echo:
-+            def __init__(self, sock, expect_bytes):
-+                self.sock = sock
-+                self.sent_bytes = 0
-+                self.expect_bytes = expect_bytes
-+                self.done = asyncio.Future()
-+                self.data = bytes()
-+
-+            def send(self):
-+                if self.done.done():
-+                    return
-+                if self.sent_bytes < len(self.data):
-+                    self.sent_bytes += self.sock.send(
-+                        self.data[self.sent_bytes:])
-+                    print('sent', self.data)
-+                if self.sent_bytes >= self.expect_bytes:
-+                    self.done.set_result(None)
-+                    self.sock.shutdown(socket.SHUT_WR)
-+
-+            def recv(self):
-+                if self.done.done():
-+                    return
-+                self.data += self.sock.recv(self.expect_bytes)
-+                print('received', self.data)
-+                if len(self.data) >= self.expect_bytes:
-+                    self.sock.shutdown(socket.SHUT_RD)
-+
-+        async def run():
-+            loop = asyncio.get_running_loop()
-+            s1, s2 = socket.socketpair()
-+            sample = b'Hello!'
-+            e = Echo(s1, len(sample))
-+            # register using file object and file descriptor
-+            loop.add_reader(s1, e.recv)
-+            loop.add_writer(s1.fileno(), e.send)
-+            s2.sendall(sample)
-+            await asyncio.wait_for(e.done, timeout=2.0)
-+            echo = bytes()
-+            for _ in range(len(sample)):
-+                echo += s2.recv(len(sample))
-+                if len(echo) == len(sample):
-+                    break
-+            # remove using file object and file descriptor
-+            loop.remove_reader(s1)
-+            loop.remove_writer(s1.fileno())
-+            s1.close()
-+            s2.close()
-+            # check if the data was echoed correctly
-+            self.assertEqual(sample, echo)
-+
-+        policy = self.create_policy()
-+        loop = policy.get_event_loop()
-+        loop.run_until_complete(run())
-+        loop.close()
--- 
-2.49.0
-
diff --git a/package/python-gobject/python-gobject.hash b/package/python-gobject/python-gobject.hash
index e49c7ddd08..be19fc1900 100644
--- a/package/python-gobject/python-gobject.hash
+++ b/package/python-gobject/python-gobject.hash
@@ -1,3 +1,3 @@
-# from https://download.gnome.org/sources/pygobject/3.52/pygobject-3.52.3.sha256sum
-sha256  00e427d291e957462a8fad659a9f9c8be776ff82a8b76bdf402f1eaeec086d82  pygobject-3.52.3.tar.gz
-sha256  32434afcc8666ba060e111d715bfdb6c2d5dd8a35fa4d3ab8ad67d8f850d2f2b  COPYING
+# from https://download.gnome.org/sources/pygobject/3.54/pygobject-3.54.2.sha256sum
+sha256  03cffeb49d8a1879b621d8f606ac904218019a0ae699b1cd3780a8ee611e696b  pygobject-3.54.2.tar.gz
+sha256  f4cac31434b287b10a70b81c62cfa973d250417f8f248c4c1b5566d061ecfb2f  COPYING
diff --git a/package/python-gobject/python-gobject.mk b/package/python-gobject/python-gobject.mk
index 3021937887..0d96c299cf 100644
--- a/package/python-gobject/python-gobject.mk
+++ b/package/python-gobject/python-gobject.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-PYTHON_GOBJECT_VERSION_MAJOR = 3.52
-PYTHON_GOBJECT_VERSION = $(PYTHON_GOBJECT_VERSION_MAJOR).3
+PYTHON_GOBJECT_VERSION_MAJOR = 3.54
+PYTHON_GOBJECT_VERSION = $(PYTHON_GOBJECT_VERSION_MAJOR).2
 PYTHON_GOBJECT_SOURCE = pygobject-$(PYTHON_GOBJECT_VERSION).tar.gz
 PYTHON_GOBJECT_SITE = https://download.gnome.org/sources/pygobject/$(PYTHON_GOBJECT_VERSION_MAJOR)
 PYTHON_GOBJECT_LICENSE = LGPL-2.1+


More information about the buildroot mailing list