multiple-changes-made
This commit is contained in:
57
hot_reload.py
Normal file
57
hot_reload.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import threading
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from watchdog.observers import Observer
|
||||
from watchdog.events import FileSystemEventHandler
|
||||
|
||||
from tool_loader import load_tools
|
||||
from bot_loader import load_bots
|
||||
|
||||
class ReloadableRegistry:
|
||||
def __init__(self, base_dir):
|
||||
self.base_dir = Path(base_dir)
|
||||
self.lock = threading.Lock()
|
||||
|
||||
self.tools = {}
|
||||
self.bots = {}
|
||||
|
||||
self.reload_all()
|
||||
|
||||
def reload_all(self):
|
||||
with self.lock:
|
||||
logging.info("Reloading bots and tools...")
|
||||
self.tools = load_tools(self.base_dir / "tools")
|
||||
self.bots = load_bots(self.base_dir / "bots")
|
||||
|
||||
def get_tools(self):
|
||||
with self.lock:
|
||||
return self.tools.copy()
|
||||
|
||||
def get_bots(self):
|
||||
with self.lock:
|
||||
return self.bots.copy()
|
||||
|
||||
|
||||
class ReloadHandler(FileSystemEventHandler):
|
||||
def __init__(self, registry):
|
||||
self.registry = registry
|
||||
|
||||
def on_any_event(self, event):
|
||||
if event.is_directory:
|
||||
return
|
||||
if event.src_path.endswith(".py"):
|
||||
logging.info(f"Detected change: {event.src_path}")
|
||||
self.registry.reload_all()
|
||||
|
||||
|
||||
def start_hot_reload(registry):
|
||||
observer = Observer()
|
||||
handler = ReloadHandler(registry)
|
||||
|
||||
observer.schedule(handler, str(registry.base_dir / "tools"), recursive=True)
|
||||
observer.schedule(handler, str(registry.base_dir / "bots"), recursive=True)
|
||||
|
||||
observer.daemon = True
|
||||
observer.start()
|
||||
|
||||
logging.info("🔥 Hot reload enabled (tools + bots)")
|
||||
Reference in New Issue
Block a user