Skip to content

Commit 5b7fd55

Browse files
committed
Split compat up into multiple files to improve import times
1 parent 44a9ebe commit 5b7fd55

13 files changed

+196
-16
lines changed

domdf_python_tools/compat.py renamed to domdf_python_tools/compat/__init__.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,6 @@
7676

7777
__all__ = ["importlib_resources", "importlib_metadata", "nullcontext", "PYPY", "PYPY36", "PYPY37"]
7878

79-
if sys.version_info[:2] < (3, 7): # pragma: no cover (py37+)
80-
# 3rd party
81-
import importlib_resources
82-
else: # pragma: no cover (<py37)
83-
# stdlib
84-
import importlib.resources as importlib_resources
85-
86-
if sys.version_info[:2] < (3, 9): # pragma: no cover (py39+)
87-
# 3rd party
88-
import importlib_metadata
89-
else: # pragma: no cover (<py39)
90-
# stdlib
91-
import importlib.metadata as importlib_metadata
92-
9379
if sys.version_info[:2] < (3, 7) or domdf_python_tools.__docs or TYPE_CHECKING: # pragma: no cover (py37+)
9480

9581
_T = TypeVar("_T")
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# stdlib
2+
import sys
3+
4+
if sys.version_info[:2] < (3, 9): # pragma: no cover (py39+)
5+
# 3rd party
6+
from importlib_metadata import *
7+
else: # pragma: no cover (<py39)
8+
# stdlib
9+
from importlib.metadata import *
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# From https://github.com/python/typeshed
2+
# Apache-2.0 Licensed
3+
4+
# stdlib
5+
import abc
6+
import pathlib
7+
import sys
8+
from collections.abc import Mapping
9+
from email.message import Message
10+
from importlib.abc import MetaPathFinder
11+
from os import PathLike
12+
from pathlib import Path
13+
from typing import Any, Dict, Iterable, List, NamedTuple, Optional, Tuple, Union, overload
14+
15+
StrPath = Union[str, PathLike[str]]
16+
17+
if sys.version_info >= (3, 10):
18+
19+
def packages_distributions() -> Mapping[str, List[str]]: ...
20+
21+
class PackageNotFoundError(ModuleNotFoundError): ...
22+
23+
class _EntryPointBase(NamedTuple):
24+
name: str
25+
value: str
26+
group: str
27+
28+
class EntryPoint(_EntryPointBase):
29+
def load(self) -> Any: ... # Callable[[], Any] or an importable module
30+
31+
@property
32+
def extras(self) -> List[str]: ...
33+
34+
class PackagePath(pathlib.PurePosixPath):
35+
def read_text(self, encoding: str = ...) -> str: ...
36+
def read_binary(self) -> bytes: ...
37+
def locate(self) -> PathLike[str]: ...
38+
39+
# The following attributes are not defined on PackagePath, but are dynamically added by Distribution.files:
40+
hash: Optional[FileHash]
41+
size: Optional[int]
42+
dist: Distribution
43+
44+
class FileHash:
45+
mode: str
46+
value: str
47+
48+
def __init__(self, spec: str) -> None: ...
49+
50+
class Distribution:
51+
52+
@abc.abstractmethod
53+
def read_text(self, filename: str) -> Optional[str]: ...
54+
55+
@abc.abstractmethod
56+
def locate_file(self, path: StrPath) -> PathLike[str]: ...
57+
58+
@classmethod
59+
def from_name(cls, name: str) -> Distribution: ...
60+
61+
@overload
62+
@classmethod
63+
def discover(cls, *, context: DistributionFinder.Context) -> Iterable[Distribution]: ...
64+
65+
@overload
66+
@classmethod
67+
def discover(cls,
68+
*,
69+
context: None = ...,
70+
name: Optional[str] = ...,
71+
path: List[str] = ...,
72+
**kwargs: Any) -> Iterable[Distribution]: ...
73+
74+
@staticmethod
75+
def at(path: StrPath) -> PathDistribution: ...
76+
77+
@property
78+
def metadata(self) -> Message: ...
79+
80+
@property
81+
def version(self) -> str: ...
82+
83+
@property
84+
def entry_points(self) -> List[EntryPoint]: ...
85+
86+
@property
87+
def files(self) -> Optional[List[PackagePath]]: ...
88+
89+
@property
90+
def requires(self) -> Optional[List[str]]: ...
91+
92+
class DistributionFinder(MetaPathFinder):
93+
94+
class Context:
95+
name: Optional[str]
96+
97+
def __init__(self, *, name: Optional[str] = ..., path: List[str] = ..., **kwargs: Any) -> None: ...
98+
99+
@property
100+
def path(self) -> List[str]: ...
101+
102+
@abc.abstractmethod
103+
def find_distributions(self, context: DistributionFinder.Context = ...) -> Iterable[Distribution]: ...
104+
105+
class MetadataPathFinder(DistributionFinder):
106+
107+
@classmethod
108+
def find_distributions(cls, context: DistributionFinder.Context = ...) -> Iterable[PathDistribution]: ...
109+
110+
class PathDistribution(Distribution):
111+
def __init__(self, path: Path) -> None: ...
112+
def read_text(self, filename: StrPath) -> str: ...
113+
def locate_file(self, path: StrPath) -> PathLike[str]: ...
114+
115+
def distribution(distribution_name: str) -> Distribution: ...
116+
117+
@overload
118+
def distributions(*, context: DistributionFinder.Context) -> Iterable[Distribution]: ...
119+
120+
@overload
121+
def distributions(*,
122+
context: None = ...,
123+
name: Optional[str] = ...,
124+
path: List[str] = ...,
125+
**kwargs: Any) -> Iterable[Distribution]: ...
126+
127+
def metadata(distribution_name: str) -> Message: ...
128+
def version(distribution_name: str) -> str: ...
129+
def entry_points() -> Dict[str, Tuple[EntryPoint, ...]]: ...
130+
def files(distribution_name: str) -> Optional[List[PackagePath]]: ...
131+
def requires(distribution_name: str) -> Optional[List[str]]: ...
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# stdlib
2+
import sys
3+
4+
if sys.version_info[:2] < (3, 7): # pragma: no cover (py37+)
5+
# 3rd party
6+
from importlib_resources import *
7+
else: # pragma: no cover (<py39)
8+
# stdlib
9+
from importlib.resources import *
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# From https://github.com/python/typeshed
2+
# Apache-2.0 Licensed
3+
4+
import sys
5+
from typing import Any
6+
7+
import os
8+
from pathlib import Path
9+
from types import ModuleType
10+
from typing import BinaryIO, ContextManager, Iterator, TextIO, Union
11+
12+
Package = Union[str, ModuleType]
13+
Resource = Union[str, os.PathLike[Any]]
14+
def open_binary(package: Package, resource: Resource) -> BinaryIO: ...
15+
def open_text(package: Package, resource: Resource, encoding: str = ..., errors: str = ...) -> TextIO: ...
16+
def read_binary(package: Package, resource: Resource) -> bytes: ...
17+
def read_text(package: Package, resource: Resource, encoding: str = ..., errors: str = ...) -> str: ...
18+
def path(package: Package, resource: Resource) -> ContextManager[Path]: ...
19+
def is_resource(package: Package, name: str) -> bool: ...
20+
def contents(package: Package) -> Iterator[str]: ...
21+
22+
if sys.version_info >= (3, 9):
23+
from contextlib import AbstractContextManager
24+
from importlib.abc import Traversable
25+
def files(package: Package) -> Traversable: ...
26+
def as_file(path: Traversable) -> AbstractContextManager[Path]: ...

