Skip to content

Commit 872cabe

Browse files
committed
remove last usage of pkg_resources
1 parent 1487339 commit 872cabe

File tree

11 files changed

+48
-27
lines changed

11 files changed

+48
-27
lines changed

mypy-requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
mypy[mypyc]==1.7.0 # update pyproject.toml as well
22
black>=19.10b0
3-
types-pkg_resources
43
types-requests
54
types-dataclasses
65
objgraph

pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ requires = [
44
"setuptools_scm[toml]>=8.0.4,<9",
55
'mypy[mypyc]==1.7.0', # update mypy-requirements as well
66
"black>=19.10b0,<23.12",
7-
"types-pkg_resources",
87
"types-requests",
98
"types-dataclasses",
10-
"importlib_resources>=1.4", # equivalent to Python 3.9
9+
"importlib_resources>=1.4;python_version<'3.9'",
1110
"ruamel.yaml>=0.17.6, < 0.19",
1211
"types-setuptools"
1312
]

requirements.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@ mistune>=2.0.3,<2.1
55
CacheControl[filecache]>= 0.11.7, < 0.14
66
black>=19.10b0,<23.12
77
mypy_extensions
8-
importlib_resources>=1.4
9-
# ^^ equivalent to Python 3.9
8+
importlib_resources>=1.4;python_version<'3.9'

schema_salad/dotnet_codegen.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@
1616
)
1717
from xml.sax.saxutils import escape # nosec
1818

19-
from importlib_resources import files
20-
2119
from . import _logger, schema
2220
from .codegen_base import CodeGenBase, LazyInitDef, TypeDef
2321
from .exceptions import SchemaException
2422
from .java_codegen import _ensure_directory_and_write, _safe_makedirs
2523
from .schema import shortname
24+
from .utils import Traversable, files
2625

2726

2827
def doc_to_doc_string(doc: Optional[str], indent_level: int = 0) -> str:
@@ -907,7 +906,7 @@ def epilogue(self, root_loader: TypeDef) -> None:
907906
license_name="Apache License, Version 2.0",
908907
)
909908

910-
def template_from_resource(resource: Path) -> string.Template:
909+
def template_from_resource(resource: Traversable) -> string.Template:
911910
template_str = resource.read_text("utf-8")
912911
template = string.Template(template_str)
913912
return template

schema_salad/java_codegen.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616
Union,
1717
)
1818

19-
from importlib_resources import files
20-
2119
from . import _logger, schema
2220
from .codegen_base import CodeGenBase, LazyInitDef, TypeDef
2321
from .exceptions import SchemaException
2422
from .schema import shortname
23+
from .utils import Traversable, files
2524

2625
# experiment at providing more typed objects building a optional type that allows
2726
# referencing one or a list of objects. It is useful for improving the RootLoader
@@ -885,7 +884,7 @@ def epilogue(self, root_loader: TypeDef) -> None:
885884
license_url="https://www.apache.org/licenses/LICENSE-2.0.txt",
886885
)
887886

888-
def template_from_resource(resource: Path) -> string.Template:
887+
def template_from_resource(resource: Traversable) -> string.Template:
889888
template_str = resource.read_text("utf-8")
890889
template = string.Template(template_str)
891890
return template

schema_salad/python_codegen.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
"""Python code generator for a given schema salad definition."""
22
import textwrap
33
from io import StringIO
4-
from typing import Any, Dict, IO, List, MutableMapping, MutableSequence, Optional, Set, Union
4+
from typing import (
5+
IO,
6+
Any,
7+
Dict,
8+
List,
9+
MutableMapping,
10+
MutableSequence,
11+
Optional,
12+
Set,
13+
Union,
14+
)
515

616
try:
717
import black
818
except ModuleNotFoundError:
919
black = None # type: ignore[assignment]
1020

11-
from importlib_resources import files
12-
1321
from . import schema
1422
from .codegen_base import CodeGenBase, LazyInitDef, TypeDef
1523
from .exceptions import SchemaException
1624
from .schema import shortname
25+
from .utils import files
1726

1827
_string_type_def = TypeDef("strtype", "_PrimitiveLoader(str)")
1928
_int_type_def = TypeDef("inttype", "_PrimitiveLoader(int)")

