Added config reloader from @cybogenix. It doesn't work yet

This commit is contained in:
Luke Rogers 2013-10-02 10:46:55 +13:00
parent a3148a83df
commit e8d555d116
2 changed files with 37 additions and 2 deletions

View file

@ -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()

View file

@ -2,4 +2,6 @@ BeautifulSoup==3.2.1
lxml==3.1beta1
pyenchant==1.6.5
pydns>=2.3.6
watchdog
BeautifulSoup4