2022-10-28 09:30:40 +02:00
|
|
|
import logging
|
|
|
|
|
|
|
|
DEPENDENCY_INSTALLED = None
|
|
|
|
|
|
|
|
try:
|
|
|
|
from watchdog.observers import Observer
|
|
|
|
from watchdog.events import (
|
|
|
|
FileSystemEventHandler,
|
|
|
|
FileCreatedEvent,
|
|
|
|
FileModifiedEvent,
|
|
|
|
)
|
|
|
|
|
|
|
|
DEPENDENCY_INSTALLED = True
|
|
|
|
logging.debug("Watchdog imported successfully. Hot reloading available.")
|
|
|
|
except ImportError:
|
|
|
|
DEPENDENCY_INSTALLED = False
|
|
|
|
logging.info("Watchdog is not installed. Hot reloading unavailable.")
|
|
|
|
|
|
|
|
|
|
|
|
class HotReloader(FileSystemEventHandler):
|
|
|
|
def __init__(self, path):
|
|
|
|
if not DEPENDENCY_INSTALLED:
|
|
|
|
return
|
2022-11-04 09:03:53 +01:00
|
|
|
|
2022-10-28 09:30:40 +02:00
|
|
|
self.path = path
|
|
|
|
self.observer = Observer()
|
|
|
|
self.observer.schedule(self, path, recursive=True)
|
|
|
|
self.observer.start()
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
if not DEPENDENCY_INSTALLED:
|
|
|
|
return
|
2022-11-04 09:03:53 +01:00
|
|
|
|
2022-10-28 09:30:40 +02:00
|
|
|
self.observer.stop()
|
|
|
|
self.observer.join()
|
|
|
|
|
|
|
|
def on_modified(self, event: FileModifiedEvent):
|
|
|
|
logging.info("Config file modified. Triggering hot reload.")
|
|
|
|
|
|
|
|
def on_created(self, event: FileCreatedEvent):
|
|
|
|
logging.info("New config file created. Triggering hot reload.")
|