Trae Assistant
Fix: Add error handlers for 413 and 500
bba1238
import os
import json
import logging
from datetime import datetime
from flask import Flask, render_template, jsonify, request, send_from_directory
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16MB max upload
app.config['JSON_AS_ASCII'] = False
# Data storage
DATA_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'valuations.json')
def load_data():
if os.path.exists(DATA_FILE):
try:
with open(DATA_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception as e:
logger.error(f"Error loading data: {e}")
return []
return []
def save_data(data):
try:
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
return True
except Exception as e:
logger.error(f"Error saving data: {e}")
return False
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/valuations', methods=['GET'])
def get_valuations():
return jsonify(load_data())
@app.route('/api/valuations', methods=['POST'])
def save_valuation():
try:
new_item = request.json
if not new_item:
return jsonify({"error": "No data provided"}), 400
# Add metadata
new_item['id'] = str(int(datetime.now().timestamp() * 1000))
new_item['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
data = load_data()
data.insert(0, new_item) # Newest first
# Limit history to 50 items
if len(data) > 50:
data = data[:50]
save_data(data)
return jsonify({"success": True, "data": new_item})
except Exception as e:
logger.error(f"Error saving valuation: {e}")
return jsonify({"error": str(e)}), 500
@app.route('/api/valuations/<id>', methods=['DELETE'])
def delete_valuation(id):
try:
data = load_data()
data = [item for item in data if item.get('id') != id]
save_data(data)
return jsonify({"success": True})
except Exception as e:
logger.error(f"Error deleting valuation: {e}")
return jsonify({"error": str(e)}), 500
@app.route('/health')
def health():
return jsonify({"status": "healthy"})
@app.errorhandler(413)
def request_entity_too_large(error):
return jsonify({"error": "Request entity too large (max 16MB)"}), 413
@app.errorhandler(500)
def internal_server_error(error):
return jsonify({"error": "Internal Server Error"}), 500
if __name__ == '__main__':
port = int(os.environ.get('PORT', 7860))
app.run(host='0.0.0.0', port=port)