[PEAK] runIni => ZConfig revisited
Phillip J. Eby
pje at telecommunity.com
Fri Nov 14 14:58:22 EST 2003
At 11:47 AM 11/14/03 -0800, John Landahl wrote:
>Ideally the application would have a) one component periodically
>downloading configuration updates from a central server, b)
>publish/subscribe on configuration keys. Components could then subscribe
>to the configuration keys they care about, receive notifications when
>changes are made, and do whatever is necessary with the information, such
>as resetting their work schedule, changing the location of the server they
>talk to, change the template of an external command they run, etc.
You could possibly do this by creating an IComponentKey implementation that
handled the subscription. e.g.
class SubscribeTo:
protocols.advise( instancesProvide = [binding.IComponentKey] )
def __init__(self,key,attr):
self.key = adapt(key,binding.IComponentKey)
self.attr = attr
def findComponent(self,comp,default=NOT_GIVEN):
# subscribe a listener function for self.key that
# will do 'setattr(comp,attr,value)' whenever the
# function is called by the subscriber...
return self.key.findComponent(comp,default)
...then, to use it...
class Something(binding.Component):
thing = binding.Obtain(SubscribeTo(PropertyName('whatever'), 'thing'))
Obviously, I have left some things as an exercise for the reader. :)
Also, it would probably be nicer to use, if component keys were told the
"name" they're being looked up under. Perhaps I could change the interface
to supply that info.
Another open issue is that other bindings that depend upon the configured
value/component will not be updated.
More information about the PEAK
mailing list