-
Notifications
You must be signed in to change notification settings - Fork 36
Plugins
e3-core
is designed to be small and to be easy to configure and extend by
loading external code dynamically. In order to discover and load the plugins at runtime e3-core
uses setuptools entry points. To ease the management of the plugins and avoid hard to detect errors, the e3
project uses stevedore
and abc
.
An entry point is a way to reference an object defined in another Python package.
In e3
these objects are classes derived from an abstract base class (using abc
) defining the plugin interface.
The namespace for e3
entry point are all prefixed with e3.
in order to
avoid polluting the namespace.
e3-core
defines and uses the following plugins interface:
The command line actions for e3-sandbox
can be provided by external plugins registered in the e3.anod.sandbox.sandbox_action
namespace.
To add another action subclass :class::e3.anod.sandbox.SandBoxAction and
reference your new class in the e3.anod.sandbox.sandbox_action
entry points namespace.
In a package e3-contrib
, define a new class:
class SandBoxActionExample(e3.anod.sandbox.SandBoxAction):
name = 'example'
help = 'An example of e3-sandbox action'
def add_parser(self):
self.parser.add_argument(
'--another-command-line')
def run(self.args):
sandbox = e3.anod.sandbox.SandBox()
sandbox.root_dir = args.sandbox
# Run any action on the sandbox
# ...
Then register it in e3-contrib/setup.py
:
entry_points={
'e3.anod.sandbox.sandbox_action': [
'example = e3.contrib.sandbox.SandBoxActionExample',
]}