Fooocus/api/controllers/settings_controller.py

72 lines
2.1 KiB
Python

import json
import os
from flask import Blueprint, jsonify, request
from flask_restx import Api, Resource, fields, Namespace
# Create a Blueprint for the settings controller
settings_bp = Blueprint('settings', __name__)
settings_api = Api(settings_bp, version='1.0', title='Settings API',
description='API for managing settings')
# Define a namespace for settings
settings_ns = Namespace('settings', description='Settings operations')
# Define the model for settings
settings_model = settings_ns.model('Setting', {
'key': fields.String(required=True, description='The key of the setting'),
'value': fields.String(required=True, description='The value of the setting')
})
# File to persist settings data
SETTINGS_FILE = 'settings.json'
def load_settings():
if os.path.exists(SETTINGS_FILE):
with open(SETTINGS_FILE, 'r') as file:
return json.load(file)
return {}
def save_settings(settings):
with open(SETTINGS_FILE, 'w') as file:
json.dump(settings, file, indent=4)
# Load initial data
settings_store = load_settings()
@settings_ns.route('/')
class SettingsList(Resource):
def get(self):
"""List all settings"""
return jsonify({'settings': list(settings_store.values())})
@settings_ns.expect(settings_model)
def post(self):
"""Create or update a setting"""
setting = request.json
key = setting['key']
settings_store[key] = setting
save_settings(settings_store) # Save to file
return jsonify(setting)
@settings_ns.route('/<string:key>')
class SettingItem(Resource):
def get(self, key):
"""Get a setting by key"""
setting = settings_store.get(key)
if setting is None:
return {'message': 'Setting not found'}, 404
return jsonify(setting)
def delete(self, key):
"""Delete a setting by key"""
if key not in settings_store:
return {'message': 'Setting not found'}, 404
del settings_store[key]
save_settings(settings_store) # Save to file
return {'message': 'Setting deleted'}