|
@@ -25,59 +25,83 @@ def search_objects2(axes, sensor_name, module_mark):
|
|
|
return ax['unit']
|
|
|
return None
|
|
|
|
|
|
-
|
|
|
+
|
|
|
class DBConnector(object):
|
|
|
def __init__(self, key, host, database):
|
|
|
+ self._modules = None
|
|
|
+ self._views = None
|
|
|
+ self._module_pattern = None
|
|
|
self.axis_list = 'Axislist'
|
|
|
self.sensor_list = 'Sensorlist'
|
|
|
self.key = key
|
|
|
self.host = host
|
|
|
self.database = database
|
|
|
self.uri = "%s/%s" % (self.host, self.database)
|
|
|
- self.connector = DAL( self.uri, migrate=False, pool_size=1, lazy_tables=True)
|
|
|
+ self.dal = DAL( self.uri, migrate=False, pool_size=1, lazy_tables=True)
|
|
|
def extract(self):
|
|
|
- modules = self.extract_modules()
|
|
|
- sensors = self.extract_sensors(modules)
|
|
|
- return modules, sensors
|
|
|
- def connect(self, modules=None, sensors=None):
|
|
|
- if modules is None or sensors is None:
|
|
|
- modules, sensors = extract()
|
|
|
- for mod in modules:
|
|
|
- s = search_objects(sensors, module_name=mod['name'])
|
|
|
+ self._modules = self.extract_modules()
|
|
|
+ self._sensors = self.extract_sensors(self._modules)
|
|
|
+ def connect(self):
|
|
|
+ self.extract()
|
|
|
+ for mod in self._modules:
|
|
|
+ s = search_objects(self._sensors, module_name=mod['name'])
|
|
|
f = [ Field(k['name'], type=k['type'], length=k['length'], rname=k['rname']) for k in s ]
|
|
|
- self.connector.define_table(mod['name'], *f)
|
|
|
+ self.dal.define_table(mod['name'], *f)
|
|
|
def reconnect(self):
|
|
|
- self.connector._adapter.reconnect()
|
|
|
-
|
|
|
+ self.dal._adapter.reconnect()
|
|
|
+ @property
|
|
|
+ def module_pattern(self):
|
|
|
+ return self._module_pattern
|
|
|
+ @module_pattern.setter
|
|
|
+ def module_pattern(self, value):
|
|
|
+ self._module_pattern = re.compile(value)
|
|
|
+ @property
|
|
|
+ def modules(self):
|
|
|
+ return self._modules
|
|
|
+ @modules.setter
|
|
|
+ def modules(self, value):
|
|
|
+ self._modules = value
|
|
|
+ @property
|
|
|
+ def sensors(self):
|
|
|
+ return self._sensors
|
|
|
+ @property
|
|
|
+ def views(self):
|
|
|
+ return self._views
|
|
|
+ @views.setter
|
|
|
+ def views(self, value):
|
|
|
+ self._views = value
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
class KITCube(DBConnector):
|
|
|
- def __init__(self, key, host, database, modules, ignore_fields=[], field_type_fix={}):
|
|
|
+ def __init__(self, key, host, database, ignore_fields=[], field_type_fix={}):
|
|
|
self.ignore_fields = ignore_fields
|
|
|
self.field_type_fix = field_type_fix
|
|
|
super(KITCube, self).__init__(key, host, database)
|
|
|
|
|
|
- if isinstance(modules, basestring):
|
|
|
- self.module_pattern = re.compile(modules)
|
|
|
- else:
|
|
|
- self.module_pattern = None
|
|
|
-
|
|
|
def extract_modules(self):
|
|
|
- ''' extract modules from database
|
|
|
+ ''' extract modules
|
|
|
+ extrace from database when self._modules is not defined,
|
|
|
+ otherwise filter self._modules,
|
|
|
|
|
|
- @return
|
|
|
+ Returns:
|
|
|
[{'name': <name>, 'mark': <module number>}, ... ]
|
|
|
'''
|
|
|
- tables = self.connector.executesql('show tables')
|
|
|
- if self.module_pattern is not None:
|
|
|
- matches = [ (tname, self.module_pattern.match(tname)) for tname, in tables ]
|
|
|
+ tables = [ tname for tname, in self.dal.executesql('show tables') ]
|
|
|
+ if self._modules is None:
|
|
|
+ matches = [ (tname, self.module_pattern.match(tname)) for tname in tables ]
|
|
|
modules = [ dict(name=tname, mark=int(m.group('mod_mark'))) for tname, m in matches if m ]
|
|
|
+ else:
|
|
|
+ modules = [ t for t in self._modules if t in tables ]
|
|
|
return modules
|
|
|
|
|
|
def extract_sensors(self, modules):
|
|
|
''' extract sensors from database
|
|
|
|
|
|
- @input modules
|
|
|
- list of moudles to be extracted
|
|
|
- @return:
|
|
|
+ Args:
|
|
|
+ modules: list of moudles to be extracted
|
|
|
+
|
|
|
+ Returns:
|
|
|
[ {
|
|
|
'name': <sensor name>, # dots in name is coverted to underscore
|
|
|
'rname': <sensor rname>, # original name from db, if it contains dots
|
|
@@ -95,7 +119,7 @@ class KITCube(DBConnector):
|
|
|
sensors = []
|
|
|
|
|
|
for mod in modules:
|
|
|
- cols = self.connector.executesql('show columns from ' + mod['name'])
|
|
|
+ cols = self.dal.executesql('show columns from ' + mod['name'])
|
|
|
for fld_name, fld_type, _, fld_key, _, _ in cols:
|
|
|
if '.' in fld_name:
|
|
|
rname = '`%s`' % fld_name
|
|
@@ -135,17 +159,17 @@ class KITCube(DBConnector):
|
|
|
return sensors
|
|
|
|
|
|
def extract_units(self):
|
|
|
- self.connector.define_table(self.axis_list,
|
|
|
+ self.dal.define_table(self.axis_list,
|
|
|
Field('id'), Field('unit', 'string'))
|
|
|
- self.connector.define_table(self.sensor_list,
|
|
|
+ self.dal.define_table(self.sensor_list,
|
|
|
Field('id'), Field('name', 'string'),
|
|
|
Field('module', 'integer'),
|
|
|
Field('axis', 'reference %s' % self.axis_list))
|
|
|
|
|
|
- sensortable = self.connector[self.sensor_list]
|
|
|
- axistable = self.connector[self.axis_list]
|
|
|
+ sensortable = self.dal[self.sensor_list]
|
|
|
+ axistable = self.dal[self.axis_list]
|
|
|
|
|
|
- records = self.connector(sensortable.axis==axistable.id).select()
|
|
|
+ records = self.dal(sensortable.axis==axistable.id).select()
|
|
|
sensor_units = [ dict(name=r[self.sensor_list].name,
|
|
|
module=r[self.sensor_list].module,
|
|
|
unit=r[self.axis_list].unit) for r in records ]
|