Konzept für Auswerten der SQL-Daten aus FN, parsen und schreiben der Pojekt-Datei

This commit is contained in:
2025-06-21 21:20:37 +02:00
parent e0ed64ec1c
commit ea9324637f
4 changed files with 132 additions and 4 deletions
+12 -4
View File
@@ -133,21 +133,29 @@ class AppSettings(BaseSettings):
app_settings = AppSettings()
class Xml(BaseModel):
xml: Path
class XslFile(BaseModel):
id: tuple
bez: str
xsl_file: Path
xmls: list[Xml] = []
class TreeNode(BaseModel):
id: tuple
bez: str
children: set["TreeNode|XslFile"]
children: list["TreeNode|XslFile"]
class PdfProjectSettings(BaseSettings):
class PdfProjectSettings(BaseModel):
"""
Speichert Projekt-Einstellungen direkt im Ordner des Projekts in einer Klartextdatei JSON
"""
pass
nodes: list[TreeNode] = []
+57
View File
@@ -0,0 +1,57 @@
from conf import TreeNode, XslFile, PdfProjectSettings, Xml
from pathlib import Path
from pydantic_yaml import to_yaml_str, parse_yaml_file_as
import polars as pl
import time
# Lade Beispieldaten
start_time = time.time()
df = pl.read_csv("src/ui/res/data.csv")
load_csv_time = time.time() - start_time
print(f"Performance: csv in {load_csv_time:.3f}s")
start_time = time.time()
ebene_1 = df.group_by(["reporttyp", "reporttyp_bez"]).len()
ebene_2 = df.group_by(["reporttyp", "report", "report_bez"]).len()
ebene_3 = df.group_by(["reporttyp", "report", "repfile", "repfile_bez", "xsl_datei"]).len()
group_time = time.time() - start_time
print(f"Performance: group in {group_time:.3f}s")
project = PdfProjectSettings()
start_time = time.time()
for r1 in ebene_1.rows(named=True):
tn_1 = TreeNode(id=(r1["reporttyp"],), bez=r1["reporttyp_bez"], children=[])
r1_children = ebene_2.filter(pl.col("reporttyp") == r1["reporttyp"])
for r2 in r1_children.rows(named=True):
tn_2 = TreeNode(id=(r2["reporttyp"], r2["report"]), bez=r2["report_bez"], children=[])
r2_children = ebene_3.filter((pl.col("reporttyp") == r1["reporttyp"]) & (pl.col("report") == r2["report"]))
for r3 in r2_children.rows(named=True):
x = XslFile(
id=(r3["reporttyp"], r3["report"], r3["repfile"]),
bez=r3["repfile_bez"],
xsl_file=Path(r3["xsl_datei"]),
xmls=[Xml(xml=Path("test.xml"))],
)
tn_2.children.append(x)
tn_1.children.append(tn_2)
project.nodes.append(tn_1)
nodes_time = time.time() - start_time
print(f"Performance: nodes_time in {nodes_time:.3f}s")
start_time = time.time()
with open("project.yaml", "w", encoding="utf8") as f:
f.write(to_yaml_str(project))
dump_time = time.time() - start_time
print(f"Performance: dump_time to file in {dump_time:.3f}s")
start_time = time.time()
project_2 = parse_yaml_file_as(PdfProjectSettings, "project.yaml")
parse_yaml_file_time = time.time() - start_time
print(f"Performance: parse_yaml_file in {parse_yaml_file_time:.3f}s")