[pytango] 382/483: Update python database
Sandor Bodo-Merle
sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:15:02 UTC 2017
This is an automated email from the git hooks/post-receive script.
sbodomerle-guest pushed a commit to annotated tag bliss_8.10
in repository pytango.
commit cd403f6b8e50e06ec0c87574d51d46961d0c5706
Author: tiagocoutinho <tiagocoutinho at 4e9c00fd-8f2e-0410-aa12-93ce3db5e235>
Date: Wed May 14 12:15:27 2014 +0000
Update python database
git-svn-id: http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk@25595 4e9c00fd-8f2e-0410-aa12-93ce3db5e235
---
src/boost/python/databaseds/db_access.py | 1563 ------------------------------
1 file changed, 1563 deletions(-)
diff --git a/src/boost/python/databaseds/db_access.py b/src/boost/python/databaseds/db_access.py
deleted file mode 100644
index 9a3f1bf..0000000
--- a/src/boost/python/databaseds/db_access.py
+++ /dev/null
@@ -1,1563 +0,0 @@
-from __future__ import print_function
-
-import os
-import logging
-import functools
-
-import PyTango
-
-th_exc = PyTango.Except.throw_exception
-
-from db_errors import *
-
-def get_create_db_statements():
- statements = []
- with open("create_db_tables.sql") as f:
- lines = f.readlines()
- # strip comments
- lines = (line for line in lines if not line.startswith('#'))
- lines = (line for line in lines if not line.lower().strip().startswith('key'))
- lines = (line for line in lines if not line.lower().strip().startswith('key'))
- lines = "".join(lines)
- lines = lines.replace("ENGINE=MyISAM", "")
- statements += lines.split(";")
-
- with open("create_db.sql") as f:
- lines = f.readlines()
- # strip comments
- lines = (line for line in lines if not line.lower().startswith('#'))
- lines = (line for line in lines if not line.lower().startswith('create database'))
- lines = (line for line in lines if not line.lower().startswith('use'))
- lines = (line for line in lines if not line.lower().startswith('source'))
- lines = "".join(lines)
- statements += lines.split(";")
-
- return statements
-
-def replace_wildcard(text):
- # escape '%' with '\'
- text = text.replace("%", "\\%")
- # escape '_' with '\'
- text = text.replace("_", "\\_")
- # escape '"' with '\'
- text = text.replace('"', '\\"')
- # escape ''' with '\'
- text = text.replace("'", "\\'")
- # replace '*' with '%'
- text = text.replace("*", "%")
- return text
-
-def use_cursor(f):
- @functools.wraps(f)
- def wrap(*args, **kwargs):
- self = args[0]
- has_cursor = 'cursor' in kwargs
- cursor = kwargs.pop('cursor', None)
- if not has_cursor:
- cursor = self.get_cursor()
- self.cursor = cursor
- try:
- ret = f(*args, **kwargs)
- if not has_cursor:
- cursor.connection.commit()
- return ret
- finally:
- if not has_cursor:
- cursor.close()
- del self.cursor
- return wrap
-
-class Tango_dbapi2(object):
-
- DB_API_NAME = 'sqlite3'
-
- def __init__(self, db_name="tango_database.db", history_depth=10, fire_to_starter=True):
- self._db_api = None
- self._db_conn = None
- self.db_name = db_name
- self.history_depth = history_depth;
- self.fire_to_starter = fire_to_starter
- self._logger = logging.getLogger(self.__class__.__name__)
- self._debug = self._logger.info
- self._info = self._logger.info
- self._warn = self._logger.warn
- self._error = self._logger.error
- self._critical = self._logger.critical
- self.initialize()
-
- def close_db(self):
- if self._db_conn is not None:
- self._db_conn.commit()
- self._db_conn.close()
- self._db_api = None
- self._db_conn = None
-
- def get_db_api(self):
- if self._db_api is None:
- self._db_api = __import__(self.DB_API_NAME)
- return self._db_api
-
- @property
- def db_api(self):
- return self.get_db_api()
-
- @property
- def db_conn(self):
- if self._db_conn is None:
- self._db_conn = self.db_api.connect(self.db_name)
- return self._db_conn
-
- def get_cursor(self):
- return self.db_conn.cursor()
-
- def initialize(self):
- self._info("Initializing database...")
- if not os.path.isfile(self.db_name):
- self.create_db()
-
- @use_cursor
- def create_db(self):
- self._info("Creating database...")
- statements = get_create_db_statements()
- cursor = self.cursor
- for statement in statements:
- cursor.execute(statement)
-
- @use_cursor
- def get_id(self, name):
- cursor = self.cursor
- name += '"_history_id'
- _id = cursor.execute('SELECT id FROM ?', (name,)).fetchone()[0] + 1
- cursor.execute('UPDATE ? SET id=?', (name, _id))
- return _id
-
- @use_cursor
- def purge_att_property(self, table, field, obj, attr, name):
- cursor = self.cursor
- cursor.execute(\
- 'SELECT DISTINCT id FROM ? WHERE ? = ? AND name = ? AND ' \
- 'attribute = ? ORDER BY date', (table, field, obj, name, attr))
- rows = cursor.fetchall()
- to_del = len(rows) - self.history_depth
- if to_del > 0:
- for row in rows[:to_del]:
- cursor.execute('DELETE FROM ? WHERE id=?', (table, row[0]))
-
- @use_cursor
- def purge_property(self, table, field, obj, name):
- cursor = self.cursor
- cursor.execute(\
- 'SELECT DISTINCT id FROM ? WHERE ? = ? AND name = ? ' \
- 'ORDER BY date', (table, field, obj, name))
- rows = cursor.fetchall()
- to_del = len(rows) - self.history_depth
- if to_del > 0:
- for row in rows[:to_del]:
- cursor.execute('DELETE FROM ? WHERE id=?', (table, row[0]))
-
- @use_cursor
- def get_device_host(self, name):
- cursor = self.cursor
- name = replace_wildcard(name)
- cursor.execute('SELECT host FROM device WHERE name LIKE ?', (name,))
- row = cursor.fetchone()
- if row is None:
- raise Exception("No host for device '" + name + "'")
- else:
- return row[0]
-
-
- def send_starter_cmd(self, starter_dev_names):
- for name in starter_dev_names:
- pos = name.find('.')
- if pos != -1:
- name = name[0:pos]
- dev = PyTango.DeviceProxy(name)
- dev.UpdateServersInfo()
-
-
-
- # TANGO API
-
- def get_stored_procedure_release(self):
- return 'release 1.8'
-
- @use_cursor
- def add_device(self, server_name, dev_info, klass_name, alias=None):
- self._info("delete_attribute_alias(server_name=%s, dev_info=%s, klass_name=%s, alias=%s)",
- server_name, dev_info, klass_name, alias)
- dev_name, (domain, family, member) = dev_info
- cursor = self.cursor
-
- # first delete the tuple (device,name) from the device table
- cursor.execute('DELETE FROM device WHERE name LIKE ?', (dev_name,))
-
- # then insert the new value for this tuple
- cursor.execute(\
- 'INSERT INTO device (name, alias, domain, family, member, exported, ' \
- 'ior, host, server, pid, class, version, started, stopped) ' \
- 'VALUES (?, ?, ?, ?, ?, 0, "nada", "nada", ?, 0, ?, "0", NULL, NULL)',
- (dev_name, alias, domain, family, member, server_name, klass_name))
-
- # Check if a DServer device entry for the process already exists
- cursor.execute('SELECT name FROM device WHERE server LIKE ? AND class LIKE "DServer"', (server_name,))
- if cursor.fetchone() is None:
- dev_name = "dserver/" + server_name
- domain, family, member = dev_name.split("/", 2)
- cursor.execute(\
- 'INSERT INTO device (name, domain, family, member, exported, ior, ' \
- 'host, server, pid, class, version, started, stopped) ' \
- 'VALUES (?, ?, ?, ?, 0, "nada", "nada", ?, 0, "DServer", "0", NULL, NULL)',
- (dev_name, domain, family, member, server_name))
-
- @use_cursor
- def delete_attribute_alias(self, alias):
- self._info("delete_attribute_alias(alias=%s)", alias)
- self.cursor.execute('DELETE FROM attribute_alias WHERE alias=?', (alias,))
-
- @use_cursor
- def delete_class_attribute(self, klass_name, attr_name):
- self.cursor.execute(\
- 'DELETE FROM property_attribute_class WHERE class LIKE ? AND ' \
- 'attribute LIKE ?', (klass_name, attr_name))
-
- @use_cursor
- def delete_class_attribute_property(self, klass_name, attr_name, prop_name):
- cursor = self.cursor
-
- # Is there something to delete ?
- cursor.execute(\
- 'SELECT count(*) FROM property_attribute_class WHERE class = ? ' \
- 'AND attribute = ? AND name = ?', (klass_name, attr_name, prop_name))
- if cursor.fetchone()[0] > 0:
- # then delete property from the property_attribute_class table
- cursor.execute(\
- 'DELETE FROM property_attribute_class WHERE class = ? AND ' \
- 'attribute = ? and name = ?', (klass_name, attr_name, prop_name))
- # mark this property as deleted
- hist_id = self.get_id('class_attribute', cursor=cursor)
- cursor.execute(\
- 'INSERT INTO property_attribute_class_hist (class, attribute, ' \
- 'name, id, count, value) VALUES ' \
- '(?, ?, ?, ?, "0", "DELETED")',
- (klass_name, attr_name, prop_name, hist_id))
- self.purge_att_property("property_attribute_class_hist", "class",
- klass_name, attr_name, prop_name, cursor=cursor)
-
- @use_cursor
- def delete_class_property(self, klass_name, prop_name):
- cursor = self.cursor
-
- prop_name = replace_wildcard(prop_name)
- # Is there something to delete ?
- cursor.execute(\
- 'SELECT DISTINCT name FROM property_class WHERE class=? AND ' \
- 'name LIKE ?', (klass_name, prop_name))
- for row in cursor.fetchall():
- # delete the tuple (device,name,count) from the property table
- name = row[0]
- cursor.execute(\
- 'DELETE FROM property_class WHERE class=? AND name=?',
- (klass_name, name))
- # Mark this property as deleted
- hist_id = self.get_id("class", cursor=cursor)
- cursor.execute(\
- 'INSERT INTO property_class_hist (class, name, id, count, value) ' \
- 'VALUES (?, ?, ?, "0", "DELETED")',
- (klass_name, name, hist_id))
- self.purge_property("property_class_hist", "class", klass_name,
- name, cursor=cursor)
-
- @use_cursor
- def delete_device(self, dev_name):
- self._info("delete_device(dev_name=%s)", dev_name)
- cursor = self.cursor
- dev_name = replace_wildcard(dev_name)
-
- # delete the device from the device table
- cursor.execute('DELETE FROM device WHERE name LIKE ?', (dev_name,))
-
- # delete device from the property_device table
- cursor.execute('DELETE FROM property_device WHERE device LIKE ?', (dev_name,))
-
- # delete device from the property_attribute_device table
- cursor.execute('DELETE FROM property_attribute_device WHERE device LIKE ?', (dev_name,))
-
- @use_cursor
- def delete_device_alias(self, dev_alias):
- self._info("delete_device_alias(dev_alias=%s)", dev_alias)
- self.cursor.execute('UPDATE device SET alias=NULL WHERE alias=?', (dev_alias,))
-
- @use_cursor
- def delete_device_attribute(self, dev_name, attr_name):
- dev_name = replace_wildcard(dev_name)
- self.cursor.execute(\
- 'DELETE FROM property_attribute_device WHERE device LIKE ? AND ' \
- 'attribute LIKE ?', (dev_name, attr_name))
-
- @use_cursor
- def delete_device_attribute_property(self, dev_name, attr_name, prop_name):
- cursor = self.cursor
- # Is there something to delete ?
- cursor.execute(\
- 'SELECT count(*) FROM property_attribute_device WHERE device = ?' \
- 'AND attribute = ? AND name = ?', (dev_name, attr_name, prop_name))
- if cursor.fetchone()[0] > 0:
- # delete property from the property_attribute_device table
- cursor.execute(\
- 'DELETE FROM property_attribute_device WHERE device = ? AND '
- 'attribute = ? AND name = ?', (dev_name, attr_name, prop_name))
- # Mark this property as deleted
- hist_id = self.get_id("device_attribute", cursor=cursor)
- cursor.execute(\
- 'INSERT INTO property_attribute_device_hist ' \
- '(device, attribute, name, id, count, value) VALUES ' \
- '(?, ?, ?, ?, "0", "DELETED")', (dev_name, attr_name, prop_name, hist_id))
- self.purge_att_property("property_attribute_device_hist", "device",
- dev_name, attr_name, prop_name, cursor=cursor)
-
- @use_cursor
- def delete_device_property(self, dev_name, prop_name):
- cursor = self.cursor
- prop_name = replace_wildcard(prop_name)
-
- # Is there something to delete ?
- cursor.execute(\
- 'SELECT DISTINCT name FROM property_device WHERE device=? AND ' \
- 'name LIKE ?', (dev_name, prop_name))
- for row in cursor.fetchall():
- # delete the tuple (device,name,count) from the property table
- cursor.execute(\
- 'DELETE FROM property_device WHERE device=? AND name LIKE ?',
- (dev_name, prop_name))
- # Mark this property as deleted
- hist_id = self.get_id("device", cursor=cursor)
- cursor.execute(\
- 'INSERT INTO property_device_hist (device, id, name, count, value) ' \
- 'VALUES (?, ?, ?, "0", "DELETED")', (dev_name, hist_id, row[0]))
- self.purge_property("property_device_hist", "device", dev_name, row[0])
-
- @use_cursor
- def delete_property(self, obj_name, prop_name):
- cursor = self.cursor
- prop_name = replace_wildcard(prop_name)
-
- # Is there something to delete ?
- cursor.execute(\
- 'SELECT DISTINCT name FROM property WHERE object=? AND ' \
- 'name LIKE ?', (obj_name, prop_name))
- for row in cursor.fetchall():
- # delete the tuple (object,name,count) from the property table
- cursor.execute(\
- 'DELETE FROM property_device WHERE device=? AND name LIKE ?',
- (obj_name, prop_name))
- # Mark this property as deleted
- hist_id = self.get_id("object", cursor=cursor)
- cursor.execute(\
- 'INSERT INTO property_hist (object, name, id, count, value) ' \
- 'VALUES (?, ?, ?, "0", "DELETED")', (obj_name, row[0], hist_id))
- self.purge_property("property_hist", "object", obj_name, row[0])
-
- @use_cursor
- def delete_server(self, server_instance):
- cursor = self.cursor
- server_instance = replace_wildcard(server_instance)
-
- previous_host = None
- # get host where running
- if self.fire_to_starter:
- adm_dev_name = "dserver/" + server_instance
- previous_host = self.get_device_host(adm_dev_name)
-
- # then delete the device from the device table
- cursor.execute('DELETE FROM device WHERE server LIKE ?', (server_instance,))
-
- # Update host's starter to update controlled servers list
- if self.fire_to_starter and previous_host:
- self.send_starter_cmd(previous_host)
- pass
-
- @use_cursor
- def delete_server_info(self, server_instance):
- self.cursor.execute('DELETE FROM server WHERE name=?', (server_instance,))
-
- @use_cursor
- def export_device(self, dev_name, IOR, host, pid, version):
- self._info("export_device(dev_name=%s, IOR=%s, host=%s, pid=%s, version=%s)",
- dev_name, IOR, host, pid, version)
- cursor = self.cursor
- do_fire = False
- previous_host = None
-
- if self.fire_to_starter:
- if dev_name[0:8] == "dserver/":
- # Get database server name
- tango_util = PyTango.Util.instance()
- db_serv = tango_util.get_ds_name()
- adm_dev_name = "dserver/" + db_serv.lower()
- if dev_name != adm_dev_name and dev_name[0:16] != "dserver/starter/":
- do_fire = True
- previous_host = self.get_device_host(dev_name)
-
- cursor.execute('SELECT server FROM device WHERE name LIKE ?', (dev_name,))
- row = cursor.fetchone()
- if row is None:
- th_exc(DB_DeviceNotDefined,
- "device " + dev_name + " not defined in the database !",
- "DataBase::ExportDevice()")
- server = row[0]
-
- # update the new value for this tuple
- cursor.execute(\
- 'UPDATE device SET exported=1, ior=?, host=?, pid=?, version=?, ' \
- 'started=datetime("now") WHERE name LIKE ?',
- (IOR, host, pid, version, dev_name))
-
- # update host name in server table
- cursor.execute('UPDATE server SET host=? WHERE name LIKE ?', (host, server))
-
- if do_fire:
- hosts = []
- hosts.append(host)
- if previous_host != "" and previous_host != "nada" and previous_host != host:
- hosts.append(previous_host)
- self.send_starter_cmd(hosts)
- pass
-
- @use_cursor
- def export_event(self, event, IOR, host, pid, version):
- cursor = self.cursor
- cursor.execute(\
- 'INSERT event (name,exported,ior,host,server,pid,version,started) ' \
- 'VALUES (?, 1, ?, ?, ?, ?, ?, datetime("now")',
- (event, IOR, host, event, pid, version))
-
- @use_cursor
- def get_alias_device(self, dev_alias):
- cursor = self.cursor
- cursor.execute('SELECT name FROM device WHERE alias LIKE ?',
- (dev_alias,))
- row = cursor.fetchone()
- if row is None:
- th_exc(DB_DeviceNotDefined,
- "No device found for alias '" + dev_alias + "'",
- "DataBase::GetAliasDevice()")
- return row[0]
-
- @use_cursor
- def get_attribute_alias(self, attr_alias):
- cursor = self.cursor
- cursor.execute('SELECT name from attribute_alias WHERE alias LIKE ?',
- (attr_alias,))
- row = cursor.fetchone()
- if row is None:
- th_exc(DB_SQLError,
- "No attribute found for alias '" + attr_alias + "'",
- "DataBase::GetAttributeAlias()")
- return row[0]
-
- @use_cursor
- def get_attribute_alias_list(self, attr_alias):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT alias FROM attribute_alias WHERE alias LIKE ? ORDER BY attribute',
- (attr_alias,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_class_attribute_list(self, class_name, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT attribute FROM property_attribute_class WHERE class=? and attribute like ?',
- (class_name, wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_class_attribute_property(self, class_name, attributes):
- cursor = self.cursor
- stmt = 'SELECT name,value FROM property_attribute_class WHERE class=? AND attribute LIKE ?'
- result = [class_name, str(len(attributes))]
- for attribute in attributes:
- cursor.execute(stmt, (class_name, attribute))
- rows = cursor.fetchall()
- result.append(attribute)
- result.append(str(len(rows)))
- for row in rows:
- result.append(row[0])
- result.append(row[1])
- return result
-
- @use_cursor
- def get_class_attribute_property2(self, class_name, attributes):
- cursor = self.cursor
- stmt = 'SELECT name,value FROM property_attribute_class WHERE class=? AND attribute LIKE ? ORDER BY name,count'
- result = [class_name, str(len(attributes))]
- for attribute in attributes:
- cursor.execute(stmt, (class_name, attribute))
- rows = cursor.fetchall()
- result.append(attribute)
- j = 0
- new_prop = True
- nb_props = 0
- prop_size = 0
- prop_names = []
- prop_sizes = []
- prop_values = []
- for row in rows:
- prop_values.append(row[1])
- if j == 0:
- old_name = row[0]
- else:
- name = row[0]
- if name != old_name:
- new_prop = True
- old_name = name
- else:
- new_prop = False
- j = j + 1
- if new_prop == True:
- nb_props = nb_props + 1
- prop_names.append(row[0])
- if prop_size != 0:
- prop_sizes.append(prop_size)
- prop_size = 1
- else:
- prop_size = prop_size + 1
-
- result.append(str(nb_props))
- j = 0
- k = 0
- for name in prop_names:
- result.append(name)
- result.append(prop_sizes[j])
- for i in range(0, prop_sizes[j]):
- result.append(prop_values[k])
- k = k + 1
- j = j + 1
- return result
-
- @use_cursor
- def get_class_attribute_property_hist(self, class_name, attribute, prop_name):
- cursor = self.cursor
- stmt = 'SELECT DISTINCT id FROM property_attribute_class_hist WHERE class=? AND attribute LIKE ? AND name LIKE ? ORDER by date ASC'
-
- result = []
-
- cursor.execute(stmt, (class_name, attribute, prop_name))
-
- for row in cursor.fetchall():
- idr = row[0]
-
- stmt = 'SELECT DATE_FORMAT(date,\'%Y-%m-%d %H:%i:%s\'),value,attribute,name,count FROM property_attribute_class_hist WHERE id =? AND class =?'
-
- cursor.execute(stmt, (idr, class_name))
-
- rows = cursor.fetchall()
-
- result.append(rows[2])
- result.append(rows[3])
- result.append(rows[0])
- result.append(str(rows[4]))
- for value in rows[1]:
- result.append(value)
-
- return result
-
- @use_cursor
- def get_class_for_device(self, dev_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT class FROM device WHERE name=?', (dev_name,))
- row = cursor.fetchone()
- if row is None:
- th_exc(DB_IncorrectArguments, "Class not found for " + dev_name,
- "Database.GetClassForDevice")
- return row
-
- @use_cursor
- def get_class_inheritance_for_device(self, dev_name):
- cursor = self.cursor
- class_name = self.get_class_for_device(dev_name, cursor=cursor)
- props = self.get_class_property(class_name, "InheritedFrom", cursor=cursor)
- return [class_name] + props[4:]
-
- @use_cursor
- def get_class_list(self, server):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT class FROM device WHERE class LIKE ? ORDER BY class', (server,))
- return [ row[0] for row in cursor.fetchall() ]
-
-
- @use_cursor
- def get_class_property(self, class_name, properties):
- cursor = self.cursor
- stmt = 'SELECT count,value FROM property_class WHERE class=? AND name LIKE ? ORDER BY count'
- result.append(class_name)
- result.append(len(properties))
- for prop_name in properties:
- cursor.execute(stmt, (class_name, prop_name))
- rows = cursor.fetchall()
- result.append(prop_name)
- result.append(str(len(rows)))
- for row in rows:
- result.append(row[1])
- return result
-
- @use_cursor
- def get_class_property_hist(self, class_name, prop_name):
- cursor = self.cursor
- stmt = 'SELECT DISTINCT id FROM property_class_hist WHERE class=? AND AND name LIKE ? ORDER by date ASC'
-
- result = []
-
- cursor.execute(stmt, (class_name, prop_name))
-
- for row in cursor.fetchall():
- idr = row[0]
-
- stmt = 'SELECT DATE_FORMAT(date,\'%Y-%m-%d %H:%i:%s\'),value,name,count FROM property_class_hist WHERE id =? AND class =?'
-
- cursor.execute(stmt, (idr, class_name))
-
- rows = cursor.fetchall()
-
- result.append(rows[2])
- result.append(rows[0])
- result.append(str(rows[3]))
- for value in rows[1]:
- result.append(value)
-
- return result
-
- @use_cursor
- def get_class_property_list(self, class_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT name FROM property_class WHERE class LIKE ? order by NAME',
- (class_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_device_alias(self, dev_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT alias FROM device WHERE name LIKE ?',
- (dev_name,))
- row = cursor.fetchone()
- if row is None:
- th_exc(DB_DeviceNotDefined,
- "No alias found for device '" + dev_name + "'",
- "DataBase::GetDeviceAlias()")
- return row[0]
-
- @use_cursor
- def get_device_alias_list(self, alias):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT alias FROM device WHERE alias LIKE ? ORDER BY alias',
- (alias,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_device_attribute_list(self, dev_name, attribute):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT attribute FROM property_attribute_device WHERE device=? AND attribute LIKE ? ORDER BY attribute',
- (dev_name, attribute,))
- return [ row[0] for row in cursor.fetchall() ]
-
-
- @use_cursor
- def get_device_attribute_property(self, dev_name, attributes):
- cursor = self.cursor
- stmt = 'SELECT name,value FROM property_attribute_device WHERE device=? AND attribute LIKE ?'
- result = [dev_name, str(len(attributes))]
- for attribute in attributes:
- cursor.execute(stmt, (dev_name, attribute))
- rows = cursor.fetchall()
- result.append(attribute)
- result.append(str(len(rows)))
- for row in rows:
- result.append(row[0])
- result.append(row[1])
- return result
-
- @use_cursor
- def get_device_attribute_property2(self, dev_name, attributes):
- cursor = self.cursor
- stmt = 'SELECT name,value FROM property_attribute_device WHERE device=? AND attribute LIKE ? ORDER BY name,count'
- result = [dev_name, str(len(attributes))]
- for attribute in attributes:
- cursor.execute(stmt, (dev_name, attribute))
- rows = cursor.fetchall()
- result.append(attribute)
- j = 0
- new_prop = True
- nb_props = 0
- prop_size = 0
- prop_names = []
- prop_sizes = []
- prop_values = []
- for row in rows:
- prop_values.append(row[1])
- if j == 0:
- old_name = row[0]
- else:
- name = row[0]
- if name != old_name:
- new_prop = True
- old_name = name
- else:
- new_prop = False
- j = j + 1
- if new_prop == True:
- nb_props = nb_props + 1
- prop_names.append(row[0])
- if prop_size != 0:
- prop_sizes.append(prop_size)
- prop_size = 1
- else:
- prop_size = prop_size + 1
-
- result.append(str(nb_props))
- j = 0
- k = 0
- for name in prop_names:
- result.append(name)
- result.append(prop_sizes[j])
- for i in range(0, prop_sizes[j]):
- result.append(prop_values[k])
- k = k + 1
- j = j + 1
- return result
-
- @use_cursor
- def get_device_attribute_property_hist(self, dev_name, attribute, prop_name):
- cursor = self.cursor
- stmt = 'SELECT DISTINCT id FROM property_attribute_device_hist WHERE device=? AND attribute LIKE ? AND name LIKE ? ORDER by date ASC'
-
- result = []
-
- cursor.execute(stmt, (dev_name, attribute, prop_name))
-
- for row in cursor.fetchall():
- idr = row[0]
-
- stmt = 'SELECT DATE_FORMAT(date,\'%Y-%m-%d %H:%i:%s\'),value,attribute,name,count FROM property_attribute_device_hist WHERE id =? AND device =? ORDER BY count ASC'
-
- cursor.execute(stmt, (idr, class_name))
-
- rows = cursor.fetchall()
-
- result.append(rows[2])
- result.append(rows[3])
- result.append(rows[0])
- result.append(str(rows[4]))
- for value in rows[1]:
- result.append(value)
-
- return result
-
-
- @use_cursor
- def get_device_class_list(self, server_name):
- cursor = self.cursor
- result = []
- cursor.execute('SELECT name,class FROM device WHERE server =? ORDER BY name',
- (server_name,))
- for row in cursor.fetchall():
- result.append(row[0])
- result.append(row[1])
-
- return result
-
- @use_cursor
- def get_device_domain_list(self, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT domain FROM device WHERE name LIKE ? OR alias LIKE ? ORDER BY domain',
- (wildcard,wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
-
- @use_cursor
- def get_device_exported_list(self, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT name FROM device WHERE (name LIKE ? OR alias LIKE ?) AND exported=1 ORDER BY name',
- (wildcard,wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_device_family_list(self, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT family FROM device WHERE name LIKE ? OR alias LIKE ? ORDER BY family',
- (wildcard,wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_device_info(self, dev_name):
- cursor = self.cursor
- cursor.execute('SELECT exported,ior,version,pid,server,host,started,stopped,class FROM device WHERE name =? or alias =?',
- (dev_name,dev_name))
- result_long = []
- result_str = []
- for row in cursor.fetchall():
- if ((row[4] == None) or (row[5] == None)):
- th_exc(DB_SQLError,
- "Wrong info in database for device '" + dev_name + "'",
- "DataBase::GetDeviceInfo()")
- result_str.append(dev_name)
- if raw[1] != None:
- result_str.append(str(raw[1]))
- else:
- result_str.append("")
- result_str.append(str(raw[2]))
- result_str.append(str(raw[4]))
- result_str.append(str(raw[5]))
-
- for i in range(0,2):
- cursor.execute('SELECT DATE_FORMAT(?,\'%D-%M-%Y at %H:%i:%s\')', raw[6 + i])
- tmp_date = cursor.fetchone()
- if tmp_date == None:
- result_str.append("?")
- else:
- result_str.append(str(tmp_date))
-
- for i in range(0,2):
- if raw[i] != None:
- result_long.append(raw[i])
-
- result = (result_long, result_str)
- return result
-
- @use_cursor
- def get_device_list(self,server_name, class_name ):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT name FROM device WHERE server LIKE ? AND class LIKE ? ORDER BY name',
- (server_name, class_name))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_device_wide_list(self, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT name FROM device WHERE name LIKE ? ORDER BY name',
- (wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_device_member_list(self, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT member FROM device WHERE name LIKE ? ORDER BY member',
- (wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
-
- @use_cursor
- def get_device_property(self, dev_name, properties):
- cursor = self.cursor
- stmt = 'SELECT count,value,name FROM property_device WHERE device = ? AND name LIKE ? ORDER BY count'
- result = []
- result.append(dev_name)
- result.append(str(len(properties)))
- for prop in properties:
- result.append(prop)
- tmp_name = replace_wildcard(prop)
- cursor.execute(stmt, (dev_name, tmp_name))
- rows = cursor.fetchall()
- result.append(attribute)
- result.append(str(len(rows)))
- for row in rows:
- result.append(row[1])
- return result
-
- @use_cursor
- def get_device_property_hist(self, device_name, prop_name):
- cursor = self.cursor
- stmt = 'SELECT DISTINCT id FROM property_device_hist WHERE device=? AND name LIKE ? ORDER by date ASC'
-
- result = []
-
- tmp_name = replace_wildcard(prop_name);
-
- cursor.execute(stmt, (class_name, device_name, tmp_name))
-
- stmt = 'SELECT DATE_FORMAT(date,\'%Y-%m-%d %H:%i:%s\'),value,name,count FROM property_device_hist WHERE id =? AND device =? ORDER BY count ASC'
-
- for row in cursor.fetchall():
- idr = row[0]
- cursor.execute(stmt, (idr, device_name))
- rows = cursor.fetchall()
- result.append(rows[2])
- result.append(rows[0])
- result.append(str(rows[3]))
- for value in rows[1]:
- result.append(value)
-
- return result
-
- @use_cursor
- def get_device_server_class_list(self, server_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT class FROM device WHERE server LIKE ? ORDER BY class',
- (sever_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_exported_device_list_for_class(self, class_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT name FROM device WHERE class LIKE ? AND exported=1 ORDER BY name',
- (class_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_host_list(self, host_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT host FROM device WHERE host LIKE ? ORDER BY host',
- (host_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_host_server_list(self, host_name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT server FROM device WHERE host LIKE ? ORDER BY server',
- (host_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
-
- def get_host_servers_info(self, host_name):
- servers = self.get_host_server_list(host_name)
- result = []
- for server in servers:
- result.append(server)
- info = self.get_server_info(server)
- result.append(info[2])
- result.append(info[3])
- return result
-
-
- def get_instance_name_list(self, server_name):
- server_name = server_name + "\*"
- server_list = self.get_server_list(server_name)
- result = []
- for server in server_list:
- names = server.split("/")
- result.append(names[1])
- return result
-
- @use_cursor
- def get_object_list(self, name):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT object FROM property WHERE object LIKE ? ORDER BY object',
- (name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_property(self, object_name, properties):
- cursor = self.cursor
- result = []
- result.append(object_name)
- result.append(str(len(properties)))
- stmt = 'SELECT count,value,name FROM property WHERE object LIKE ? AND name LIKE ? ORDER BY count'
- for prop_name in properties:
- result.append(prop_name)
- prop_name = replace_wildcard(prop_name)
- cursor.execute(stmt, (object_name,prop_name))
- rows = cursor.fetchall()
- n_rows = len(rows)
- result.append(n_rows)
- if n_rows:
- for row in rows:
- result.append(row[1])
- else:
- result.append(" ")
- return result
-
-
- @use_cursor
- def get_property_hist(self, object_name, prop_name):
- cursor = self.cursor
- result = []
-
- stmt = 'SELECT DISTINCT id FROM property_hist WHERE object=? AND name LIKE ? ORDER by date'
- prop_name = replace_wildcard(prop_name)
- cursor.execute(stmt, (object_name, prop_name))
-
- stmt = 'SELECT DATE_FORMAT(date,\'%Y-%m-%d %H:%i:%s\'),value,name,count FROM property_hist WHERE id =? AND object =?'
- for row in cursor.fetchall():
- idr = row[0]
-
- cursor.execute(stmt, (idr, object_name))
- rows = cursor.fetchall()
- count = len(rows)
- if rows[3] == 0:
- count = 0
- result.append(rows[2])
- result.append(rows[0])
- result.append(str(count))
- for tmp_row in rows:
- result.append(tmp_row[1])
-
- return result
-
- @use_cursor
- def get_property_list(self, object_name, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT name FROM property WHERE object LIKE ? AND name LIKE ? ORDER BY name',
- (object_name,wildcard))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_server_info(self, server_name):
- cursor = self.cursor
- cursor.execute('SELECT host,mode,level FROM server WHERE name =?',
- (server_name,))
- result = []
- result.append(server_name)
- row = cursor.fetchone()
- if row is None:
- result.append(" ")
- result.append(" ")
- result.append(" ")
- else:
- result.append(row[0])
- result.append(row[1])
- result.append(row[2])
-
- return result
-
- @use_cursor
- def get_server_list(self, wildcard):
- cursor = self.cursor
- cursor.execute('SELECT DISTINCT server FROM device WHERE server LIKE ? ORDER BY server',
- (wildcard,))
- return [ row[0] for row in cursor.fetchall() ]
-
- def get_server_list(self, wildcard):
- result = []
- server_list = self.get_server_list(wildcard)
- for server in server_list:
- found = 0
- server_name = server.split("/")[0]
- for res in result:
- if server_name.lower() == res.lower():
- found = 1
- if not found:
- result.append(server_name)
- return result
-
- @use_cursor
- def import_device(self, dev_name):
- cursor = self.cursor
- result_long = []
- result_str = []
- # Search first by server name and if nothing found by alias
- # Using OR takes much more time
- cursor.execute('"SELECT exported,ior,version,pid,server,host,class FROM device WHERE name =?',
- (dev_name,))
- rows = cursor.fetchall()
- if len(rows) == 0:
- cursor.execute('"SELECT exported,ior,version,pid,server,host,class FROM device WHERE alias =?',
- (dev_name,))
- rows = cursor.fetchall()
- if len(rows) == 0:
- th_exc(DB_DeviceNotDefined,
- "device " + dev_name + " not defined in the database !",
- "DataBase::ImportDevice()")
- for row in rows:
- result_str.append(dev_name)
- result_str.append(row[2])
- result_str.append(row[4])
- result_str.append(row[5])
- result_str.append(row[6])
- if row[1] != None:
- result_str.append(row[1])
- else:
- result_str.append("")
- result_long.append(row[0])
- result_long.append(row[3])
- result = (result_long, result_str)
- return result
-
- @use_cursor
- def import_event(self, event_name):
- cursor = self.cursor
- result_long = []
- result_str = []
- cursor.execute('"SELECT exported,ior,version,pid,host FROM event WHERE name =?',
- (event_name,))
- rows = cursor.fetchall()
- if len(rows) == 0:
- th_exc(DB_DeviceNotDefined,
- "event " + event_name + " not defined in the database !",
- "DataBase::ImportEvent()")
- for row in rows:
- result_str.append(event_name)
- result_str.append(row[1])
- result_str.append(row[2])
- result_str.append(row[4])
- exported = -1
- if row[0] != None:
- exported = row[0]
- result_long.append(exported)
- result_long.append(row[3])
- result = (result_long, result_str)
- return result
-
-
- @use_cursor
- def info(self):
- cursor = self.cursor
- result = []
- # db name
- info_str = "TANGO Database " + self.db_name
- result.append(info_str)
- # new line
- result.append("")
- # get start time of database
- cursor.execute('SELECT started FROM device WHERE name =?',
- (self.db_name,))
- row = cursor.fetchone()
- info_str = "Running since ..." + str(row[0])
- result.append(info_str)
- # new line
- result.append("")
- # get number of devices defined
- cursor.execute('SELECT COUNT(*) FROM device')
- row = cursor.fetchone()
- info_str = "Devices defined = " + str(row[0])
- result.append(info_str)
- # get number of devices exported
- cursor.execute('SELECT COUNT(*) FROM device WHERE exported = 1')
- row = cursor.fetchone()
- info_str = "Devices exported = " + str(row[0])
- result.append(info_str)
- # get number of device servers defined
- cursor.execute('SELECT COUNT(*) FROM device WHERE class = \"DServer\" ')
- row = cursor.fetchone()
- info_str = "Device servers defined = " + str(row[0])
- result.append(info_str)
- # get number of device servers exported
- cursor.execute('SELECT COUNT(*) FROM device WHERE class = \"DServer\" AND exported = 1')
- row = cursor.fetchone()
- info_str = "Device servers exported = " + str(row[0])
- result.append(info_str)
- # new line
- result.append("")
- # get number of device properties
- cursor.execute('SELECT COUNT(*) FROM property_device')
- row = cursor.fetchone()
- info_str = "Device properties defineed = " + str(row[0])
- cursor.execute('SELECT COUNT(*) FROM property_device_hist')
- row = cursor.fetchone()
- info_str = info_str + " [History lgth = " + str(row[0]) + "]"
- result.append(info_str)
- # get number of class properties
- cursor.execute('SELECT COUNT(*) FROM property_class')
- row = cursor.fetchone()
- info_str = "Class properties defined = " + str(row[0])
- cursor.execute('SELECT COUNT(*) FROM property_class_hist')
- row = cursor.fetchone()
- info_str = info_str + " [History lgth = " + str(row[0]) + "]"
- result.append(info_str)
- # get number of device attribute properties
- cursor.execute('SELECT COUNT(*) FROM property_attribute_device')
- row = cursor.fetchone()
- info_str = "Device attribute properties defined = " + str(row[0])
- cursor.execute('SELECT COUNT(*) FROM property_attribute_device_hist')
- row = cursor.fetchone()
- info_str = info_str + " [History lgth = " + str(row[0]) + "]"
- result.append(info_str)
- # get number of class attribute properties
- cursor.execute('SELECT COUNT(*) FROM property_attribute_class')
- row = cursor.fetchone()
- info_str = "Class attribute properties defined = " + str(row[0])
- cursor.execute('SELECT COUNT(*) FROM property_attribute_class_hist')
- row = cursor.fetchone()
- info_str = info_str + " [History lgth = " + str(row[0]) + "]"
- result.append(info_str)
- # get number of object properties
- cursor.execute('SELECT COUNT(*) FROM property')
- row = cursor.fetchone()
- info_str = "Object properties defined = " + str(row[0])
- cursor.execute('SELECT COUNT(*) FROM property_hist')
- row = cursor.fetchone()
- info_str = info_str + " [History lgth = " + str(row[0]) + "]"
- result.append(info_str)
-
- return result
-
- @use_cursor
- def put_attribute_alias(self, attribute_name, attribute_alias):
- cursor = self.cursor
- attribute_name = attribute_name.lower()
- # first check if this alias exists
- cursor.execute('SELECT alias from attribute_alias WHERE alias=? AND name <> ? ',
- (attribute_alias,attribute_name))
- rows = cursor.fetchall()
- if len(rows) > 0:
- self.warn_stream("DataBase::DbPutAttributeAlias(): this alias exists already ")
- th_exc(DB_SQLError,
- "alias " + attribute_alias + " already exists !",
- "DataBase::DbPutAttributeAlias()")
- tmp_names = attribute_name.split("/")
- if len(tmp_names) != 4:
- self.warn_stream("DataBase::DbPutAttributeAlias(): attribute name has bad syntax, must have 3 / in it")
- th_exc(DB_SQLError,
- "attribute name " + attribute_name + " has bad syntax, must have 3 / in it",
- "DataBase::DbPutAttributeAlias()")
- # first delete the current entry (if any)
- cursor.execute('DELETE FROM attribute_alias WHERE name=?',
- (attribute_name,))
- # update the new value for this tuple
- tmp_device = tmp_names[0] + "/" + tmp_names[1] + "/" + tmp_names[2]
- tmp_attribute = tmp_names[3]
- cursor.execute('INSERT attribute_alias SET alias=? ,name=?, device=?,updated=NOW()',
- (attribute_alias, tmp_device, tmp_attribute))
-
-
- @use_cursor
- def put_class_attribute_property(self, class_name, nb_attributes, attr_prop_list):
- cursor = self.cursor
- k = 0
- for i in range(0,nb_attributes):
- tmp_attribute = attr_prop_list[k]
- nb_properties = int(attr_prop_list[k+1])
- for j in range(k+2,k+nb_properties*2+2,2):
- tmp_name = attr_prop_list[j]
- tmp_value = attr_prop_list[j+1]
- # first delete the tuple (device,name,count) from the property table
- cursor.execute('DELETE FROM property_attribute_class WHERE class LIKE ? AND attribute LIKE ? AND name LIKE ?', (class_name, tmp_attribute, tmp_name))
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property_attribute_class SET class=? ,attribute=?,name=?,count=\'1\',value=?,updated=NULL,accessed=NULL', (class_name, tmp_attribute, tmp_name, tmp_value))
- # then insert the new value into the history table
- hist_id = self.get_id("class_attribute", cursor=cursor)
- cursor.execute('INSERT INTO property_attribute_class_hist SET class=?,attribute=?,name=?,id=?,count=\'1\',value=?', (class_name, tmp_attribute, tmp_name,hist_id,tmp_value))
-
- self.purge_att_property("property_attribute_class_hist", "class",
- class_name, tmp_attribute, tmp_name, cursor=cursor)
- k = k + nb_properties*2+2
-
- @use_cursor
- def put_class_attribute_property2(self, class_name, nb_attributes, attr_prop_list):
- cursor = self.cursor
- k = 0
- for i in range(0,nb_attributes):
- tmp_attribute = attr_prop_list[k]
- nb_properties = int(attr_prop_list[k+1])
- for jj in range(0,nb_properties,1):
- j = k + 2
- tmp_name = attr_prop_list[j]
- # first delete the tuple (device,name,count) from the property table
- cursor.execute('DELETE FROM property_attribute_class WHERE class LIKE ? AND attribute LIKE ? AND name LIKE ?', (class_name, tmp_attribute, tmp_name))
- n_rows = attr_prop_list[j+1]
- tmp_count = 0
- for l in range(j+1,j+n_rows+1,1):
- tmp_value = attr_prop_list[l+1]
- tmp_count = tmp_count + 1
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property_attribute_class SET class=? ,attribute=?,name=?,count=?,value=?,updated=NULL,accessed=NULL', (class_name, tmp_attribute, tmp_name, str(tmp_count), tmp_value))
- # then insert the new value into the history table
- hist_id = self.get_id("class_attribute", cursor=cursor)
- cursor.execute('INSERT INTO property_attribute_class_hist SET class=?,attribute=?,name=?,id=?,count=?,value=?', (class_name, tmp_attribute, tmp_name,hist_id, str(tmp_count),tmp_value))
-
- self.purge_att_property("property_attribute_class_hist", "class",
- class_name, tmp_attribute, tmp_name, cursor=cursor)
- k = k + n_rows + 2
- k = k + 2
-
- @use_cursor
- def put_class_property(self, class_name, nb_properties, attr_prop_list):
- cursor = self.cursor
- k = 0
- for i in range(0,nb_properties):
- tmp_count = 0
- tmp_name = attr_prop_list[k]
- n_rows = attr_prop_list[k+1]
- # first delete all tuples (device,name) from the property table
- cursor.execute('DELETE FROM property_class WHERE class LIKE ? AND name LIKE ?', (class_name, tmp_name))
-
- for j in range(k+2,k+n_rows+2,1):
- tmp_value = attr_prop_list[j]
- tmp_count = tmp_count+1
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property_class SET class=? ,name=?,count=?,value=?,updated=NULL,accessed=NULL', (class_name, tmp_name, str(tmp_count), tmp_value))
- # then insert the new value into the history table
- hist_id = self.get_id("class", cursor=cursor)
- cursor.execute('INSERT INTO property_class_hist SET class=?,name=?,id=?,count=?,value=?', (class_name, tmp_name,hist_id, str(tmp_count),tmp_value))
- self.purge_att_property("property_class_hist", "class",
- class_name, tmp_name, cursor=cursor)
- k = k + n_rows + 2
-
- @use_cursor
- def put_device_alias(self, device_name, device_alias):
- cursor = self.cursor
- device_name = device_name.lower()
- # first check if this alias exists
- cursor.execute('SELECT alias from device WHERE alias=? AND name <>?',
- (device_alias, device_name))
- rows = cursor.fetchall()
- if len(rows) > 0:
- self.warn_stream("DataBase::DbPutDeviceAlias(): this alias exists already ")
- th_exc(DB_SQLError,
- "alias " + device_alias + " already exists !",
- "DataBase::DbPutDeviceAlias()")
- # update the new value for this tuple
- cursor.execute('UPDATE device SET alias=? ,started=NOW() where name LIKE ?',
- (device_alias, device_name))
-
- @use_cursor
- def put_device_attribute_property(self, device_name, nb_attributes, attr_prop_list):
- cursor = self.cursor
- k = 0
- for i in range(0,nb_attributes):
- tmp_attribute = attr_prop_list[k]
- nb_properties = int(attr_prop_list[k+1])
- for j in range(k+2,k+nb_properties*2+2,2):
- tmp_name = attr_prop_list[j]
- tmp_value = attr_prop_list[j+1]
- # first delete the tuple (device,name,count) from the property table
- cursor.execute('DELETE FROM property_attribute_device WHERE device LIKE ? AND attribute LIKE ? AND name LIKE ?', (device_name, tmp_attribute, tmp_name))
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property_attribute_device SET device=? ,attribute=?,name=?,count=\'1\',value=?,updated=NULL,accessed=NULL', (device_name, tmp_attribute, tmp_name, tmp_value))
- # then insert the new value into the history table
- hist_id = self.get_id("device_attribute", cursor=cursor)
- cursor.execute('INSERT INTO property_attribute_device_hist SET device=?,attribute=?,name=?,id=?,count=\'1\',value=?', (device_name, tmp_attribute, tmp_name,hist_id,tmp_value))
-
- self.purge_att_property("property_attribute_device_hist", "device",
- device_name, tmp_attribute, tmp_name, cursor=cursor)
- k = k + nb_properties*2+2
-
-
- @use_cursor
- def put_device_attribute_property2(self, device_name, nb_attributes, attr_prop_list):
- cursor = self.cursor
- k = 0
- for i in range(0,nb_attributes):
- tmp_attribute = attr_prop_list[k]
- nb_properties = int(attr_prop_list[k+1])
- for jj in range(0,nb_properties,1):
- j = k + 2
- tmp_name = attr_prop_list[j]
- # first delete the tuple (device,name,count) from the property table
- cursor.execute('DELETE FROM property_attribute_device WHERE device LIKE ? AND attribute LIKE ? AND name LIKE ?', (device_name, tmp_attribute, tmp_name))
- n_rows = attr_prop_list[j+1]
- tmp_count = 0
- for l in range(j+1,j+n_rows+1,1):
- tmp_value = attr_prop_list[l+1]
- tmp_count = tmp_count + 1
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property_attribute_device SET device=? ,attribute=?,name=?,count=?,value=?,updated=NULL,accessed=NULL', (device_name, tmp_attribute, tmp_name, str(tmp_count), tmp_value))
- # then insert the new value into the history table
- hist_id = self.get_id("device_attribute", cursor=cursor)
- cursor.execute('INSERT INTO property_attribute_device_hist SET device=?,attribute=?,name=?,id=?,count=?,value=?', (device_name, tmp_attribute, tmp_name,hist_id, str(tmp_count),tmp_value))
-
- self.purge_att_property("property_attribute_device_hist", "device",
- device_name, tmp_attribute, tmp_name, cursor=cursor)
- k = k + n_rows + 2
- k = k + 2
-
- @use_cursor
- def put_device_property(self, device_name, nb_properties, attr_prop_list):
- cursor = self.cursor
- k = 0
- hist_id = self.get_id("device", cursor=cursor)
- for i in range(0,nb_properties):
- tmp_count = 0
- tmp_name = attr_prop_list[k]
- n_rows = attr_prop_list[k+1]
- # first delete all tuples (device,name) from the property table
- cursor.execute('DELETE FROM property_device WHERE device LIKE ? AND name LIKE ?', (device_name, tmp_name))
-
- for j in range(k+2,k+n_rows+2,1):
- tmp_value = attr_prop_list[j]
- tmp_count = tmp_count+1
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property_device SET device=? ,name=?,count=?,value=?,updated=NULL,accessed=NULL', (device_name, tmp_name, str(tmp_count), tmp_value))
- # then insert the new value into the history table
- cursor.execute('INSERT INTO property_device_hist SET device=?,name=?,id=?,count=?,value=?', (device_name, tmp_name,hist_id, str(tmp_count),tmp_value))
- self.purge_att_property("property_device_hist", "device",
- device_name, tmp_name, cursor=cursor)
- k = k + n_rows + 2
-
- @use_cursor
- def put_property(self, object_name, nb_properties, attr_prop_list):
- cursor = self.cursor
- k = 0
- hist_id = self.get_id("object", cursor=cursor)
- for i in range(0,nb_properties):
- tmp_count = 0
- tmp_name = attr_prop_list[k]
- n_rows = attr_prop_list[k+1]
- # first delete the property from the property table
- cursor.execute('DELETE FROM property WHERE object =? AND name =?', (object_name, tmp_name))
-
- for j in range(k+2,k+n_rows+2,1):
- tmp_value = attr_prop_list[j]
- tmp_count = tmp_count+1
- # then insert the new value for this tuple
- cursor.execute('INSERT INTO property SET object=? ,name=?,count=?,value=?,updated=NULL,accessed=NULL', (object_name, tmp_name, str(tmp_count), tmp_value))
- # then insert the new value into the history table
- cursor.execute('INSERT INTO property_hist SET object=?,name=?,id=?,count=?,value=?', (object_name, tmp_name,hist_id, str(tmp_count),tmp_value))
- self.purge_att_property("property_hist", "object",
- object_name, tmp_name, cursor=cursor)
- k = k + n_rows + 2
-
- @use_cursor
- def put_server_info(self, tmp_server, tmp_host, tmp_mode, tmp_level, tmp_extra):
- cursor = self.cursor
- # If it is an empty host name -> get previous host where running
- previous_host = ""
- if self.fire_to_starter:
- if tmp_host == "":
- adm_dev_name = "dserver/" + tmp_server
- previous_host = self.get_device_host(adm_dev_name)
- # first delete the server from the server table
- cursor.execute('DELETE FROM server WHERE name=?', (tmp_server,))
- # insert the new info for this server
- cursor.execute('INSERT INTO server SET name=? ,host=? ,mode=? ,level=?', ( tmp_server, tmp_host, tmp_mode, tmp_level))
- # Update host's starter to update controlled servers list
- if self.fire_to_starter:
- hosts = []
- if previous_host == "":
- hosts.append(tmp_host)
- else:
- hosts.append(previous_host)
- self.send_starter_cmd(hosts)
-
- @use_cursor
- def uexport_device(self, dev_name):
- cursor = self.cursor
- self._info("un-export device(dev_name=%s)", dev_name)
- cursor.execute('UPDATE device SET exported=0,stopped=NOW() WHERE name LIKE ?', (dev_name,))
-
- @use_cursor
- def uexport_event(self, event_name):
- cursor = self.cursor
- self._info("un-export event (event_name=%s)", event_name)
- cursor.execute('UPDATE event SET exported=0,stopped=NOW() WHERE name LIKE ?', (event_name,))
-
- @use_cursor
- def uexport_server(self, server_name):
- cursor = self.cursor
- self._info("un-export all devices from server ", server_name)
- cursor.execute('UPDATE device SET exported=0,stopped=NOW() WHERE server LIKE ?', (server_name,))
-
- @use_cursor
- def delete_all_device_attribute_property(self, dev_name, attr_list):
- cursor = self.cursor
- for attr_name in attr_list:
- self._info("_delete_all_device_attribute_property(): delete device %s attribute %s property(ies) from database", dev_name, attr_name)
- #Is there something to delete ?
- cursor.execute('SELECT DISTINCT name FROM property_attribute_device WHERE device =? AND attribute = ?', (dev_name,attr_name))
- rows = cursor.fetchall()
- if len(rows) != 0:
- cursor.execute('DELETE FROM property_attribute_device WHERE device = ? AND attribute = ?', (dev_name,attr_name))
- # Mark this property as deleted
- for row in rows:
- hist_id = self.get_id('device_attribute', cursor=cursor)
- cursor.execute('INSERT INTO property_attribute_device_hist SET device=?,attribute=?,name=?,id=?,count=\'0\',value=\'DELETED\'', (dev_name,attr_name,row[0], hist_id))
- self.purge_att_property("property_attribute_device_hist", "device",
- dev_name, attr_name, row[0], cursor=cursor)
-
- @use_cursor
- def my_sql_select(self, cmd):
- cursor = self.cursor
- cursor.execute(cmd)
- result_long = []
- result_str = []
- rows = cursor.fetchall()
- nb_fields = 0
- for row in rows:
- if row == None:
- result_str.append("")
- result_long.append(0)
- else:
- for field in row:
- nb_fields = nb_fields + 1
- if field != None:
- result_str.append(str(field))
- result_long.append(1)
- else:
- result_str.append("")
- result_long.append(0)
- result_long.append(len(rows))
- result_long.append(nb_fields)
-
- result = (result_long, result_str)
- return result
-
-
-
- @use_cursor
- def get_csdb_server_list(self):
- cursor = self.cursor
-
- cursor.execute('SELECT DISTINCT ior FROM device WHERE exported=1 AND domain=\'sys\' AND family=\'database\'')
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_attribute_alias2(self, attr_name):
- cursor = self.cursor
- cursor.execute('SELECT alias from attribute_alias WHERE name LIKE ? ',(attr_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def get_alias_attribute(self, alias_name):
- cursor = self.cursor
- cursor.execute('SELECT name from attribute_alias WHERE alias LIKE ? ',(alias_name,))
- return [ row[0] for row in cursor.fetchall() ]
-
- @use_cursor
- def rename_server(self, old_name, new_name):
- cursor = self.cursor
- # Check that the new name is not already used
- new_adm_name = "dserver/" + new_name
- cursor.execute('SELECT name from device WHERE name = ? ',(new_adm_name,))
- rows = cursor.fetchall()
- if len(rows) != 0:
- th_exc(DB_SQLError,
- "Device server process name " + attribute_alias + "is already used !",
- "DataBase::DbRenameServer()")
-
- # get host where running
- previous_host = ""
- if self.fire_to_starter:
- try:
- adm_dev = "dserver/" + old_name
- previous_host = self.get_device_host(adm_dev)
- except:
- th_exc(DB_IncorrectServerName,
- "Server " + old_name + "not defined in database!",
- "DataBase::DbRenameServer()")
- # Change ds exec name. This means
- # 1 - Update the device's server column
- # 2 - Change the ds admin device name
- # 3 - Change admin device property (if any)
- # 4 - Change admin device attribute property (if any)
-
- old_adm_name = "dserver/" + old_name
- tmp_new = new_name.split('/')
- new_exec = tmp_new[0]
- new_inst = tmp_new[1]
- new_adm_name = "dserver/" + new_name
-
- cursor.execute('UPDATE device SET name =?, family =?, mamber =? WHERE name =?', (new_adm_name, new_exec, new_inst, old_adm_name))
-
- cursor.execute('UPDATE property_device set device=? WHERE device=?', (new_adm_name, old_adm_name))
-
- cursor.execute('UPDATE property_attribute_device set device=? WHERE device=?', (new_adm_name, old_adm_name))
-
- # Update host's starter to update controlled servers list
- if self.fire_to_starter:
- hosts = []
- if previous_host == "":
- hosts.append(tmp_host)
- else:
- hosts.append(previous_host)
- self.send_starter_cmd(hosts)
-
-
-class Tango_sqlite3(Tango_dbapi2):
-
- DB_API_NAME = 'sqlite3'
-
-
-def main():
- db = Tango_sqlite3()
- db.add_device("MyServer/my1", ("a/b/c", ("a", "b", "c")), "MyClass")
- db.close_db()
-
-if __name__ == "__main__":
- main()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pytango.git
More information about the debian-science-commits
mailing list