summaryrefslogtreecommitdiff
path: root/dev-python/pygobject/files/pygobject-3.40.1-dynamicimporter-py310.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/pygobject/files/pygobject-3.40.1-dynamicimporter-py310.patch')
-rw-r--r--dev-python/pygobject/files/pygobject-3.40.1-dynamicimporter-py310.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/dev-python/pygobject/files/pygobject-3.40.1-dynamicimporter-py310.patch b/dev-python/pygobject/files/pygobject-3.40.1-dynamicimporter-py310.patch
new file mode 100644
index 000000000000..341a096767b6
--- /dev/null
+++ b/dev-python/pygobject/files/pygobject-3.40.1-dynamicimporter-py310.patch
@@ -0,0 +1,63 @@
+From 1ae65be0f7e621002e2e29921e0252c1b57a170c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Sun, 20 Jun 2021 17:54:52 +0200
+Subject: [PATCH] Implement PEP451 semantics for DynamicImporter
+
+Make DynamicImporter PEP451-compliant in order to silence ImportWarnings
+in Python 3.10. This is mostly based on six._SixMetaPathImporter.
+
+Fixes #476
+---
+ gi/importer.py | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/gi/importer.py b/gi/importer.py
+index 32967974..006cf464 100644
+--- a/gi/importer.py
++++ b/gi/importer.py
+@@ -24,6 +24,7 @@
+ import sys
+ import warnings
+ import importlib
++import importlib.util
+ from contextlib import contextmanager
+
+ import gi
+@@ -103,6 +104,7 @@ def get_import_stacklevel(import_hook):
+ class DynamicImporter(object):
+
+ # Note: see PEP302 for the Importer Protocol implemented below.
++ # PEP451 for A ModuleSpec Type for the Import System.
+
+ def __init__(self, path):
+ self.path = path
+@@ -117,6 +119,16 @@ class DynamicImporter(object):
+
+ return self
+
++ def find_spec(self, fullname, path, target=None):
++ if not fullname.startswith(self.path):
++ return None
++
++ path, namespace = fullname.rsplit('.', 1)
++ if path != self.path:
++ return None
++
++ return importlib.util.spec_from_loader(fullname, self)
++
+ def load_module(self, fullname):
+ if fullname in sys.modules:
+ return sys.modules[fullname]
+@@ -149,3 +161,9 @@ class DynamicImporter(object):
+ sys.modules[fullname] = dynamic_module
+
+ return dynamic_module
++
++ def create_module(self, spec):
++ return self.load_module(spec.name)
++
++ def exec_module(self, module):
++ pass
+--
+2.32.0
+