""" Hilfsfunktionen für MCP-Tool-Implementierungen. """ from __future__ import annotations import json from datetime import date, datetime, time from decimal import Decimal from uuid import UUID def serialize_value(value): """Konvertiert Django-Feldwerte in JSON-serialisierbare Typen.""" if isinstance(value, UUID): return str(value) if isinstance(value, Decimal): return float(value) if isinstance(value, (date, datetime)): return value.isoformat() if isinstance(value, time): return value.isoformat() return value def model_to_dict(instance, fields=None, exclude=None) -> dict: """ Konvertiert eine Django-Model-Instanz in ein serialisierbares Dict. Args: instance: Django Model Instanz fields: Nur diese Felder einschließen (None = alle) exclude: Diese Felder ausschließen """ exclude = exclude or [] result = {} for field in instance._meta.fields: name = field.name if fields and name not in fields: continue if name in exclude: continue value = getattr(instance, name) # ForeignKey: _id-Suffix-Wert (nicht ganzes Objekt) result[name] = serialize_value(value) # Auch ForeignKey-IDs explizit aufnehmen (z.B. konto_id) for field in instance._meta.fields: if hasattr(field, "attname") and field.attname != field.name: attname = field.attname if attname not in result: result[attname] = serialize_value(getattr(instance, attname)) return result def format_result(data) -> str: """Gibt Daten als formatiertes JSON zurück.""" return json.dumps(data, ensure_ascii=False, indent=2, default=str)