schema_salad/schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
)
2020
from urllib.parse import urlparse
2121

22-
from importlib_resources import files
2322
from ruamel.yaml.comments import CommentedMap, CommentedSeq
2423

2524
from schema_salad.utils import (
@@ -28,6 +27,7 @@
2827
add_dictlist,
2928
aslist,
3029
convert_to_dict,
30+
files,
3131
flatten,
3232
json_dumps,
3333
yaml_no_ts,

schema_salad/tests/util.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
"""Shared test functions and attributes."""
2+
import atexit
13
import os
4+
from contextlib import ExitStack
5+
from pathlib import Path
26
from typing import Optional
37

4-
from pkg_resources import Requirement, ResolutionError, resource_filename
5-
68
from schema_salad import ref_resolver
9+
from schema_salad.utils import as_file, files
710

811

912
def get_data(filename: str) -> Optional[str]:
@@ -16,18 +19,21 @@ def get_data(filename: str) -> Optional[str]:
1619
# or else it will cause problem when joining path
1720
filepath = None
1821
try:
19-
filepath = resource_filename(Requirement.parse("schema-salad"), filename)
20-
except ResolutionError:
22+
file_manager = ExitStack()
23+
atexit.register(file_manager.close)
24+
traversable = files("schema-salad") / filename
25+
filepath = file_manager.enter_context(as_file(traversable))
26+
except ModuleNotFoundError:
2127
pass
2228
if not filepath or not os.path.isfile(filepath):
2329
# First try to load it from the local directory, probably ``./tests/``.
24-
filepath = os.path.join(os.path.dirname(__file__), filename)
25-
if not os.path.isfile(filepath):
30+
filepath = Path(os.path.dirname(__file__)) / filename
31+
if not filepath.is_file():
2632
# If that didn't work, then default to tests/../${filename},
2733
# note that we return the parent as it is expected that __file__
2834
# is a test file.
29-
filepath = os.path.join(os.path.dirname(__file__), os.pardir, filename)
30-
return filepath
35+
filepath = Path(os.path.dirname(__file__)) / ".." / filename
36+
return str(filepath.resolve())
3137

3238

3339
def get_data_uri(resource_path: str) -> str:

schema_salad/typescript_codegen.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@
1515
Union,
1616
)
1717

18-
from importlib_resources import files
19-
2018
from . import _logger, schema
2119
from .codegen_base import CodeGenBase, LazyInitDef, TypeDef
2220
from .exceptions import SchemaException
2321
from .java_codegen import _ensure_directory_and_write, _safe_makedirs
2422
from .schema import shortname
23+
from .utils import Traversable, files
2524

2625

2726
def doc_to_doc_string(doc: Optional[str], indent_level: int = 0) -> str:
@@ -781,7 +780,7 @@ def epilogue(self, root_loader: TypeDef) -> None:
781780
generated_class_imports=generated_class_imports,
782781
)
783782

784-
def template_from_resource(resource: Path) -> string.Template:
783+
def template_from_resource(resource: Traversable) -> string.Template:
785784
template_str = resource.read_text("utf-8")
786785
template = string.Template(template_str)
787786
return template

schema_salad/utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,18 @@
2626
if TYPE_CHECKING:
2727
from .fetcher import Fetcher
2828

29+
if sys.version_info >= (3, 11):
30+
from importlib.resources import as_file, files
31+
from importlib.resources.abc import Traversable
32+
elif sys.version_info >= (3, 9):
33+
from importlib.abc import Traversable
34+
from importlib.resources import as_file, files
35+
else:
36+
from importlib_resources import as_file, files
37+
from importlib_resources.abc import Traversable
38+
39+
__all__ = ["files", "as_file", "Traversable"]
40+
2941
ContextType = Dict[str, Union[Dict[str, Any], str, Iterable[str]]]
3042
DocumentType = TypeVar("DocumentType", CommentedSeq, CommentedMap)
3143
DocumentOrStrType = TypeVar("DocumentOrStrType", CommentedSeq, CommentedMap, str)

0 commit comments

Comments
 (0)