Management system for student clubs. https://flaschengeist.dev
Go to file
Ferdinand Thiessen 30305c26cc [Plugin] Schedule: Identify EventTypes by ID not name 2021-01-24 16:20:25 +01:00
flaschengeist [Plugin] Schedule: Identify EventTypes by ID not name 2021-01-24 16:20:25 +01:00
tests [System][Tests]: Added infrastructure for tests, added first unit test 2021-01-23 02:18:44 +01:00
.git-blame-ignore-revs [Plugin] balance: Enhanced the model by adding serialization members 2020-11-01 18:38:53 +01:00
.gitignore [Git] Updated ignore list 2020-10-28 14:44:19 +01:00
flaschengeist.example.toml [System][Plugin] users: Send users a link to set their own password and initially set random password 2021-01-21 14:08:06 +01:00
flaschengeist.wsgi [Plugin] Fixed return values in auth and users routes 2020-10-31 15:20:28 +01:00
readme.md [Test] Added setup.cfg to run tests and coverage, updated Readme 2021-01-24 16:19:46 +01:00
run_flaschengeist [Script] Respect root if running devel server 2020-11-18 01:55:02 +01:00
setup.cfg [Test] Added setup.cfg to run tests and coverage, updated Readme 2021-01-24 16:19:46 +01:00
setup.py [Test] Added setup.cfg to run tests and coverage, updated Readme 2021-01-24 16:19:46 +01:00

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 also run the tests:

pip3 install --user ".[ldap,test]"

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.toml to flaschengeist.toml
  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 run

or with debug messages:

run_flaschengeist run --debug

Tests

$ pip install '.[test]'
$ pytest

Run with coverage report:

$ coverage run -m pytest
$ coverage report

Or with html output (open htmlcov/index.html in a browser):

$ coverage html

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"]

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"
        ]
    },
)