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 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),
}