Files
scripts-2/seed.py
T

70 lines
2.1 KiB
Python
Raw Normal View History

2026-10-12 19:15:50 +03:00
import os
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.core.passwords import hash_password
from app.db import SessionLocal
from app.models import OAuthClient, User
ADMIN_EMAIL = os.getenv("SEED_ADMIN_EMAIL", "admin@example.com")
ADMIN_PASSWORD = os.getenv("SEED_ADMIN_PASSWORD", "Kz8#Fj2!Lm9@Qw4$xR")
DEMO_EMAIL = os.getenv("SEED_USER_EMAIL", "user@example.com")
DEMO_PASSWORD = os.getenv("SEED_USER_PASSWORD", "DemoUser-Pass#2024")
DEMO_CLIENT_ID = "demo-client"
DEMO_CLIENT_URIS = ["https://example.com/callback"]
def upsert_user(db: Session, email: str, password: str, is_admin: bool) -> User:
user = db.scalar(select(User).where(User.email == email))
if user is None:
user = User(email=email, hashed_password=hash_password(password))
db.add(user)
user.is_admin = is_admin
user.is_active = True
db.commit()
db.refresh(user)
return user
def upsert_client(db: Session) -> OAuthClient:
client = db.scalar(
select(OAuthClient).where(OAuthClient.client_id == DEMO_CLIENT_ID)
)
if client is None:
client = OAuthClient(client_id=DEMO_CLIENT_ID, name="Demo App")
db.add(client)
client.name = "Demo App"
client.is_confidential = True
client.redirect_uris = DEMO_CLIENT_URIS
db.commit()
db.refresh(client)
return client
def main() -> None:
db = SessionLocal()
try:
admin = upsert_user(db, ADMIN_EMAIL, ADMIN_PASSWORD, is_admin=True)
demo = upsert_user(db, DEMO_EMAIL, DEMO_PASSWORD, is_admin=False)
client = upsert_client(db)
summary = [
(admin.email, admin.id),
(demo.email, demo.id),
(client.client_id, client.name),
]
finally:
db.close()
admin_email, admin_id = summary[0]
demo_email, demo_id = summary[1]
client_id, client_name = summary[2]
print("Seed complete:")
print(f" admin {admin_email} / {ADMIN_PASSWORD} (id={admin_id})")
print(f" user {demo_email} / {DEMO_PASSWORD} (id={demo_id})")
print(f" client {client_id} - {client_name}")
if __name__ == "__main__":
main()