1
1
from contextlib import suppress
2
- from io import TextIOWrapper
3
2
4
3
from . import abc
5
4
@@ -26,119 +25,32 @@ def __init__(self, spec):
26
25
self .spec = spec
27
26
28
27
def get_resource_reader (self , name ):
29
- return CompatibilityFiles (self .spec )._native ()
28
+ return DegenerateFiles (self .spec )._native ()
30
29
31
30
32
- def _io_wrapper (file , mode = 'r' , * args , ** kwargs ):
33
- if mode == 'r' :
34
- return TextIOWrapper (file , * args , ** kwargs )
35
- elif mode == 'rb' :
36
- return file
37
- raise ValueError (
38
- "Invalid mode value '{}', only 'r' and 'rb' are supported" .format (mode )
39
- )
40
-
41
-
42
- class CompatibilityFiles :
31
+ class DegenerateFiles :
43
32
"""
44
33
Adapter for an existing or non-existant resource reader
45
- to provide a compability .files().
34
+ to provide a degenerate .files().
46
35
"""
47
36
48
- class SpecPath (abc .Traversable ):
49
- """
50
- Path tied to a module spec.
51
- Can be read and exposes the resource reader children.
52
- """
53
-
54
- def __init__ (self , spec , reader ):
55
- self ._spec = spec
56
- self ._reader = reader
57
-
58
- def iterdir (self ):
59
- if not self ._reader :
60
- return iter (())
61
- return iter (
62
- CompatibilityFiles .ChildPath (self ._reader , path )
63
- for path in self ._reader .contents ()
64
- )
65
-
66
- def is_file (self ):
67
- return False
68
-
69
- is_dir = is_file
70
-
71
- def joinpath (self , other ):
72
- if not self ._reader :
73
- return CompatibilityFiles .OrphanPath (other )
74
- return CompatibilityFiles .ChildPath (self ._reader , other )
75
-
76
- @property
77
- def name (self ):
78
- return self ._spec .name
79
-
80
- def open (self , mode = 'r' , * args , ** kwargs ):
81
- return _io_wrapper (self ._reader .open_resource (None ), mode , * args , ** kwargs )
82
-
83
- class ChildPath (abc .Traversable ):
84
- """
85
- Path tied to a resource reader child.
86
- Can be read but doesn't expose any meaningfull children.
87
- """
88
-
89
- def __init__ (self , reader , name ):
90
- self ._reader = reader
91
- self ._name = name
92
-
37
+ class Path (abc .Traversable ):
93
38
def iterdir (self ):
94
39
return iter (())
95
40
96
- def is_file (self ):
97
- return self ._reader .is_resource (self .name )
98
-
99
41
def is_dir (self ):
100
- return not self .is_file ()
101
-
102
- def joinpath (self , other ):
103
- return CompatibilityFiles .OrphanPath (self .name , other )
104
-
105
- @property
106
- def name (self ):
107
- return self ._name
108
-
109
- def open (self , mode = 'r' , * args , ** kwargs ):
110
- return _io_wrapper (
111
- self ._reader .open_resource (self .name ), mode , * args , ** kwargs
112
- )
113
-
114
- class OrphanPath (abc .Traversable ):
115
- """
116
- Orphan path, not tied to a module spec or resource reader.
117
- Can't be read and doesn't expose any meaningful children.
118
- """
119
-
120
- def __init__ (self , * path_parts ):
121
- if len (path_parts ) < 1 :
122
- raise ValueError ('Need at least one path part to construct a path' )
123
- self ._path = path_parts
124
-
125
- def iterdir (self ):
126
- return iter (())
127
-
128
- def is_file (self ):
129
42
return False
130
43
131
- is_dir = is_file
44
+ is_file = exists = is_dir # type: ignore
132
45
133
46
def joinpath (self , other ):
134
- return CompatibilityFiles . OrphanPath ( * self . _path , other )
47
+ return DegenerateFiles . Path ( )
135
48
136
- @property
137
49
def name (self ):
138
- return self . _path [ - 1 ]
50
+ return ''
139
51
140
- def open (self , mode = 'r' , * args , ** kwargs ):
141
- raise FileNotFoundError ( "Can't open orphan path" )
52
+ def open (self ):
53
+ raise ValueError ( )
142
54
143
55
def __init__ (self , spec ):
144
56
self .spec = spec
@@ -159,7 +71,7 @@ def __getattr__(self, attr):
159
71
return getattr (self ._reader , attr )
160
72
161
73
def files (self ):
162
- return CompatibilityFiles . SpecPath ( self . spec , self . _reader )
74
+ return DegenerateFiles . Path ( )
163
75
164
76
165
77
def wrap_spec (package ):
0 commit comments