73 lines
2.5 KiB
Diff
73 lines
2.5 KiB
Diff
From a8b6f6bb34864a6821174edbf7802b689e440db3 Mon Sep 17 00:00:00 2001
|
|
From: LuK1337 <priv.luk@gmail.com>
|
|
Date: Wed, 23 Aug 2023 17:13:23 +0200
|
|
Subject: [PATCH] Fix startup on Python 3.12
|
|
|
|
---
|
|
quodlibet/_import.py | 6 ++++++
|
|
quodlibet/util/config.py | 2 +-
|
|
quodlibet/util/importhelper.py | 6 +++---
|
|
3 files changed, 10 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/quodlibet/_import.py b/quodlibet/_import.py
|
|
index 5e76b67295..22bd5e3140 100644
|
|
--- a/quodlibet/_import.py
|
|
+++ b/quodlibet/_import.py
|
|
@@ -8,6 +8,7 @@
|
|
|
|
import sys
|
|
import importlib
|
|
+import importlib.util
|
|
|
|
|
|
class RedirectImportHook:
|
|
@@ -31,6 +32,11 @@ def __init__(self, name, packages):
|
|
self._name = name
|
|
self._packages = packages
|
|
|
|
+ def find_spec(self, fullname, path, target=None):
|
|
+ loader = self.find_module(fullname, path)
|
|
+ if loader is not None:
|
|
+ return importlib.util.spec_from_loader(fullname, loader)
|
|
+
|
|
def find_module(self, fullname, path=None):
|
|
package = fullname.split(".")[0]
|
|
if package in self._packages:
|
|
diff --git a/quodlibet/util/config.py b/quodlibet/util/config.py
|
|
index 1c214ac0b4..f0688f9bf9 100644
|
|
--- a/quodlibet/util/config.py
|
|
+++ b/quodlibet/util/config.py
|
|
@@ -377,7 +377,7 @@ def read(self, filename):
|
|
with open(filename, "rb") as fileobj:
|
|
fileobj = StringIO(
|
|
fileobj.read().decode("utf-8", "surrogateescape"))
|
|
- self._config.readfp(fileobj, filename)
|
|
+ self._config.read_file(fileobj, filename)
|
|
except (IOError, OSError):
|
|
return
|
|
|
|
diff --git a/quodlibet/util/importhelper.py b/quodlibet/util/importhelper.py
|
|
index f14b11f4b6..c82ded5878 100644
|
|
--- a/quodlibet/util/importhelper.py
|
|
+++ b/quodlibet/util/importhelper.py
|
|
@@ -92,8 +92,8 @@ def load_module(name, package, path):
|
|
except KeyError:
|
|
pass
|
|
|
|
- loader = importlib.find_loader(fullname, [path])
|
|
- if loader is None:
|
|
+ spec = importlib.machinery.PathFinder.find_spec(fullname, [path])
|
|
+ if spec is None:
|
|
return
|
|
|
|
# modules need a parent package
|
|
@@ -101,7 +101,7 @@ def load_module(name, package, path):
|
|
spec = importlib.machinery.ModuleSpec(package, None, is_package=True)
|
|
sys.modules[package] = importlib.util.module_from_spec(spec)
|
|
|
|
- mod = loader.load_module(fullname)
|
|
+ mod = spec.loader.load_module(fullname)
|
|
|
|
# make it accessible from the parent, like __import__ does
|
|
vars(sys.modules[package])[name] = mod
|