Go to file
jaschop 4798263c27
All checks were successful
continuous-integration/drone/push Build is passing
Merge pull request 'qa/seed-refactor' (!73) from qa/seed-refactor into main
Reviewed-on: #73
2023-10-27 15:21:24 +02:00
.reuse replace flags 2022-01-15 17:51:42 +01:00
data replace flags 2022-01-15 17:51:42 +01:00
ki minor cleanups 2023-10-20 16:59:47 +02:00
LICENSES mehr skill icons 2021-10-06 20:45:26 +02:00
migrations Keep alembic from configuring loggers 2022-01-26 23:17:41 +01:00
storage separate storage and data kompetenzinventar/ki-frontend#28 2021-09-20 19:58:42 +02:00
.drone.yml split trigger 2022-02-28 19:28:35 +01:00
.editorconfig make project reuse compliant 2021-07-05 19:37:05 +02:00
.flake8 implement ldap auth 2021-09-15 19:16:45 +02:00
.gitignore make project reuse compliant 2021-07-05 19:37:05 +02:00
.pre-commit-config.yaml availibility 2021-10-04 18:10:31 +02:00
.style.yapf make project reuse compliant 2021-07-05 19:37:05 +02:00
app.py fix code style 2022-02-28 18:48:32 +01:00
docker-compose.yml switch docker-compose to local build 2021-07-28 22:28:34 +02:00
Dockerfile Update backend base and builder images 2023-10-11 17:40:30 +02:00
env.dev separate storage and data kompetenzinventar/ki-frontend#28 2021-09-20 19:58:42 +02:00
Pipfile bumped pyyaml version to prevent a ci fail 2023-08-24 16:24:34 +02:00
Pipfile.lock bumped pyyaml version to prevent a ci fail 2023-08-24 16:24:34 +02:00
README.md Merge branch 'main' into mitmachen 2022-01-06 16:36:14 +01:00
run_prod.py tune threads to avoid queued tasks in normal situations 2023-08-24 14:25:22 +02:00

Kompetenzinventar Backend

Build Status REUSE status

Über

Dieses Repo enthält das Backend des Projekts Kompentenzinventar - einer Webapplikation zur Erfassung von Userprofilen für die WTF eG.

Implementiert ist das Backend mit Flask.

Mitmachen

Du kannst gerne bei der Entwicklung des Kompetenzinventars mitmachen.

  • Fehler oder fehlende Funktionen erfassen. Bitte direkt über die Issues in Gitea.
  • Dokumentation oder Implementierung verbessern. Bitte forke hierzu das Projekt, branche von main ab und erstelle dann einen Pull Request.

Kommunikation

Folgende Kanäle gibt es für die Kommunikation über das Kompetenzinventar:

  • Die Issues im WTF Gitea.
  • Den Bereich AG Entwicklung im WTF Forum.
  • Einen Raum in Matrix. Zutritt per Einladung, frlan lädt ein, eine einfache PN im Forum reicht.

Repos

Entwicklung

Abhängigkeiten

Entwicklungsumgebung aufbauen und starten

Ggf. vorher aufräumen

rm storage/ki.sqlite
cp env.dev .env
pipenv install --dev
pipenv shell
flask db upgrade
flask seed --dev
flask run

http://localhost:5000/

pre-commit einrichten

Damit mensch nicht verpeilt kaputten Code Style zu commiten, kann pre-commit benutzt werden. Einmal im Virtualenv ausführen:

pre-commit install

alembic Befehle

alembic ist über Flask-Migrate eingebunden. Es wird über flask db ... aufgerufen.

QA

python -m unittest discover ki

# Code formatieren
yapf -i --recursive ki/

# Code-Style prüfen
flake8

Testbenutzer

Lokal ohne LDAP

Für ein Login ohne LDAP werden die Benutzer aus der auth.yml benutzt.

Lokal mit LDAP

Einen LDAP Server aufsetzen. Z.B. https://directory.apache.org/apacheds/

In der .env die LDAP Dinge ausfüllen (siehe env.dev).

Beispiel-Requests

Beispiele brauchen curl und jq.

curl -s \
    -D "/dev/stderr" \
    http://localhost:5000/skills?search=ph | jq
curl -s \
    -D "/dev/stderr" \
    http://localhost:5000/languages?search=fr | jq
curl -s \
    -D "/dev/stderr" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"username": "peter", "password": "geheim"}' \
    http://localhost:5000/users/login | jq
curl -s \
    -D "/dev/stderr" \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer 22e6c5fc-8a5a-440e-b1f4-018deb9fd24e" \
    -d '{"pronouns": "Herr Dr. Dr."}' \
    http://localhost:5000/users/1/profile | jq
curl -s \
    -D "/dev/stderr" \
    -H "Authorization: Bearer 22e6c5fc-8a5a-440e-b1f4-018deb9fd24e" \
    http://localhost:5000/users/1/profile

Profilsuche nach Nickname:

curl -s \
    -D "/dev/stderr" \
    -H "Authorization: Bearer 22e6c5fc-8a5a-440e-b1f4-018deb9fd24e" \
    http://localhost:5000/users/profiles

Docker

Image bauen

docker build --tag ki_backed .

Container starten

Im Beispiel wird die SQLite Datenbank ./data/ki_backend.sqlite verwendet.

DB-Datei anlegen

touch data/ki_docker.sqlite
chmod a+rw data/ki_docker.sqlite

Container starten

docker run \
    --name=ki_backend \
    -v ${PWD}/data/ki_docker.sqlite:/app/data/ki_docker.sqlite \
    -e SQLALCHEMY_DATABASE_URI='sqlite:///data/ki_docker.sqlite' \
    -p 5000:5000 \
    ki_backend

Skills und Sprachen importieren

docker exec ki_backend sh -c "cd /app && /pyroot/bin/flask seed"

Produktionsumgebung

Für die Produktionsumgebung wird waitress benutzt.

run_prod.py führt die DB Migrationen aus und startet den Server.

Integrationsumgebung

Per docker-compose kann eine Integrationsumgebung gestartet werden.
Beide Projekte müssen nebeneinander ausgecheckt sein:

./
  ki-backend
  ki-frontend

Alles starten:

docker-compose up

Dann http://localhost:13337 aufrufen.

Workaround, falls der Zugriff auf registry.wtf-eg.net nicht möglich ist

Voraussetzung:

ki-backend-docker muss parallel zum ki-backend ausgecheckt sein.

cd ki-backend-docker
docker build . --target base -t ki-backend-base
docker build . --target builder -t ki-backend-builder

Ändern der 2 Einträge im Dockerfile des ki-backend:

  • registry.wtf-eg.net/ki-backend-builder:1.0.0 -> ki-backend-builder
  • registry.wtf-eg.net/ki-backend-base:1.0.0 -> ki-backend-base

Danach sollte docker-compose up funktionieren.

Lizenzen

Dieses Projekt erfüllt die REUSE Spezifikation.

Die Lizenzen aller Dateien im Projekt können mit diesem Kommando aufgelistet werden:

reuse spdx