Files
TimeTracker/scripts/seed-dev-data.py
T
Dries Peeters 0a4b29c50d feat: add development-only data seeding with inventory and finance
- Add run_seed() in app/utils/seed_dev_data.py: users, clients, projects,
  tasks, time entries, expenses, comments, warehouses, stock items,
  warehouse stock, stock movements, currencies, tax rules, invoices,
  invoice items, and payments. Only runs when FLASK_ENV=development.
- Register 'flask seed' CLI command with options (users, clients,
  projects-per-client, tasks-per-project, days-back).
- Add scripts/seed-dev-data.py and docker/seed-dev-data.sh for local
  and Docker runs. Include seed scripts in image via Dockerfile chmod.
- Document in docs/development/SEED_DEV_DATA.md; update
  DATABASE_RECOVERY.md, DOCKER_COMPOSE_SETUP.md, and development README.
2026-02-20 09:28:30 +01:00

75 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""
Development Data Seed Script
Seeds the database with test data for local development. Only runs when
FLASK_ENV=development. Creates users, clients, projects, tasks, time entries,
expenses, comments, inventory (warehouses, stock items, movements), and finance
data (currencies, tax rules, invoices, payments).
Usage (local):
Set FLASK_ENV=development, then either:
python scripts/seed-dev-data.py
flask seed
Usage (Docker):
docker compose exec app /app/docker/seed-dev-data.sh
Or pass FLASK_ENV and use flask:
docker compose exec -e FLASK_ENV=development app flask seed
See docs/development/SEED_DEV_DATA.md for full documentation.
"""
import os
import sys
# Force development environment for this script so seed is allowed
os.environ.setdefault("FLASK_ENV", "development")
# Add project root to path
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.insert(0, project_root)
os.environ.setdefault("FLASK_APP", "app")
os.chdir(project_root)
def main():
if os.getenv("FLASK_ENV") != "development":
print("FLASK_ENV must be 'development' to run the seed script.")
print("Set FLASK_ENV=development and try again.")
sys.exit(1)
try:
from app import create_app
from app.utils.seed_dev_data import run_seed
app = create_app()
with app.app_context():
counts = run_seed(
extra_users=4,
clients_count=20,
projects_per_client=4,
tasks_per_project=12,
time_entries_per_task_approx=8,
days_back=120,
expense_categories=True,
expenses_count=50,
comments_count=80,
)
print("Development seed complete:")
for key, value in counts.items():
print(f" {key}: {value}")
except RuntimeError as e:
print(f"Error: {e}")
sys.exit(1)
except Exception as e:
print(f"Seed failed: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()