1
1
import abc
2
- from typing import BinaryIO , Iterable , Text
2
+ import io
3
+ from typing import Any , BinaryIO , Iterable , Iterator , NoReturn , Text , Optional
3
4
4
- from ._compat import runtime_checkable , Protocol
5
+ from ._compat import runtime_checkable , Protocol , StrPath
6
+
7
+
8
+ __all__ = ["ResourceReader" , "Traversable" , "TraversableResources" ]
5
9
6
10
7
11
class ResourceReader (metaclass = abc .ABCMeta ):
@@ -54,19 +58,19 @@ class Traversable(Protocol):
54
58
"""
55
59
56
60
@abc .abstractmethod
57
- def iterdir (self ):
61
+ def iterdir (self ) -> Iterator [ "Traversable" ] :
58
62
"""
59
63
Yield Traversable objects in self
60
64
"""
61
65
62
- def read_bytes (self ):
66
+ def read_bytes (self ) -> bytes :
63
67
"""
64
68
Read contents of self as bytes
65
69
"""
66
70
with self .open ('rb' ) as strm :
67
71
return strm .read ()
68
72
69
- def read_text (self , encoding = None ):
73
+ def read_text (self , encoding : Optional [ str ] = None ) -> str :
70
74
"""
71
75
Read contents of self as text
72
76
"""
@@ -86,12 +90,12 @@ def is_file(self) -> bool:
86
90
"""
87
91
88
92
@abc .abstractmethod
89
- def joinpath (self , child ) :
93
+ def joinpath (self , child : StrPath ) -> "Traversable" :
90
94
"""
91
95
Return Traversable child in self
92
96
"""
93
97
94
- def __truediv__ (self , child ) :
98
+ def __truediv__ (self , child : StrPath ) -> "Traversable" :
95
99
"""
96
100
Return Traversable child in self
97
101
"""
@@ -121,17 +125,17 @@ class TraversableResources(ResourceReader):
121
125
"""
122
126
123
127
@abc .abstractmethod
124
- def files (self ):
128
+ def files (self ) -> "Traversable" :
125
129
"""Return a Traversable object for the loaded package."""
126
130
127
- def open_resource (self , resource ) :
131
+ def open_resource (self , resource : StrPath ) -> io . BufferedReader :
128
132
return self .files ().joinpath (resource ).open ('rb' )
129
133
130
- def resource_path (self , resource ) :
134
+ def resource_path (self , resource : Any ) -> NoReturn :
131
135
raise FileNotFoundError (resource )
132
136
133
- def is_resource (self , path ) :
137
+ def is_resource (self , path : StrPath ) -> bool :
134
138
return self .files ().joinpath (path ).is_file ()
135
139
136
- def contents (self ):
140
+ def contents (self ) -> Iterator [ str ] :
137
141
return (item .name for item in self .files ().iterdir ())
0 commit comments