From 46bdd5e68c6d77199156c15cfe89804467cf7a6f Mon Sep 17 00:00:00 2001 From: Mathias Scheider Date: Sun, 13 Sep 2026 07:55:24 +0200 Subject: [PATCH] ingestion models: less code repetition, more inheritance --- src/models/_common.py | 20 +++++++++++++++++++- src/models/b4w.py | 12 ------------ src/models/comdirect.py | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 13 deletions(-) diff --git a/src/models/_common.py b/src/models/_common.py index 95b935c..6fb3e14 100644 --- a/src/models/_common.py +++ b/src/models/_common.py @@ -61,7 +61,25 @@ type CsV2DictMulti = dict[str, Csv2Dict] class ExportBaseModel(BaseModel): - pass + + @classmethod + def _my_name(cls): + return cls.__name__ + + def parameters_to_dict(self) -> dict[str, str]: + return {} + + def parameters_to_str(self): + parameters = ", ".join( + f"{key}='{value}'" for key, value in self.parameters_to_dict().items() + ) + return parameters + + def __repr__(self): + return f"{self._my_name()}({self.parameters_to_str()})" + + def __str__(self): + return f"{self._my_name()}({self.parameters_to_str()})" class BaseModelDb(DeclarativeBase): diff --git a/src/models/b4w.py b/src/models/b4w.py index 4e21961..4f8189c 100644 --- a/src/models/b4w.py +++ b/src/models/b4w.py @@ -56,18 +56,6 @@ class B4wExport(ExportBaseModel): "Notes": f"{self.notes}", } - def parameters_to_str(self): - parameters = ", ".join( - f"{key}='{value}'" for key, value in self.parameters_to_dict().items() - ) - return parameters - - def __repr__(self): - return f"B4wExport({self.parameters_to_str()})" - - def __str__(self): - return f"B4wExport({self.parameters_to_str()})" - @computed_field @property def hash_id(self) -> str: diff --git a/src/models/comdirect.py b/src/models/comdirect.py index 3637e67..b205f77 100644 --- a/src/models/comdirect.py +++ b/src/models/comdirect.py @@ -10,6 +10,7 @@ from src.models._common import ( _hash, _parse_date_german, _parse_decimal_german, + date2str, ) @@ -29,6 +30,14 @@ class ComdirectBase(ExportBaseModel): def parse_amount(cls, decimal_str: str) -> Decimal: return _parse_decimal_german(decimal_str) + def parameters_to_dict(self) -> dict[str, str]: ... + + def parameters_to_str(self, sep=", ", str_qualifier=False): ... + + def __repr__(self): ... + + def __str__(self): ... + class ComdirectGiro(ComdirectBase): # # Fields from parents: @@ -50,6 +59,22 @@ class ComdirectGiro(ComdirectBase): def parse_date_book(cls, date_str: str) -> date | None: return _parse_date_german(date_str) + def parameters_to_dict(self) -> dict[str, str]: + return { + "Buchungstag": date2str( + self.date_book, default="--", date_format="%d.%m.%Y" + ), + "Vorgang": self.type, + "Text": self.text, + } + + def parameters_to_str(self, sep=", ", str_qualifier=False): + ... + + def __repr__(self): ... + + def __str__(self): ... + class ComdirectCreditCard(ComdirectGiro): # # Fields from parents: @@ -71,6 +96,14 @@ class ComdirectCreditCard(ComdirectGiro): alias="Umsatz in EUR", examples=["32,43"], default=None ) + def parameters_to_dict(self) -> dict[str, str]: ... + + def parameters_to_str(self, sep=", ", str_qualifier=False): ... + + def __repr__(self): ... + + def __str__(self): ... + class ComdirectDepot(ComdirectBase): # # Fields from parents: @@ -88,6 +121,14 @@ class ComdirectDepot(ComdirectBase): def parse_decimals(cls, decimal_in: str) -> Decimal: return _parse_decimal_german(decimal_in) + def parameters_to_dict(self) -> dict[str, str]: ... + + def parameters_to_str(self, sep=", ", str_qualifier=False): ... + + def __repr__(self): ... + + def __str__(self): ... + class ComdirectBaseDb(IngestdbBase): __abstract__ = True