Browse Source

Ajout doc si présence proxy

master
scayac 1 month ago
parent
commit
9db7014349
  1. 1
      backend/README_BACKEND.md
  2. 1
      frontend/README_FRONTEND.md
  3. 22
      frontend/app/routes.py
  4. 4
      frontend/app/static/css/style.css
  5. 3
      frontend/app/templates/base.html

1
backend/README_BACKEND.md

@ -37,6 +37,7 @@ python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
pip install -r requirements.txt pip install -r requirements.txt
``` ```
Si présence d'un proxy, la dernière commande sera `pip install -r requirements.txt --proxy http://proxy:port`.
## Configuration ## Configuration

1
frontend/README_FRONTEND.md

@ -18,6 +18,7 @@ python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
pip install -r requirements.txt pip install -r requirements.txt
``` ```
Si présence d'un proxy, la dernière commande sera `pip install -r requirements.txt --proxy http://proxy:port`.
## Execution ## Execution

22
frontend/app/routes.py

@ -93,7 +93,7 @@ def login() -> str | Response:
except BackendApiError: except BackendApiError:
return render_template( return render_template(
"login.html", "login.html",
login_error="Impossible de se connecter au service pour le moment. Verifiez que le backend est demarre puis reessayez.", login_error="Impossible de se connecter au service pour le moment. Vérifiez que le backend est demarré puis réessayez.",
attempted_username=username, attempted_username=username,
) )
@ -161,11 +161,11 @@ def save_trigger() -> Response:
start_seconds = float(start_raw) start_seconds = float(start_raw)
end_seconds = _parse_optional_float(end_raw) end_seconds = _parse_optional_float(end_raw)
except ValueError: except ValueError:
flash("Les temps de debut/fin doivent etre numeriques.", "error") flash("Les temps de debut/fin doivent être numériques.", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
if start_seconds < 0 or (end_seconds is not None and end_seconds <= start_seconds): if start_seconds < 0 or (end_seconds is not None and end_seconds <= start_seconds):
flash("Fenetre temporelle invalide.", "error") flash("Fenêtre temporelle invalide.", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
payload = { payload = {
@ -186,7 +186,7 @@ def save_trigger() -> Response:
flash(f"Echec d'enregistrement du trigger: {exc}", "error") flash(f"Echec d'enregistrement du trigger: {exc}", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
flash(f"Trigger {trigger_type} enregistre.", "success") flash(f"Trigger {trigger_type} enregistré.", "success")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
@ -224,7 +224,7 @@ def play_trigger() -> Response:
try: try:
client.play_trigger(trigger_id) client.play_trigger(trigger_id)
flash(f"Trigger {trigger_id} demarre.", "success") flash(f"Trigger {trigger_id} demarré.", "success")
except BackendApiError as exc: except BackendApiError as exc:
flash(f"Echec du lancement: {exc}", "error") flash(f"Echec du lancement: {exc}", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
@ -241,7 +241,7 @@ def stop_audio() -> Response:
client.stop_audio() client.stop_audio()
flash("Audio arrete.", "info") flash("Audio arrete.", "info")
except BackendApiError as exc: except BackendApiError as exc:
flash(f"Echec de l'arret audio: {exc}", "error") flash(f"Echec de l'arrêt audio: {exc}", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
@ -253,7 +253,7 @@ def upload_audio() -> Response:
audio = request.files.get("audio_file") audio = request.files.get("audio_file")
if audio is None or audio.filename is None or audio.filename.strip() == "": if audio is None or audio.filename is None or audio.filename.strip() == "":
flash("Selectionnez d'abord un fichier.", "error") flash("Sélectionnez d'abord un fichier.", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
filename = secure_filename(audio.filename) filename = secure_filename(audio.filename)
@ -263,17 +263,17 @@ def upload_audio() -> Response:
ext = Path(filename).suffix.lower() ext = Path(filename).suffix.lower()
if ext not in ALLOWED_AUDIO_EXTENSIONS: if ext not in ALLOWED_AUDIO_EXTENSIONS:
flash("Format audio non supporte.", "error") flash("Format audio non supporté.", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
existing_names = {item.name.lower() for item in _music_dir().iterdir() if item.is_file()} existing_names = {item.name.lower() for item in _music_dir().iterdir() if item.is_file()}
if filename.lower() in existing_names: if filename.lower() in existing_names:
flash("Un fichier avec ce nom existe deja.", "error") flash("Un fichier avec ce nom existe déjà.", "error")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
destination = _music_dir() / filename destination = _music_dir() / filename
audio.save(destination) audio.save(destination)
flash(f"Fichier {filename} televerse.", "success") flash(f"Fichier {filename} téléversé.", "success")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
@ -294,7 +294,7 @@ def delete_audio() -> Response:
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))
target.unlink() target.unlink()
flash(f"Fichier {filename} supprime.", "success") flash(f"Fichier {filename} supprimé.", "success")
return redirect(url_for("ui.dashboard")) return redirect(url_for("ui.dashboard"))

4
frontend/app/static/css/style.css

@ -23,7 +23,7 @@ body {
} }
body { body {
font-family: "Sora", sans-serif; font-family: "Noto Sans", "DejaVu Sans", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
color: var(--ink); color: var(--ink);
background: background:
radial-gradient(circle at 15% -5%, #ffe8cc 0%, transparent 40%), radial-gradient(circle at 15% -5%, #ffe8cc 0%, transparent 40%),
@ -35,7 +35,7 @@ body {
h1, h1,
h2, h2,
h3 { h3 {
font-family: "Space Grotesk", sans-serif; font-family: "Noto Sans", "DejaVu Sans", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
margin: 0 0 0.4rem; margin: 0 0 0.4rem;
} }

3
frontend/app/templates/base.html

@ -4,9 +4,6 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>pySonnerie - Interface de controle</title> <title>pySonnerie - Interface de controle</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Sora:wght@300;400;600;700&family=Space+Grotesk:wght@500;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="{{ url_for('ui.static', filename='css/style.css') }}" /> <link rel="stylesheet" href="{{ url_for('ui.static', filename='css/style.css') }}" />
</head> </head>
<body> <body>

Loading…
Cancel
Save