@@ -17,30 +17,26 @@ class SimpleReader(abc.ABC):
17
17
"""
18
18
19
19
@abc .abstractproperty
20
- def package (self ):
21
- # type: () -> str
20
+ def package (self ) -> str :
22
21
"""
23
22
The name of the package for which this reader loads resources.
24
23
"""
25
24
26
25
@abc .abstractmethod
27
- def children (self ):
28
- # type: () -> List['SimpleReader']
26
+ def children (self ) -> List ['SimpleReader' ]:
29
27
"""
30
28
Obtain an iterable of SimpleReader for available
31
29
child containers (e.g. directories).
32
30
"""
33
31
34
32
@abc .abstractmethod
35
- def resources (self ):
36
- # type: () -> List[str]
33
+ def resources (self ) -> List [str ]:
37
34
"""
38
35
Obtain available named resources for this virtual package.
39
36
"""
40
37
41
38
@abc .abstractmethod
42
- def open_binary (self , resource ):
43
- # type: (str) -> BinaryIO
39
+ def open_binary (self , resource : str ) -> BinaryIO :
44
40
"""
45
41
Obtain a File-like for a named resource.
46
42
"""
@@ -50,13 +46,35 @@ def name(self):
50
46
return self .package .split ('.' )[- 1 ]
51
47
52
48
49
+ class ResourceContainer (Traversable ):
50
+ """
51
+ Traversable container for a package's resources via its reader.
52
+ """
53
+
54
+ def __init__ (self , reader : SimpleReader ):
55
+ self .reader = reader
56
+
57
+ def is_dir (self ):
58
+ return True
59
+
60
+ def is_file (self ):
61
+ return False
62
+
63
+ def iterdir (self ):
64
+ files = (ResourceHandle (self , name ) for name in self .reader .resources )
65
+ dirs = map (ResourceContainer , self .reader .children ())
66
+ return itertools .chain (files , dirs )
67
+
68
+ def open (self , * args , ** kwargs ):
69
+ raise IsADirectoryError ()
70
+
71
+
53
72
class ResourceHandle (Traversable ):
54
73
"""
55
74
Handle to a named resource in a ResourceReader.
56
75
"""
57
76
58
- def __init__ (self , parent , name ):
59
- # type: (ResourceContainer, str) -> None
77
+ def __init__ (self , parent : ResourceContainer , name : str ):
60
78
self .parent = parent
61
79
self .name = name # type: ignore
62
80
@@ -76,30 +94,6 @@ def joinpath(self, name):
76
94
raise RuntimeError ("Cannot traverse into a resource" )
77
95
78
96
79
- class ResourceContainer (Traversable ):
80
- """
81
- Traversable container for a package's resources via its reader.
82
- """
83
-
84
- def __init__ (self , reader ):
85
- # type: (SimpleReader) -> None
86
- self .reader = reader
87
-
88
- def is_dir (self ):
89
- return True
90
-
91
- def is_file (self ):
92
- return False
93
-
94
- def iterdir (self ):
95
- files = (ResourceHandle (self , name ) for name in self .reader .resources )
96
- dirs = map (ResourceContainer , self .reader .children ())
97
- return itertools .chain (files , dirs )
98
-
99
- def open (self , * args , ** kwargs ):
100
- raise IsADirectoryError ()
101
-
102
-
103
97
class TraversableReader (TraversableResources , SimpleReader ):
104
98
"""
105
99
A TraversableResources based on SimpleReader. Resource providers
0 commit comments