From 727c7b486ced125d9ada3d4036b2c15cdca32246 Mon Sep 17 00:00:00 2001 From: anima Date: Wed, 2 Jun 2021 20:28:30 +0200 Subject: [PATCH] streamline logging and commits. fix some bugs --- timeTrack.py | 126 +++++++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 54 deletions(-) diff --git a/timeTrack.py b/timeTrack.py index c74ee6e..39e25a8 100644 --- a/timeTrack.py +++ b/timeTrack.py @@ -3,7 +3,7 @@ # # timeTrack.py # by 4nima -# v.0.1 +# v.0.2 # ######################### # simple time tracking with database @@ -15,6 +15,7 @@ import json import os import logging +# Main class class TimeTrack: def __init__(self, DATABASE='timetrack.db', CONFIG='timetrack.conf'): self.DATABASE = DATABASE @@ -22,48 +23,22 @@ class TimeTrack: self.USERID = 0 self.USERNAME = '' self.LOGFILE = 'timetrack.log' - logging.basicConfig(filename=self.LOGFILE, + logging.basicConfig( + filename=self.LOGFILE, level=logging.DEBUG, format='%(asctime)s - %(process)d-%(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) - self.load_config() self.db_setup() - self.set_user() - - ## Läd oder erstellt das config file - def load_config(self): - if os.path.isfile(self.CONFIG): - logging.info('Config file found') - try: - with open(self.CONFIG) as config_data: - data = json.load(config_data) - except ValueError: - logging.error('Config file has no valid JSON syntax') - print('TimeTrack wird beendet. Fehler in der JSON-Konfig') - quit() - else: - logging.info('Config file loaded successfully') - self.USERID = data['user'] - - else: - logging.info('Config file not found') - ##> ausgabe nicht in einer zeile - config = { - 'user' : 1, - 'default' : 'interactive' - } - - ##> logging erweitert falls nicht möglich - with open(self.CONFIG, "w") as outfile: - json.dump(config, outfile) - logging.info('config file successfully created') + self.load_config() + ## Prepartation + ### Creates a database if none is found def db_setup(self): if os.path.isfile(self.DATABASE): - logging.info('DB was found') + logging.info('Database file was found') else: - logging.info('DB not found, create new') + logging.info('Database file was not found, will create ') sql = [] sql.append(""" @@ -112,28 +87,66 @@ class TimeTrack: connect = sqlite3.connect(self.DATABASE) cursor = connect.cursor() + logging.debug('Create initial database tables') for SQL in sql: - logging.debug('Run SQL') try: cursor.execute(SQL) except: - logging.error('Fail to execute SQL command') + logging.error('Table could not be created') logging.debug(SQL) + print('TimeTrack wird beendet: Fehler bei Datanbank Setup') + quit() else: - logging.info('Success execute SQL command') + logging.debug('Table was created successfully or already exists') - connect.commit + connect.commit() connect.close() + ### Loads or creates a config file + def load_config(self): + if os.path.isfile(self.CONFIG): + logging.info('Config file was found') + try: + with open(self.CONFIG) as config_data: + data = json.load(config_data) + except ValueError: + logging.error('Config file has no valid JSON syntax') + print('TimeTrack wird beendet: Fehler in der JSON-Konfig ({})'.format(self.CONFIG)) + quit() + else: + logging.info('Config file was loaded successfully') + self.USERID = data['user'] + logging.debug('UserID {} was used'.format(data['user'])) + self.set_user() + + else: + logging.warning('Config file not found') + config = { + 'user' : 1, + 'default' : 'interactive' + } + with open(self.CONFIG, "w") as outfile: + json.dump(config, outfile, indent=4, sort_keys=True) + logging.info('Config file created successfully') + + #> wenn man keine datei erstellen darf/kann, fällt das skript in einen loop ? + self.load_config() + + ## user handling + ### Creates a user who does not yet exist def create_user(self, USER=''): if USER == '': - username = input('Enter your Name: ') + username = input('Benutzername eingaben: ') + logging.debug('Selected username: {}'.format(username)) else: username = USER while self.get_users(NAME=username): - print('Name ist schon vergeben') - username = input('Wähle einen anderen Namen: ') + print('Der gewünsche Benutzername ({}) ist schon vergeben'.format(username)) + username = input('Wähle einen anderen Benutzernamen: ') + logging.debug('Try again: Selected username: {}'.format(username)) + + logging.debug('Accepted username: {}'.format(username)) connect = sqlite3.connect(self.DATABASE) cursor = connect.cursor() @@ -143,25 +156,26 @@ class TimeTrack: try: cursor.execute(sql, [username]) except: - logging.error('Fail to execute SQL command') + logging.error('User could not be saved in database') logging.debug(sql) else: - logging.info('Success execute SQL command') + logging.info('User was saved successfully') connect.commit() connect.close() + ### Outputs existing users from the DB def get_users(self, UID=0, NAME=''): if not UID == 0: - logging.info('UID Used') + logging.debug('Get user by ID: {}'.format(UID)) data = UID sql = "SELECT * FROM users WHERE id = ?" elif not NAME == '': - logging.info('NAME used') + logging.debug('Get user by username: {}'.format(NAME)) data = NAME - sql = "SELECT * FROM users WHERE name = ?" + sql = "SELECT * FROM users WHERE name LIKE ?" else: - logging.info('nothing used') + logging.debug('Get all users') data = '' sql = "SELECT * FROM users" @@ -173,12 +187,13 @@ class TimeTrack: cursor.execute(sql, [data]) else: cursor.execute(sql) - except: - logging.error('Fail to execute SQL command') + logging.error('Could not get user') logging.debug(sql) + print('Fehler beim Zugriff auf die Benutzer Datenbank') + return 1 else: - logging.info('Success execute SQL command') + logging.debug('User database read out successfully') connect.commit() row = cursor.fetchall() @@ -188,15 +203,18 @@ class TimeTrack: connect.close() return output + ### Defines a user for the session def set_user(self): data = self.get_users() if not data: - logging.info("No user found. Create new.") - print("Es wurde kein User gefunden, bitte legen sie einen neuen an.") + logging.info("No user was found") + print("Es wurde kein Benutzer gefunden, bitte legen sie einen neuen an.") self.create_user() data = self.get_users(UID=self.USERID) - self.USERNAME = data[0][1] - + try: + self.USERNAME = data[0][1] + except IndexError: + logging.error('User ID was not found') test = TimeTrack() \ No newline at end of file