Skip to content

Commit eb8570c

Browse files
committed
Refactor _path_from_reader to avoid introduction of extraneous context managers.
1 parent 4657df7 commit eb8570c

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

importlib_resources/_py3.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import os
22
import sys
3+
import io
34

45
from . import _common
5-
from contextlib import contextmanager, suppress
6+
from contextlib import suppress
67
from importlib.abc import ResourceLoader
78
from io import BytesIO, TextIOWrapper
89
from pathlib import Path
@@ -94,24 +95,26 @@ def path(
9495
"""
9596
reader = _common.get_resource_reader(_common.get_package(package))
9697
return (
97-
_path_from_reader(reader, resource)
98+
_path_from_reader(reader, _common.normalize_path(resource))
9899
if reader else
99100
_common.as_file(
100101
_common.files(package).joinpath(_common.normalize_path(resource)))
101102
)
102103

103104

104-
@contextmanager
105105
def _path_from_reader(reader, resource):
106-
norm_resource = _common.normalize_path(resource)
106+
return _path_from_resource_path(reader, resource) or \
107+
_path_from_open_resource(reader, resource)
108+
109+
110+
def _path_from_resource_path(reader, resource):
107111
with suppress(FileNotFoundError):
108-
yield Path(reader.resource_path(norm_resource))
109-
return
110-
opener_reader = reader.open_resource(norm_resource)
111-
with _common._tempfile(opener_reader.read, suffix=norm_resource) as res:
112-
del opener_reader
113-
del reader
114-
yield res
112+
return Path(reader.resource_path(resource))
113+
114+
115+
def _path_from_open_resource(reader, resource):
116+
saved = io.BytesIO(reader.open_resource(resource).read())
117+
return _common._tempfile(saved.read, suffix=resource)
115118

116119

117120
def is_resource(package: Package, name: str) -> bool:

0 commit comments

Comments
 (0)