"""CLI: Demodaten anlegen – `python -m app.scripts.seed_demo [--reset]`. Legt einen vollständigen deutschen Beispielhaushalt an: Konten, Firmen samt Logos, wiederkehrende Posten, bestätigte Historie, Buchungen, Budgets und Sparziele. Alle Termine liegen relativ zum heutigen Monat. """ import argparse import asyncio import sys from app.db.session import SessionLocal, engine from app.services.demo import has_data, seed_demo async def main(reset: bool, resolve_logos: bool) -> int: async with SessionLocal() as session: if not reset and await has_data(session): print( "Es sind bereits Daten vorhanden. Mit --reset werden Konten, Firmen, " "Posten, Buchungen, Budgets und Sparziele zuvor gelöscht.\n" "Kategorien und Benutzer bleiben in jedem Fall erhalten.", file=sys.stderr, ) await engine.dispose() return 1 ergebnis = await seed_demo(session, reset=reset, resolve_logos=resolve_logos) await engine.dispose() print( "Demodaten angelegt:\n" f" {ergebnis.accounts} Konten\n" f" {ergebnis.merchants} Firmen ({ergebnis.logos} mit Logo)\n" f" {ergebnis.recurrences} wiederkehrende Posten\n" f" {ergebnis.occurrences} bestätigte Fälligkeiten\n" f" {ergebnis.transactions} Buchungen\n" f" {ergebnis.budgets} Budgets und Vorlagen\n" f" {ergebnis.goals} Sparziele" ) return 0 if __name__ == "__main__": parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( "--reset", action="store_true", help="Vorhandene Konten, Firmen, Posten, Buchungen, Budgets und Sparziele löschen.", ) parser.add_argument( "--no-logos", action="store_true", help="Logosuche überspringen – schneller und ohne jeden Netzzugriff.", ) args = parser.parse_args() raise SystemExit(asyncio.run(main(args.reset, not args.no_logos)))