Skip to content

Commit cc54d86

Browse files
gh-145260: Fix importlib.resources.simple ResourceContainer and ResourceHandle
ResourceContainer and ResourceHandle could not be instantiated because Traversable now requires name as an abstract property. Additionally, ResourceContainer.iterdir() accessed self.reader.resources without calling it, and ResourceHandle.joinpath had a signature mismatch. - Add name property to ResourceContainer - Fix self.reader.resources -> self.reader.resources() call - Add iterdir() method to ResourceHandle - Fix ResourceHandle.joinpath to accept *descendants
1 parent e234662 commit cc54d86

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

Lib/importlib/resources/simple.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,18 @@ class ResourceContainer(Traversable):
5555
def __init__(self, reader: SimpleReader):
5656
self.reader = reader
5757

58+
@property
59+
def name(self):
60+
return self.reader.name
61+
5862
def is_dir(self):
5963
return True
6064

6165
def is_file(self):
6266
return False
6367

6468
def iterdir(self):
65-
files = (ResourceHandle(self, name) for name in self.reader.resources)
69+
files = (ResourceHandle(self, name) for name in self.reader.resources())
6670
dirs = map(ResourceContainer, self.reader.children())
6771
return itertools.chain(files, dirs)
6872

@@ -85,13 +89,18 @@ def is_file(self):
8589
def is_dir(self):
8690
return False
8791

92+
def iterdir(self):
93+
return iter([])
94+
8895
def open(self, mode='r', *args, **kwargs):
8996
stream = self.parent.reader.open_binary(self.name)
9097
if 'b' not in mode:
9198
stream = io.TextIOWrapper(stream, *args, **kwargs)
9299
return stream
93100

94-
def joinpath(self, name):
101+
def joinpath(self, *descendants):
102+
if not descendants:
103+
return self
95104
raise RuntimeError("Cannot traverse into a resource")
96105

97106

0 commit comments

Comments
 (0)