db handling optimized

This commit is contained in:
2021-06-05 11:39:28 +02:00
parent a5cde65967
commit 3d9d1a1d5f

View File

@@ -3,7 +3,7 @@
#
# timeTrack.py
# by 4nima
# v.2.0.2
# v.2.0.3
#
#########################
# simple time tracking with database
@@ -24,6 +24,7 @@ class TimeTrack:
self.USERNAME = ''
self.OLDEVENT = 2
self.LOGFILE = 'timetrack.log'
self.DBCON = sqlite3.connect(self.DATABASE, detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
logging.basicConfig(
filename=self.LOGFILE,
level=logging.DEBUG,
@@ -33,6 +34,9 @@ class TimeTrack:
self.db_setup()
self.load_config()
def __del__(self):
self.DBCON.close()
## Prepartation
### Check OS and clear screen
def clear_screen(self):
@@ -95,22 +99,19 @@ class TimeTrack:
)
""")
connect = sqlite3.connect(self.DATABASE)
cursor = connect.cursor()
logging.debug('Create initial database tables')
for SQL in sql:
try:
cursor.execute(SQL)
except:
logging.error('Table could not be created')
logging.debug(SQL)
print('TimeTrack wird beendet: Fehler bei Datanbank Setup')
quit()
else:
logging.debug('Table was created successfully or already exists')
connect.commit()
connect.close()
try:
with self.DBCON as con:
for SQL in sql:
con.execute(SQL)
except sqlite3.Error as err:
logging.error('Table could not be created')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
print('TimeTrack wird beendet: Fehler bei Datanbank Setup')
quit()
else:
logging.debug('Table was created successfully or already exists')
### Loads or creates a config file
def load_config(self):
@@ -160,21 +161,16 @@ class TimeTrack:
logging.debug('Accepted username: {}'.format(username))
connect = sqlite3.connect(self.DATABASE)
cursor = connect.cursor()
sql = "INSERT INTO users ( name ) values ( ? )"
try:
cursor.execute(sql, [username])
except:
with self.DBCON as con:
con.execute(sql, [username])
except sqlite3.Error as err:
logging.error('User could not be saved in database')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
else:
logging.info('User was saved successfully')
connect.commit()
connect.close()
### Outputs existing users from the DB
def get_users(self, UID=0, NAME=''):
@@ -191,25 +187,23 @@ class TimeTrack:
data = ''
sql = "SELECT * FROM users"
connect = sqlite3.connect(self.DATABASE)
cursor = connect.cursor()
try:
if data:
cursor.execute(sql, [data])
else:
cursor.execute(sql)
except:
with self.DBCON as con:
cur = con.cursor()
if data:
cur.execute(sql, [data])
else:
cur.execute(sql)
data = cur.fetchall()
except sqlite3.Error as err:
logging.error('Could not get user')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
print('Fehler beim Zugriff auf die Benutzer Datenbank')
return 1
else:
logging.debug('User database read out successfully')
connect.commit()
data = cursor.fetchall()
connect.close()
return data
### Defines a user for the session
@@ -231,23 +225,22 @@ class TimeTrack:
def save_event(self, TIME=datetime.datetime.now()):
if not self.get_event(USERID=self.USERID):
logging.debug('No active events found for the user: {}'.format(self.USERID))
connect = sqlite3.connect(self.DATABASE)
cursor = connect.cursor()
sql = "INSERT INTO active_events ( starttime, user_id ) VALUES ( ?, ? )"
sql = "INSERT INTO active_events ( starttime, user_id ) VALUES ( ?, ? )"
try:
cursor.execute(sql, [TIME, self.USERID])
except:
with self.DBCON as con:
con.execute(sql, [TIME, self.USERID])
except sqlite3.Error as err:
logging.error('Event could not be created')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
print('Event konnte nicht gespeichert werden.')
return False
else:
logging.info('Event was created successfully')
connect.commit()
connect.close()
return True
else:
logging.warning('Active events found for the user, new event could not be created')
return False
@@ -267,20 +260,16 @@ class TimeTrack:
print('Keine angabe was gelöscht werden soll')
return 0
connect = sqlite3.connect(self.DATABASE, detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
cursor = connect.cursor()
try:
cursor.execute(sql, [data])
except:
with self.DBCON as con:
con.execute(sql, [data])
except sqlite3.Error as err:
logging.error('Event could not be deleted')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
print('Fehler beim löschen des Events.')
else:
logging.debug('Event was successfully deleted')
connect.commit()
connect.close()
### Get an active event based on a user or event ID
def get_event(self, ENTRYID='', USERID=''):
@@ -296,29 +285,30 @@ class TimeTrack:
sql = "SELECT * FROM active_events"
data = ''
connect = sqlite3.connect(self.DATABASE, detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
cursor = connect.cursor()
try:
if data:
logging.debug('Search event')
cursor.execute(sql, [data])
else:
logging.debug('Get all Events')
cursor.execute(sql)
except:
with self.DBCON as con:
cur = con.cursor()
if data:
logging.debug('Search event')
cur.execute(sql, [data])
else:
logging.debug('Get all Events')
cur.execute(sql)
data = cur.fetchall()
except sqlite3.Error as err:
logging.error('Events could not be read')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
print('Fehler beim auslesen der aktiven Events')
else:
logging.debug('Events could be read out successfully')
data = cursor.fetchall()
connect.close()
if data == []:
logging.debug('No active events found')
return 0
else:
logging.debug('{} events found'.format(len(data)))
return data[0]
if data == []:
logging.debug('No active events found')
return 0
else:
logging.debug('{} events found'.format(len(data)))
return data[0]
def time_start(self, AUTOFORWARD=True):
self.clear_screen()
@@ -421,44 +411,41 @@ class TimeTrack:
endtime = datetime.datetime.now()
logging.debug('Event end process start at {}'.format(endtime))
connect = sqlite3.connect(self.DATABASE)
cursor = connect.cursor()
sql = "INSERT INTO time_entries ( starttime, endtime, user_id, activity ) VALUES ( ?, ?, ?, ? )"
sql = "INSERT INTO time_entries ( starttime, endtime, user_id, activity ) VALUES ( ?, ?, ?, ? )"
try:
cursor.execute(sql, [data[1], endtime, self.USERID, action])
except:
with self.DBCON as con:
con.execute(sql, [data[1], endtime, self.USERID, action])
except sqlite3.Error as err:
logging.error('Time entry could not be created')
logging.debug(sql)
logging.error('SQLError: {}'.format(err))
print('Zeiteintrag konnte nicht gespeichert werden.')
return False
else:
logging.info('Time entry was created successfully')
connect.commit()
self.delete_event(data[0])
self.print_time_entry(STARTTIME=data[1], ENDTIME=endtime, ACTIVITY=action)
print('Zeiteintrag wurde gespeichert.')
userinput = 0
while not 0 < int(userinput) < 3:
print('Nächsten Zeiteintrag beginnen ?')
print('[1] Ja')
print('[2] Nein')
userinput = input('Aktion: ')
logging.debug('User input: {}'.format(userinput))
try:
int(userinput)
except ValueError:
userinput = 0
self.clear_screen()
if userinput == "1":
self.time_start()
else:
logging.debug('Terminated by the user')
exit()
connect.close()
self.delete_event(data[0])
self.print_time_entry(STARTTIME=data[1], ENDTIME=endtime, ACTIVITY=action)
print('Zeiteintrag wurde gespeichert.')
userinput = 0
while not 0 < int(userinput) < 3:
print('Nächsten Zeiteintrag beginnen ?')
print('[1] Ja')
print('[2] Nein')
userinput = input('Aktion: ')
logging.debug('User input: {}'.format(userinput))
try:
int(userinput)
except ValueError:
userinput = 0
self.clear_screen()
if userinput == "1":
self.time_start()
else:
logging.debug('Terminated by the user')
exit()
elif userinput == "2":
logging.info('Event should be deleted (eventid: {})'.format(data[0]))
@@ -484,5 +471,7 @@ class TimeTrack:
print(ACTIVITY)
print(50*"-")
test = TimeTrack()
test.time_start()
if __name__ == "__main__":
test = TimeTrack()
test.time_start()
test.DBCON.close()