Files
calender_sync/demo/seed.py
T
2026-08-10 17:01:27 +02:00

118 lines
4.3 KiB
Python

#!/usr/bin/env python3
"""Erstellt eine lokale SQLite Demo-Datenbank mit 4 Beispiel-Terminen."""
import os
import sqlite3
from datetime import datetime, timedelta
DB_PATH = os.environ.get("DB_PATH", os.path.join(os.path.dirname(__file__), "demo.db"))
SCHEMA = """
CREATE TABLE IF NOT EXISTS calendar_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
calendar_label TEXT NOT NULL,
instance_key TEXT NOT NULL,
uid TEXT NOT NULL,
recurrence_id TEXT,
summary TEXT,
description TEXT,
location TEXT,
start_at TEXT NOT NULL,
end_at TEXT,
all_day INTEGER NOT NULL DEFAULT 0,
status TEXT DEFAULT 'CONFIRMED',
deleted INTEGER NOT NULL DEFAULT 0,
last_seen_at TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE (calendar_label, instance_key)
);
CREATE INDEX IF NOT EXISTS idx_start ON calendar_events(start_at);
CREATE INDEX IF NOT EXISTS idx_deleted ON calendar_events(deleted);
"""
def seed():
if os.path.exists(DB_PATH):
os.remove(DB_PATH)
conn = sqlite3.connect(DB_PATH)
conn.executescript(SCHEMA)
now = datetime.now().replace(second=0, microsecond=0, tzinfo=None)
today = now.replace(hour=0, minute=0, second=0)
# Wenn es nach 14 Uhr ist, alle Termine einen Tag verschieben
# damit sie in der Demo immer sichtbar sind
day_offset = 1 if now.hour >= 14 else 0
base = today + timedelta(days=day_offset)
events = [
{
"calendar_label": "demo",
"instance_key": f"team-daily-{base.strftime('%Y%m%d')}",
"uid": "team-daily-001@demo",
"summary": "Team Daily",
"description": "Tägliches Standup-Meeting mit dem gesamten Team.",
"location": "Besprechungsraum A / Zoom",
"start_at": (base + timedelta(hours=14)).strftime("%Y-%m-%d %H:%M:%S"),
"end_at": (base + timedelta(hours=15)).strftime("%Y-%m-%d %H:%M:%S"),
"all_day": 0,
"status": "CONFIRMED",
},
{
"calendar_label": "demo",
"instance_key": f"yoga-{base.strftime('%Y%m%d')}",
"uid": "yoga-002@demo",
"summary": "Yoga Kurs",
"description": "Wöchentlicher Yoga-Kurs in der Volkshochschule.",
"location": "Volkshochschule, Raum 204",
"start_at": (base + timedelta(hours=18, minutes=30)).strftime("%Y-%m-%d %H:%M:%S"),
"end_at": (base + timedelta(hours=20)).strftime("%Y-%m-%d %H:%M:%S"),
"all_day": 0,
"status": "CONFIRMED",
},
{
"calendar_label": "demo",
"instance_key": f"deadline-{(base + timedelta(days=1)).strftime('%Y%m%d')}",
"uid": "deadline-003@demo",
"summary": "Projekt-Deadline",
"description": "Abgabe des Projektberichts an die Geschäftsleitung.",
"location": "",
"start_at": (base + timedelta(days=1)).strftime("%Y-%m-%d 00:00:00"),
"end_at": (base + timedelta(days=1)).strftime("%Y-%m-%d 23:59:59"),
"all_day": 1,
"status": "TENTATIVE",
},
{
"calendar_label": "demo",
"instance_key": f"arzt-{(base + timedelta(days=2)).strftime('%Y%m%d')}",
"uid": "arzt-004@demo",
"summary": "Arzttermin",
"description": "Routineuntersuchung beim Hausarzt. Bitte Impfpass mitbringen.",
"location": "Dr. Müller, Gesundheitsstraße 12",
"start_at": (base + timedelta(days=2, hours=10)).strftime("%Y-%m-%d %H:%M:%S"),
"end_at": (base + timedelta(days=2, hours=11, minutes=30)).strftime("%Y-%m-%d %H:%M:%S"),
"all_day": 0,
"status": "CONFIRMED",
},
]
conn.executemany(
"""INSERT INTO calendar_events
(calendar_label, instance_key, uid, summary, description, location,
start_at, end_at, all_day, status, last_seen_at)
VALUES
(:calendar_label, :instance_key, :uid, :summary, :description, :location,
:start_at, :end_at, :all_day, :status, datetime('now'))""",
events,
)
conn.commit()
conn.close()
print(f"Demo-Datenbank erstellt: {DB_PATH}")
print(f"4 Demo-Events eingefuegt.")
if __name__ == "__main__":
seed()