Skip to content

Commit edac8ed

Browse files
committed
Refactor get_resource_reader to break down into tiered selections.
1 parent d2fa2f3 commit edac8ed

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

importlib_resources/_compat.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,27 @@ def path(self):
9393
def get_resource_reader(self, name):
9494
# Python < 3.9
9595
from . import readers
96-
try:
97-
reader = self.spec.loader.get_resource_reader(name)
98-
reader.files
99-
except AttributeError:
100-
reader = _zip_reader(self.spec) or readers.FileReader(self)
101-
return reader
102-
103-
104-
def _zip_reader(spec):
105-
from . import readers
106-
with suppress(AttributeError):
107-
return readers.ZipReader(spec.loader, spec.name)
96+
97+
def _zip_reader(spec):
98+
with suppress(AttributeError):
99+
return readers.ZipReader(spec.loader, spec.name)
100+
101+
def _available_reader(spec):
102+
with suppress(AttributeError):
103+
return spec.loader.get_resource_reader(spec.name)
104+
105+
def _native_reader(spec):
106+
reader = _available_reader(spec)
107+
return reader if hasattr(reader, 'files') else None
108+
109+
return (
110+
# native reader if it supplies 'files'
111+
_native_reader(self.spec) or
112+
# local ZipReader if a zip module
113+
_zip_reader(self.spec) or
114+
# local FileReader
115+
readers.FileReader(self)
116+
)
108117

109118

110119
def package_spec(package):

0 commit comments

Comments
 (0)