Spaces:
Runtime error
Runtime error
| """Create superuser script.""" | |
| import sys | |
| import os | |
| # Add project root to path | |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| import argparse | |
| import logging | |
| from passlib.context import CryptContext | |
| from app.core.database import SessionLocal | |
| from app.models.user import User | |
| from app.core.config import get_settings | |
| settings = get_settings() | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") | |
| def create_superuser(email: str, password: str, full_name: str = None): | |
| """Create a superuser account.""" | |
| db = SessionLocal() | |
| try: | |
| # Check if user exists | |
| existing = db.query(User).filter(User.email == email).first() | |
| if existing: | |
| logger.error(f"User {email} already exists") | |
| return False | |
| # Create superuser | |
| hashed_password = pwd_context.hash(password) | |
| user = User( | |
| email=email, | |
| hashed_password=hashed_password, | |
| full_name=full_name or "Admin", | |
| is_active=True, | |
| is_superuser=True, | |
| ) | |
| db.add(user) | |
| db.commit() | |
| db.refresh(user) | |
| logger.info(f"Superuser created: {email} (ID: {user.id})") | |
| return True | |
| except Exception as e: | |
| logger.error(f"Error creating superuser: {e}") | |
| db.rollback() | |
| return False | |
| finally: | |
| db.close() | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Create superuser") | |
| parser.add_argument("--email", default=settings.FIRST_SUPERUSER, help="Admin email") | |
| parser.add_argument( | |
| "--password", | |
| default=settings.FIRST_SUPERUSER_PASSWORD, | |
| help="Admin password", | |
| ) | |
| parser.add_argument("--name", help="Admin full name") | |
| args = parser.parse_args() | |
| success = create_superuser(args.email, args.password, args.name) | |
| sys.exit(0 if success else 1) | |
| if __name__ == "__main__": | |
| main() |