SIDEL_ScriptsManager/app/backend/script_groups/data_processing/data_analyzer.py

80 lines
2.3 KiB
Python

"""
ScriptsManager Metadata:
@description: Analyzes CSV data and generates statistical reports
@description_long: docs/data_analyzer.md
@description_es: Analiza datos CSV y genera reportes estadísticos
@description_it: Analizza dati CSV e genera report statistici
@description_fr: Analyse les données CSV et génère des rapports statistiques
@required_level: user
@category: analysis
@tags: csv,statistics,reports
@parameters: [
{
"name": "input_file",
"type": "file",
"description": "CSV file to analyze",
"required": true,
"accept": ".csv"
},
{
"name": "report_type",
"type": "select",
"description": "Type of report to generate",
"required": true,
"options": ["summary", "detailed", "charts"]
}
]
@execution_timeout: 300
@flask_port: 5001
"""
from flask import Flask, render_template, request, jsonify
import sys
import os
import pandas as pd
import json
app = Flask(__name__)
# Get parameters from ScriptsManager
data_dir = sys.argv[1] if len(sys.argv) > 1 else "./data"
user_level = sys.argv[2] if len(sys.argv) > 2 else "user"
port = int(sys.argv[3]) if len(sys.argv) > 3 else 5001
@app.route("/")
def index():
return render_template(
"data_analyzer.html", data_dir=data_dir, user_level=user_level
)
@app.route("/analyze", methods=["POST"])
def analyze_data():
try:
input_file = request.form.get("input_file")
report_type = request.form.get("report_type")
# Simulate data analysis
result = {
"status": "success",
"message": f"Analysis completed for {input_file} with {report_type} report",
"data": {"rows": 1000, "columns": 15, "report_type": report_type},
}
# Save result to data directory
result_path = os.path.join(data_dir, "analysis_result.json")
with open(result_path, "w") as f:
json.dump(result, f, indent=2)
return jsonify(result)
except Exception as e:
return jsonify({"status": "error", "message": str(e)}), 500
if __name__ == "__main__":
print(f"Starting Data Analyzer on port {port}")
print(f"Data directory: {data_dir}")
print(f"User level: {user_level}")
app.run(host="0.0.0.0", port=port, debug=True)