Compare commits
2 Commits
dev
...
feat-email
| Author | SHA1 | Date | |
|---|---|---|---|
|
7b43826ef5
|
|||
|
8ec92a685c
|
@@ -38,7 +38,8 @@ dev = [
|
|||||||
"bump-my-version>=0.29.0",
|
"bump-my-version>=0.29.0",
|
||||||
"icecream>=2.1.4",
|
"icecream>=2.1.4",
|
||||||
"nuitka>=2.5.9",
|
"nuitka>=2.5.9",
|
||||||
"prek>=0.3.2",
|
"pytest",
|
||||||
|
"pytest-cov",
|
||||||
"pyinstaller>=6.17.0",
|
"pyinstaller>=6.17.0",
|
||||||
]
|
]
|
||||||
swbtest = ["alive-progress>=3.3.0"]
|
swbtest = ["alive-progress>=3.3.0"]
|
||||||
@@ -72,3 +73,11 @@ filename = ".version"
|
|||||||
[[tool.uv.index]]
|
[[tool.uv.index]]
|
||||||
name = "gitea"
|
name = "gitea"
|
||||||
url = "https://git.theprivateserver.de/api/packages/PHB/pypi/simple/"
|
url = "https://git.theprivateserver.de/api/packages/PHB/pypi/simple/"
|
||||||
|
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
testpaths = ["tests"]
|
||||||
|
addopts = "--cov=src --cov-report=term-missing"
|
||||||
|
|
||||||
|
[tool.coverage.run]
|
||||||
|
omit = ["main.py", "test.py", "tests/*", "__init__.py", ]
|
||||||
|
|||||||
12
pytest.ini
12
pytest.ini
@@ -1,12 +0,0 @@
|
|||||||
[pytest]
|
|
||||||
# command should be *including --cov to generate coverage report
|
|
||||||
addopts = --cov
|
|
||||||
testpaths = tests
|
|
||||||
python_files = test_*.py
|
|
||||||
; Configuring pytest
|
|
||||||
; More info: https://docs.pytest.org/en/6.2.x/customize.html
|
|
||||||
|
|
||||||
;Logging
|
|
||||||
; DATE FORMAT EXAMPLE: %Y-%m-%d %H:%M:%S
|
|
||||||
; log_cli_format = %(asctime)s %(levelname)-8s %(name)-8s %(message)s
|
|
||||||
; log_cli_date_format = %H:%M:%S
|
|
||||||
@@ -175,6 +175,18 @@ class BookData:
|
|||||||
return int(match.group(1))
|
return int(match.group(1))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def to_book(self) -> Book:
|
||||||
|
return Book(
|
||||||
|
author=self.author,
|
||||||
|
year=self.year,
|
||||||
|
edition=self.edition,
|
||||||
|
title=self.title,
|
||||||
|
location=self.place,
|
||||||
|
publisher=self.publisher,
|
||||||
|
signature=self.signature,
|
||||||
|
internal_notes=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MailData:
|
class MailData:
|
||||||
@@ -290,15 +302,18 @@ class ApparatData:
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class XMLMailSubmission:
|
class XMLMailSubmission:
|
||||||
name: str | None
|
name: str | None = None
|
||||||
lastname: str | None
|
lastname: str | None = None
|
||||||
title: str | None
|
title: str | None = None
|
||||||
telno: int | None
|
telno: int | None = None
|
||||||
email: str | None
|
email: str | None = None
|
||||||
app_name: str | None
|
app_name: str | None = None
|
||||||
subject: str | None
|
subject: str | None = None
|
||||||
semester: Semester | None
|
semester: Semester | None = None
|
||||||
books: list[BookData] | None
|
books: list[BookData] | None = None
|
||||||
|
dauerapparat: bool = False
|
||||||
|
# def __post_init__(self) -> None:
|
||||||
|
# convert semester to string
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -374,6 +389,7 @@ class SemapDocument:
|
|||||||
self.phoneNumber = int(
|
self.phoneNumber = int(
|
||||||
regex.sub(r"[^\d]", "", str(self.phoneNumber)),
|
regex.sub(r"[^\d]", "", str(self.phoneNumber)),
|
||||||
)
|
)
|
||||||
|
self.title_length = len(self.title) + 3 + len(self.personName.split(",")[0])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def nameSetter(self):
|
def nameSetter(self):
|
||||||
|
|||||||
@@ -99,6 +99,9 @@ class Semester:
|
|||||||
|
|
||||||
self.value = f"WiSe {year}/{next_year}"
|
self.value = f"WiSe {year}/{next_year}"
|
||||||
else: # SoSe
|
else: # SoSe
|
||||||
|
# year may only be the last two digits, so we don't want to pad it with a leading zero
|
||||||
|
if len(str(year)) > 2:
|
||||||
|
year = int(str(year)[-2:])
|
||||||
self.value = f"SoSe {year}"
|
self.value = f"SoSe {year}"
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1243,28 +1243,25 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
|||||||
self.active_apparat,
|
self.active_apparat,
|
||||||
filetype=file_type,
|
filetype=file_type,
|
||||||
)
|
)
|
||||||
if file_type == "pdf":
|
match file_type:
|
||||||
# TODO: implement parser here
|
case "pdf":
|
||||||
data = pdf_to_semap(file)
|
# TODO: implement parser here
|
||||||
signatures = data.signatures
|
data = pdf_to_semap(file)
|
||||||
# self.confirm_popup("PDF Dateien werden nicht unterstützt!", title="Fehler")
|
signatures = data.signatures
|
||||||
return signatures
|
# self.confirm_popup("PDF Dateien werden nicht unterstützt!", title="Fehler")
|
||||||
if file_type == "csv":
|
return signatures
|
||||||
return csv_to_list(file)
|
case "csv":
|
||||||
if file_type in ("docx", "doc"):
|
return csv_to_list(file)
|
||||||
data = word_to_semap(file)
|
case _ if file_type in ("docx", "doc"):
|
||||||
log.info("Converted data from semap file")
|
return word_to_semap(file)
|
||||||
log.debug("Got the data: {}", data)
|
case "eml":
|
||||||
|
data = eml_to_semap(file)
|
||||||
return data
|
log.info("Converted data from eml file")
|
||||||
if file_type == "eml":
|
log.debug("Got the data: {}", data)
|
||||||
data = eml_to_semap(file)
|
return data
|
||||||
log.info("Converted data from eml file")
|
case _:
|
||||||
log.debug("Got the data: {}", data)
|
error = "Dateityp wird nicht unterstützt"
|
||||||
|
raise ValueError(error)
|
||||||
return data
|
|
||||||
error = "Dateityp wird nicht unterstützt"
|
|
||||||
raise ValueError(error)
|
|
||||||
|
|
||||||
def import_data_from_document(self):
|
def import_data_from_document(self):
|
||||||
global valid_input
|
global valid_input
|
||||||
@@ -1314,6 +1311,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
|||||||
self.app_fach.setCurrentText(data.subject if data.subject in subjects else "")
|
self.app_fach.setCurrentText(data.subject if data.subject in subjects else "")
|
||||||
self.prof_title.setText(data.personTitle)
|
self.prof_title.setText(data.personTitle)
|
||||||
self.drpdwn_prof_name.setCurrentText(data.personName)
|
self.drpdwn_prof_name.setCurrentText(data.personName)
|
||||||
|
|
||||||
self.sem_year.setText("20" + str(data.semester.year))
|
self.sem_year.setText("20" + str(data.semester.year))
|
||||||
if data.semester.semester == "SoSe":
|
if data.semester.semester == "SoSe":
|
||||||
self.sem_sommer.setChecked(True)
|
self.sem_sommer.setChecked(True)
|
||||||
@@ -1325,9 +1323,13 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
|||||||
self.check_eternal_app.setChecked(True)
|
self.check_eternal_app.setChecked(True)
|
||||||
self.validate_semester()
|
self.validate_semester()
|
||||||
if data.books != []:
|
if data.books != []:
|
||||||
|
log.info("Importing books from document")
|
||||||
|
log.info(data)
|
||||||
self.btn_check_file_threaded(data)
|
self.btn_check_file_threaded(data)
|
||||||
|
|
||||||
def btn_check_file_threaded(self, c_document: Optional[SemapDocument] = None):
|
def btn_check_file_threaded(self, c_document: Optional[SemapDocument] = None):
|
||||||
|
log.info("Starting threaded file check")
|
||||||
|
log.info(c_document)
|
||||||
for runner in self.bookGrabber:
|
for runner in self.bookGrabber:
|
||||||
if not runner.isRunning():
|
if not runner.isRunning():
|
||||||
runner.deleteLater()
|
runner.deleteLater()
|
||||||
@@ -1373,8 +1375,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
|
|||||||
prof_id = self.db.getProfId(self.profdata)
|
prof_id = self.db.getProfId(self.profdata)
|
||||||
|
|
||||||
# log.debug("Prof ID is None", prof_id)
|
# log.debug("Prof ID is None", prof_id)
|
||||||
document = None
|
document = c_document
|
||||||
|
|
||||||
if c_document is None:
|
if c_document is None:
|
||||||
document = self.extract_document_data()
|
document = self.extract_document_data()
|
||||||
if document is None:
|
if document is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user