Loading unittest_extra/coverage.py +24 −5 Original line number Diff line number Diff line Loading @@ -26,16 +26,31 @@ A module to produce coverage reports for testing. """ from six import string_types from importlib import import_module from pkgutil import walk_packages from itertools import product from functools import wraps from fnmatch import fnmatch import contextlib import importlib import itertools import logging import pkgutil import sys def _import_module(module, exclude): if module not in sys.modules: loader = pkgutil.get_loader(module) if isinstance(exclude, string_types): if fnmatch(loader.filename, exclude): return elif exclude: for pattern in exclude: if fnmatch(loader.filename, pattern): return sys.modules[module] = importlib.import_module(module) return sys.modules[module] @contextlib.contextmanager def coverage(modules, include=None, exclude=None, file=None): """ Loading @@ -56,15 +71,19 @@ def coverage(modules, include=None, exclude=None, file=None): return old_modules = sys.modules.copy() modules = {import_module(m) if isinstance(m, string_types) else m for m in modules} modules = { _import_module(m, exclude) if isinstance(m, string_types) else m for m in modules } for module in list(modules): try: walker = walk_packages(module.__path__, module.__name__+'.') walker = pkgutil.walk_packages(module.__path__, module.__name__+'.') except (AttributeError): modules.add(module) else: modules.update(import_module(n) for l,n,p in walker) modules.update(_import_module(n, exclude) for l,n,p in walker) modules.discard(None) for module in modules: del sys.modules[module.__name__] Loading Loading
unittest_extra/coverage.py +24 −5 Original line number Diff line number Diff line Loading @@ -26,16 +26,31 @@ A module to produce coverage reports for testing. """ from six import string_types from importlib import import_module from pkgutil import walk_packages from itertools import product from functools import wraps from fnmatch import fnmatch import contextlib import importlib import itertools import logging import pkgutil import sys def _import_module(module, exclude): if module not in sys.modules: loader = pkgutil.get_loader(module) if isinstance(exclude, string_types): if fnmatch(loader.filename, exclude): return elif exclude: for pattern in exclude: if fnmatch(loader.filename, pattern): return sys.modules[module] = importlib.import_module(module) return sys.modules[module] @contextlib.contextmanager def coverage(modules, include=None, exclude=None, file=None): """ Loading @@ -56,15 +71,19 @@ def coverage(modules, include=None, exclude=None, file=None): return old_modules = sys.modules.copy() modules = {import_module(m) if isinstance(m, string_types) else m for m in modules} modules = { _import_module(m, exclude) if isinstance(m, string_types) else m for m in modules } for module in list(modules): try: walker = walk_packages(module.__path__, module.__name__+'.') walker = pkgutil.walk_packages(module.__path__, module.__name__+'.') except (AttributeError): modules.add(module) else: modules.update(import_module(n) for l,n,p in walker) modules.update(_import_module(n, exclude) for l,n,p in walker) modules.discard(None) for module in modules: del sys.modules[module.__name__] Loading