def newConfiguration(**kwargs): """ This used as an alternate constructor for class Config so that applications can be lax in defining all the required paramters in the right order. """ kw = socorro_config.getDefaultedConfigOptions() kw.update(kwargs) return DynamicConfig(**kw)
def __init__(self,*args,**kwargs): """ Passes appropriate kwargs to Config, pays local attention to these keys: updateInterval: default: '0' format: 'dd:hh:mm:ss', leading parts optional. Must be >= 0 seconds. updateFunction: default: noop(). Takes self as argument. Behavior: Updates default values in argument reEvaluateFunction: default: noop(). Takes self as argument. Behavior: Mutates values in argument signalNumber: default: SIGALRM (14). If 0, then signals will not be handled. Instances that share the same signalNumber will all be update()-ed at every signal. self.internal.updateFunction may be set after construction if desired: Avoids double-work at construction self.internal.reEvalutateFunction may be set after construction if desired, but this is not recommended. """ skwargs = dict([(x,kwargs[x]) for x in socorro_config.getDefaultedConfigOptions().keys() if x in kwargs]) for i in range(len(args)): skwargs[socorro_config.namedConfigOptions[i]] = args[i] super(DynamicConfig,self).__init__(**skwargs) self.internal.updateFunction = kwargs.get('updateFunction',noop) self.internal.reEvaluateFunction = kwargs.get('reEvaluateFunction',noop) self.internal.signalNumber = kwargs.get('signalNumber',14) self.internal.nextUpdate = None updateInterval = kwargs.get('updateInterval','0:0:0:0') self.internal.updateDelta = socorro_config.timeDeltaConverter(updateInterval) if self.internal.updateDelta: if self.internal.updateDelta < datetime.timedelta(0): raise ValueError("updateInterval must be non-negative, but %s"%self.internal.updateDelta) self.internal.nextUpdate = utc_now() + self.internal.updateDelta # finally: make sure we are current if self.internal.signalNumber: priorSignal = signal.signal(self.internal.signalNumber,DynamicConfig.handleAlarm) self.doUpdate() DynamicConfig.instances[id(self)] = self