Refactor and enhance type hints across multiple modules
- Updated the `from_tuple` method in `Prof` class to specify return type. - Added type hints for various methods in `LehmannsClient`, `OpenAI`, `WebRequest`, and `ZoteroController` classes to improve code clarity and type safety. - Modified `pdf_to_csv` function to return a string instead of a DataFrame. - Enhanced error handling and type hints in `wordparser` and `xmlparser` modules. - Removed unused UI file `Ui_medianadder.ts`. - Improved the layout and structure of the `semesterapparat_ui` to enhance user experience. - Updated file picker to support `.doc` files in addition to `.docx`. - Added unique item handling in `Ui` class to prevent duplicates in apparat list. - General code cleanup and consistency improvements across various files.
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
</TS>
|
||||
@@ -110,10 +110,10 @@ class DocumentPrintDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
def on_pushButton_clicked(self):
|
||||
apparats: list[tuple[int, str]] = []
|
||||
apps = self.db.getAllAparats(0)
|
||||
apps = natsorted(apps, key=lambda x: x[4], reverse=True)
|
||||
apps = natsorted(apps, key=lambda x: x.appnr, reverse=True)
|
||||
for app in apps:
|
||||
prof = self.db.getProfById(app[2])
|
||||
data = (app[4], f"{prof.lastname} ({app[1]})")
|
||||
prof = self.db.getProfById(app.prof_id)
|
||||
data = (app.appnr, f"{prof.lastname} ({app.name})")
|
||||
apparats.append(data)
|
||||
SemesterDocument(
|
||||
semester=self.semester.value,
|
||||
|
||||
@@ -1349,7 +1349,7 @@
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Die Apparatsdetails werden aus dem Dokument gelesen und eingetragen
|
||||
Einige Angaben müssen ggf angepasst werden</string>
|
||||
Die gewünschten Medien werden automatisch in die Medienliste eingetragen, evtl. unvollständig, da eBooks nicht erfasst werden könnenEinige Angaben müssen ggf angepasst werden</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Daten aus Dokument
|
||||
@@ -1618,72 +1618,72 @@ Einige Angaben müssen ggf angepasst werden</string>
|
||||
<attribute name="title">
|
||||
<string>Admin</string>
|
||||
</attribute>
|
||||
<widget class="QLabel" name="label_21">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>47</width>
|
||||
<height>22</height>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1251</width>
|
||||
<height>711</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Aktion:</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="select_action_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<y>30</y>
|
||||
<width>181</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Nutzer anlegen</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Nutzer bearbeiten</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Lehrperson bearbeiten</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Medien bearbeiten</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="admin_action">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>70</y>
|
||||
<width>570</width>
|
||||
<height>291</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_21">
|
||||
<property name="text">
|
||||
<string>Aktion:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="select_action_box">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Nutzer anlegen</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Nutzer bearbeiten</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Lehrperson bearbeiten</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Medien bearbeiten</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QGroupBox" name="admin_action">
|
||||
<property name="font">
|
||||
<font>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>GroupBox</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
@@ -638,24 +638,37 @@ class Ui_MainWindow(object):
|
||||
self.tabWidget.addTab(self.elsatab, "")
|
||||
self.admin = QWidget()
|
||||
self.admin.setObjectName(u"admin")
|
||||
self.label_21 = QLabel(self.admin)
|
||||
self.frame = QFrame(self.admin)
|
||||
self.frame.setObjectName(u"frame")
|
||||
self.frame.setGeometry(QRect(0, 0, 1251, 711))
|
||||
self.frame.setFrameShape(QFrame.StyledPanel)
|
||||
self.frame.setFrameShadow(QFrame.Raised)
|
||||
self.formLayout_2 = QFormLayout(self.frame)
|
||||
self.formLayout_2.setObjectName(u"formLayout_2")
|
||||
self.label_21 = QLabel(self.frame)
|
||||
self.label_21.setObjectName(u"label_21")
|
||||
self.label_21.setGeometry(QRect(10, 30, 47, 22))
|
||||
self.select_action_box = QComboBox(self.admin)
|
||||
|
||||
self.formLayout_2.setWidget(0, QFormLayout.ItemRole.LabelRole, self.label_21)
|
||||
|
||||
self.select_action_box = QComboBox(self.frame)
|
||||
self.select_action_box.addItem("")
|
||||
self.select_action_box.addItem("")
|
||||
self.select_action_box.addItem("")
|
||||
self.select_action_box.addItem("")
|
||||
self.select_action_box.setObjectName(u"select_action_box")
|
||||
self.select_action_box.setGeometry(QRect(60, 30, 181, 22))
|
||||
self.admin_action = QGroupBox(self.admin)
|
||||
|
||||
self.formLayout_2.setWidget(0, QFormLayout.ItemRole.FieldRole, self.select_action_box)
|
||||
|
||||
self.admin_action = QGroupBox(self.frame)
|
||||
self.admin_action.setObjectName(u"admin_action")
|
||||
self.admin_action.setGeometry(QRect(10, 70, 570, 291))
|
||||
font5 = QFont()
|
||||
font5.setBold(False)
|
||||
self.admin_action.setFont(font5)
|
||||
self.admin_action.setFlat(True)
|
||||
self.admin_action.setCheckable(False)
|
||||
|
||||
self.formLayout_2.setWidget(1, QFormLayout.ItemRole.FieldRole, self.admin_action)
|
||||
|
||||
self.tabWidget.addTab(self.admin, "")
|
||||
|
||||
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
|
||||
@@ -963,7 +976,7 @@ class Ui_MainWindow(object):
|
||||
" hinzuf\u00fcgen", None))
|
||||
#if QT_CONFIG(tooltip)
|
||||
self.btn_extract_data_from_document.setToolTip(QCoreApplication.translate("MainWindow", u"Die Apparatsdetails werden aus dem Dokument gelesen und eingetragen\n"
|
||||
"Einige Angaben m\u00fcssen ggf angepasst werden", None))
|
||||
"Die gew\u00fcnschten Medien werden automatisch in die Medienliste eingetragen, evtl. unvollst\u00e4ndig, da eBooks nicht erfasst werden k\u00f6nnenEinige Angaben m\u00fcssen ggf angepasst werden", None))
|
||||
#endif // QT_CONFIG(tooltip)
|
||||
self.btn_extract_data_from_document.setText(QCoreApplication.translate("MainWindow", u"Daten aus Dokument\n"
|
||||
"\u00fcbernehmen", None))
|
||||
|
||||
@@ -373,7 +373,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
self.setWidget(UpdateSignatures())
|
||||
self.admin_action.setTitle("Medien bearbeiten")
|
||||
else:
|
||||
self.hideWidget()
|
||||
# self.hideWidget()
|
||||
self.admin_action.setTitle("")
|
||||
|
||||
def toggleButton(self, button: QtWidgets.QCheckBox):
|
||||
@@ -1224,12 +1224,14 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
signatures = csv_to_list(file)
|
||||
# add the data to the database
|
||||
return signatures
|
||||
if file_type == "docx":
|
||||
if file_type in ("docx", "doc"):
|
||||
data = word_to_semap(file)
|
||||
log.info("Converted data from semap file")
|
||||
log.debug("Got the data: {}", data)
|
||||
|
||||
return data
|
||||
else:
|
||||
raise ValueError("Dateityp wird nicht unterstützt")
|
||||
|
||||
def import_data_from_document(self):
|
||||
global valid_input
|
||||
@@ -1241,6 +1243,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
|
||||
self.prof_mail.setText(data.mail)
|
||||
self.prof_tel_nr.setText(str(data.phoneNumber).replace("-", ""))
|
||||
self.app_name.setText(data.title)
|
||||
if len(data.title_suggestions) > 0:
|
||||
# create a dialog that has a dropdown with the suggestions, and oc and cancel button. on ok return the selected text and set it as title
|
||||
dialog = QtWidgets.QDialog()
|
||||
@@ -1271,6 +1274,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
self.app_name.setText(dropdown.currentText().split(" [")[0].strip())
|
||||
else:
|
||||
self.app_name.setText("CHANGEME")
|
||||
|
||||
# self.app_name.setText(data.title)
|
||||
subjects = self.db.getSubjects()
|
||||
subjects = [subject[1] for subject in subjects]
|
||||
@@ -1287,8 +1291,10 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
if data.eternal:
|
||||
self.check_eternal_app.setChecked(True)
|
||||
self.validate_semester()
|
||||
if data.books != []:
|
||||
self.btn_check_file_threaded(data)
|
||||
|
||||
def btn_check_file_threaded(self):
|
||||
def btn_check_file_threaded(self, c_document: Optional[SemapDocument] = None):
|
||||
for runner in self.bookGrabber:
|
||||
if not runner.isRunning():
|
||||
runner.deleteLater()
|
||||
@@ -1335,7 +1341,10 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
prof_id = self.db.getProfId(self.profdata)
|
||||
|
||||
# log.debug("Prof ID is None", prof_id)
|
||||
document = self.extract_document_data()
|
||||
document = None
|
||||
|
||||
if c_document is None or not isinstance(c_document, SemapDocument):
|
||||
document = self.extract_document_data()
|
||||
if document is None:
|
||||
log.error("Document is None")
|
||||
elif isinstance(document, SemapDocument):
|
||||
@@ -1410,7 +1419,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
)
|
||||
prof.title = self.prof_title.text()
|
||||
apparat = Apparat(
|
||||
appnr=self.active_apparat,
|
||||
appnr=int(self.drpdwn_app_nr.currentText()),
|
||||
name=self.app_name.text(),
|
||||
created_semester=self.generateSemester(),
|
||||
eternal=1 if self.check_eternal_app.isChecked() else 0,
|
||||
@@ -1433,7 +1442,8 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
return
|
||||
appdata = self.db.getAllAparats()
|
||||
# merge self.appdata and appdata, remove duplicates
|
||||
self.apparats = list(set(self.apparats + appdata))
|
||||
|
||||
self.apparats = self.__uniques(self.apparats, appdata)
|
||||
self.apparats = natsorted(self.apparats, key=lambda x: x[4], reverse=True)
|
||||
|
||||
self.update_apparat_list()
|
||||
@@ -1452,6 +1462,16 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
||||
self.__clear_fields()
|
||||
return True
|
||||
|
||||
def __uniques(self, list1, list2):
|
||||
seen = set()
|
||||
unique_list = []
|
||||
for item in list1 + list2:
|
||||
identifier = (item.appnr, item.name)
|
||||
if identifier not in seen:
|
||||
seen.add(identifier)
|
||||
unique_list.append(item)
|
||||
return unique_list
|
||||
|
||||
def send_mail_preview(self):
|
||||
pass
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class FilePicker:
|
||||
files, _ = filepicker.getOpenFileNames(
|
||||
caption="Open file",
|
||||
dir=self.last_path,
|
||||
filter="Unterstützte Dateien (*.docx *.csv *.eml );;Word (*.docx);;CSV Files (*.csv);;Mail (*.eml)",
|
||||
filter="Unterstützte Dateien (*.docx *.doc *.csv *.eml );;Word (*.docx *.doc);;CSV Files (*.csv);;Mail (*.eml)",
|
||||
)
|
||||
if files:
|
||||
self.last_path = files[0]
|
||||
|
||||
Reference in New Issue
Block a user