Python package / plugin / extension manager
Project description
Dismantle
Dismantle Python package / plugin / extension manager.
"""Simple plugin example"""
from dismantle import plugin
class Chat():
@plugin.register('chat.message')
def show(self, message):
print(message)
@plugin.plugin('chat.message', order=-1)
def make_uppercase(message):
return message.upper()
"""Full example using all aspects."""
from pathlib import Path
from dismantle.extension import Extensions, IExtension
from dismantle.index import JsonFileIndexHandler
from dismantle.package import LocalPackageHandler
class ColorExtension(IExtension):
_category = 'color'
def color(self) -> None:
...
class GreenColorExtension(ColorExtension):
_name = 'green'
def color(self) -> None:
print(f'color is {self._name}')
packages = {}
index = JsonFileIndexHandler('index.json')
for pkg_meta in index:
meta = index[pkg_meta]
path = datadir.join(meta['path'])
package = LocalPackageHandler(meta['name'], path)
package._meta = {**package._meta, **meta}
package.install()
packages[package.name] = package
extensions = Extensions([ColorExtension], packages, 'ext_')
assert extensions.types == ['color']
assert list(extensions.category('color').keys()) == [
'@scope-one/package-one.extension.green.GreenColorExtension',
'@scope-one/package-two.extension.red.RedColorExtension',
'@scope-one/package-three.extension.blue.BlueColorExtension',
]
assert list(extensions.extensions.keys()) == ['color']
assert list(extensions.imports.keys()) == [
'@scope-one/package-one.extension.green',
'@scope-one/package-two.extension.red',
'@scope-one/package-three.extension.blue'
]
Dismantle allows you to provide the ability to create a plugin/extension/module for an application. It does this by checking a package index and using that index to manage package versions. Packages then contain plugins (using decorators) and extensions (using a custom module loader) to add the additional functionality to the application.
Installing Dismantle and Supported Versions
Dismantle is available on PyPI:
$ python -m pip install dismantle
Dismantle officially supports Python 3.7+.
Supported Features & Best–Practices
Dismantle is ready for the demands of providing flexibility within applications allowing developers to build rich ecosystems around core applications.
Index Management
- easy to create custom index handlers providing additional ways to define package indexes
- local index file support using json
- url based index file support using json
- etag based caching for url based index
Packaging
- easy to create custom package handlers providing additional ways to define package sources
- easy to create custom package formats compression types and structures
- support for zip, tar.gz, tgz, and local directories as package formats
- support for local and url based (http/https) package handlers
- hash validation for packages with the ability to verify package integrity
Extensions
- Categorized extension groups to filter extension types (eg. loggers, parsers, ...)
- Support for init or .py based module loading.
- Extension activation and deactivation management.
- Module name collision avoidance
- Hierarchical module naming
Plugins
- Decorator based plugins with pre and post value modification
- Multiple plugins per function with ability to set execution order
- Activation management
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for dismantle-0.10.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3b57b348765047a8261db05bad12629ddc65f8d61b3d7db75bd937a289d425f4 |
|
MD5 | a1f75f5262cbca2308193d295e8f0451 |
|
BLAKE2b-256 | 81b71bb44901ea576a615d640bfe0b9f1e52ac43de7c2676ea7d220d673e8209 |