2.1 KiB
Example on Plugin Development
File Structure
- root
- flaschengeist_example
- __init__.py
- plugin.py
[- migrations]
- setup.cfg
In a minimal example, you would only need two python source files and your setup configuration. If you also use custom database tables, you would also need a directory containing your alembic-migration files.
Source code
Code is seperated in two locations, the meta data of your plugin goes into the __init__.py
and all logic goes into the plugin.py
, of cause you could add more files, but make sure to not depend on some external packages in the __init__.py
.
Project data / setuptools
For Flaschengeist to find your plugin, you have to install it corretly, especially the entry points have to be set.
[metadata]
license = MIT
version = 1.0.0
name = flaschengeist-example
description = Example plugin for Flaschengeist
# ...
[options]
packages =
flaschengeist_example
install_requires =
flaschengeist == 2.0.*
[options.entry_points]
# Path to your meta data instance
flaschengeist.plugins =
example = flaschengeist_example:plugin
Metadata
The __init__.py
contains the plugin meta data.
# __init__.py
from flaschengeist.plugins import PluginMetadata
plugin = PluginMetadata(
id="com.example.plugin", # unique, recommend FQN
name="Example Plugin", # Human readable name
version="1.0.0", # Optional
module="flaschengeist_example.plugin.ExamplePlugin" # module and class of your plugin
)
version
is optional, if not provided the version of your distribution (set in setup.cfg) is used.
Implementation
You plugin implementation goes into the plugin.py
.
Here you define your Plugin class, make sure it inheritates from flaschengeist.plugins.Plugin
or flaschengeist.plugins.AuthPlugin
respectivly.
It will get initalized with the meta data you defined in the __init__.py
and the configuration object.
from flaschengeist.plugins import Plugin
from flask import Blueprint
bp = Blueprint(...)
class ExamplePlugin(Plugin):
blueprint = bp
...
@bp.route("/example")
def get_example():
...