def __init__(self, personal_name = "",**keys): self._config = static.Config('',3.) self._logger = logging.getLogger(self.__class__.__name__) self._debug = self._logger.debug self._info = self._logger.info self._warn = self._logger.warn self._error = self._logger.error self._critical = self._logger.critical self._index() #Trick to start self._beacon_dserver_node = static.Node(self._config) self._beacon_dserver_node['server'] = 'DataBaseds' self._beacon_dserver_node['personal_name'] = personal_name tango_name = 'sys/database/%s' % personal_name databse_device_node = static.Node(self._config,self._beacon_dserver_node) databse_device_node['class'] = 'DataBase' databse_device_node['tango_name'] = tango_name self._beacon_dserver_node['device'] = [databse_device_node] self._beacon_dserver_node['tango_name'] = tango_name self._tango_name_2_node[tango_name] = databse_device_node tango_name = 'dserver/databaseds/%s' % personal_name self._tango_name_2_node[tango_name] = self._beacon_dserver_node server_name = 'DataBaseds/%s' % personal_name self._personal_2_node[server_name] = self._beacon_dserver_node
def add_device(self, server_name, dev_info, klass_name, alias=None): self._info("add_device(server_name=%s, dev_info=%s, klass_name=%s, alias=%s)", server_name, dev_info, klass_name, alias) tango_name, _ = dev_info tango_name = tango_name.lower() device_node = self._tango_name_2_node.get(tango_name) if device_node is not None: # There is a problem? return server_exe_name,personal_name = server_name.split('/') personal_name = personal_name.lower() server_name = '%s/%s' % (server_exe_name,personal_name) server_node = self._personal_2_node.get(server_name) if server_node is None: server_node = static.Node(self._config,filename = 'tango/%s.yml' % server_name.replace('/','_')) server_node['server'] = server_exe_name server_node['personal_name'] = personal_name self._personal_2_node[server_name] = server_node self._tango_name_2_node['dserver/%s' % server_name.lower()] = server_node self._strong_node_ref.add(server_node) device_node = static.Node(self._config,parent=server_node) self._strong_node_ref.add(device_node) device_node['tango_name'] = tango_name device_node['class'] = klass_name if alias is not None: device_node['alias'] = alias device_node_list = server_node.get('device',[]) device_node_list.append(device_node) server_node['device'] = device_node_list self._tango_name_2_node[tango_name] = device_node server_node.save()
def put_device_property(self, device_name, nb_properties, attr_prop_list): device_name = device_name.lower() device_node = self._tango_name_2_node.get(device_name) old_properties = device_node.get('properties') if isinstance(old_properties,str): #reference properties_key = old_properties.split('/') node_refname = properties_key[0] property_node = self._config.get_config(node_refname) if properties_key == node_refname: old_properties = property_node else: for key in properties_key[1:]: property_node = property_node.get(key) if property_node is None: break old_properties = property_node if old_properties is None: properties = static.Node(self._config,parent=device_node) device_node['properties'] = properties else: properties = old_properties id_prop = 0 for i in range(nb_properties) : prop_name,prop_nb_values = attr_prop_list[id_prop],int(attr_prop_list[id_prop + 1]) id_prop += 2 if prop_nb_values == 1: properties[prop_name] = attr_prop_list[id_prop] else: properties[prop_name] = attr_prop_list[id_prop:id_prop + prop_nb_values] id_prop += prop_nb_values properties.save()
def put_class_property(self, class_name, nb_properties, attr_prop_list): attr_id = 0 class_node = self._class_name_2_node.get(class_name) if class_node is None: class_node = static.Node(self._config,parent=self._config.root, filename = 'tango/%s.yml' % class_name.replace('/','_')) class_node['class'] = class_name self._strong_node_ref.add(class_node) self._class_name_2_node[class_name] = class_node properties = class_node.get('properties',dict()) for k in range(nb_properties): prop_name,nb_values = attr_prop_list[attr_id],int(attr_prop_list[attr_id + 1]) attr_id += 2 if nb_values == 1: properties[prop_name] = attr_prop_list[attr_id] else: properties[prop_name] = list(attr_prop_list[attr_id:]) class_node['properties'] = properties class_node.save()