Refactor logging setup across multiple modules to use loguru with consistent configuration

- Updated logging initialization in MessageCalendar, admin_edit_prof, elsa_main, graph, iconLine, searchPage, and richtext modules to use loguru.
- Changed log rotation and retention settings for log files to improve log management.
- Replaced logger.debug/info calls with log.debug/info for consistency.
- Fixed a typo in the searchPage UI and updated related references in the UI files.
- Removed unused imports and cleaned up code for better readability.
This commit is contained in:
2025-05-13 15:49:52 +02:00
parent 4a3a95623a
commit f7c499ea6e
32 changed files with 412 additions and 491 deletions

View File

@@ -3,17 +3,15 @@ from PyQt6.QtCore import QDate
from PyQt6.QtGui import QColor, QPen
from src.backend import Database
import darkdetect
import loguru
import sys
from loguru import logger as log
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
log = loguru.logger
log.remove()
log.add(sys.stdout)
log.add("logs/application.log", rotation="1 MB", retention="10 days")
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
logger.add(sys.stdout)
color = "#ddfb00" if darkdetect.isDark() else "#2204ff"
pen = QPen(QColor(color))
pen.setWidth(5)
@@ -31,7 +29,7 @@ class MessageCalendar(QtWidgets.QCalendarWidget):
def getMessages(self):
# Get the messages from the database
messages = Database().getAllMessages()
logger.debug("Got {} messages", len(messages))
log.debug("Got {} messages", len(messages))
self.setMessages(messages)
def deleteMessage(self, id):

View File

@@ -3,15 +3,14 @@ from PyQt6 import QtWidgets
from src.logic import Prof
from src.backend import Database
import loguru
import sys
from loguru import logger as log
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
log = loguru.logger
log.remove()
log.add(sys.stdout)
log.add("logs/application.log", rotation="1 MB", retention="10 days")
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
logger.add(sys.stdout)
class EditProf(QtWidgets.QDialog, Ui_Dialog):
@@ -69,7 +68,7 @@ class EditProf(QtWidgets.QDialog, Ui_Dialog):
else:
self.faculty_member_old_telnr.setText(data.telnr)
self.faculty_member_oldmail.setText(data.mail)
logger.debug(data)
log.debug(data)
(
self.edit_faculty_member_title.setText(data.title)
if data.title is not None
@@ -93,7 +92,7 @@ class EditProf(QtWidgets.QDialog, Ui_Dialog):
olddata = self.db.getProfByName(
self.edit_faculty_member_select_member.currentText()
)
logger.debug(olddata)
log.debug(olddata)
data = olddata
oldlname = data.lastname
oldfname = data.firstname

View File

@@ -9,15 +9,14 @@ from src.logic import elsa_word_to_csv, Prof
from src.ui.dialogs import ElsaAddEntry, popus_confirm
from src.ui.widgets import FilePicker, DataGraph
from src.backend import recreateElsaFile
import loguru
import sys
from loguru import logger as log
log = loguru.logger
log.remove()
log.add(sys.stdout)
log.add("logs/application.log", rotation="1 MB", retention="10 days")
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
log.add("logs/elsa_main.log", enqueue=True)
logger.add(sys.stdout)
class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
@@ -93,7 +92,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
self.newProf_title.textChanged.connect(self.checkProfData)
self.loadFrame()
logger.info("Elsa Dialog loaded")
log.info("Elsa Dialog loaded")
# self.show()
def checkProfData(self):
@@ -237,7 +236,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
fullname=f"{prof.split(', ')[0]} {prof.split(', ')[1]}",
)
prof_id = self.db.getProfId(profdata)
logger.debug(f"ProfData: {profdata}, id:{prof_id}")
log.debug(f"ProfData: {profdata}, id:{prof_id}")
if prof_id is None:
self.db.createProf(profdata)
@@ -263,12 +262,12 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
files,
elsa_id,
)
logger.info("Stored {} files in the database", len(files))
log.info("Stored {} files in the database", len(files))
self.cancel_elsa_creation()
self.refresh_elsa_table()
self.elsa_prof.setCurrentText("")
self.quote_entry.setEnabled(False)
logger.info("Saved apparat to database, id {}", elsa_id)
log.info("Saved apparat to database, id {}", elsa_id)
def refresh_elsa_table(self):
self.elsa_table.setRowCount(0)
@@ -288,13 +287,13 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
def open_elsa(self):
prof = self.elsa_table.item(self.elsa_table.currentRow(), 0).text()
logger.info("prof", prof)
log.info("prof", prof)
date = self.elsa_table.item(self.elsa_table.currentRow(), 1).text()
semester = self.elsa_table.item(self.elsa_table.currentRow(), 2).text()
self.elsa_update.setEnabled(True)
self.elsa_save.setEnabled(False)
if self.elsa_prof.currentText() == prof and date == self.elsa_date.text():
logger.debug("Same prof, stopping")
log.debug("Same prof, stopping")
return
self.create_frame_elsa.setEnabled(True)
self.dokument_list_elsa.setRowCount(0)
@@ -314,7 +313,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
self.elsa_date.setText(date)
self.elsa_semester.setText(semester)
self.elsa_prof.setCurrentText(prof)
logger.info("Elsa ID is {}", elsa_id)
log.info("Elsa ID is {}", elsa_id)
if elsa_id is None:
return
documents = self.db.getElsaFiles(elsa_id)
@@ -411,7 +410,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
self.elsa_semester.text(),
self.elsa_date.text(),
)
logger.debug(
log.debug(
f"elsa_id: {elsa_id}, prof: {self.elsa_prof.currentText()}, semester: {self.elsa_semester.text()}, date: {self.elsa_date.text()}"
)
for row in data:
@@ -445,7 +444,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
try:
self.elsa_statistics.removeTab(1)
except:
logger.debug("No tab to remove")
log.debug("No tab to remove")
self.elsa_table.setRowCount(0)
elsa_apparats = self.db.getElsaApparats()
# elsa_apparats = natsorted(elsa_apparats, key=lambda x: x[2], reverse=True)
@@ -469,7 +468,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
data=self.graph_data,
label="Anzahl der Apparate",
)
logger.debug(self.graph_data)
log.debug(self.graph_data)
self.elsa_statistics_table.setRowCount(0)
for i in range(len(self.graph_data["x"])):
self.elsa_statistics_table.insertRow(0)
@@ -483,7 +482,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
def launch():
logger.debug("Launching Elsa Dialog")
log.debug("Launching Elsa Dialog")
app = QtWidgets.QApplication([])
window = ElsaDialog()
window.show()

