Files
moded_distructive_farm/server/reloader.py
2025-10-22 21:57:07 +03:00

50 lines
1.4 KiB
Python

import importlib
import os
import threading
import importlib.util
from __init__ import app
_config_mtime = None
_reload_lock = threading.RLock()
if "CONFIG" in os.environ:
config_path = os.environ["CONFIG"]
else:
config_path = os.path.join(app.root_path, 'config.py')
config_spec = importlib.util.spec_from_file_location("server.config", config_path)
config_module = importlib.util.module_from_spec(config_spec)
config_spec.loader.exec_module(config_module)
_cur_config = config_module.CONFIG
def get_config():
"""
Returns CONFIG dictionary from config.py module.
If config.py file was updated since the last call, get_config() reloads
the dictionary. If an error happens during reloading, get_config() returns
the old dictionary.
:returns: the newest valid version of the CONFIG dictionary
"""
global _config_mtime, _cur_config
cur_mtime = os.stat(config_path).st_mtime_ns
if cur_mtime != _config_mtime:
with _reload_lock:
if cur_mtime != _config_mtime:
try:
config_spec.loader.exec_module(config_module)
_cur_config = config_module.CONFIG
app.logger.info('New config loaded')
except Exception as e:
app.logger.error('Failed to reload config: %s', e)
_config_mtime = cur_mtime
return _cur_config