# %% import dataclasses as dc import enum import re from collections.abc import Sequence from typing import Any import babel from pydantic import BaseModel from PySide6.QtCore import QDate, Qt # %% DYNAMIC_LIST_KEY_PATTERN = re.compile(r"-\[(\d+)\]") dynamic_content = { "Stammdaten_anzahl_kinder-[0]": {"Stammdaten_anzahl_kinder": "5"}, "Stammdaten_anzahl_kinder-[1]": {"Stammdaten_alter_kinder": "23213"}, "Stammdaten_anzahl_kinder-[2]": {"Stammdaten_alter_kinder": "123123"}, "Stammdaten_anzahl_kinder-[3]": {"Stammdaten_alter_kinder": "123213"}, "Stammdaten_anzahl_kinder-[4]": {"Stammdaten_alter_kinder": "123123"}, "Stammdaten_anzahl_kinder-[5]": {"Stammdaten_alter_kinder": "123123"}, } def find_dynamic_content(content: dict[str, Any]) -> dict[str, Any] | None: found = None for key in dynamic_content.keys(): if DYNAMIC_LIST_KEY_PATTERN.search(key): # found an match: this is dynamic content dictionary print("found") found = dynamic_content break return found # %% new_content = { "Stammdaten": { "Stammdaten_PLZ": "", "Stammdaten_anrede_anschrift": "asdasdas", "Stammdaten_anzahl_kinder": [ { "Stammdaten_anzahl_kinder-[0]": {"Stammdaten_anzahl_kinder": "5"}, "Stammdaten_anzahl_kinder-[1]": {"Stammdaten_alter_kinder": "23213"}, "Stammdaten_anzahl_kinder-[2]": {"Stammdaten_alter_kinder": "123123"}, "Stammdaten_anzahl_kinder-[3]": {"Stammdaten_alter_kinder": "123213"}, "Stammdaten_anzahl_kinder-[4]": {"Stammdaten_alter_kinder": "123123"}, "Stammdaten_anzahl_kinder-[5]": {"Stammdaten_alter_kinder": "123123"}, } ], } } new_content = { "Stammdaten": { "Stammdaten_anzahl_kinder-[0]": {"Stammdaten_anzahl_kinder": "5"}, "Stammdaten_anzahl_kinder-[1]": {"Stammdaten_alter_kinder": None}, "Stammdaten_anzahl_kinder-[2]": {"Stammdaten_alter_kinder": None}, "Stammdaten_anzahl_kinder-[3]": {"Stammdaten_alter_kinder": None}, "Stammdaten_anzahl_kinder-[4]": {"Stammdaten_alter_kinder": None}, "Stammdaten_anzahl_kinder-[5]": {"Stammdaten_alter_kinder": None}, } } # object Stammdaten_Anzahl_Kinder: Stammdaten_anzahl_kinder: int, Stammdaten_alter_kinder: list[int] def get_leafs(data): if isinstance(data, dict): for value in data.values(): yield from get_leafs(value) elif isinstance(data, (list, tuple, set)): for item in data: yield from get_leafs(item) else: yield data def get_leaf_dicts(data): if isinstance(data, dict): has_inner_dicts = False for value in data.values(): for inner_dict in get_leaf_dicts(value): has_inner_dicts = True yield inner_dict if not has_inner_dicts: yield data elif isinstance(data, (list, tuple, set)): for item in data: yield from get_leaf_dicts(item) # %% for x in get_leafs(new_content): print(x) # %% export_dict = {} children_values: list[str] | None = None for idx, data_dict in enumerate(get_leaf_dicts(new_content)): if idx == 0: export_dict.update(data_dict) else: for key in data_dict: if key not in export_dict: children_values = export_dict.setdefault(key, []) assert children_values is not None children_values.append(data_dict[key]) export_dict # %% class Stammdaten_AnzahlKinder(BaseModel): Stammdaten_anzahl_kinder: int | None Stammdaten_alter_kinder: list[int | None] # %% Stammdaten_AnzahlKinder(**export_dict) # %% find_dynamic_content(dynamic_content) # %% @dc.dataclass(slots=True) class CountryList: iso_to_country: dict[str, str] for_dropdown: Sequence[tuple[str, str]] def get_country_list_german() -> CountryList: locale = babel.Locale("de", "DE") countries: list[tuple[str, str]] = [] iso_to_country: dict[str, str] = {} for iso_code, country_name in locale.territories.items(): if len(iso_code) == 2 and not iso_code.isdigit(): countries.append((country_name, iso_code)) iso_to_country[iso_code] = country_name countries.sort(key=lambda x: x[0]) return CountryList( iso_to_country=iso_to_country, for_dropdown=tuple(countries), ) # %% laender_liste # %% DYNAMIC_LIST_KEY_PATTERN = r"-\[(\d+)\]" key = "Schulbildung-[12].7b8da0f7-7a0e-4f71-878a-85616099e849" matches = re.search(DYNAMIC_LIST_KEY_PATTERN, key) # %% matches # %% matches.group(1) # %% class COUNTRY(enum.IntEnum): DE = 1 FR = 2 CM = 3 class COUNTRY2(enum.Enum): DE = 1 FR = 2 CM = 3 def give_value(t): print(f"Wert ist: {t}") give_value(COUNTRY.DE) give_value(COUNTRY2.DE) # %% COUNTRY(10) # %% COUNTRY.DE # %% t_str = "asd.yxcxc.dfgjj.aasdsdsdsd.sdsdsdsd" splitted = t_str.split(".") part, rest = splitted[0], splitted[1:] part # %% ".".join([part] + rest) # %% class FormFieldType(enum.StrEnum): TEXT = enum.auto() LONGTEXT = enum.auto() DATE = enum.auto() DATETIME = enum.auto() @dc.dataclass(slots=True) class FormField: key: str label: str type: FormFieldType required: bool def __post_init__(self) -> None: self.label = self.label.strip() if not self.label.endswith(":"): self.label += ":" if self.required: self.label += "*" # %% FormField("name", "Projektbeschreibung", FormFieldType.LONGTEXT, required=True) # %% FormField("name", "Projektbeschreibung:", FormFieldType.LONGTEXT, required=True) # %% FormField("name", "Projektbeschreibung", FormFieldType.LONGTEXT, required=False) # %% FormField("name", "Projektbeschreibung:", FormFieldType.LONGTEXT, required=False) # %% addr.export() # %% set_date = QDate.fromString("26.07.2026", "dd.MM.yyyy") # %% Qt.Tet