Compare commits

...

2 Commits

2 changed files with 15 additions and 90 deletions

View File

@ -69,7 +69,12 @@ def configure_app(app, test_config=None):
config["DATABASE"]["engine"] = "sqlite" config["DATABASE"]["engine"] = "sqlite"
if config["DATABASE"]["engine"] == "mysql": if config["DATABASE"]["engine"] == "mysql":
engine = "mysql" + ("+pymysql" if os.name == "nt" else "") engine = "mysql"
try:
# Try mysqlclient first
from MySQLdb import _mysql
except ModuleNotFoundError:
engine += "+pymysql"
options = "?charset=utf8mb4" options = "?charset=utf8mb4"
elif config["DATABASE"]["engine"] == "postgres": elif config["DATABASE"]["engine"] == "postgres":
engine = "postgresql+psycopg2" engine = "postgresql+psycopg2"

View File

@ -3,9 +3,14 @@ This is the backend of the Flaschengeist.
## Installation ## Installation
### Requirements ### Requirements
- mysql or mariadb - `mysql` or `mariadb`
- including development files libmariadb-dev - maybe `libmariadb` development files[1]
- python 3.6+ - python 3.7+
[1] By default Flaschengeist uses mysql as database backend, if you are on Windows Flaschengeist uses `PyMySQL`, but on
Linux / Mac the faster `mysqlclient` is used, if it is not already installed installing from pypi requires the
development files for `libmariadb` to be present on your system.
### Install python files ### Install python files
pip3 install --user . pip3 install --user .
or with ldap support or with ldap support
@ -69,89 +74,4 @@ Or with html output (open `htmlcov/index.html` in a browser):
$ coverage html $ coverage html
## Development ## Development
### Code Style Please refer to our [development wiki](https://flaschengeist.dev/Flaschengeist/flaschengeist/wiki/Development).
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/main/docs/the_black_code_style/current_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
#### Ignore changes on config
git update-index --assume-unchanged flaschengeist/flaschengeist.toml
## 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"
]
},
)