From 2d599f67cf0f0f7da8ae4b118aa633ca25de1aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 23 Oct 2023 16:49:01 +0200 Subject: [PATCH] Replace pkg_resources by importlib pkg_resources is deprecated in favor of importlib.resources, importlib.metadata. --- tryton/tryton/config.py | 23 +++++++++++++++++------ tryton/tryton/translate.py | 13 +++++++++---- trytond/setup.py | 1 + trytond/trytond/backend/__init__.py | 8 +++----- trytond/trytond/modules/__init__.py | 17 ++++++----------- trytond/trytond/tests/__init__.py | 14 ++++++-------- trytond/trytond/tests/test_tryton.py | 5 ----- 7 files changed, 42 insertions(+), 39 deletions(-) diff --git a/tryton/tryton/config.py b/tryton/tryton/config.py index 8c8bedb782..249c01b3ac 100644 --- a/tryton/tryton/config.py +++ b/tryton/tryton/config.py @@ -227,14 +227,25 @@ if not isinstance(CURRENT_DIR, str): PIXMAPS_DIR = os.path.join(CURRENT_DIR, 'data', 'pixmaps', 'tryton') if not os.path.isdir(PIXMAPS_DIR): - # do not import when frozen - import pkg_resources - PIXMAPS_DIR = pkg_resources.resource_filename( - 'tryton', 'data/pixmaps/tryton') + try: + import importlib.resources + ref = importlib.resources.files('tryton') / 'data/pixmaps/tryton' + with importlib.resources.as_file(ref) as path: + PIXMAPS_DIR = path + except ImportError: + import pkg_resources + PIXMAPS_DIR = pkg_resources.resource_filename( + 'tryton', 'data/pixmaps/tryton') SOUNDS_DIR = os.path.join(CURRENT_DIR, 'data', 'sounds') if not os.path.isdir(SOUNDS_DIR): - import pkg_resources - SOUNDS_DIR = pkg_resources.resource_filename('tryton', 'data/sounds') + try: + import importlib.resources + ref = importlib.resources.files('tryton') / 'data/sounds' + with importlib.resources.as_file(ref) as path: + SOUNDS_DIR = path + except ImportError: + import pkg_resources + SOUNDS_DIR = pkg_resources.resource_filename('tryton', 'data/sounds') TRYTON_ICON = GdkPixbuf.Pixbuf.new_from_file( os.path.join(PIXMAPS_DIR, 'tryton-icon.png')) diff --git a/tryton/tryton/translate.py b/tryton/tryton/translate.py index ee8a852f70..475cd967ef 100644 --- a/tryton/tryton/translate.py +++ b/tryton/tryton/translate.py @@ -154,10 +154,15 @@ def setlang(lang=None, locale_dict=None): "Set language" locale_dir = os.path.join(CURRENT_DIR, 'data/locale') if not os.path.isdir(locale_dir): - # do not import when frozen - import pkg_resources - locale_dir = pkg_resources.resource_filename( - 'tryton', 'data/locale') + try: + import importlib.resources + ref = importlib.files('tryton') / 'data/locale' + with importlib.resources.as_file(ref) as path: + locale_dir = path + except ImportError: + import pkg_resources + locale_dir = pkg_resources.resource_filename( + 'tryton', 'data/locale') if lang: encoding = locale.getdefaultlocale()[1] if not encoding: diff --git a/trytond/setup.py b/trytond/setup.py index c4ced1fba7..ca3df7cd72 100755 --- a/trytond/setup.py +++ b/trytond/setup.py @@ -143,6 +143,7 @@ setup(name=name, 'werkzeug >= 0.12', 'passlib >= 1.7.0', 'pytz;python_version<"3.9"', + 'backports.entry-points-selectable;python_version<"3.10"', ], extras_require={ 'test': tests_require, diff --git a/trytond/trytond/backend/__init__.py b/trytond/trytond/backend/__init__.py index 046fccfd83..7218d63567 100644 --- a/trytond/trytond/backend/__init__.py +++ b/trytond/trytond/backend/__init__.py @@ -4,9 +4,9 @@ import importlib import urllib.parse try: - import pkg_resources + from backports.entry_points_selectable import entry_points except ImportError: - pkg_resources = None + from importlib.metadata import entry_points from trytond.config import config @@ -21,9 +21,7 @@ _modname = 'trytond.backend.%s' % name try: _module = importlib.import_module(_modname) except ImportError: - if not pkg_resources: - raise - for ep in pkg_resources.iter_entry_points('trytond.backend', name): + for ep in entry_points().select(group='trytond.backend', name=name): try: _module = ep.load() break diff --git a/trytond/trytond/modules/__init__.py b/trytond/trytond/modules/__init__.py index d987565d0d..2ca1e13693 100644 --- a/trytond/trytond/modules/__init__.py +++ b/trytond/trytond/modules/__init__.py @@ -9,9 +9,9 @@ from collections import defaultdict from glob import iglob try: - import pkg_resources + from backports.entry_points_selectable import entry_points except ImportError: - pkg_resources = None + from importlib.metadata import entry_points from sql import Table from sql.functions import CurrentTimestamp @@ -37,12 +37,8 @@ EGG_MODULES = {} def update_egg_modules(): global EGG_MODULES - try: - import pkg_resources - for ep in pkg_resources.iter_entry_points('trytond.modules'): - EGG_MODULES[ep.name] = ep - except ImportError: - pass + for ep in entry_points().select(group='trytond.modules'): + EGG_MODULES[ep.name] = ep update_egg_modules() @@ -301,9 +297,8 @@ def get_modules(with_test=False): continue if os.path.isdir(OPJ(MODULES_PATH, file)): modules.add(file) - if pkg_resources: - for ep in pkg_resources.iter_entry_points('trytond.modules'): - modules.add(ep.name) + for ep in entry_points().select(group='trytond.modules'): + modules.add(ep.name) if with_test: modules.add('tests') return modules diff --git a/trytond/trytond/tests/__init__.py b/trytond/trytond/tests/__init__.py index 13e8ca5809..f3d7487ece 100644 --- a/trytond/trytond/tests/__init__.py +++ b/trytond/trytond/tests/__init__.py @@ -2,9 +2,9 @@ # this repository contains the full copyright notices and license terms. try: - import pkg_resources + from backports.entry_points_selectable import entry_points except ImportError: - pkg_resources = None + from importlib.metadata import entry_points def register(): @@ -60,9 +60,7 @@ def register(): wizard.register('tests') workflow.register('tests') - if pkg_resources is not None: - entry_points = pkg_resources.iter_entry_points('trytond.tests') - for test_ep in entry_points: - test_module = test_ep.load() - if hasattr(test_module, 'register'): - test_module.register('tests') + for test_ep in entry_points().select(group='trytond.tests'): + test_module = test_ep.load() + if hasattr(test_module, 'register'): + test_module.register('tests') diff --git a/trytond/trytond/tests/test_tryton.py b/trytond/trytond/tests/test_tryton.py index 0ed2576d19..1aec1f070d 100644 --- a/trytond/trytond/tests/test_tryton.py +++ b/trytond/trytond/tests/test_tryton.py @@ -20,11 +20,6 @@ from fnmatch import fnmatchcase from functools import reduce, wraps from itertools import chain -try: - import pkg_resources -except ImportError: - pkg_resources = None - from lxml import etree from sql import Table from werkzeug.test import Client