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:
+26
-7
@@ -493,7 +493,7 @@ def build_index(articles: list[dict]) -> str:
|
|||||||
<header>
|
<header>
|
||||||
<div class="header-inner">
|
<div class="header-inner">
|
||||||
<h1>Artikel-Übersicht</h1>
|
<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>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -1038,11 +1038,22 @@ h1{color:#c0392b;}p{color:#888;}</style></head>
|
|||||||
return
|
return
|
||||||
|
|
||||||
result = _nanobanana_generate(prompt, image_urls, aspect_ratio, resolution)
|
result = _nanobanana_generate(prompt, image_urls, aspect_ratio, resolution)
|
||||||
|
# Prüfe auf Transport-Fehler (Netzwerk/HTTP)
|
||||||
if "error" in result:
|
if "error" in result:
|
||||||
self._json_reply(500, {"ok": False, "error": result["error"]})
|
self._json_reply(500, {"ok": False, "error": result["error"]})
|
||||||
return
|
return
|
||||||
|
# Prüfe auf NanoBanana API-Fehler (code != 0, z.B. 402 = kein Guthaben)
|
||||||
task_id = result.get("data", {}).get("taskId", "")
|
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})
|
self._json_reply(200, {"ok": True, "taskId": task_id})
|
||||||
|
|
||||||
def _handle_nanobanana_status(self):
|
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"]})
|
self._json_reply(500, {"ok": False, "error": result["error"]})
|
||||||
return
|
return
|
||||||
|
|
||||||
data = result.get("data", {})
|
# Null-Safe: data kann None sein
|
||||||
|
data = result.get("data") or {}
|
||||||
self._json_reply(200, {
|
self._json_reply(200, {
|
||||||
"ok": True,
|
"ok": True,
|
||||||
"successFlag": data.get("successFlag"),
|
"successFlag": data.get("successFlag"),
|
||||||
"resultImageUrl": data.get("response", {}).get("resultImageUrl"),
|
"resultImageUrl": (data.get("response") or {}).get("resultImageUrl"),
|
||||||
"completeTime": data.get("completeTime"),
|
"completeTime": data.get("completeTime"),
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -2064,10 +2076,17 @@ async function startGeneration() {{
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData
|
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) {{
|
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…';
|
document.getElementById('spinnerText').textContent = 'Warte auf Ergebnis…';
|
||||||
|
|||||||
Reference in New Issue
Block a user