ki-backend/README.md

253 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

2021-07-05 19:37:05 +02:00
<!--
SPDX-FileCopyrightText: WTF Kooperative eG <https://wtf-eg.de/>
SPDX-License-Identifier: AGPL-3.0-or-later
-->
2021-06-14 18:29:55 +02:00
# Kompetenzinventar Backend
2021-05-31 18:45:15 +02:00
2021-06-15 18:31:39 +02:00
[![Build Status](https://drone.wtf-eg.de/api/badges/kompetenzinventar/ki-backend/status.svg?ref=refs/heads/main)](https://drone.wtf-eg.de/kompetenzinventar/ki-backend)
2021-07-05 19:40:00 +02:00
[![REUSE status](https://api.reuse.software/badge/git.wtf-eg.de/kompetenzinventar/ki-backend)](https://api.reuse.software/info/git.wtf-eg.de/kompetenzinventar/ki-backend)
2021-06-15 18:31:39 +02:00
## Ü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](https://git.wtf-eg.de/kompetenzinventar/ki-backend/issues) in Gitea.
- Dokumentation oder Implementierung verbessern. Bitte forke hierzu das Projekt, branche von `main` ab und erstelle dann einen [Pull Request](https://git.wtf-eg.de/kompetenzinventar/ki-backend/pulls).
### Kommunikation
Folgende Kanäle gibt es für die Kommunikation über das Kompetenzinventar:
- Die [Issues](https://git.wtf-eg.de/kompetenzinventar/ki-backend/issues) im WTF Gitea.
- Den Bereich [AG Entwicklung](https://forum.wtf-eg.de/c/interna/ag-entwicklung/21) im WTF Forum.
- Einen Raum in Matrix. Zutritt per Einladung, frlan lädt ein, eine einfache PN im Forum reicht.
### Repos
* **[ki-backend](https://git.wtf-eg.de/kompetenzinventar/ki-backend)** (dieses Repo) enthält das Backend
* [ki-frontend](https://git.wtf-eg.de/kompetenzinventar/ki-frontend) enthält das Frontend
* Weitere Repositories befinden sich in der Gitea Organisation [Kompetenzinventar](https://git.wtf-eg.de/kompetenzinventar).
2021-06-06 22:25:10 +02:00
## Entwicklung
### Abhängigkeiten
- Python 3.8
- [Pipenv](https://github.com/pypa/pipenv)
2021-06-26 09:48:49 +02:00
2021-06-06 22:25:10 +02:00
### Entwicklungsumgebung aufbauen und starten
2021-06-15 18:16:23 +02:00
Ggf. vorher aufräumen
```
2021-10-11 18:22:33 +02:00
rm storage/ki.sqlite
2021-06-15 18:16:23 +02:00
```
2021-06-06 22:25:10 +02:00
```
cp env.dev .env
2021-06-12 13:24:26 +02:00
pipenv install --dev
2021-06-06 22:25:10 +02:00
pipenv shell
flask db upgrade
2021-06-26 10:51:39 +02:00
flask seed --dev
2021-06-06 22:25:10 +02:00
flask run
```
http://localhost:5000/
2021-06-12 13:24:26 +02:00
2021-06-21 21:43:49 +02:00
### 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
```
2021-06-26 09:48:49 +02:00
### `alembic` Befehle
2021-06-13 21:41:01 +02:00
2021-06-26 09:48:49 +02:00
`alembic` ist über [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/index.html) eingebunden.
Es wird über `flask db ...` aufgerufen.
2021-06-13 21:41:01 +02:00
2021-06-26 09:48:49 +02:00
### QA
2021-06-15 18:16:23 +02:00
```
2021-06-26 09:48:49 +02:00
python -m unittest discover ki
2021-06-21 16:06:06 +02:00
2021-06-26 09:48:49 +02:00
# Code formatieren
2021-06-21 16:06:06 +02:00
yapf -i --recursive ki/
2021-06-26 09:48:49 +02:00
# Code-Style prüfen
flake8
2021-06-21 21:22:39 +02:00
```
2021-06-15 18:16:23 +02:00
2021-06-26 09:48:49 +02:00
2021-06-12 13:24:26 +02:00
### Testbenutzer
2021-07-11 12:16:41 +02:00
#### Lokal ohne LDAP
2021-06-12 13:24:26 +02:00
Für ein Login ohne LDAP werden die Benutzer aus der [`auth.yml`](./data/auth.yml) benutzt.
2021-07-11 12:16:41 +02:00
#### 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`](./env.dev)).
2021-06-12 13:24:26 +02:00
2021-06-14 21:55:27 +02:00
### Beispiel-Requests
2021-06-12 13:24:26 +02:00
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
```
2021-06-20 20:13:19 +02:00
```
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
```
2021-06-13 19:41:32 +02:00
```
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
```
2021-06-13 19:41:32 +02:00
2021-06-14 21:55:27 +02:00
## Docker
### Image bauen
```
2021-06-14 22:10:24 +02:00
docker build --tag ki_backed .
2021-06-14 21:55:27 +02:00
```
### 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 \
2021-06-14 22:10:24 +02:00
ki_backend
2021-06-14 21:55:27 +02:00
```
Skills und Sprachen importieren
```
docker exec ki_backend sh -c "cd /app && /pyroot/bin/flask seed"
```
## Produktionsumgebung
2021-06-12 10:06:40 +02:00
Für die Produktionsumgebung wird [waitress](https://docs.pylonsproject.org/projects/waitress/en/latest/) benutzt.
[`run_prod.py`](./run_prod.py) führt die DB Migrationen aus und startet den Server.
2021-06-15 18:16:23 +02:00
2021-07-26 21:52:29 +02:00
## Integrationsumgebung
2021-07-28 22:28:34 +02:00
Per [`docker-compose`](https://docs.docker.com/compose/) kann eine Integrationsumgebung gestartet werden.
Beide Projekte müssen nebeneinander ausgecheckt sein:
```
./
ki-backend
ki-frontend
```
Alles starten:
2021-07-26 21:52:29 +02:00
```
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](https://git.wtf-eg.de/kompetenzinventar/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.
2021-07-26 21:52:29 +02:00
2021-07-05 19:37:05 +02:00
## Lizenzen
Dieses Projekt erfüllt die [REUSE](https://reuse.software/) Spezifikation.
2021-07-05 19:37:05 +02:00
Die Lizenzen aller Dateien im Projekt können mit diesem Kommando aufgelistet werden:
```
reuse spdx
```