Aktuell erhält man bei Fehlern durch den blue-client die komplette Server-API Fehlermeldung zurück (inklusive des kompletten Stacktrace). In Logs etc. macht es das teilweise schwieriger den genauen Fehler zu finden.
Idee wäre eine eigene Fehlerklasse zu erstellen und diese als Result zurück zu geben.
Anbei eine erste Idee mit einfachen String-Operationen. Vielleicht fällt jemanden noch etwas besseres ein. Ich weiß nicht, ob die Klasse immer sauber funktioniert. In Tests lief es jedoch zumindest beim XML-Import.
class EnaioErrorMessage():
def __init__(self, error_message:str | None) -> None:
self.full_message: str = error_message if error_message else ''
self.short_message: str = ''
self.job_name: str = ''
self.parameters: Dict = {}
if not error_message:
return
#splitten bei |.call
try:
split_error_message = error_message.split('|.call')
self.short_message = split_error_message[0].replace('\n\r\n','')
except:
self.short_message = error_message
#weitere Infos
try:
additional_infos_zeile = [x for x in split_error_message if x.startswith(' 4 ')]
if not additional_infos_zeile:
return
additional_infos_zeile = additional_infos_zeile[0]
#Splitten bei szName
split_sz_name = additional_infos_zeile.split('szName = ')
self.job_name = split_sz_name[-1].split(';')[0]
#splitten bei Parameters
split_param = additional_infos_zeile.split('Parameters = ')
params = split_param[-1]
for param in params.split(';'):
if '=' in param:
tmp_split = param.split('=')
if tmp_split[0].lower() == 'xml':
# Padding hinzufügen, falls nötig
base64_str = tmp_split[1]
# Berechne, wie viele '=' fehlen
padding = len(base64_str) % 4
if padding:
base64_str += '=' * (4 - padding)
# Dekodieren
decoded_bytes = base64.b64decode(base64_str)
self.parameters[tmp_split[0]] = decoded_bytes.decode('utf-8')
else:
self.parameters[tmp_split[0]] = tmp_split[1]
except Exception as e:
#keinen Fehler werfen, Werte bleiben einfach leer
pass