Spaces:
Runtime error
Runtime error
from typing import AsyncGenerator | |
from fastapi import Depends | |
from fastapi_users.db import SQLAlchemyBaseUserTableUUID, SQLAlchemyUserDatabase | |
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine | |
from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base | |
from sqlalchemy.orm import sessionmaker | |
from dotenv import load_dotenv | |
import os | |
# Get the current environment from the environment variable | |
current_environment = os.getenv("APP_ENV", "dev") | |
# Load the appropriate .env file based on the current environment | |
if current_environment == "dev": | |
load_dotenv(".env.dev") | |
elif current_environment == "test": | |
load_dotenv(".env.test") | |
elif current_environment == "prod": | |
load_dotenv(".env.prod") | |
else: | |
raise ValueError("Invalid environment specified") | |
db_connection_string = os.getenv("DB_CONNECTION_STRING") | |
DATABASE_URL = db_connection_string | |
Base: DeclarativeMeta = declarative_base() | |
class User(SQLAlchemyBaseUserTableUUID, Base): | |
pass | |
engine = create_async_engine(DATABASE_URL) | |
async_session_maker = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) | |
async def create_db_and_tables(): | |
async with engine.begin() as conn: | |
await conn.run_sync(Base.metadata.create_all) | |
async def get_async_session() -> AsyncGenerator[AsyncSession, None]: | |
async with async_session_maker() as session: | |
yield session | |
async def get_user_db(session: AsyncSession = Depends(get_async_session)): | |
yield SQLAlchemyUserDatabase(session, User) | |