Skip to content

Commit 527173b

Browse files
committed
Give precedence to native traversable readers.
Ensure that standard library readers are replaced while third-party readers are passed along. Closes #295.
1 parent 99a41c1 commit 527173b

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

importlib_resources/future/adapters.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import contextlib
12
import pathlib
23
from contextlib import suppress
34
from types import SimpleNamespace
@@ -15,7 +16,18 @@ class TraversableResourcesLoader(_adapters.TraversableResourcesLoader):
1516
"""
1617

1718
def get_resource_reader(self, name):
18-
return self._standard_reader() or super().get_resource_reader(name)
19+
with contextlib.suppress(Exception):
20+
return self._block_standard(super().get_resource_reader(name))
21+
return self._standard_reader()
22+
23+
def _block_standard(self, reader):
24+
"""
25+
If the reader is from the standard library, raise an exception to
26+
allow likely newer implementations in this library to take precedence.
27+
"""
28+
if reader.__class__.__module__.startswith('importlib.resources.'):
29+
raise RuntimeError("Reader blocked to be superseded.")
30+
return reader
1931

2032
def _standard_reader(self):
2133
return self._zip_reader() or self._namespace_reader() or self._file_reader()

0 commit comments

Comments
 (0)