offer.provider now handles the options dict and loadConfig is only in Provider class
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),
}