Session-Caching: auch Code 2002 als abgelaufene Session behandeln

Abgelaufene INWX-Sessions liefern beim ersten Aufruf teils Code 2002
("Command use error") statt 2200. call_api() loest die automatische
Neuanmeldung nun auch fuer 2001/2002/2003 aus, sodass der Cache sich
selbst heilt und kein manueller Loeschvorgang mehr noetig ist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 19:36:53 +02:00
parent 68fe254a5e
commit 3a84aea64d
+19 -5
View File
@@ -140,17 +140,31 @@ def get_client():
return api
def _is_auth_error(code):
"""True, wenn der INWX-Code auf eine fehlende/abgelaufene Session hindeutet.
22002299 sind die eigentlichen Authentifizierungs-/Autorisierungsfehler.
Zusätzlich liefert INWX bei Aufrufen ohne gültige Session teils Codes aus
dem 2000er-Bereich (z.B. 2002 „Command use error"); auch diese behandeln
wir als abgelaufene Session und melden uns einmal neu an.
"""
if code is None:
return False
if 2200 <= code < 2300:
return True
return code in (2001, 2002, 2003)
def call_api(api, method, params=None):
"""Wie ApiClient.call_api, meldet sich aber bei abgelaufener Session neu an.
Liefert INWX einen Autorisierungsfehler (Code 22002299), wird die
zwischengespeicherte Session verworfen, via KeePass neu eingeloggt und
der Aufruf einmal wiederholt.
Deutet der Rückgabecode auf eine fehlende/abgelaufene Session hin (siehe
_is_auth_error), wird die zwischengespeicherte Session verworfen, via
KeePass neu eingeloggt und der Aufruf einmal wiederholt.
"""
params = params or {}
res = api.call_api(method, params)
code = res.get('code')
if code is not None and 2200 <= code < 2300:
if _is_auth_error(res.get('code')):
print("️ Session abgelaufen, melde neu an...")
_clear_cached_session()
if not _do_login(api):