From e8d555d1167ce206b0b386c0be8092766db26325 Mon Sep 17 00:00:00 2001 From: Luke Rogers Date: Wed, 2 Oct 2013 10:46:55 +1300 Subject: [PATCH] Added config reloader from @cybogenix. It doesn't work yet --- core/config.py | 37 +++++++++++++++++++++++++++++++++++-- requirements.txt | 2 ++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/core/config.py b/core/config.py index 5ec75f1..3ace806 100755 --- a/core/config.py +++ b/core/config.py @@ -3,13 +3,23 @@ import os import time import sys +from watchdog.observers import Observer +from watchdog.tricks import Trick + class Config(dict): def __init__(self, name, logger, *args, **kwargs): - self.path = os.path.abspath("{}.config.json".format(name)) + self.filename = "{}.config.json".format(name) + self.path = os.path.abspath(self.filename) self.logger = logger self.update(*args, **kwargs) + # load self + self.load_config() + + # start reloader + self.watcher() + def load_config(self): if not os.path.exists(self.path): # if there is no config, show an error and die @@ -22,7 +32,30 @@ class Config(dict): with open(self.path) as f: self.update(json.load(f)) - self.logger.info("Config reloaded.") + self.logger.info("Config loaded.") def save_config(self): json.dump(self, open(self.path, 'w'), sort_keys=True, indent=2) + self.logger.info("Config saved.") + + + def watcher(self): + event_handler = ConfigReloader(self, patterns=[self.filename]) + self.observer = Observer() + self.observer.schedule(event_handler, + path='.', + recursive=True + ) + self.observer.start() + + + +class ConfigReloader(Trick): + def __init__(self, config, *args, **kwargs): + self.config = config + self.logger = config.logger + Trick.__init__(self, *args, **kwargs) + + def on_any_event(self, event): + self.logger.info("Reloading config.") + self.config.load_config() diff --git a/requirements.txt b/requirements.txt index ae3c175..d48498a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,6 @@ BeautifulSoup==3.2.1 lxml==3.1beta1 pyenchant==1.6.5 pydns>=2.3.6 +watchdog BeautifulSoup4 +