Fix: NanoBanana null-safe handling + bessere Fehlermeldungen

- _handle_nanobanana_generate: Prüfe code!=0 (z.B. 402=kein Guthaben), data=None-Safe
- _handle_nanobanana_status: data=None-Safe + response=None-Safe
- JavaScript: Bessere Fehlermeldung wenn resp.json() fehlschlägt
- Verhindert 'NoneType' object has no attribute 'get' Crash
This commit is contained in:
Hermes Agent
2026-06-22 22:46:24 +02:00
parent 513fc0e6af
commit 8299ad1e24
+26 -7
View File
@@ -493,7 +493,7 @@ def build_index(articles: list[dict]) -> str:
<header>
<div class="header-inner">
<h1>Artikel-Übersicht</h1>
<p class="subtitle">{count} Artikel im Archiv · <a href="/?key={ACCESS_TOKEN}">Aktualisieren</a><span class="token-indicator">{token_status}</span></p>
<p class="subtitle">{count} Artikel im Archiv · <a href="/?key={ACCESS_TOKEN}">Aktualisieren</a> · <a href="/nanobanana?key={ACCESS_TOKEN}" style="font-weight:600">🎨 Bild-Generator</a><span class="token-indicator">{token_status}</span></p>
</div>
</header>
<div class="container">
@@ -1038,11 +1038,22 @@ h1{color:#c0392b;}p{color:#888;}</style></head>
return
result = _nanobanana_generate(prompt, image_urls, aspect_ratio, resolution)
# Prüfe auf Transport-Fehler (Netzwerk/HTTP)
if "error" in result:
self._json_reply(500, {"ok": False, "error": result["error"]})
return
task_id = result.get("data", {}).get("taskId", "")
# Prüfe auf NanoBanana API-Fehler (code != 0, z.B. 402 = kein Guthaben)
api_code = result.get("code", 0)
if api_code != 0:
api_msg = result.get("msg", "Unbekannter API-Fehler")
self._json_reply(500, {"ok": False, "error": f"NanoBanana: {api_msg} (Code {api_code})"})
return
# Null-Safe: data kann None sein
data = result.get("data") or {}
task_id = data.get("taskId", "")
if not task_id:
self._json_reply(500, {"ok": False, "error": "Keine taskId in API-Antwort"})
return
self._json_reply(200, {"ok": True, "taskId": task_id})
def _handle_nanobanana_status(self):
@@ -1060,11 +1071,12 @@ h1{color:#c0392b;}p{color:#888;}</style></head>
self._json_reply(500, {"ok": False, "error": result["error"]})
return
data = result.get("data", {})
# Null-Safe: data kann None sein
data = result.get("data") or {}
self._json_reply(200, {
"ok": True,
"successFlag": data.get("successFlag"),
"resultImageUrl": data.get("response", {}).get("resultImageUrl"),
"resultImageUrl": (data.get("response") or {}).get("resultImageUrl"),
"completeTime": data.get("completeTime"),
})
@@ -2064,10 +2076,17 @@ async function startGeneration() {{
method: 'POST',
body: formData
}});
const data = await resp.json();
let data;
try {{
data = await resp.json();
}} catch (e) {{
const text = await resp.text().catch(() => '');
throw new Error('Server-Antwort nicht lesbar (Status ' + resp.status + '): ' + text.substring(0, 200));
}}
if (!data.ok) {{
throw new Error(data.error || 'Unbekannter Fehler');
throw new Error(data.error || 'Unbekannter Fehler (Status ' + resp.status + ')');
}}
document.getElementById('spinnerText').textContent = 'Warte auf Ergebnis…';