Skip to content

Commit 2addcf2

Browse files
authored
Merge pull request #322 from python/feature/typed-open
Add type annotations for Traversable.open.
2 parents 2917dc4 + 8e9503d commit 2addcf2

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

importlib_resources/abc.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import abc
2-
import io
32
import itertools
43
import pathlib
54
from typing import (
@@ -11,9 +10,14 @@
1110
Optional,
1211
Protocol,
1312
Text,
13+
TextIO,
14+
Union,
15+
overload,
1416
runtime_checkable,
1517
)
1618

19+
from typing_extensions import Literal
20+
1721
from .compat.py38 import StrPath
1822

1923
__all__ = ["ResourceReader", "Traversable", "TraversableResources"]
@@ -138,8 +142,16 @@ def __truediv__(self, child: StrPath) -> "Traversable":
138142
"""
139143
return self.joinpath(child)
140144

145+
@overload
146+
def open(self, mode: Literal['r'] = 'r', *args: Any, **kwargs: Any) -> TextIO: ...
147+
148+
@overload
149+
def open(self, mode: Literal['rb'], *args: Any, **kwargs: Any) -> BinaryIO: ...
150+
141151
@abc.abstractmethod
142-
def open(self, mode='r', *args, **kwargs):
152+
def open(
153+
self, mode: str = 'r', *args: Any, **kwargs: Any
154+
) -> Union[TextIO, BinaryIO]:
143155
"""
144156
mode may be 'r' or 'rb' to open as text or binary. Return a handle
145157
suitable for reading (same as pathlib.Path.open).
@@ -166,7 +178,7 @@ class TraversableResources(ResourceReader):
166178
def files(self) -> "Traversable":
167179
"""Return a Traversable object for the loaded package."""
168180

169-
def open_resource(self, resource: StrPath) -> io.BufferedReader:
181+
def open_resource(self, resource: StrPath) -> BinaryIO:
170182
return self.files().joinpath(resource).open('rb')
171183

172184
def resource_path(self, resource: Any) -> NoReturn:

newsfragments/317.feature.rst

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add type annotations for Traversable.open.

0 commit comments

Comments
 (0)