Loading ccnode/tags.py +56 −11 Original line number Diff line number Diff line Loading @@ -61,6 +61,38 @@ class Tag(object): self.value = None # logger.debug('Calculate Tag(%s) = %s', self.name, self.value) def update_value(self): """Called when the tag value may change.""" prev_value = self.value self.calculate_value() # if tag is not pushed # if self.ttl is not None: if self.ttl != -1: return if prev_value == self.value: return if prev_value is None: # we need to register tag again if self.sub_id == '__main__': logger.debug('Register tag %s', self.name) self.db.rpc_register_tag(self) else: logger.debug('Register sub tag %s.%s', self.sub_id, self.name) self.db.rpc_register_sub_tag(self.sub_id, self) elif self.value is None: # we drop the tag if self.sub_id == '__main__': logger.debug('Unregister tag %s', self.name) self.db.rpc_unregister_tag(self.name) else: logger.debug('Unregister sub tag %s.%s', self.sub_id, self.name) self.db.rpc_unregister_sub_tag(self.sub_id, self.name) else: # update the tag value logger.debug('Update tag value %s', self.name) self.db.rpc_update_tag(self.sub_id, self) def start(self, loop): """ :param loop: pyev loop Loading @@ -74,7 +106,7 @@ class Tag(object): # TODO more sophisticated calculation with event propagation self.watcher = loop.timer(.0, float(self.refresh), lambda *args: self.calculate_value()) self.update_value()) self.watcher.start() def stop(self): Loading Loading @@ -249,11 +281,13 @@ class TagDB(object): # register tags on the cc-server for tag in self.db['__main__'].itervalues(): if tag.value is not None: self.rpc_register_tag(tag) # register sub tags on the cc-server for tag in chain.from_iterable( db.itervalues() for name, db in self.db.iteritems() if name != '__main__'): if tag.value is not None: self.rpc_register_sub_tag(tag.sub_id, tag) Loading @@ -280,6 +314,15 @@ class TagDB(object): self.rpc_call(tag_name, self.rpc_tag_unregister_cb, 'tags_unregister', tag_name) def rpc_update_tag(self, sub_id, tag): """Update tag value on cc-server.""" if sub_id == '__main__': self.rpc_call(sub_id + tag.name, self.rpc_update_tag_cb, 'tags_update', tag.name, tag.value) else: self.rpc_call(sub_id + tag.name, self.rpc_update_tag_cb, 'sub_tags_update', tag.name, tag.value) def rpc_register_sub_tag(self, sub_id, tag): self.rpc_call(tag.name, self.rpc_sub_tag_register_cb, 'sub_tags_register', sub_id, tag.name, tag.ttl, tag.value) Loading @@ -297,6 +340,8 @@ class TagDB(object): 'Error while registering sub tag %s, %s("%s")') rpc_sub_tag_unregister_cb = rpc_simple_cb( 'Error while unregistering sub tag %s, %s("%s")') rpc_update_tag_cb = rpc_simple_cb( 'Error while trying to update tag %s, %s("%s")') # end RPC part # tag handling part, used by plugins Loading Loading @@ -325,6 +370,7 @@ class TagDB(object): tag.sub_id = '__main__' tag.start(self.main.evloop) # register tag on the cc-server if tag.value is not None: self.rpc_register_tag(tag) else: self.parent.add_tag(tag) Loading @@ -337,6 +383,7 @@ class TagDB(object): tag.sub_id = None tag.stop() # unregister tag on the cc-server if tag.value is not None: self.rpc_unregister_tag(tag_name) else: self.parent.remove_tag(tag_name) Loading @@ -347,6 +394,7 @@ class TagDB(object): tag.sub_id = sub_id tag.start(self.main.evloop) # register tag to the cc-server if tag.value is not None: self.rpc_register_sub_tag(sub_id, tag) else: self.parent.add_sub_tag(sub_id, tag) Loading @@ -359,6 +407,7 @@ class TagDB(object): tag.sub_id = None tag.stop() # unregister tag to the cc-server if tag.value is not None: self.rpc_unregister_sub_tag(sub_id, tag_name) else: self.parent.remove_sub_tag(sub_id, tag_name) Loading @@ -383,10 +432,6 @@ class TagDB(object): sub_tags = self.db.pop(sub_id) self.parent.remove_sub_object(sub_id) def update_tag_value(self, tag): """Update tag value on cc-server.""" # TODO # dict like def get(self, key, default=None): return self.db.get(key, default) Loading Loading
ccnode/tags.py +56 −11 Original line number Diff line number Diff line Loading @@ -61,6 +61,38 @@ class Tag(object): self.value = None # logger.debug('Calculate Tag(%s) = %s', self.name, self.value) def update_value(self): """Called when the tag value may change.""" prev_value = self.value self.calculate_value() # if tag is not pushed # if self.ttl is not None: if self.ttl != -1: return if prev_value == self.value: return if prev_value is None: # we need to register tag again if self.sub_id == '__main__': logger.debug('Register tag %s', self.name) self.db.rpc_register_tag(self) else: logger.debug('Register sub tag %s.%s', self.sub_id, self.name) self.db.rpc_register_sub_tag(self.sub_id, self) elif self.value is None: # we drop the tag if self.sub_id == '__main__': logger.debug('Unregister tag %s', self.name) self.db.rpc_unregister_tag(self.name) else: logger.debug('Unregister sub tag %s.%s', self.sub_id, self.name) self.db.rpc_unregister_sub_tag(self.sub_id, self.name) else: # update the tag value logger.debug('Update tag value %s', self.name) self.db.rpc_update_tag(self.sub_id, self) def start(self, loop): """ :param loop: pyev loop Loading @@ -74,7 +106,7 @@ class Tag(object): # TODO more sophisticated calculation with event propagation self.watcher = loop.timer(.0, float(self.refresh), lambda *args: self.calculate_value()) self.update_value()) self.watcher.start() def stop(self): Loading Loading @@ -249,11 +281,13 @@ class TagDB(object): # register tags on the cc-server for tag in self.db['__main__'].itervalues(): if tag.value is not None: self.rpc_register_tag(tag) # register sub tags on the cc-server for tag in chain.from_iterable( db.itervalues() for name, db in self.db.iteritems() if name != '__main__'): if tag.value is not None: self.rpc_register_sub_tag(tag.sub_id, tag) Loading @@ -280,6 +314,15 @@ class TagDB(object): self.rpc_call(tag_name, self.rpc_tag_unregister_cb, 'tags_unregister', tag_name) def rpc_update_tag(self, sub_id, tag): """Update tag value on cc-server.""" if sub_id == '__main__': self.rpc_call(sub_id + tag.name, self.rpc_update_tag_cb, 'tags_update', tag.name, tag.value) else: self.rpc_call(sub_id + tag.name, self.rpc_update_tag_cb, 'sub_tags_update', tag.name, tag.value) def rpc_register_sub_tag(self, sub_id, tag): self.rpc_call(tag.name, self.rpc_sub_tag_register_cb, 'sub_tags_register', sub_id, tag.name, tag.ttl, tag.value) Loading @@ -297,6 +340,8 @@ class TagDB(object): 'Error while registering sub tag %s, %s("%s")') rpc_sub_tag_unregister_cb = rpc_simple_cb( 'Error while unregistering sub tag %s, %s("%s")') rpc_update_tag_cb = rpc_simple_cb( 'Error while trying to update tag %s, %s("%s")') # end RPC part # tag handling part, used by plugins Loading Loading @@ -325,6 +370,7 @@ class TagDB(object): tag.sub_id = '__main__' tag.start(self.main.evloop) # register tag on the cc-server if tag.value is not None: self.rpc_register_tag(tag) else: self.parent.add_tag(tag) Loading @@ -337,6 +383,7 @@ class TagDB(object): tag.sub_id = None tag.stop() # unregister tag on the cc-server if tag.value is not None: self.rpc_unregister_tag(tag_name) else: self.parent.remove_tag(tag_name) Loading @@ -347,6 +394,7 @@ class TagDB(object): tag.sub_id = sub_id tag.start(self.main.evloop) # register tag to the cc-server if tag.value is not None: self.rpc_register_sub_tag(sub_id, tag) else: self.parent.add_sub_tag(sub_id, tag) Loading @@ -359,6 +407,7 @@ class TagDB(object): tag.sub_id = None tag.stop() # unregister tag to the cc-server if tag.value is not None: self.rpc_unregister_sub_tag(sub_id, tag_name) else: self.parent.remove_sub_tag(sub_id, tag_name) Loading @@ -383,10 +432,6 @@ class TagDB(object): sub_tags = self.db.pop(sub_id) self.parent.remove_sub_object(sub_id) def update_tag_value(self, tag): """Update tag value on cc-server.""" # TODO # dict like def get(self, key, default=None): return self.db.get(key, default) Loading