Browse Source

Fix minor issues with finder and meta paths

pull/3/head
Brett Langdon 7 years ago
parent
commit
c5a66fa937
No known key found for this signature in database GPG Key ID: B664881177781B04
2 changed files with 15 additions and 3 deletions
  1. +10
    -1
      importhook/finder.py
  2. +5
    -2
      importhook/meta_paths.py

+ 10
- 1
importhook/finder.py View File

@ -12,6 +12,11 @@ def hook_finder(finder):
This function replaces the `Finder.find_spec` function to ensure that any ModuleSpecs will This function replaces the `Finder.find_spec` function to ensure that any ModuleSpecs will
use an `importmod.HookLoader` use an `importmod.HookLoader`
""" """
# If this finder has already been 'hooked', then return as-is
if hasattr(finder, '__hooked__'):
return finder;
# Determine if we were given an instance or a class
if isinstance(finder, type): if isinstance(finder, type):
finder_cls = finder finder_cls = finder
else: else:
@ -30,7 +35,7 @@ def hook_finder(finder):
return spec return spec
return wrapper return wrapper
def wrap_fid_loader(find_loader):
def wrap_find_loader(find_loader):
@functools.wraps(find_loader) @functools.wraps(find_loader)
def wrapper(fullname, path): def wrapper(fullname, path):
logger.debug(f'{finder_name}.find_loader(fullname={fullname}, path={path})') logger.debug(f'{finder_name}.find_loader(fullname={fullname}, path={path})')
@ -38,8 +43,12 @@ def hook_finder(finder):
return HookLoader(loader) return HookLoader(loader)
return wrapper return wrapper
# Override the functions we care about
if hasattr(finder, 'find_spec'): if hasattr(finder, 'find_spec'):
setattr(finder, 'find_spec', wrap_find_spec(finder.find_spec)) setattr(finder, 'find_spec', wrap_find_spec(finder.find_spec))
if hasattr(finder, 'find_loader'): if hasattr(finder, 'find_loader'):
setattr(finder, 'find_loader', wrap_find_loader(finder.find_loader)) setattr(finder, 'find_loader', wrap_find_loader(finder.find_loader))
# Make this finder as being 'hooked'
setattr(finder, '__hooked__', True)
return finder return finder

+ 5
- 2
importhook/meta_paths.py View File

@ -1,5 +1,3 @@
from importlib.abc import MetaPathFinder
from .finder import hook_finder from .finder import hook_finder
@ -15,3 +13,8 @@ class HookMetaPaths(list):
def __setitem__(self, key, val): def __setitem__(self, key, val):
super(HookMetaPaths, self).__setitem__(hook_finder(val)) super(HookMetaPaths, self).__setitem__(hook_finder(val))
def __add__(self, other):
if not isinstance(other, HookMetaPaths):
other = HookMetaPaths(other)
super(HookMetaPaths, self).__add__(other)

Loading…
Cancel
Save