Initial commit

This commit is contained in:
Bjoern Welker
2026-01-30 08:55:14 +01:00
commit 81a1ed7eef
17 changed files with 2824 additions and 0 deletions

88
wawi/import_from_html.py Normal file
View File

@@ -0,0 +1,88 @@
from __future__ import annotations
import argparse
import json
import re
import sqlite3
from pathlib import Path
from datetime import datetime
BASE_DIR = Path(__file__).resolve().parent
DB_PATH = BASE_DIR / "hellas.db"
def now_iso() -> str:
return datetime.now().strftime("%Y-%m-%d %H:%M")
def ensure_db(conn: sqlite3.Connection) -> None:
conn.executescript(
"""
CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
artikel TEXT NOT NULL,
groesse TEXT NOT NULL,
preis REAL NOT NULL DEFAULT 0,
soll INTEGER NOT NULL DEFAULT 0,
gezaehlt INTEGER NOT NULL DEFAULT 0,
verkaeufe INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
"""
)
conn.commit()
def extract_data(html_text: str) -> list[dict]:
# Liest den const DATA = [...] Block aus der alten HTMLDatei.
match = re.search(r"const\s+DATA\s*=\s*(\[[\s\S]*?\]);", html_text)
if not match:
raise ValueError("DATA-Block nicht gefunden.")
raw = match.group(1)
return json.loads(raw)
def main() -> int:
parser = argparse.ArgumentParser(description="Import aus hellas_bestand.html in SQLite.")
parser.add_argument("html", type=Path, help="Pfad zur hellas_bestand.html")
parser.add_argument("--truncate", action="store_true", help="Vor Import alle Items löschen.")
args = parser.parse_args()
html_text = args.html.read_text(encoding="utf-8")
data = extract_data(html_text)
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
ensure_db(conn)
if args.truncate:
conn.execute("DELETE FROM items")
conn.commit()
now = now_iso()
insert_sql = """
INSERT INTO items (artikel, groesse, soll, gezaehlt, verkaeufe, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?)
"""
rows_added = 0
for item in data:
artikel = (item.get("artikel") or "").strip()
for row in item.get("rows") or []:
groesse = (row.get("groesse") or "").strip()
soll = int(row.get("soll") or 0)
gezaehlt = int(row.get("gezaehlt") or 0)
verkaeufe = int(row.get("verkaeufe") or 0)
if not artikel or not groesse:
continue
conn.execute(insert_sql, (artikel, groesse, soll, gezaehlt, verkaeufe, now, now))
rows_added += 1
conn.commit()
print(f"Import fertig. Zeilen eingefügt: {rows_added}")
return 0
if __name__ == "__main__":
raise SystemExit(main())