diff --git a/changelog.d/20240212_115536_regis_pkg_resources.md b/changelog.d/20240212_115536_regis_pkg_resources.md new file mode 100644 index 0000000..35b6d20 --- /dev/null +++ b/changelog.d/20240212_115536_regis_pkg_resources.md @@ -0,0 +1 @@ +- [Bugfix] Make plugin compatible with Python 3.12 by removing dependency on `pkg_resources`. (by @regisb) diff --git a/tutornotes/plugin.py b/tutornotes/plugin.py index dd18a50..fe2e5a3 100644 --- a/tutornotes/plugin.py +++ b/tutornotes/plugin.py @@ -4,7 +4,7 @@ import typing as t from glob import glob -import pkg_resources +import importlib_resources from tutor import hooks as tutor_hooks from tutor.__about__ import __version_suffix__ @@ -31,19 +31,17 @@ }, } -# Initialization hooks -MY_INIT_TASKS: list[tuple[str, tuple[str, ...]]] = [ - ("mysql", ("notes", "tasks", "mysql", "init")), - ("lms", ("notes", "tasks", "lms", "init")), - ("notes", ("notes", "tasks", "notes", "init")), -] - -# For each task added to MY_INIT_TASKS, we load the task template +# For each service, we load the task template # and add it to the CLI_DO_INIT_TASKS filter, which tells Tutor to # run it as part of the `init` job. -for service, template_path in MY_INIT_TASKS: - full_path: str = pkg_resources.resource_filename( - "tutornotes", os.path.join("templates", *template_path) +for service in ["mysql", "lms", "notes"]: + full_path: str = str( + importlib_resources.files("tutornotes") + / "templates" + / "notes" + / "tasks" + / service + / "init" ) with open(full_path, encoding="utf-8") as init_task_file: init_task: str = init_task_file.read() @@ -91,7 +89,7 @@ def _mount_edx_notes_api( # Add the "templates" folder as a template root tutor_hooks.Filters.ENV_TEMPLATE_ROOTS.add_item( - pkg_resources.resource_filename("tutornotes", "templates") + str(importlib_resources.files("tutornotes") / "templates") ) # Render the "build" and "apps" folders tutor_hooks.Filters.ENV_TEMPLATE_TARGETS.add_items( @@ -101,12 +99,7 @@ def _mount_edx_notes_api( ], ) # Load patches from files -for path in glob( - os.path.join( - pkg_resources.resource_filename("tutornotes", "patches"), - "*", - ) -): +for path in glob(str(importlib_resources.files("tutornotes") / "patches" / "*")): with open(path, encoding="utf-8") as patch_file: tutor_hooks.Filters.ENV_PATCHES.add_item( (os.path.basename(path), patch_file.read())