modulehandler

A dynamic module handler, with standalone tools


License
MIT
Install
pip install modulehandler==0.5

Documentation

ModuleHandler

Installation

pip3 install modulehandler

Usage

Considering this folder tree

tests_import_handler
├── addons
│   └── m1
│       ├── __init__.py
│       ├── manifest.json
│       └── README.md
├── m2
│   ├── __init__.py
│   └── manifest.json
└── m3.py
import ModuleHandler
from pathlib import Path
registry = ModuleHandler.ModuleRegistry()

tests_import_handler = Path("tests_import_handler").resolve()
addons = tests_import_handler.joinpath("addons")
m2 = tests_import_handler.joinpath("m2")
m3 = tests_import_handler.joinpath("m3.py")

# Register won't load
registry.register_search_dir(addons)
registry.register_module(m2)
registry.register_module(m3)

# load modules individually
m3 = registry.load("m3")  # ignore if already loader with noreload=True

# load all modules
registry.load_all()  # ignore if already loader with noreload=True

# access loaded module
m1 = registry["m1"]
m4 = registry.get("m4")  # return None

# register + load
m2 = registry.import_module(m2)

# import from search paths if not already loaded
m1 = registry.imports("m1")

# get readme as html
registry.description("m1")

# get module absolute path
registry.path("m1")

Nb:

  • This won't change sys search paths nor add modules to sys.modules: "m1" in sys.modules # False
  • loading only replace module in registry but this won't propagate to copy of old module.

Future

  • Currently, the configuration filename is not easily editable, same for configuration validation. It may be editable but still with current behaviour kept as default.