Files
NAFKA-crm-gui/prototypes/tests.py

247 lines
5.9 KiB
Python

# %%
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