Add 8 new tools: Hash Verifier, URL Tool, String Utils, Cron Explainer, IP Calc, Lorem Ipsum, CSV Viewer, Notes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
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
|
||||
Reference in New Issue
Block a user