File use-importlib.patch of Package python-visvis

commit 75a2ccb272c654493db7551ac1e16db484e4ce70
Author: Steve Kowalik <steven@wedontsleep.org>
Date:   Thu Mar 14 10:28:18 2024 +1100

    Limit use of imp module, prefer importlib
    
    Python 3.12 removes the imp module entirely, which causes most backend
    imports to fail. Switch to using importlib machinery to load modules,
    and retain Python 2.7 compatibility, since the importlib implementation
    should work for Pyton 3.5+.

diff --git a/backends/__init__.py b/backends/__init__.py
index 5911b2a..bcbf04c 100644
--- a/backends/__init__.py
+++ b/backends/__init__.py
@@ -50,10 +50,24 @@ The backend is chosen/selected as follows:
 
 import os
 import sys
-import imp
 import visvis
 from visvis.core.misc import isFrozen, getExceptionInstance
 
+
+try:
+    import importlib.util
+    import importlib.machinery
+    def load_source(modname, filename):
+        loader = importlib.machinery.SourceFileLoader(modname, filename)
+        spec = importlib.util.spec_from_file_location(
+            modname, filename, loader=loader)
+        module = importlib.util.module_from_spec(spec)
+        loader.exec_module(module)
+        return module
+except ImportError:
+    from imp import load_source
+
+
 # The order in which to try loading a backend (foo is a dummy backend)
 backendOrder = ['glfw', 'pyside6', 'pyqt5', 'pyside2', 'pyside', 'pyqt4', 'wx', 'gtk', 'fltk']
 backendMap = {'glfw': 'glfw',
@@ -161,7 +175,7 @@ def _loadBackend(name):
         if modFileName.endswith('.pyc'):
             module = __import__(modNameFull, fromlist=[modName])
         else:
-            module = imp.load_source(modNameFull, modFileName)
+            module = load_source(modNameFull, modFileName)
         globals()[modName] = module
     except Exception:
         if not isFrozen():
openSUSE Build Service is sponsored by