View File

@@ -3,18 +3,13 @@ from typing import Union
import pyqtgraph as pg
from PyQt6 import QtWidgets
import loguru
import sys
from loguru import logger as log
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
log.add(
"logs/graph.log",
)
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
logger.add(sys.stdout)
log = loguru.logger
log.remove()
log.add(sys.stdout)
log.add("logs/application.log", rotation="1 MB", retention="10 days")
def mergedicts(d1, d2):
@@ -43,7 +38,7 @@ class DataGraph(QtWidgets.QWidget):
label=None,
):
super().__init__()
logger.debug(
log.debug(
"Initialized with options: {}, {}, {}, {}".format(
title, data, generateMissing, label
)

View File

@@ -6,7 +6,7 @@ from loguru import logger as log
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", enqueue=True)
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
@@ -29,9 +29,12 @@ class IconWidget(QtWidgets.QWidget, Ui_Dialog):
self.icon_filename_line.setText(
file_dialog.selectedFiles()[0].split("/")[-1]
)
logger.debug(
"Icon changed to: {}", file_dialog.selectedFiles()[0].split("/")[-1]
)
try:
log.debug(
"Icon changed to: {}", file_dialog.selectedFiles()[0].split("/")[-1]
)
except IndexError:
log.debug("No file selected")
def return_data(self):
return self.icon_name_settings.text(), self.icon_filename_line.text()

View File

@@ -4,20 +4,18 @@ from PyQt6.QtCore import pyqtSignal
from src.backend import Database, Semester
from src.logic import custom_sort, Prof, sort_semesters_list
from src.ui.dialogs import Mail_Dialog, ApparatExtendDialog, reminder_ui
from src.ui.dialogs import Mail_Dialog, ApparatExtendDialog, ReminderDialog
from src.ui.widgets import DataGraph, StatusWidget
from natsort import natsorted
import loguru
import sys
from loguru import logger as log
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
log.add("logs/searchPage.log", enqueue=True)
log = loguru.logger
log.remove()
log.add(sys.stdout)
log.add("logs/application.log", rotation="1 MB", retention="10 days")
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
logger.add(sys.stdout)
class MyComboBox(QtWidgets.QComboBox):
@@ -32,7 +30,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
updateCalendar = pyqtSignal(int, list)
def __init__(self):
logger.info("SearchStatisticPage started")
log.info("SearchStatisticPage started")
super().__init__()
self.setupUi(self)
self.book_search_result.horizontalHeader().setSectionResizeMode(
@@ -111,7 +109,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
extend.exec()
if extend.result() == QtWidgets.QDialog.DialogCode.Accepted:
data = extend.get_data()
logger.debug(data)
log.debug(data)
app_name = self.tableWidget.item(self.tableWidget.currentRow(), 1).text()
app_id = self.db.getApparatId(app_name)
self.db.setNewSemesterDate(app_id, data["semester"], data["dauerapp"])
@@ -120,8 +118,8 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
self.refreshSignal.emit()
def reminder(self):
logger.info("Opening reminder dialog")
reminder = reminder_ui()
log.info("Opening reminder dialog")
reminder = ReminderDialog()
reminder.exec()
tableposition = self.tableWidget.currentRow()
appnr = self.tableWidget.item(tableposition, 2).text()
@@ -134,7 +132,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
appnr,
)
self.updateCalendar.emit(data)
logger.info("committed message to database")
log.info("committed message to database")
def tabW2_changed(self):
if self.tabWidget_2.currentIndex() == 0:
@@ -151,12 +149,12 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
"title": title if title != "" else None,
}
params = {key: value for key, value in params.items() if value is not None}
logger.debug(params)
log.debug(params)
retdata = self.db.searchBook(params)
if retdata is None:
return
for book in retdata:
logger.debug(book)
log.debug(book)
self.book_search_result.insertRow(0)
self.book_search_result.setItem(
0, 0, QtWidgets.QTableWidgetItem(book[0].title)
@@ -188,7 +186,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
selected_apparats.append(data)
# delete all selected apparats
logger.debug(selected_apparats)
log.debug(selected_apparats)
dialogs = []
for i in selected_apparats:
app_id = i["app_id"]
@@ -248,7 +246,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
self.box_dauerapp.setEnabled(True)
def populate_tab(self, table_or_graph=0):
logger.info("populate_tab started")
log.info("populate_tab started")
# add default values to the dropdowns
self.box_appnrs.clear()
self.box_appnrs.addItem("")
@@ -315,7 +313,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
# place the graph into tabWidget_3
self.tabWidget_3.addTab(graph, "Graph")
self.tabWidget_3.setCurrentIndex(table_or_graph)
logger.info("populate_tab finished")
log.info("populate_tab finished")
def delete_selected_apparats(self):
# get all selected apparats
@@ -327,7 +325,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
selected_apparat_rows.append(i)
# delete all selected apparats
# # #print(selected_apparats)
logger.info(f"Deleting apparats: {selected_apparats}")
log.info(f"Deleting apparats: {selected_apparats}")
for apparat in selected_apparats:
self.db.deleteApparat(apparat, self.semester)
for row in selected_apparat_rows:
@@ -400,7 +398,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
sem = Semester().from_string(
entry[8] if entry[8] is not None else entry[5]
)
logger.info(f"Semester: {sem}")
log.info(f"Semester: {sem}")
if sem.isPastSemester(Semester()):
data.append(entry)
else:

View File

@@ -209,17 +209,7 @@
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="30,70">
<item>
<layout class="QGridLayout" name="gridLayout" rowminimumheight="1,1,1,1">
<item row="0" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>Signatur</string>
</property>
<property name="buddy">
<cstring>seach_by_signature</cstring>
</property>
</widget>
</item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLabel" name="label_26">
<property name="text">
@@ -240,26 +230,6 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="book_search">
<property name="text">
<string>Suchen</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="seach_by_signature">
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property>
<property name="statusTip">
<string>Trunkierung mit * am Ende unterstützt</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
@@ -273,6 +243,29 @@
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>Signatur</string>
</property>
<property name="buddy">
<cstring>search_by_signature</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="search_by_signature">
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property>
<property name="statusTip">
<string>Trunkierung mit * am Ende unterstützt</string>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
@@ -582,9 +575,8 @@
<tabstop>box_dauerapp</tabstop>
<tabstop>btn_search</tabstop>
<tabstop>book_search_result</tabstop>
<tabstop>seach_by_signature</tabstop>
<tabstop>search_by_signature</tabstop>
<tabstop>search_by_title</tabstop>
<tabstop>book_search</tabstop>
</tabstops>
<resources/>
<connections/>

View File

@@ -102,9 +102,6 @@ class Ui_Dialog(object):
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.label_25 = QtWidgets.QLabel(parent=self.tab_4)
self.label_25.setObjectName("label_25")
self.gridLayout.addWidget(self.label_25, 0, 0, 1, 1)
self.label_26 = QtWidgets.QLabel(parent=self.tab_4)
self.label_26.setObjectName("label_26")
self.gridLayout.addWidget(self.label_26, 1, 0, 1, 1)
@@ -113,20 +110,16 @@ class Ui_Dialog(object):
self.search_by_title.setClearButtonEnabled(True)
self.search_by_title.setObjectName("search_by_title")
self.gridLayout.addWidget(self.search_by_title, 1, 1, 1, 1)
self.book_search = QtWidgets.QPushButton(parent=self.tab_4)
self.book_search.setObjectName("book_search")
self.gridLayout.addWidget(self.book_search, 3, 0, 1, 1)
self.seach_by_signature = QtWidgets.QLineEdit(parent=self.tab_4)
self.seach_by_signature.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
self.seach_by_signature.setClearButtonEnabled(True)
self.seach_by_signature.setObjectName("seach_by_signature")
self.gridLayout.addWidget(self.seach_by_signature, 0, 1, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
self.gridLayout.addItem(spacerItem2, 2, 0, 1, 1)
self.gridLayout.setRowMinimumHeight(0, 1)
self.gridLayout.setRowMinimumHeight(1, 1)
self.gridLayout.setRowMinimumHeight(2, 1)
self.gridLayout.setRowMinimumHeight(3, 1)
self.label_25 = QtWidgets.QLabel(parent=self.tab_4)
self.label_25.setObjectName("label_25")
self.gridLayout.addWidget(self.label_25, 0, 0, 1, 1)
self.search_by_signature = QtWidgets.QLineEdit(parent=self.tab_4)
self.search_by_signature.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
self.search_by_signature.setClearButtonEnabled(True)
self.search_by_signature.setObjectName("search_by_signature")
self.gridLayout.addWidget(self.search_by_signature, 0, 1, 1, 1)
self.horizontalLayout_3.addLayout(self.gridLayout)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_3.addItem(spacerItem3)
@@ -280,8 +273,8 @@ class Ui_Dialog(object):
self.label_17.setBuddy(self.box_semester)
self.label_19.setBuddy(self.box_erstellsemester)
self.label_16.setBuddy(self.box_fach)
self.label_25.setBuddy(self.seach_by_signature)
self.label_26.setBuddy(self.search_by_title)
self.label_25.setBuddy(self.search_by_signature)
self.retranslateUi(Dialog)
self.tabWidget_2.setCurrentIndex(0)
@@ -296,9 +289,8 @@ class Ui_Dialog(object):
Dialog.setTabOrder(self.box_erstellsemester, self.box_dauerapp)
Dialog.setTabOrder(self.box_dauerapp, self.btn_search)
Dialog.setTabOrder(self.btn_search, self.book_search_result)
Dialog.setTabOrder(self.book_search_result, self.seach_by_signature)
Dialog.setTabOrder(self.seach_by_signature, self.search_by_title)
Dialog.setTabOrder(self.search_by_title, self.book_search)
Dialog.setTabOrder(self.book_search_result, self.search_by_signature)
Dialog.setTabOrder(self.search_by_signature, self.search_by_title)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
@@ -312,10 +304,9 @@ class Ui_Dialog(object):
self.label_16.setText(_translate("Dialog", "Fach:"))
self.btn_search.setText(_translate("Dialog", "Suchen"))
self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_3), _translate("Dialog", "Statistik"))
self.label_25.setText(_translate("Dialog", "Signatur"))
self.label_26.setText(_translate("Dialog", "Titel"))
self.book_search.setText(_translate("Dialog", "Suchen"))
self.seach_by_signature.setStatusTip(_translate("Dialog", "Trunkierung mit * am Ende unterstützt"))
self.label_25.setText(_translate("Dialog", "Signatur"))
self.search_by_signature.setStatusTip(_translate("Dialog", "Trunkierung mit * am Ende unterstützt"))
self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_4), _translate("Dialog", "Suchen"))
self.btn_del_select_apparats.setText(_translate("Dialog", "Ausgewählte Löschen"))
self.btn_notify_for_deletion.setStatusTip(_translate("Dialog", "Zeigt für jeden ausgewählten Apparat eine eMail-Vorlage an"))