generated from dopt-python/py311
prepare other indexing and data processing logic
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user