File tree Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -106,9 +106,16 @@ def _native_reader(spec):
106
106
reader = _available_reader (spec )
107
107
return reader if hasattr (reader , 'files' ) else None
108
108
109
+ def _namespace_reader (spec ):
110
+ from . import namespace
111
+ if 'NamespaceLoader' not in spec .loader .__class__ .__name__ :
112
+ return
113
+ return namespace .Multiplexed .load (spec .submodule_search_locations )
114
+
109
115
return (
110
116
# native reader if it supplies 'files'
111
117
_native_reader (self .spec ) or
118
+ _namespace_reader (self .spec ) or
112
119
# local ZipReader if a zip module
113
120
_zip_reader (self .spec ) or
114
121
# local FileReader
Original file line number Diff line number Diff line change
1
+ import os
1
2
import itertools
2
- from ._compat import suppress
3
+ from ._compat import suppress , ZipPath , Path
3
4
from .abc import Traversable
4
5
5
6
7
+ def infer_path (path ):
8
+ return resolve_zip_path (path ) or Path (path )
9
+
10
+
11
+ def resolve_zip_path (candidate , tail = '' ):
12
+ if not candidate :
13
+ return
14
+ try :
15
+ return ZipPath (candidate , at = tail )
16
+ except Exception :
17
+ new_tail = os .path .basename (candidate ) + '/' + tail
18
+ new_base = os .path .dirname (candidate )
19
+ return resolve_zip_path (new_base , new_tail )
20
+
21
+
6
22
class Multiplexed (Traversable ):
7
23
"""
8
24
Given a series of Traversable objects, implement a merged
9
25
version of the interface across all objects. Useful for
10
26
namespace packages which may be multihomed at a single
11
27
name.
12
28
"""
29
+ @classmethod
30
+ def load (cls , paths ):
31
+ return cls (map (cls ._infer_path , paths ))
13
32
14
33
def __init__ (self , * paths ):
15
34
self ._paths = paths
You can’t perform that action at this time.
0 commit comments