Refactor database message handling to support multiple messages and enhance type hints across various classes

This commit is contained in:
2025-05-14 14:34:40 +02:00
parent f7c499ea6e
commit 0c53778f99
6 changed files with 126 additions and 108 deletions

View File

@@ -1,38 +1,38 @@
from dataclasses import dataclass, field
from enum import Enum
import json
from typing import Union, Any, Optional
@dataclass
class Prof:
id: int = None
_title: str = None
firstname: str = None
lastname: str = None
fullname: str = None
mail: str = None
telnr: str = None
id: Optional[int] = None
_title: Optional[str] = None
firstname: Optional[str] = None
lastname: Optional[str] = None
fullname: Optional[str] = None
mail: Optional[str] = None
telnr: Optional[str] = None
# add function that sets the data based on a dict
def from_dict(self, data: dict):
def from_dict(self, data: dict[str, Union[str, int]]):
for key, value in data.items():
if hasattr(self, key):
setattr(self, key, value)
return self
@property
def title(self):
def title(self) -> str:
if self._title is None or self._title == "None":
return ""
return self._title
@title.setter
def title(self, value):
def title(self, value: str):
self._title = value
# add function that sets the data from a tuple
def from_tuple(self, data: tuple):
def from_tuple(self, data: tuple[Union[str, int], ...]):
setattr(self, "id", data[0])
setattr(self, "_title", data[1])
setattr(self, "firstname", data[2])
@@ -42,7 +42,7 @@ class Prof:
setattr(self, "telnr", data[6])
return self
def name(self, comma=False):
def name(self, comma: bool = False) -> Optional[str]:
if self.firstname is None and self.lastname is None:
if "," in self.fullname:
self.firstname = self.fullname.split(",")[1].strip()
@@ -62,9 +62,9 @@ class BookData:
signature: str | None = None
edition: str | None = None
link: str | None = None
isbn: str | list | None = field(default_factory=list)
isbn: Union[str, list[str], None] = field(default_factory=list)
author: str | None = None
language: str | list | None = field(default_factory=list)
language: Union[str, list[str], None] = field(default_factory=list)
publisher: str | None = None
place: str | None = None
year: str | None = None
@@ -73,31 +73,33 @@ class BookData:
in_apparat: bool | None = False
adis_idn: str | None = None
def from_dict(self, data: dict):
def from_dict(self, data: dict) -> "BookData":
for key, value in data.items():
setattr(self, key, value)
return self
@property
def to_dict(self):
def to_dict(self) -> str:
"""Convert the dataclass to a dictionary."""
return json.dumps(self.__dict__, ensure_ascii=False)
def from_dataclass(self, dataclass):
def from_dataclass(self, dataclass: Optional[Any]) -> None:
if dataclass is None:
return
for key, value in dataclass.__dict__.items():
setattr(self, key, value)
def from_string(self, data: str):
data = json.loads(data)
return BookData(**data)
def from_string(self, data: str) -> "BookData":
ndata = json.loads(data)
return BookData(**ndata)
@dataclass
class MailData:
subject: str | None = None
body: str | None = None
mailto: str | None = None
prof: str | None = None
subject: Optional[str] = None
body: Optional[str] = None
mailto: Optional[str] = None
prof: Optional[str] = None
class Subjects(Enum):
@@ -127,15 +129,15 @@ class Subjects(Enum):
ECONOMICS = (24, "Wirtschaftslehre")
@property
def id(self):
def id(self) -> int:
return self.value[0]
@property
def name(self):
def name(self) -> str:
return self.value[1]
@classmethod
def get_index(cls, name):
def get_index(cls, name: str) -> Optional[int]:
for i in cls:
if i.name == name:
return i.id - 1
@@ -158,7 +160,7 @@ class Apparat:
prof_id_adis: str | None = None
konto: int | None = None
def from_tuple(self, data: tuple):
def from_tuple(self, data: tuple[Any, ...]) -> "Apparat":
self.id = data[0]
self.name = data[1]
self.prof_id = data[2]
@@ -176,7 +178,7 @@ class Apparat:
return self
@property
def get_semester(self):
def get_semester(self) -> Optional[str]:
if self.extend_until is not None:
return self.extend_until
else:
@@ -190,7 +192,7 @@ class ELSA:
semester: str | None = None
prof_id: int | None = None
def from_tuple(self, data):
def from_tuple(self, data: tuple[Any, ...]) -> "ELSA":
self.id = data[0]
self.date = data[1]
self.semester = data[2]