tests/test_import_tools_/test_iter_submodules_domdf_python_tools_3_10_.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
- domdf_python_tools._is_match
33
- domdf_python_tools.bases
44
- domdf_python_tools.compat
5+
- domdf_python_tools.compat.importlib_metadata
6+
- domdf_python_tools.compat.importlib_resources
57
- domdf_python_tools.dates
68
- domdf_python_tools.delegators
79
- domdf_python_tools.doctools

tests/test_import_tools_/test_iter_submodules_domdf_python_tools_3_6_.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
- domdf_python_tools._is_match
33
- domdf_python_tools.bases
44
- domdf_python_tools.compat
5+
- domdf_python_tools.compat.importlib_metadata
6+
- domdf_python_tools.compat.importlib_resources
57
- domdf_python_tools.dates
68
- domdf_python_tools.delegators
79
- domdf_python_tools.doctools

tests/test_import_tools_/test_iter_submodules_domdf_python_tools_3_7_.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
- domdf_python_tools._is_match
33
- domdf_python_tools.bases
44
- domdf_python_tools.compat
5+
- domdf_python_tools.compat.importlib_metadata
6+
- domdf_python_tools.compat.importlib_resources
57
- domdf_python_tools.dates
68
- domdf_python_tools.delegators
79
- domdf_python_tools.doctools

tests/test_import_tools_/test_iter_submodules_domdf_python_tools_3_7_pypy_.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
- domdf_python_tools._is_match
33
- domdf_python_tools.bases
44
- domdf_python_tools.compat
5+
- domdf_python_tools.compat.importlib_metadata
6+
- domdf_python_tools.compat.importlib_resources
57
- domdf_python_tools.dates
68
- domdf_python_tools.delegators
79
- domdf_python_tools.doctools

tests/test_import_tools_/test_iter_submodules_domdf_python_tools_3_8_.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
- domdf_python_tools._is_match
33
- domdf_python_tools.bases
44
- domdf_python_tools.compat
5+
- domdf_python_tools.compat.importlib_metadata
6+
- domdf_python_tools.compat.importlib_resources
57
- domdf_python_tools.dates
68
- domdf_python_tools.delegators
79
- domdf_python_tools.doctools

0 commit comments

Comments
 (0)