Spaces:
Sleeping
Sleeping
| 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 | |
| def index(): | |
| return render_template('index.html') | |
| def get_valuations(): | |
| return jsonify(load_data()) | |
| 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 | |
| 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 | |
| def health(): | |
| return jsonify({"status": "healthy"}) | |
| def request_entity_too_large(error): | |
| return jsonify({"error": "Request entity too large (max 16MB)"}), 413 | |
| 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) | |