from flask import Flask, render_template_string, request, redirect, url_for, flash
import json
import os # Added os import
from src.config_manager import ConfigManager
app = Flask(__name__)
app.secret_key = os.urandom(24) # Needed for flash messages
config_manager = ConfigManager()
CONFIG_PAGE_TEMPLATE = """
LED Matrix Config
LED Matrix Configuration
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
- {{ message }}
{% endfor %}
{% endif %}
{% endwith %}
"""
@app.route('/')
def display_config_route():
active_tab = request.args.get('tab', 'main') # Default to 'main' tab
main_config_data = {}
secrets_config_data = {}
error_message = None
try:
main_config_data = config_manager.get_raw_file_content('main')
except Exception as e:
flash(f"Error loading main config: {str(e)}", "error")
try:
secrets_config_data = config_manager.get_raw_file_content('secrets')
except Exception as e:
flash(f"Error loading secrets config: {str(e)}", "error")
main_config_json = json.dumps(main_config_data, indent=4, sort_keys=True)
secrets_config_json = json.dumps(secrets_config_data, indent=4, sort_keys=True)
return render_template_string(CONFIG_PAGE_TEMPLATE,
main_config_json=main_config_json,
secrets_config_json=secrets_config_json,
active_tab=active_tab,
main_config_path=config_manager.get_config_path(),
secrets_config_path=config_manager.get_secrets_path())
@app.route('/save', methods=['POST'])
def save_config_route():
config_type = request.form.get('config_type', 'main')
data_to_save_str = ""
if config_type == 'main':
data_to_save_str = request.form['main_config_data']
elif config_type == 'secrets':
data_to_save_str = request.form['secrets_config_data']
else:
flash("Invalid configuration type specified for saving.", "error")
return redirect(url_for('display_config_route'))
try:
new_data = json.loads(data_to_save_str)
config_manager.save_raw_file_content(config_type, new_data)
flash(f"{config_type.capitalize()} configuration saved successfully!", "success")
except json.JSONDecodeError:
flash(f"Error: Invalid JSON format submitted for {config_type} config.", "error")
except Exception as e:
flash(f"Error saving {config_type} configuration: {str(e)}", "error")
return redirect(url_for('display_config_route', tab=config_type)) # Redirect back to the same tab
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)