Management system for student clubs.
				https://flaschengeist.dev
			
			
		|  | ||
|---|---|---|
| flaschengeist | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| flaschengeist.example.toml | ||
| flaschengeist.wsgi | ||
| readme.md | ||
| run_flaschengeist | ||
| setup.py | ||
		
			
				
				readme.md
			
		
		
			
			
		
	
	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
- Rename flaschengeist.example.cfgtoflaschengeist.cfg
- Move it to either
- the module path (where flaschegeist is installed)
- ~/.config/
- A custom path and set environment variable FLASCHENGEIST_CONF
 
- 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.
Code formatting
We use 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"
        ]
    },
)