from flask import Blueprint, request, jsonify import csv import io from util.logger import logger from auth.token import verify_token csv_blueprint = Blueprint('csv_tool', __name__) MAX_ROWS = 500 @csv_blueprint.route('/api/csv/parse', methods=['POST']) def parse_csv(): user = verify_token() if not user: return jsonify({"message": "Nicht autorisiert"}), 401 try: data = request.get_json() or {} text = data.get("text", "") delimiter = data.get("delimiter", ",") # Handle escaped tab if delimiter == "\\t" or delimiter == "\t": delimiter = "\t" if not delimiter: delimiter = "," reader = csv.reader(io.StringIO(text), delimiter=delimiter) all_rows = list(reader) if not all_rows: return jsonify({"headers": [], "rows": [], "total_rows": 0, "truncated": False}) headers = all_rows[0] data_rows = all_rows[1:] total_rows = len(data_rows) truncated = total_rows > MAX_ROWS return jsonify({ "headers": headers, "rows": data_rows[:MAX_ROWS], "total_rows": total_rows, "truncated": truncated, }) except csv.Error as e: return jsonify({"message": f"Ungültiges CSV: {e}"}), 400 except Exception as e: logger.error(f"Fehler csvviewer: {e}") return jsonify({"message": "Fehler beim Verarbeiten des CSV"}), 500