From 0b128ba997c6a1a625029da1044144c9c0a29aa8 Mon Sep 17 00:00:00 2001 From: James Stevenson Date: Fri, 24 May 2024 10:26:19 -0400 Subject: [PATCH] refactor: use importlib instead of pkg_resources (#738) --- pyproject.toml | 1 + src/hgvs/__init__.py | 7 +++---- src/hgvs/config.py | 10 ++++++---- tests/test_hgvs_grammar_full.py | 8 +++++--- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 840870aa..8d96944e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ dependencies=[ "biocommons.seqrepo >= 0.6.5", "bioutils >= 0.4.0,<1.0", "configparser >= 3.3.0", + "importlib_resources", "ipython", "parsley", "psycopg2", diff --git a/src/hgvs/__init__.py b/src/hgvs/__init__.py index edff9b6f..7535da0b 100644 --- a/src/hgvs/__init__.py +++ b/src/hgvs/__init__.py @@ -53,8 +53,7 @@ import re import sys import warnings - -import pkg_resources +from importlib import metadata from .config import global_config # noqa (importing symbol) @@ -71,11 +70,11 @@ _is_released_version = False try: - __version__ = pkg_resources.get_distribution("hgvs").version + __version__ = metadata.version("hgvs") # TODO: match other valid release tags, like .post\d+ if re.match(r"^\d+\.\d+\.\d+$", __version__) is not None: _is_released_version = True -except pkg_resources.DistributionNotFound: +except metadata.PackageNotFoundError: warnings.warn("can't get __version__ because %s package isn't installed" % __package__, Warning) __version__ = None diff --git a/src/hgvs/config.py b/src/hgvs/config.py index 1ff551cb..ff05ac16 100644 --- a/src/hgvs/config.py +++ b/src/hgvs/config.py @@ -31,8 +31,10 @@ import re from configparser import ConfigParser, ExtendedInterpolation from copy import copy - -from pkg_resources import resource_stream +try: + from importlib.resources import files as resources_files +except ImportError: + from importlib_resources import files as resources_files logger = logging.getLogger(__name__) @@ -53,7 +55,7 @@ def __init__(self, extended_interpolation=True): def read_stream(self, flo): """read configuration from ini-formatted file-like object""" - self._cp.read_string(flo.read().decode("ascii")) + self._cp.read_string(flo.open("rb").read().decode("ascii")) def __copy__(self): new_config = Config.__new__(Config) @@ -116,6 +118,6 @@ def _val_xform(v): _default_config = Config() -_default_config.read_stream(resource_stream(__name__, "_data/defaults.ini")) +_default_config.read_stream(resources_files(__package__) / "_data" / "defaults.ini") global_config = copy(_default_config) diff --git a/tests/test_hgvs_grammar_full.py b/tests/test_hgvs_grammar_full.py index d515325c..5c55c4c6 100644 --- a/tests/test_hgvs_grammar_full.py +++ b/tests/test_hgvs_grammar_full.py @@ -4,8 +4,10 @@ import re import unittest from sys import version_info - -import pkg_resources +try: + from importlib.resources import files as resources_files +except ImportError: + from importlib_resources import files as resources_files # # Tests of the grammar @@ -52,7 +54,7 @@ def test_parser_test_completeness(self): """ensure that all rules in grammar have tests""" grammar_rule_re = re.compile(r"^(\w+)") - grammar_fn = pkg_resources.resource_filename("hgvs", "_data/hgvs.pymeta") + grammar_fn = resources_files("hgvs") / "_data" / "hgvs.pymeta" with open(grammar_fn, "r") as f: grammar_rules = set(r.group(1) for r in filter(None, map(grammar_rule_re.match, f)))