Dieser Commit ist enthalten in:
Claude Project Manager
2025-11-16 23:06:33 +01:00
Ursprung 03ca1c607f
Commit 404100abc4
2 geänderte Dateien mit 58 neuen und 13 gelöschten Zeilen

Datei anzeigen

@ -1,11 +1,12 @@
""" """
Profil-Export-Service für Account-Daten Profil-Export-Service für Account-Daten
Exportiert Account-Profile in verschiedene Formate (CSV, TXT, PDF). Exportiert Account-Profile in verschiedene Formate (CSV, JSON, PDF).
""" """
import os import os
import csv import csv
import json
import string import string
import logging import logging
from io import BytesIO, StringIO from io import BytesIO, StringIO
@ -106,6 +107,50 @@ class ProfileExportService:
logger.error(f"Fehler beim TXT-Export: {e}") logger.error(f"Fehler beim TXT-Export: {e}")
raise raise
@staticmethod
def export_to_json(account_data: Dict[str, Any]) -> bytes:
"""
Exportiert Account-Daten als JSON.
Args:
account_data: Dictionary mit Account-Daten
Returns:
JSON-Daten als bytes
"""
try:
# JSON-Struktur aufbauen
export_data = {
"account": {
field_key: account_data.get(field_key, "")
for field_key in ProfileExportService.EXPORT_FIELDS.keys()
},
"export_info": {
"exported_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"format_version": "1.0"
}
}
# None-Werte zu leeren Strings konvertieren
for key, value in export_data["account"].items():
if value is None:
export_data["account"][key] = ""
# JSON mit Einrückung für Lesbarkeit
json_content = json.dumps(
export_data,
ensure_ascii=False,
indent=2,
sort_keys=False
)
logger.info("JSON-Export erfolgreich")
return json_content.encode('utf-8')
except Exception as e:
logger.error(f"Fehler beim JSON-Export: {e}")
raise
@staticmethod @staticmethod
def export_to_pdf(account_data: Dict[str, Any]) -> bytes: def export_to_pdf(account_data: Dict[str, Any]) -> bytes:
""" """
@ -349,7 +394,7 @@ class ProfileExportService:
Args: Args:
account_data: Account-Daten zum Exportieren account_data: Account-Daten zum Exportieren
formats: Liste von Formaten ["csv", "txt", "pdf"] formats: Liste von Formaten ["csv", "json", "pdf"]
password_protect: Wird ignoriert (für Rückwärtskompatibilität) password_protect: Wird ignoriert (für Rückwärtskompatibilität)
Returns: Returns:
@ -366,9 +411,9 @@ class ProfileExportService:
filename = ProfileExportService.generate_filename(account_data, "csv") filename = ProfileExportService.generate_filename(account_data, "csv")
files_dict[filename] = content files_dict[filename] = content
elif fmt == "txt": elif fmt == "json":
content = ProfileExportService.export_to_txt(account_data) content = ProfileExportService.export_to_json(account_data)
filename = ProfileExportService.generate_filename(account_data, "txt") filename = ProfileExportService.generate_filename(account_data, "json")
files_dict[filename] = content files_dict[filename] = content
elif fmt == "pdf": elif fmt == "pdf":

Datei anzeigen

@ -138,9 +138,9 @@ class ProfileExportDialog(QDialog):
} }
""") """)
self.txt_checkbox = QCheckBox("TXT") self.json_checkbox = QCheckBox("JSON")
self.txt_checkbox.setChecked(False) # Standard: nicht aktiviert self.json_checkbox.setChecked(False) # Standard: nicht aktiviert
self.txt_checkbox.setStyleSheet(self.csv_checkbox.styleSheet()) self.json_checkbox.setStyleSheet(self.csv_checkbox.styleSheet())
self.pdf_checkbox = QCheckBox("PDF") self.pdf_checkbox = QCheckBox("PDF")
self.pdf_checkbox.setChecked(False) # Standard: nicht aktiviert self.pdf_checkbox.setChecked(False) # Standard: nicht aktiviert
@ -148,7 +148,7 @@ class ProfileExportDialog(QDialog):
# Checkboxen zum Format-Layout hinzufügen # Checkboxen zum Format-Layout hinzufügen
format_layout.addWidget(self.csv_checkbox) format_layout.addWidget(self.csv_checkbox)
format_layout.addWidget(self.txt_checkbox) format_layout.addWidget(self.json_checkbox)
format_layout.addWidget(self.pdf_checkbox) format_layout.addWidget(self.pdf_checkbox)
container_layout.addWidget(format_group) container_layout.addWidget(format_group)
@ -226,8 +226,8 @@ class ProfileExportDialog(QDialog):
selected_formats = [] selected_formats = []
if self.csv_checkbox.isChecked(): if self.csv_checkbox.isChecked():
selected_formats.append("csv") selected_formats.append("csv")
if self.txt_checkbox.isChecked(): if self.json_checkbox.isChecked():
selected_formats.append("txt") selected_formats.append("json")
if self.pdf_checkbox.isChecked(): if self.pdf_checkbox.isChecked():
selected_formats.append("pdf") selected_formats.append("pdf")
@ -260,8 +260,8 @@ class ProfileExportDialog(QDialog):
formats = [] formats = []
if self.csv_checkbox.isChecked(): if self.csv_checkbox.isChecked():
formats.append("csv") formats.append("csv")
if self.txt_checkbox.isChecked(): if self.json_checkbox.isChecked():
formats.append("txt") formats.append("json")
if self.pdf_checkbox.isChecked(): if self.pdf_checkbox.isChecked():
formats.append("pdf") formats.append("pdf")