5
5
import contextlib
6
6
import types
7
7
import importlib
8
+ import inspect
8
9
9
- from typing import Union , Optional
10
+ from typing import Union , Optional , Dict
10
11
from .abc import ResourceReader , Traversable
11
12
12
13
from ._compat import wrap_spec
13
14
14
15
Package = Union [types .ModuleType , str ]
15
- Anchor = Package
16
+ Anchor = Union [Package , None ]
17
+ ModuleContext = Dict [str , str ]
16
18
17
19
18
20
def files (package : Anchor ) -> Traversable :
19
21
"""
20
22
Get a Traversable resource for an anchor.
21
23
"""
22
- return from_package (resolve (package ))
24
+ context = inspect .currentframe ().f_back .f_globals # type: ignore
25
+ return from_package (resolve (package , context ))
23
26
24
27
25
28
def get_resource_reader (package : types .ModuleType ) -> Optional [ResourceReader ]:
@@ -39,15 +42,20 @@ def get_resource_reader(package: types.ModuleType) -> Optional[ResourceReader]:
39
42
40
43
41
44
@functools .singledispatch
42
- def resolve (cand : Package ):
45
+ def resolve (cand : Package , context : ModuleContext ):
43
46
return cand
44
47
45
48
46
49
@resolve .register
47
- def _ (cand : str ):
50
+ def _ (cand : str , context : ModuleContext ):
48
51
return importlib .import_module (cand )
49
52
50
53
54
+ @resolve .register
55
+ def _ (cand : None , context : ModuleContext ):
56
+ return resolve (context ['__name__' ], context )
57
+
58
+
51
59
def from_package (package ):
52
60
"""
53
61
Return a Traversable object for the given package.
0 commit comments