Skip to content

Commit dda15e1

Browse files
committed
Allow a package to resolve its own resources without having to pass a reference to itself. Fixes #259.
1 parent 8c3edeb commit dda15e1

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

importlib_resources/_common.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,24 @@
55
import contextlib
66
import types
77
import importlib
8+
import inspect
89

9-
from typing import Union, Optional
10+
from typing import Union, Optional, Dict
1011
from .abc import ResourceReader, Traversable
1112

1213
from ._compat import wrap_spec
1314

1415
Package = Union[types.ModuleType, str]
15-
Anchor = Package
16+
Anchor = Union[Package, None]
17+
ModuleContext = Dict[str, str]
1618

1719

1820
def files(package: Anchor) -> Traversable:
1921
"""
2022
Get a Traversable resource for an anchor.
2123
"""
22-
return from_package(resolve(package))
24+
context = inspect.currentframe().f_back.f_globals # type: ignore
25+
return from_package(resolve(package, context))
2326

2427

2528
def get_resource_reader(package: types.ModuleType) -> Optional[ResourceReader]:
@@ -39,15 +42,20 @@ def get_resource_reader(package: types.ModuleType) -> Optional[ResourceReader]:
3942

4043

4144
@functools.singledispatch
42-
def resolve(cand: Package):
45+
def resolve(cand: Package, context: ModuleContext):
4346
return cand
4447

4548

4649
@resolve.register
47-
def _(cand: str):
50+
def _(cand: str, context: ModuleContext):
4851
return importlib.import_module(cand)
4952

5053

54+
@resolve.register
55+
def _(cand: None, context: ModuleContext):
56+
return resolve(context['__name__'], context)
57+
58+
5159
def from_package(package):
5260
"""
5361
Return a Traversable object for the given package.

0 commit comments

Comments
 (0)