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

View File

@@ -1,4 +1,6 @@
# %%
from __future__ import annotations
import dataclasses as dc
import datetime
import enum
@@ -9,19 +11,11 @@ from pprint import pprint
from typing import Any
import babel
from pydantic import BaseModel, model_validator
from pydantic import BaseModel, ConfigDict, model_validator
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):
@classmethod
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):
betrag: float
waehrung: str = "EUR"
@@ -134,10 +137,52 @@ class ProjektModell(FlatBaseModel):
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.meilensteine
projekt.to_gui()
# %%
target_dict = {