mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Config class (#51)
* Add new Config class to handle loading config files * Use new config class in api_server.py
This commit is contained in:
@@ -2,6 +2,7 @@ upload_folder: "~/zordon-uploads/"
|
|||||||
update_engines_on_launch: true
|
update_engines_on_launch: true
|
||||||
max_content_path: 100000000
|
max_content_path: 100000000
|
||||||
server_log_level: info
|
server_log_level: info
|
||||||
|
log_buffer_length: 250
|
||||||
flask_log_level: error
|
flask_log_level: error
|
||||||
flask_debug_enable: false
|
flask_debug_enable: false
|
||||||
queue_eval_seconds: 1
|
queue_eval_seconds: 1
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ from src.distributed_job_manager import DistributedJobManager
|
|||||||
from src.engines.core.base_worker import string_to_status, RenderStatus
|
from src.engines.core.base_worker import string_to_status, RenderStatus
|
||||||
from src.engines.engine_manager import EngineManager
|
from src.engines.engine_manager import EngineManager
|
||||||
from src.render_queue import RenderQueue, JobNotFoundError
|
from src.render_queue import RenderQueue, JobNotFoundError
|
||||||
|
from src.utilities.config import Config
|
||||||
from src.utilities.misc_helper import system_safe_path, current_system_os, current_system_cpu, current_system_os_version
|
from src.utilities.misc_helper import system_safe_path, current_system_os, current_system_cpu, current_system_os_version
|
||||||
from src.utilities.server_helper import generate_thumbnail_for_job
|
from src.utilities.server_helper import generate_thumbnail_for_job
|
||||||
from src.utilities.zeroconf_server import ZeroconfServer
|
from src.utilities.zeroconf_server import ZeroconfServer
|
||||||
@@ -492,17 +493,18 @@ def upload_file_page():
|
|||||||
return render_template('upload.html', supported_renderers=EngineManager.supported_engines())
|
return render_template('upload.html', supported_renderers=EngineManager.supported_engines())
|
||||||
|
|
||||||
|
|
||||||
def start_server(background_thread=False):
|
def start_server():
|
||||||
def eval_loop(delay_sec=1):
|
def eval_loop(delay_sec=1):
|
||||||
while True:
|
while True:
|
||||||
RenderQueue.evaluate_queue()
|
RenderQueue.evaluate_queue()
|
||||||
time.sleep(delay_sec)
|
time.sleep(delay_sec)
|
||||||
|
|
||||||
with open(system_safe_path('config/config.yaml')) as f:
|
# Load Config YAML
|
||||||
config = yaml.load(f, Loader=yaml.FullLoader)
|
config_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), 'config')
|
||||||
|
Config.load_config(system_safe_path(os.path.join(config_dir, 'config.yaml')))
|
||||||
|
|
||||||
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(module)s: %(message)s', datefmt='%d-%b-%y %H:%M:%S',
|
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(module)s: %(message)s', datefmt='%d-%b-%y %H:%M:%S',
|
||||||
level=config.get('server_log_level', 'INFO').upper())
|
level=Config.server_log_level.upper())
|
||||||
|
|
||||||
# get hostname
|
# get hostname
|
||||||
local_hostname = socket.gethostname()
|
local_hostname = socket.gethostname()
|
||||||
@@ -510,14 +512,15 @@ def start_server(background_thread=False):
|
|||||||
|
|
||||||
# load flask settings
|
# load flask settings
|
||||||
server.config['HOSTNAME'] = local_hostname
|
server.config['HOSTNAME'] = local_hostname
|
||||||
server.config['PORT'] = int(config.get('port_number', 8080))
|
server.config['PORT'] = int(Config.port_number)
|
||||||
server.config['UPLOAD_FOLDER'] = system_safe_path(os.path.expanduser(config['upload_folder']))
|
server.config['UPLOAD_FOLDER'] = system_safe_path(os.path.expanduser(Config.upload_folder))
|
||||||
server.config['THUMBS_FOLDER'] = system_safe_path(os.path.join(os.path.expanduser(config['upload_folder']), 'thumbs'))
|
server.config['THUMBS_FOLDER'] = system_safe_path(os.path.join(os.path.expanduser(Config.upload_folder), 'thumbs'))
|
||||||
server.config['MAX_CONTENT_PATH'] = config['max_content_path']
|
server.config['MAX_CONTENT_PATH'] = Config.max_content_path
|
||||||
server.config['enable_split_jobs'] = config.get('enable_split_jobs', False)
|
server.config['enable_split_jobs'] = Config.enable_split_jobs
|
||||||
|
|
||||||
# Setup directory for saving engines to
|
# Setup directory for saving engines to
|
||||||
EngineManager.engines_path = system_safe_path(os.path.join(os.path.join(os.path.expanduser(config['upload_folder']), 'engines')))
|
EngineManager.engines_path = system_safe_path(os.path.join(os.path.join(os.path.expanduser(Config.upload_folder),
|
||||||
|
'engines')))
|
||||||
os.makedirs(EngineManager.engines_path, exist_ok=True)
|
os.makedirs(EngineManager.engines_path, exist_ok=True)
|
||||||
|
|
||||||
# Debug info
|
# Debug info
|
||||||
@@ -527,17 +530,17 @@ def start_server(background_thread=False):
|
|||||||
|
|
||||||
# disable most Flask logging
|
# disable most Flask logging
|
||||||
flask_log = logging.getLogger('werkzeug')
|
flask_log = logging.getLogger('werkzeug')
|
||||||
flask_log.setLevel(config.get('flask_log_level', 'ERROR').upper())
|
flask_log.setLevel(Config.flask_log_level.upper())
|
||||||
|
|
||||||
# check for updates for render engines if config'd or on first launch
|
# check for updates for render engines if config'd or on first launch
|
||||||
if config.get('update_engines_on_launch', False) or not EngineManager.all_engines():
|
if Config.update_engines_on_launch or not EngineManager.all_engines():
|
||||||
EngineManager.update_all_engines()
|
EngineManager.update_all_engines()
|
||||||
|
|
||||||
# Set up the RenderQueue object
|
# Set up the RenderQueue object
|
||||||
RenderQueue.load_state(database_directory=server.config['UPLOAD_FOLDER'])
|
RenderQueue.load_state(database_directory=server.config['UPLOAD_FOLDER'])
|
||||||
DistributedJobManager.start()
|
DistributedJobManager.start()
|
||||||
|
|
||||||
thread = threading.Thread(target=eval_loop, kwargs={'delay_sec': config.get('queue_eval_seconds', 1)}, daemon=True)
|
thread = threading.Thread(target=eval_loop, kwargs={'delay_sec': Config.queue_eval_seconds}, daemon=True)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
logger.info(f"Starting Zordon Render Server - Hostname: '{server.config['HOSTNAME']}:'")
|
logger.info(f"Starting Zordon Render Server - Hostname: '{server.config['HOSTNAME']}:'")
|
||||||
@@ -545,13 +548,7 @@ def start_server(background_thread=False):
|
|||||||
ZeroconfServer.start()
|
ZeroconfServer.start()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if background_thread:
|
server.run(host='0.0.0.0', port=server.config['PORT'], debug=Config.flask_debug_enable,
|
||||||
server_thread = threading.Thread(
|
|
||||||
target=lambda: server.run(host='0.0.0.0', port=server.config['PORT'], debug=False, use_reloader=False))
|
|
||||||
server_thread.start()
|
|
||||||
server_thread.join()
|
|
||||||
else:
|
|
||||||
server.run(host='0.0.0.0', port=server.config['PORT'], debug=config.get('flask_debug_enable', False),
|
|
||||||
use_reloader=False, threaded=True)
|
use_reloader=False, threaded=True)
|
||||||
finally:
|
finally:
|
||||||
RenderQueue.save_state()
|
RenderQueue.save_state()
|
||||||
|
|||||||
36
src/utilities/config.py
Normal file
36
src/utilities/config.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import os
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# Initialize class variables with default values
|
||||||
|
upload_folder = "~/zordon-uploads/"
|
||||||
|
update_engines_on_launch = True
|
||||||
|
max_content_path = 100000000
|
||||||
|
server_log_level = 'debug'
|
||||||
|
log_buffer_length = 250
|
||||||
|
subjob_connection_timeout = 120
|
||||||
|
flask_log_level = 'error'
|
||||||
|
flask_debug_enable = False
|
||||||
|
queue_eval_seconds = 1
|
||||||
|
port_number = 8080
|
||||||
|
enable_split_jobs = True
|
||||||
|
download_timeout_seconds = 120
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def load_config(cls, config_path):
|
||||||
|
with open(config_path, 'r') as ymlfile:
|
||||||
|
cfg = yaml.safe_load(ymlfile)
|
||||||
|
|
||||||
|
cls.upload_folder = os.path.expanduser(cfg.get('upload_folder', cls.upload_folder))
|
||||||
|
cls.update_engines_on_launch = cfg.get('update_engines_on_launch', cls.update_engines_on_launch)
|
||||||
|
cls.max_content_path = cfg.get('max_content_path', cls.max_content_path)
|
||||||
|
cls.server_log_level = cfg.get('server_log_level', cls.server_log_level)
|
||||||
|
cls.log_buffer_length = cfg.get('log_buffer_length', cls.log_buffer_length)
|
||||||
|
cls.subjob_connection_timeout = cfg.get('subjob_connection_timeout', cls.subjob_connection_timeout)
|
||||||
|
cls.flask_log_level = cfg.get('flask_log_level', cls.flask_log_level)
|
||||||
|
cls.flask_debug_enable = cfg.get('flask_debug_enable', cls.flask_debug_enable)
|
||||||
|
cls.queue_eval_seconds = cfg.get('queue_eval_seconds', cls.queue_eval_seconds)
|
||||||
|
cls.port_number = cfg.get('port_number', cls.port_number)
|
||||||
|
cls.enable_split_jobs = cfg.get('enable_split_jobs', cls.enable_split_jobs)
|
||||||
|
cls.download_timeout_seconds = cfg.get('download_timeout_seconds', cls.download_timeout_seconds)
|
||||||
Reference in New Issue
Block a user