Ahenk/opt/ahenk/base/database/ahenk_db_service.py

143 lines
6.4 KiB
Python
Raw Normal View History

2016-03-07 17:13:03 +02:00
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
2016-03-07 17:13:03 +02:00
import sqlite3
from base.Scope import Scope
2016-03-07 17:13:03 +02:00
class AhenkDbService(object):
"""
Sqlite manager for ahenk
"""
2016-03-07 17:13:03 +02:00
def __init__(self):
scope = Scope.getInstance()
self.logger = scope.getLogger()
self.configurationManager = scope.getConfigurationManager()
self.db_path = self.configurationManager.get('BASE', 'dbPath')
self.connection = None
2016-03-07 17:13:03 +02:00
self.cursor = None
2016-06-27 17:17:20 +03:00
# TODO get columns anywhere
# TODO scheduler db init get here
def initialize_table(self):
self.check_and_create_table('task', ['id INTEGER', 'create_date TEXT', 'modify_date TEXT', 'command_cls_id TEXT', 'parameter_map BLOB', 'deleted INTEGER', 'plugin TEXT', 'cron_expr TEXT','file_server TEXT'])
2016-04-12 17:29:56 +03:00
self.check_and_create_table('policy', ['id INTEGER PRIMARY KEY AUTOINCREMENT', 'type TEXT', 'version TEXT', 'name TEXT', 'execution_id TEXT'])
self.check_and_create_table('profile', ['id INTEGER', 'create_date TEXT', 'label TEXT', 'description TEXT', 'overridable INTEGER', 'active TEXT', 'deleted TEXT', 'profile_data TEXT', 'modify_date TEXT', 'plugin TEXT'])
2016-06-22 18:17:16 +03:00
self.check_and_create_table('plugin', ['id INTEGER PRIMARY KEY AUTOINCREMENT', 'active TEXT', 'create_date TEXT', 'deleted TEXT', 'description TEXT', 'machine_oriented TEXT', 'modify_date TEXT', 'name TEXT', 'policy_plugin TEXT', 'user_oriented TEXT', 'version TEXT', 'task_plugin TEXT', 'x_based TEXT'])
self.check_and_create_table('registration', ['jid TEXT', 'password TEXT', 'registered INTEGER', 'dn TEXT', 'params TEXT', 'timestamp TEXT'])
2016-06-27 17:17:20 +03:00
self.check_and_create_table('contract', ['id INTEGER PRIMARY KEY AUTOINCREMENT', 'content BLOB', 'title TEXT', 'timestamp TEXT'])
self.check_and_create_table('agreement', ['id INTEGER PRIMARY KEY AUTOINCREMENT', 'contract_id TEXT', 'username TEXT', 'timestamp TEXT', 'choice TEXT'])
self.check_and_create_table('session', ['username TEXT', 'display TEXT', 'desktop TEXT', 'timestamp TEXT'])
def get_cols(self, table_name):
if table_name == 'agreement':
return ['contract_id', 'username', 'timestamp', 'choice']
elif table_name == 'contract':
return ['content', 'title', 'timestamp']
elif table_name == 'session':
return ['username', 'display', 'desktop', 'timestamp']
2016-03-16 10:40:17 +02:00
def connect(self):
2016-03-07 17:13:03 +02:00
try:
self.connection = sqlite3.connect(self.db_path, check_same_thread=False)
2016-03-07 17:13:03 +02:00
self.cursor = self.connection.cursor()
except Exception as e:
2016-07-21 18:03:26 +03:00
self.logger.error('[AhenkDbService] Database connection error ' + str(e))
2016-03-07 17:13:03 +02:00
def check_and_create_table(self, table_name, cols):
2016-03-07 17:13:03 +02:00
if self.cursor:
cols = ', '.join([str(x) for x in cols])
self.cursor.execute('create table if not exists ' + table_name + ' (' + cols + ')')
2016-03-16 10:40:17 +02:00
else:
2016-07-21 18:03:26 +03:00
self.logger.warning('[AhenkDbService] Could not create table cursor is None! Table Name : ' + str(table_name))
2016-03-07 17:13:03 +02:00
def drop_table(self, table_name):
sql = 'DROP TABLE ' + table_name
2016-03-16 10:40:17 +02:00
self.cursor.execute(sql)
self.connection.commit()
2016-03-07 17:13:03 +02:00
def update(self, table_name, cols, args, criteria=None):
try:
if self.connection:
2016-03-29 15:29:49 +03:00
if criteria is None:
2016-03-07 17:13:03 +02:00
cols = ', '.join([str(x) for x in cols])
params = ', '.join(['?' for x in args])
sql = 'INSERT INTO ' + table_name + ' (' + cols + ') VALUES (' + params + ')'
2016-03-07 17:13:03 +02:00
else:
update_list = ''
2016-03-07 17:13:03 +02:00
for index in range(len(cols)):
update_list = update_list + ' ' + cols[index] + ' = ?,'
2016-03-07 17:13:03 +02:00
update_list = update_list.strip(',')
sql = 'UPDATE ' + table_name + ' SET ' + update_list + ' where ' + criteria
self.cursor.execute(sql, tuple(args))
2016-03-07 17:13:03 +02:00
self.connection.commit()
return self.cursor.lastrowid
2016-03-07 17:13:03 +02:00
else:
2016-07-21 18:03:26 +03:00
self.logger.warning('[AhenkDbService] Could not update table cursor is None! Table Name : ' + str(table_name))
return None
2016-03-16 10:40:17 +02:00
except Exception as e:
2016-07-21 18:03:26 +03:00
self.logger.error('[AhenkDbService] Updating table error ! Table Name : ' + str(table_name) + ' ' + str(e))
2016-03-07 17:13:03 +02:00
def delete(self, table_name, criteria):
if self.cursor:
sql = 'DELETE FROM ' + table_name
if criteria:
sql += ' where ' + str(criteria)
self.cursor.execute(sql)
self.connection.commit()
2016-03-07 17:13:03 +02:00
def findByProperty(self):
# Not implemented yet
pass
def select(self, table_name, cols='*', criteria='', orderby=''):
2016-03-07 17:13:03 +02:00
if self.cursor:
try:
if not cols == '*':
2016-03-07 17:13:03 +02:00
cols = ', '.join([str(x) for x in cols])
sql = 'SELECT ' + cols + ' FROM ' + table_name
if criteria != '':
sql += ' where '
sql += criteria
if orderby != '':
sql += ' order by '
sql += orderby
2016-03-07 17:13:03 +02:00
self.cursor.execute(sql)
rows = self.cursor.fetchall()
return rows
2016-06-27 17:17:20 +03:00
except:
2016-03-07 17:13:03 +02:00
raise
else:
2016-07-21 18:03:26 +03:00
self.logger.warning('[AhenkDbService] Could not select table cursor is None! Table Name : ' + str(table_name))
2016-03-07 17:13:03 +02:00
def select_one_result(self, table_name, col, criteria=''):
if self.cursor:
try:
sql = 'SELECT ' + col + ' FROM ' + table_name
if criteria != '':
sql += ' where '
sql += criteria
self.cursor.execute(sql)
row = self.cursor.fetchone()
if row is not None:
return row[0]
2016-03-25 17:56:15 +02:00
else:
return None
2016-06-27 17:17:20 +03:00
except:
raise
else:
2016-07-21 18:03:26 +03:00
self.logger.warning('[AhenkDbService] Could not select table cursor is None! Table Name : ' + str(table_name))
2016-03-07 17:13:03 +02:00
def close(self):
try:
self.cursor.close()
self.connection.close()
except Exception as e:
2016-07-21 18:03:26 +03:00
self.logger.error('[AhenkDbService] Closing database connection error:' + str(e))