mirror of
https://github.com/ChristianLight/tutor.git
synced 2025-01-10 00:37:54 +00:00
fix: remove pkg_resources for python 3.12 compatibility
pkg_resources is available in python 3.12 only if setuptools is explicitely installed, which is not always the case. We fix that by replacing all usage of pkg_resources with importlib_resources and importlib_metadata. Close #966
This commit is contained in:
parent
4a30c4ab35
commit
d99b2feeb3
@ -0,0 +1 @@
|
||||
[Depreciation] Replace pkg_resources with importlib_metadata and importlib_resources. (by @Danyal-Faheem)
|
@ -6,3 +6,5 @@ mypy
|
||||
pycryptodome>=3.17.0
|
||||
pyyaml>=6.0
|
||||
typing-extensions>=4.4.0
|
||||
importlib-metadata>=7.0.1
|
||||
importlib-resources>=6.1.1
|
||||
|
@ -20,6 +20,10 @@ google-auth==2.23.3
|
||||
# via kubernetes
|
||||
idna==3.4
|
||||
# via requests
|
||||
importlib-metadata==7.0.1
|
||||
# via -r requirements/base.in
|
||||
importlib-resources==6.1.1
|
||||
# via -r requirements/base.in
|
||||
jinja2==3.1.3
|
||||
# via -r requirements/base.in
|
||||
kubernetes==28.1.0
|
||||
@ -72,3 +76,7 @@ urllib3==1.26.18
|
||||
# requests
|
||||
websocket-client==1.6.4
|
||||
# via kubernetes
|
||||
zipp==3.17.0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
@ -58,14 +58,17 @@ idna==3.4
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
# requests
|
||||
importlib-metadata==6.8.0
|
||||
importlib-metadata==7.0.1
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
# build
|
||||
# keyring
|
||||
# pyinstaller
|
||||
# twine
|
||||
importlib-resources==6.1.1
|
||||
# via keyring
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
# keyring
|
||||
isort==5.12.0
|
||||
# via pylint
|
||||
jaraco-classes==3.3.0
|
||||
@ -232,6 +235,7 @@ wheel==0.41.2
|
||||
# via pip-tools
|
||||
zipp==3.17.0
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
|
@ -42,8 +42,12 @@ idna==3.4
|
||||
# requests
|
||||
imagesize==1.4.1
|
||||
# via sphinx
|
||||
importlib-metadata==6.8.0
|
||||
# via sphinx
|
||||
importlib-metadata==7.0.1
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
# sphinx
|
||||
importlib-resources==6.1.1
|
||||
# via -r requirements/base.txt
|
||||
jinja2==3.1.3
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
@ -153,4 +157,7 @@ websocket-client==1.6.4
|
||||
# -r requirements/base.txt
|
||||
# kubernetes
|
||||
zipp==3.17.0
|
||||
# via importlib-metadata
|
||||
# via
|
||||
# -r requirements/base.txt
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
@ -1,7 +1,7 @@
|
||||
# -*- mode: python -*-
|
||||
import importlib
|
||||
import os
|
||||
import pkg_resources
|
||||
from importlib_metadata
|
||||
|
||||
block_cipher = None
|
||||
|
||||
@ -10,10 +10,10 @@ hidden_imports = []
|
||||
|
||||
# Auto-discover plugins and include patches & templates folders
|
||||
for entrypoint_version in ["tutor.plugin.v0", "tutor.plugin.v1"]:
|
||||
for entrypoint in pkg_resources.iter_entry_points(entrypoint_version):
|
||||
for entrypoint in importlib_metadata.entry_points(group=entrypoint_version):
|
||||
plugin_name = entrypoint.name
|
||||
try:
|
||||
plugin = entrypoint.load()
|
||||
plugin = importlib.import_module(entrypoint.value)
|
||||
except Exception as e:
|
||||
print(f"ERROR Failed to load plugin {plugin_name}: {e}")
|
||||
continue
|
||||
|
@ -7,13 +7,13 @@ import typing as t
|
||||
from copy import deepcopy
|
||||
|
||||
import jinja2
|
||||
import pkg_resources
|
||||
import importlib_resources
|
||||
|
||||
from tutor import exceptions, fmt, hooks, plugins, utils
|
||||
from tutor.__about__ import __app__, __version__
|
||||
from tutor.types import Config, ConfigValue
|
||||
|
||||
TEMPLATES_ROOT = pkg_resources.resource_filename("tutor", "templates")
|
||||
TEMPLATES_ROOT = str(importlib_resources.files("tutor") / "templates")
|
||||
VERSION_FILENAME = "version"
|
||||
BIN_FILE_EXTENSIONS = [
|
||||
".ico",
|
||||
|
@ -5,7 +5,7 @@ import typing as t
|
||||
from glob import glob
|
||||
|
||||
import click
|
||||
import pkg_resources
|
||||
import importlib_metadata
|
||||
|
||||
from tutor import env, exceptions, fmt, hooks, serialize
|
||||
from tutor.__about__ import __app__
|
||||
@ -246,12 +246,12 @@ class EntrypointPlugin(BasePlugin):
|
||||
|
||||
ENTRYPOINT = "tutor.plugin.v0"
|
||||
|
||||
def __init__(self, entrypoint: pkg_resources.EntryPoint) -> None:
|
||||
self.loader: pkg_resources.EntryPoint
|
||||
def __init__(self, entrypoint: importlib_metadata.EntryPoint) -> None:
|
||||
self.loader: importlib_metadata.EntryPoint = entrypoint
|
||||
super().__init__(entrypoint.name, entrypoint)
|
||||
|
||||
def _load_obj(self) -> None:
|
||||
self.obj = self.loader.load()
|
||||
self.obj = importlib.import_module(self.loader.value)
|
||||
|
||||
def _version(self) -> t.Optional[str]:
|
||||
if not self.loader.dist:
|
||||
@ -260,12 +260,11 @@ class EntrypointPlugin(BasePlugin):
|
||||
|
||||
@classmethod
|
||||
def discover_all(cls) -> None:
|
||||
for entrypoint in pkg_resources.iter_entry_points(cls.ENTRYPOINT):
|
||||
entrypoints = importlib_metadata.entry_points(group=cls.ENTRYPOINT)
|
||||
for entrypoint in entrypoints:
|
||||
try:
|
||||
error: t.Optional[str] = None
|
||||
cls(entrypoint)
|
||||
except pkg_resources.VersionConflict as e:
|
||||
error = e.report()
|
||||
except Exception as e: # pylint: disable=broad-except
|
||||
error = str(e)
|
||||
if error:
|
||||
|
@ -2,7 +2,7 @@ import importlib.util
|
||||
import os
|
||||
from glob import glob
|
||||
|
||||
import pkg_resources
|
||||
import importlib_metadata
|
||||
|
||||
from tutor import hooks
|
||||
|
||||
@ -26,7 +26,7 @@ def _discover_entrypoint_plugins() -> None:
|
||||
"""
|
||||
with hooks.Contexts.PLUGINS.enter():
|
||||
if "TUTOR_IGNORE_ENTRYPOINT_PLUGINS" not in os.environ:
|
||||
for entrypoint in pkg_resources.iter_entry_points("tutor.plugin.v1"):
|
||||
for entrypoint in importlib_metadata.entry_points(group="tutor.plugin.v1"):
|
||||
discover_package(entrypoint)
|
||||
|
||||
|
||||
@ -56,7 +56,7 @@ def discover_module(path: str) -> None:
|
||||
spec.loader.exec_module(module)
|
||||
|
||||
|
||||
def discover_package(entrypoint: pkg_resources.EntryPoint) -> None:
|
||||
def discover_package(entrypoint: importlib_metadata.EntryPoint) -> None:
|
||||
"""
|
||||
Install a plugin from a python package.
|
||||
"""
|
||||
@ -68,10 +68,11 @@ def discover_package(entrypoint: pkg_resources.EntryPoint) -> None:
|
||||
# Add plugin information
|
||||
if entrypoint.dist is None:
|
||||
raise ValueError(f"Could not read plugin version: {name}")
|
||||
hooks.Filters.PLUGINS_INFO.add_item((name, entrypoint.dist.version))
|
||||
dist_version = entrypoint.dist.version if entrypoint.dist else "Unknown"
|
||||
hooks.Filters.PLUGINS_INFO.add_item((name, dist_version))
|
||||
|
||||
# Import module on enable
|
||||
@hooks.Actions.PLUGIN_LOADED.add()
|
||||
def load(plugin_name: str) -> None:
|
||||
if name == plugin_name:
|
||||
entrypoint.load()
|
||||
importlib.import_module(entrypoint.value)
|
||||
|
Loading…
Reference in New Issue
Block a user