238 lines
7.7 KiB
Python
238 lines
7.7 KiB
Python
"""
|
|
Test script for the configuration interface
|
|
Minimal Flask app to test the configuration features
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
from flask import Flask, render_template, request, jsonify
|
|
|
|
# Add the src directory to the path
|
|
sys.path.append(str(Path(__file__).parent / "src"))
|
|
|
|
from models.config_model import Config
|
|
|
|
app = Flask(
|
|
__name__,
|
|
template_folder=str(Path(__file__).parent / "templates"),
|
|
static_folder=str(Path(__file__).parent / "static"),
|
|
)
|
|
|
|
|
|
# Mock autobackups instance for testing
|
|
class MockAutoBackups:
|
|
def __init__(self):
|
|
self.config = Config()
|
|
print(
|
|
f"Configuration loaded with {len(self.config.observation_directories)} directories"
|
|
)
|
|
|
|
|
|
# Initialize mock instance
|
|
autobackups_instance = MockAutoBackups()
|
|
|
|
|
|
@app.route("/")
|
|
def dashboard():
|
|
"""Simple dashboard for testing"""
|
|
return render_template("base.html")
|
|
|
|
|
|
@app.route("/config")
|
|
def config_page():
|
|
"""Configuration page"""
|
|
try:
|
|
config_data = {
|
|
"observation_directories": autobackups_instance.config.observation_directories,
|
|
"backup_destination": autobackups_instance.config.backup_destination,
|
|
"global_settings": autobackups_instance.config.global_settings,
|
|
"web_interface": autobackups_instance.config.web_interface,
|
|
"everything_api": autobackups_instance.config.everything_api,
|
|
"logging": autobackups_instance.config.logging_config,
|
|
"backup_options": autobackups_instance.config.backup_options,
|
|
}
|
|
return render_template("config.html", config=config_data)
|
|
except Exception as e:
|
|
return f"Error loading configuration: {str(e)}", 500
|
|
|
|
|
|
# Configuration update endpoints
|
|
@app.route("/api/config/general", methods=["PUT"])
|
|
def update_general_config():
|
|
"""Update general configuration settings"""
|
|
try:
|
|
data = request.get_json()
|
|
|
|
# Update backup destination
|
|
if "backup_destination" in data:
|
|
autobackups_instance.config.update_config_value(
|
|
"backup_destination", data["backup_destination"]
|
|
)
|
|
|
|
# Update global settings
|
|
if "global_settings" in data:
|
|
for key, value in data["global_settings"].items():
|
|
autobackups_instance.config.update_config_value(
|
|
f"global_settings.{key}", value
|
|
)
|
|
|
|
print("General configuration updated")
|
|
return jsonify({"success": True, "message": "Configuration updated"})
|
|
|
|
except Exception as e:
|
|
print(f"Error updating general config: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/backup_options", methods=["PUT"])
|
|
def update_backup_options():
|
|
"""Update backup options configuration"""
|
|
try:
|
|
data = request.get_json()
|
|
|
|
for key, value in data.items():
|
|
autobackups_instance.config.update_config_value(
|
|
f"backup_options.{key}", value
|
|
)
|
|
|
|
print("Backup options updated")
|
|
return jsonify({"success": True, "message": "Backup options updated"})
|
|
|
|
except Exception as e:
|
|
print(f"Error updating backup options: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/everything_api", methods=["PUT"])
|
|
def update_everything_api():
|
|
"""Update Everything API configuration"""
|
|
try:
|
|
data = request.get_json()
|
|
|
|
for key, value in data.items():
|
|
autobackups_instance.config.update_config_value(
|
|
f"everything_api.{key}", value
|
|
)
|
|
|
|
print("Everything API configuration updated")
|
|
return jsonify({"success": True, "message": "Everything API config updated"})
|
|
|
|
except Exception as e:
|
|
print(f"Error updating Everything API: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/web_interface", methods=["PUT"])
|
|
def update_web_interface():
|
|
"""Update web interface configuration"""
|
|
try:
|
|
data = request.get_json()
|
|
|
|
for key, value in data.items():
|
|
autobackups_instance.config.update_config_value(
|
|
f"web_interface.{key}", value
|
|
)
|
|
|
|
print("Web interface configuration updated")
|
|
return jsonify({"success": True, "message": "Web interface config updated"})
|
|
|
|
except Exception as e:
|
|
print(f"Error updating web interface: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/logging", methods=["PUT"])
|
|
def update_logging_config():
|
|
"""Update logging configuration"""
|
|
try:
|
|
data = request.get_json()
|
|
|
|
for key, value in data.items():
|
|
autobackups_instance.config.update_config_value(f"logging.{key}", value)
|
|
|
|
print("Logging configuration updated")
|
|
return jsonify({"success": True, "message": "Logging config updated"})
|
|
|
|
except Exception as e:
|
|
print(f"Error updating logging config: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/directories", methods=["POST"])
|
|
def add_observation_directory():
|
|
"""Add a new observation directory"""
|
|
try:
|
|
data = request.get_json()
|
|
path = data.get("path", "").strip()
|
|
dir_type = data.get("type", "").strip()
|
|
description = data.get("description", "").strip()
|
|
|
|
if not path or not dir_type:
|
|
return jsonify({"error": "Path and type are required"}), 400
|
|
|
|
autobackups_instance.config.add_observation_directory(
|
|
path, dir_type, description
|
|
)
|
|
|
|
print(f"Added observation directory: {path}")
|
|
return jsonify({"success": True, "message": "Directory added"})
|
|
|
|
except Exception as e:
|
|
print(f"Error adding directory: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/directories/<int:index>", methods=["DELETE"])
|
|
def remove_observation_directory(index):
|
|
"""Remove an observation directory"""
|
|
try:
|
|
directories = autobackups_instance.config.observation_directories
|
|
|
|
if 0 <= index < len(directories):
|
|
removed_dir = directories.pop(index)
|
|
config = autobackups_instance.config
|
|
config._config["observation_directories"] = directories
|
|
config.save_config()
|
|
|
|
print(f"Removed observation directory: {removed_dir.get('path', '')}")
|
|
return jsonify({"success": True, "message": "Directory removed"})
|
|
else:
|
|
return jsonify({"error": "Invalid directory index"}), 400
|
|
|
|
except Exception as e:
|
|
print(f"Error removing directory: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@app.route("/api/config/directories/<int:index>/toggle", methods=["PUT"])
|
|
def toggle_observation_directory(index):
|
|
"""Toggle the enabled state of an observation directory"""
|
|
try:
|
|
data = request.get_json()
|
|
enabled = data.get("enabled", True)
|
|
|
|
directories = autobackups_instance.config.observation_directories
|
|
|
|
if 0 <= index < len(directories):
|
|
directories[index]["enabled"] = enabled
|
|
config = autobackups_instance.config
|
|
config._config["observation_directories"] = directories
|
|
config.save_config()
|
|
|
|
print(
|
|
f"Directory {directories[index].get('path', '')} {'enabled' if enabled else 'disabled'}"
|
|
)
|
|
return jsonify({"success": True, "message": "Directory state updated"})
|
|
else:
|
|
return jsonify({"error": "Invalid directory index"}), 400
|
|
|
|
except Exception as e:
|
|
print(f"Error toggling directory: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("Starting AutoBackups Configuration Test Server...")
|
|
print("Access the configuration interface at: http://localhost:5120/config")
|
|
app.run(host="127.0.0.1", port=5120, debug=True)
|