# Flaschengeist ## Installation ### Requirements - mysql or mariadb - python 3.6+ ### Install python files pip3 install --user . or with ldap support pip3 install --user ".[ldap]" or if you want to use bjoern as the HTTP server: pip3 install --user ".[ldap,bjoern]" #### Windows Same as above, but for mysql you have to follow this guide: https://www.radishlogic.com/coding/python-3/installing-mysqldb-for-python-3-in-windows/ ### Configuration 1. Rename `flaschengeist.example.cfg` to `flaschengeist.cfg` 2. Move it to either 1. the module path (where flaschegeist is installed) 2. `~/.config/` 3. A custom path and set environment variable `FLASCHENGEIST_CONF` 3. Change at least the database parameters ### Database installation run_flaschengeist --install ### Run run_flaschengeist or with debug messages: run_flaschengeist --debug ## Development ### Code Style We enforce you to use PEP 8 code style with a line length of 120 as used by Black. See also [Black Code Style](https://github.com/psf/black/blob/master/docs/the_black_code_style.md). #### Code formatting We use [Black](https://github.com/psf/black) as the code formatter. Installation: pip install black Usage: black -l 120 DIRECTORY_OR_FILE ### Misc #### Git blame When using `git blame` use this to ignore the code formatting commits: $ git blame FILE.py --ignore-revs-file .git-blame-ignore-revs Or if you just want to use `git blame`, configure git like this: $ git config blame.ignoreRevsFile .git-blame-ignore-revs ## Plugin Development ### File Structure flaschengeist-example-plugin |> __init__.py |> model.py |> setup.py ### Files #### \_\_init\_\_.py from flask import Blueprint from flaschengeist.modules import Plugin example_bp = Blueprint("example", __name__, url_prefix="/example") permissions = {"EXAMPLE_HELLO": "example_hello"} class PluginExample(Plugin): def __init__(self, conf): super().__init__(blueprint=example_bp, permissions=permissions) def install(self): from flaschengeist.system.database import db import .model db.create_all() db.session.commit() @example_bp.route("/hello", methods=['GET']) @login_required(roles=['example_hello']) def __hello(id, **kwargs): return "Hello" #### model.py Optional, only needed if you need your own models (database) from flaschengeist.system.database import db class ExampleModel(db.Model): """Example Model""" __tablename__ = 'example' id = db.Column(db.Integer, primary_key=True) description = db.Column(db.String(240)) #### setup.py from setuptools import setup, find_packages setup( name="flaschengeist-example-plugin", version="0.0.0-dev", packages=find_packages(), install_requires=[ "flaschengeist >= 2", ], entry_points={ "flaschengeist.plugin": [ "example = flaschengeist-example-plugin:ExampleModel" ] }, )