Skip to content

Commit

Permalink
Allow a package to resolve its own resources without having to pass a…
Browse files Browse the repository at this point in the history
… reference to itself. Fixes #259.
  • Loading branch information
jaraco committed Oct 5, 2022
1 parent 8c3edeb commit dda15e1
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions importlib_resources/_common.py
Expand Up @@ -5,21 +5,24 @@
import contextlib
import types
import importlib
import inspect

from typing import Union, Optional
from typing import Union, Optional, Dict
from .abc import ResourceReader, Traversable

from ._compat import wrap_spec

Package = Union[types.ModuleType, str]
Anchor = Package
Anchor = Union[Package, None]
ModuleContext = Dict[str, str]


def files(package: Anchor) -> Traversable:
"""
Get a Traversable resource for an anchor.
"""
return from_package(resolve(package))
context = inspect.currentframe().f_back.f_globals # type: ignore
return from_package(resolve(package, context))


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


@functools.singledispatch
def resolve(cand: Package):
def resolve(cand: Package, context: ModuleContext):
return cand


@resolve.register
def _(cand: str):
def _(cand: str, context: ModuleContext):
return importlib.import_module(cand)


@resolve.register
def _(cand: None, context: ModuleContext):
return resolve(context['__name__'], context)


def from_package(package):
"""
Return a Traversable object for the given package.
Expand Down

0 comments on commit dda15e1

Please sign in to comment.