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 = 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):
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
Reference in New Issue
Block a user