Skip to content

Commit 3b6fb35

Browse files
committed
Merge branch 'feature/203-non-package-modules' into feature/implicit-here
2 parents 91360ae + 8864353 commit 3b6fb35

File tree

3 files changed

+32
-42
lines changed

3 files changed

+32
-42
lines changed

importlib_resources/_common.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,15 @@
1515
Package = Union[types.ModuleType, str, None]
1616

1717

18-
def files(package=None):
19-
# type: (Package) -> Traversable
18+
def files(package: Package = None) -> Traversable:
2019
"""
2120
Get a Traversable resource from a package
2221
"""
2322
context = inspect.currentframe().f_back.f_globals # type: ignore
2423
return from_package(resolve(package, context))
2524

2625

27-
def get_resource_reader(package):
28-
# type: (types.ModuleType) -> Optional[ResourceReader]
26+
def get_resource_reader(package: types.ModuleType) -> Optional[ResourceReader]:
2927
"""
3028
Return the package's loader if it's a ResourceReader.
3129
"""
@@ -41,8 +39,7 @@ def get_resource_reader(package):
4139
return reader(spec.name) # type: ignore
4240

4341

44-
def resolve(candidate, context):
45-
# type: (Package, Dict[str, str]) -> types.ModuleType
42+
def resolve(candidate: Package, context: Dict[str, str]) -> types.ModuleType:
4643
impl = candidate or context['__name__'] # type: ignore
4744
return impl if isinstance(impl, types.ModuleType) else importlib.import_module(impl)
4845

importlib_resources/_legacy.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ def wrapper(*args, **kwargs):
2727
return wrapper
2828

2929

30-
def normalize_path(path):
31-
# type: (Any) -> str
30+
def normalize_path(path: Any) -> str:
3231
"""Normalize a path by ensuring it is a string.
3332
3433
If the resulting string contains path separators, an exception is raised.

importlib_resources/simple.py

+28-34
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,26 @@ class SimpleReader(abc.ABC):
1717
"""
1818

1919
@abc.abstractproperty
20-
def package(self):
21-
# type: () -> str
20+
def package(self) -> str:
2221
"""
2322
The name of the package for which this reader loads resources.
2423
"""
2524

2625
@abc.abstractmethod
27-
def children(self):
28-
# type: () -> List['SimpleReader']
26+
def children(self) -> List['SimpleReader']:
2927
"""
3028
Obtain an iterable of SimpleReader for available
3129
child containers (e.g. directories).
3230
"""
3331

3432
@abc.abstractmethod
35-
def resources(self):
36-
# type: () -> List[str]
33+
def resources(self) -> List[str]:
3734
"""
3835
Obtain available named resources for this virtual package.
3936
"""
4037

4138
@abc.abstractmethod
42-
def open_binary(self, resource):
43-
# type: (str) -> BinaryIO
39+
def open_binary(self, resource: str) -> BinaryIO:
4440
"""
4541
Obtain a File-like for a named resource.
4642
"""
@@ -50,13 +46,35 @@ def name(self):
5046
return self.package.split('.')[-1]
5147

5248

49+
class ResourceContainer(Traversable):
50+
"""
51+
Traversable container for a package's resources via its reader.
52+
"""
53+
54+
def __init__(self, reader: SimpleReader):
55+
self.reader = reader
56+
57+
def is_dir(self):
58+
return True
59+
60+
def is_file(self):
61+
return False
62+
63+
def iterdir(self):
64+
files = (ResourceHandle(self, name) for name in self.reader.resources)
65+
dirs = map(ResourceContainer, self.reader.children())
66+
return itertools.chain(files, dirs)
67+
68+
def open(self, *args, **kwargs):
69+
raise IsADirectoryError()
70+
71+
5372
class ResourceHandle(Traversable):
5473
"""
5574
Handle to a named resource in a ResourceReader.
5675
"""
5776

58-
def __init__(self, parent, name):
59-
# type: (ResourceContainer, str) -> None
77+
def __init__(self, parent: ResourceContainer, name: str):
6078
self.parent = parent
6179
self.name = name # type: ignore
6280

@@ -76,30 +94,6 @@ def joinpath(self, name):
7694
raise RuntimeError("Cannot traverse into a resource")
7795

7896

79-
class ResourceContainer(Traversable):
80-
"""
81-
Traversable container for a package's resources via its reader.
82-
"""
83-
84-
def __init__(self, reader):
85-
# type: (SimpleReader) -> None
86-
self.reader = reader
87-
88-
def is_dir(self):
89-
return True
90-
91-
def is_file(self):
92-
return False
93-
94-
def iterdir(self):
95-
files = (ResourceHandle(self, name) for name in self.reader.resources)
96-
dirs = map(ResourceContainer, self.reader.children())
97-
return itertools.chain(files, dirs)
98-
99-
def open(self, *args, **kwargs):
100-
raise IsADirectoryError()
101-
102-
10397
class TraversableReader(TraversableResources, SimpleReader):
10498
"""
10599
A TraversableResources based on SimpleReader. Resource providers

0 commit comments

Comments
 (0)