Files
stiftung-management-system/app/mcp_server/tools/helpers.py
SysAdmin Agent e0b377014c
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / deploy (push) Has been cancelled
Code Quality / quality (push) Has been cancelled
v4.1.0: DMS email documents, category-specific Nachweis linking, version system
- Save cover email body as DMS document with new 'email' context type
- Show email body separately from attachments in email detail view
- Add per-category DMS document assignment in quarterly confirmation
  (Studiennachweis, Einkommenssituation, Vermögenssituation)
- Add VERSION file and context processor for automatic version display
- Add MCP server, agent system, import/export, and new migrations
- Update compose files and production environment template

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 18:48:52 +00:00

60 lines
1.7 KiB
Python

"""
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)