prepare other indexing and data processing logic

This commit is contained in:
2026-05-21 17:28:56 +02:00
parent 807d07f28e
commit eba9d523b1
2 changed files with 101 additions and 38 deletions

View File

@@ -63,7 +63,7 @@ logger.setLevel(logging.DEBUG)
logger_search_widget = logger.getChild("search_widget") logger_search_widget = logger.getChild("search_widget")
logger_search_widget.setLevel(logging.DEBUG) logger_search_widget.setLevel(logging.DEBUG)
logger_get_data = logger.getChild("get_data") logger_get_data = logger.getChild("get_data")
logger_get_data.setLevel(logging.DEBUG) logger_get_data.setLevel(logging.INFO)
QSS = """ QSS = """
*[styleClass="stempel"] { *[styleClass="stempel"] {
@@ -675,6 +675,7 @@ class SubForm:
prefix_parent: str prefix_parent: str
index: int index: int
prefix: str = "" prefix: str = ""
registry: WidgetRegistry = dc.field(default_factory=dict)
def __post_init__(self) -> None: def __post_init__(self) -> None:
self.prefix = f"{self.prefix_parent}-[{self.index}]" self.prefix = f"{self.prefix_parent}-[{self.index}]"
@@ -761,30 +762,31 @@ def get_form_data(
elif isinstance(widget, QComboBox): elif isinstance(widget, QComboBox):
value = widget.currentData() value = widget.currentData()
elif isinstance(widget, DynamicListWidget): elif isinstance(widget, DynamicListWidget):
...
# this should be a list: each dynamic list contains a list # this should be a list: each dynamic list contains a list
# of such dictionaries # of such dictionaries
form_data = widget.get_form_data() _ = widget.get_form_data()
value = [val for val in form_data.values()] # value = [val for val in form_data.values()]
# print(">>>>>>>>> Key: ", key) # print(">>>>>>>>> Key: ", key)
# print(">>>>>>>>> Form Data after call:") # print(">>>>>>>>> Form Data after call:")
# pprint(value) # pprint(value)
elif isinstance(widget, (DynamicDropdownWidget, CustomWidget)): elif isinstance(widget, (DynamicDropdownWidget, CustomWidget)):
# this is a special data structure with some assumptions of the widget's structure # this is a special data structure with some assumptions of the widget's structure
value = widget.get_form_data() value = widget.get_form_data()
print(">>>>>>>>> Key: ", key) # print(">>>>>>>>> Key: ", key)
print(">>>>>>>>> Form Data after call:") # print(">>>>>>>>> Form Data after call:")
pprint(value) # pprint(value)
# _insert_nested(raw_data, key.split(COLUMN_SEP), value) # _insert_nested(raw_data, key.split(COLUMN_SEP), value)
logger_get_data.debug("Key: %s", key) # logger_get_data.info("Key: %s", key)
logger_get_data.debug("Value: %s", value) # logger_get_data.info("Value: %s", value)
if isinstance(value, dict): if isinstance(value, dict):
raw_data.update(value) raw_data.update(value)
else: else:
raw_data[key] = value raw_data[key] = value
logger_get_data.debug(">>>>> RAW DATA:\n%s", pformat(raw_data)) logger_get_data.info(">>>>> RAW DATA:\n%s", pformat(raw_data))
return raw_data return raw_data
@@ -1733,14 +1735,18 @@ class DynamicListWidget(QWidget):
entry_box = QGroupBox(f"{self.label} {number_form}") entry_box = QGroupBox(f"{self.label} {number_form}")
entry_layout = QHBoxLayout(entry_box) entry_layout = QHBoxLayout(entry_box)
sub_form = SubForm(entry_box, prefix_parent=self.prefix, index=number_form) sub_form = SubForm(entry_box, prefix_parent=self.prefix, index=number_form)
# widget_registry: WidgetRegistry = {}
form_layout = QFormLayout() form_layout = QFormLayout()
_build_ui_recursively( _build_ui_recursively(
schema=self.form_fields, schema=self.form_fields,
parent_layout=form_layout, parent_layout=form_layout,
widget_registry=self.widget_registry, widget_registry=sub_form.registry,
prefix=f"{self.prefix}-[{number_form}]", # prefix=f"{self.prefix}-[{number_form}]",
prefix="",
) )
self.widget_registry.update(sub_form.registry)
# sub_form.registry = widget_registry
del_btn = QPushButton("🗑️") del_btn = QPushButton("🗑️")
del_btn.setFixedSize(30, 30) del_btn.setFixedSize(30, 30)
@@ -1784,12 +1790,20 @@ class DynamicListWidget(QWidget):
def get_form_data(self): def get_form_data(self):
# raw_data = get_form_data(self.widget_registry) # raw_data = get_form_data(self.widget_registry)
form_data = get_form_data(self.widget_registry) # form_data = get_form_data(self.widget_registry)
logger_get_data.debug( # logger_get_data.debug(
"\n\n\n------- Form data DynamicListWidget:\n%s", pformat(form_data) # "\n\n\n------- Form data DynamicListWidget:\n%s", pformat(form_data)
) # )
logger_get_data.info("DynamicListWidget - SubForms")
# for sub_form in self.sub_forms:
# logger_get_data.info("SubForm index %d", sub_form.index)
# pprint_registry(sub_form.registry)
return form_data form_data = [get_form_data(sub.registry) for sub in self.sub_forms]
print("##################")
pprint(form_data)
# return form_data
def set_form_data( def set_form_data(
self, self,
@@ -1800,22 +1814,26 @@ class DynamicListWidget(QWidget):
self.remove_entry(self.sub_forms[0]) self.remove_entry(self.sub_forms[0])
# empty default row # empty default row
if not data: if not data and self.add_empty_entry:
self.add_entry() self.add_entry()
return return
for sub_data in data: # for sub_data in data:
# self.add_entry()
# current_sub_form = self.sub_forms[-1]
# registry_entries = search_widgets_by_key(
# self.widget_registry, f"-[{current_sub_form.index}]"
# )
# for reg_entry in registry_entries:
# widget = reg_entry["widget"]
# field_def = reg_entry["form_field"]
# value = sub_data[field_def.key]
# set_widget_value(widget, value)
for sub_form_data in data:
self.add_entry() self.add_entry()
current_sub_form = self.sub_forms[-1] current_sub_form = self.sub_forms[-1]
registry_entries = search_widgets_by_key( set_form_data(current_sub_form.registry, sub_form_data)
self.widget_registry, f"-[{current_sub_form.index}]"
)
for reg_entry in registry_entries:
widget = reg_entry["widget"]
field_def = reg_entry["form_field"]
value = sub_data[field_def.key]
set_widget_value(widget, value)
class DynamicDropdownWidget(QWidget): class DynamicDropdownWidget(QWidget):

View File

@@ -1,4 +1,6 @@
# %% # %%
from __future__ import annotations
import dataclasses as dc import dataclasses as dc
import datetime import datetime
import enum import enum
@@ -9,19 +11,11 @@ from pprint import pprint
from typing import Any from typing import Any
import babel import babel
from pydantic import BaseModel, model_validator from pydantic import BaseModel, ConfigDict, model_validator
from PySide6.QtCore import QDate, Qt from PySide6.QtCore import QDate, Qt
# %% # %%
gui_rohdaten = {
"projekt_name": "Mars Rover",
"meilensteine": [
{"titel": "Triebwerk Test", "finanzen__betrag": 5000.0, "finanzen__waehrung": "EUR"},
{"titel": "Software Beta", "finanzen__betrag": 1200.0, "finanzen__waehrung": "EUR"},
],
}
class FlatBaseModel(BaseModel): class FlatBaseModel(BaseModel):
@classmethod @classmethod
def _unflatten_dict(cls, flat_dict: dict) -> dict: def _unflatten_dict(cls, flat_dict: dict) -> dict:
@@ -119,6 +113,15 @@ class FlatBaseModel(BaseModel):
# %% # %%
gui_rohdaten = {
"projekt_name": "Mars Rover",
"meilensteine": [
{"titel": "Triebwerk Test", "finanzen__betrag": 5000.0, "finanzen__waehrung": "EUR"},
{"titel": "Software Beta", "finanzen__betrag": 1200.0, "finanzen__waehrung": "EUR"},
],
}
class BudgetDetails(BaseModel): class BudgetDetails(BaseModel):
betrag: float betrag: float
waehrung: str = "EUR" waehrung: str = "EUR"
@@ -134,10 +137,52 @@ class ProjektModell(FlatBaseModel):
meilensteine: list[Meilenstein] # <--- Die Liste von Modellen meilensteine: list[Meilenstein] # <--- Die Liste von Modellen
class Grunderfassung_Unternehmen(FlatBaseModel):
Schulbildung: list[Grunderfassung_Schulbildung]
class Grunderfassung_Schulbildung(BaseModel):
model_config = ConfigDict(str_strip_whitespace=True)
SB_abschluss: str | None
SB_abschlussgrad: str | None
SB_schule: str | None
SB_ort: str | None
SB_land: str | None
SB_abschlussjahr: str | None
SB_bemerkungsfeld: str | None
# %%
list_schulbildung = [
{
"SB_abschluss": None,
"SB_abschlussgrad": None,
"SB_abschlussjahr": None,
"SB_bemerkungsfeld": None,
"SB_land": None,
"SB_ort": None,
"SB_schule": None,
},
{
"SB_abschluss": None,
"SB_abschlussgrad": None,
"SB_abschlussjahr": None,
"SB_bemerkungsfeld": None,
"SB_land": None,
"SB_ort": None,
"SB_schule": None,
},
]
data = {"Schulbildung": list_schulbildung}
Grunderfassung_Unternehmen(**data)
# %%
projekt = ProjektModell(**gui_rohdaten) projekt = ProjektModell(**gui_rohdaten)
# %% # %%
projekt.meilensteine projekt.to_gui()
# %% # %%
target_dict = { target_dict = {