🛎 Test-import all modules 🛎
Individually and separately imports each Python module or file in a project and reports warnings or failures at the end.
Running impall as a unit test
Just inherit from the base class and it will automatically find and import each file, like this.
import impall
class ImpAllTest(impall.ImpAllTest):
pass
(You can copy this file into your project if you like.)
Tests are customized by overriding one of these following properties in the derived class.
CLEAR_SYS_MODULES, EXCLUDE, FAILING, INCLUDE, MODULES, PATHS,
RAISE_EXCEPTIONS, and WARNINGS_ACTION.
For example, to turn warnings into errors, set the property WARNINGS_ACTION in the derived class definition, like this.
class ImpAllTest(impall.ImpAllTest):
WARNINGS_ACTION = 'error'
Running impall as a command-line utility
$ impall --warnings_action=error
$ impall -w error
The properties INCLUDE, EXCLUDE, and PROJECT_PATH can be lists of strings, or a string separated with colons like 'foo.mod1:foo.mod2'
INCLUDE and EXCLUDE match modules, and also allow * as a wildcard. A single * matches any module segment, and a double ** matches any remaining segments. For example,
INCLUDE = 'foo', 'bar.*', 'baz.**'
- matches
foo
but notfoo.foo
- matches
bar.foo
but notbar
orbar.foo.bar
- matches
baz.foo
as well asbaz.foo.bar
but notbaz
A note on side-effects
to reduce side-effects, sys.modules
is restored to its original
condition after each import if CLEAR_SYS_MODULES is true, but there might be
other side-effects from loading some specific module.
Use the EXCLUDE property to exclude modules with undesirable side effects. In general, it is probably a bad idea to have significant side-effects just from loading a module.