homelab: Import in der Route „Alle Update-Rückwege löschen“ nachgetragen (ruff F821), Test ruft sie auf; Logo-Skript ruff-sauber
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5c6e73c69c
commit
4b57a12257
@@ -161,6 +161,7 @@ def speicher_lage() -> dict:
|
|||||||
# POST /api/homelab/snapshots/{id}/{name}/loeschen nur Snapshots des Orchestrators (mc2-…)
|
# POST /api/homelab/snapshots/{id}/{name}/loeschen nur Snapshots des Orchestrators (mc2-…)
|
||||||
# POST /api/homelab/snapshots/{id}/{name}/zuruecksetzen ebenso; danach Prüfung wie nach einem Update
|
# POST /api/homelab/snapshots/{id}/{name}/zuruecksetzen ebenso; danach Prüfung wie nach einem Update
|
||||||
# POST /api/homelab/sicherungen/{id}/{datei}/loeschen nur Sicherungen des Orchestrators (Bericht)
|
# POST /api/homelab/sicherungen/{id}/{datei}/loeschen nur Sicherungen des Orchestrators (Bericht)
|
||||||
|
# POST /api/homelab/snapshots/rueckwege-loeschen alle Rückwege von Updates, nacheinander (nur per Klick)
|
||||||
# Jede Aktion ist ein Lauf wie „Jetzt updaten“; was nicht geht, beantworten sie mit 409 wie die Update-Knöpfe.
|
# Jede Aktion ist ein Lauf wie „Jetzt updaten“; was nicht geht, beantworten sie mit 409 wie die Update-Knöpfe.
|
||||||
|
|
||||||
@router.get("/snapshots")
|
@router.get("/snapshots")
|
||||||
@@ -173,6 +174,7 @@ def snapshots_liste() -> dict:
|
|||||||
def rueckwege_loeschen() -> dict:
|
def rueckwege_loeschen() -> dict:
|
||||||
"""Alle Rückwege von Updates löschen (Snapshots mit Herkunft „update“, Sicherungen des Orchestrators) — nur per
|
"""Alle Rückwege von Updates löschen (Snapshots mit Herkunft „update“, Sicherungen des Orchestrators) — nur per
|
||||||
Klick des Users, nacheinander, mit Meldung am Ende."""
|
Klick des Users, nacheinander, mit Meldung am Ende."""
|
||||||
|
from services.homelab import snapshots
|
||||||
return _antwort(snapshots.rueckwege_loeschen())
|
return _antwort(snapshots.rueckwege_loeschen())
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -455,6 +455,12 @@ def test_schnittstelle(host):
|
|||||||
antwort = c.post("/api/homelab/snapshots/ct-104/vor-dem-umbau/loeschen")
|
antwort = c.post("/api/homelab/snapshots/ct-104/vor-dem-umbau/loeschen")
|
||||||
assert antwort.status_code == 409 and "Proxmox" in antwort.json()["detail"]
|
assert antwort.status_code == 409 and "Proxmox" in antwort.json()["detail"]
|
||||||
assert c.post("/api/homelab/sicherungen/ct-105/fremd.tar.zst/loeschen").status_code == 409
|
assert c.post("/api/homelab/sicherungen/ct-105/fremd.tar.zst/loeschen").status_code == 409
|
||||||
|
# Aufräumen: ohne Rückwege 409 mit Grund, sonst startet es (hier gibt es zwei).
|
||||||
|
antwort = c.post("/api/homelab/snapshots/rueckwege-loeschen")
|
||||||
|
assert antwort.status_code == 200 and antwort.json() == {"ok": True, "anzahl": 2}
|
||||||
|
ende = time.time() + 20
|
||||||
|
while snapshots._AUFRAEUMEN.is_set() and time.time() < ende:
|
||||||
|
time.sleep(0.05)
|
||||||
antwort = c.post("/api/homelab/snapshots/ct-102/anlegen")
|
antwort = c.post("/api/homelab/snapshots/ct-102/anlegen")
|
||||||
assert antwort.status_code == 200 and antwort.json()["ok"] is True
|
assert antwort.status_code == 200 and antwort.json()["ok"] is True
|
||||||
lauf = _auf_ende(antwort.json())
|
lauf = _auf_ende(antwort.json())
|
||||||
|
|||||||
@@ -34,13 +34,13 @@ qbittorrent qnap rabbitmq radarr rancher rclone readarr redis rocket-chat rustde
|
|||||||
searxng semaphore sonarr speedtest-tracker stirling-pdf syncthing synology tailscale tautulli telegram traefik
|
searxng semaphore sonarr speedtest-tracker stirling-pdf syncthing synology tailscale tautulli telegram traefik
|
||||||
transmission ubuntu umami unraid uptime-kuma vaultwarden vikunja wallabag watchtower webmin wekan wiki-js wireguard
|
transmission ubuntu umami unraid uptime-kuma vaultwarden vikunja wallabag watchtower webmin wekan wiki-js wireguard
|
||||||
woodpecker-ci wordpress zabbix zigbee2mqtt
|
woodpecker-ci wordpress zabbix zigbee2mqtt
|
||||||
""".split()
|
""".split() # noqa: SIM905 — die lange Namensliste liest sich als Text besser
|
||||||
|
|
||||||
# Auf dunklem Grund zu dunkel → helle Variante der Sammlung.
|
# Auf dunklem Grund zu dunkel → helle Variante der Sammlung.
|
||||||
HELL = set("""
|
HELL = set("""
|
||||||
affine borgmatic cockpit crafty-controller debian docmost frigate github go2rtc healthchecks heimdall hermes-agent
|
affine borgmatic cockpit crafty-controller debian docmost frigate github go2rtc healthchecks heimdall hermes-agent
|
||||||
homebridge influxdb logseq matrix mattermost miniflux minio node-red openai outline penpot pfsense portainer radarr scrutiny semaphore tailscale umami vaultwarden wallabag wireguard
|
homebridge influxdb logseq matrix mattermost miniflux minio node-red openai outline penpot pfsense portainer radarr scrutiny semaphore tailscale umami vaultwarden wallabag wireguard
|
||||||
""".split())
|
""".split()) # noqa: SIM905
|
||||||
|
|
||||||
|
|
||||||
def laden(ref: str) -> bytes:
|
def laden(ref: str) -> bytes:
|
||||||
@@ -62,7 +62,7 @@ def main() -> int:
|
|||||||
LISTE.write_bytes((
|
LISTE.write_bytes((
|
||||||
"// Erzeugt von frontend/scripts/logos_laden.py: die Logos unter /logos/<name>.svg (selfh.st/icons, CC BY 4.0).\n"
|
"// Erzeugt von frontend/scripts/logos_laden.py: die Logos unter /logos/<name>.svg (selfh.st/icons, CC BY 4.0).\n"
|
||||||
"// Nicht von Hand pflegen — neue Logos mit demselben Skript holen.\n"
|
"// Nicht von Hand pflegen — neue Logos mit demselben Skript holen.\n"
|
||||||
f"export const LOGOS: ReadonlySet<string> = new Set([\n{zeilen}\n])\n").encode("utf-8"))
|
f"export const LOGOS: ReadonlySet<string> = new Set([\n{zeilen}\n])\n").encode())
|
||||||
print(f"{len(vorhanden)} Logos in {ZIEL}")
|
print(f"{len(vorhanden)} Logos in {ZIEL}")
|
||||||
if fehlt:
|
if fehlt:
|
||||||
print("nicht geladen:", ", ".join(fehlt))
|
print("nicht geladen:", ", ".join(fehlt))
|
||||||
|
|||||||
Reference in New Issue
Block a user