diff -r ee4a6eb5a34b -r af65fcbd59d5 iro/config.py --- a/iro/config.py Wed Feb 22 03:47:25 2012 +0100 +++ b/iro/config.py Wed Feb 22 03:48:10 2012 +0100 @@ -1,15 +1,59 @@ from ConfigParser import ConfigParser +import signal +from functools import partial + +from validate import vInteger +from error import ValidateException class Config(ConfigParser): def __init__(self): ConfigParser.__init__(self) self.reloadList=[] - def reload(self): - for f in self.reloadlist: + def read(self,files): + from offer import providers + ConfigParser.read(self, files) + for s in self.sections(): + if s == "main": + opts=main + else: + opts=providers[self.get(s,'typ')].options + + for o in opts: + try: + opts[o].validate(self.get(s,o),o) + except ValidateException: + if opts[o].must: + raise + + def reload_(self): + for f in self.reloadList: f() def registerReload(self, func): self.reloadList.append(func) - + +class Option(): + def __init__(self, validate, long="", help="", must=False, default=None): + self.validate = validate + self.long=long + self.help = help + self.must = must + self.default = default + +def readConfig(): + config.read(confFiles) + config.reload() + +def registerSignal(): + '''register readConfig to SIGUSR2''' + def rC(signal, frame): + readConfig() + + signal.signal(signal.SIGUSR2,rC) + config=Config() +confFiles=["iro.conf", "~/iro.conf","/etc/iro/iro.conf"] +main={"hostname":Option(lambda x,y:x,long="Hostname under that twisted is running",must=True), + "port":Option(partial(vInteger,minv=0),long="Port under that twisted is running",must=True), + }