import contextlib
from sqlalchemy import Column, Integer, String, Text, create_engine, ForeignKey
from sqlalchemy.orm import declarative_base,relationship,sessionmaker
from starlette.applications import Starlette
from fastdaisy_admin.auth.models import BaseUser
from fastdaisy_admin.application import ModelView,Admin
secret_key="secret_key"
Base = declarative_base()
engine = create_engine(
"sqlite:///example.db",
connect_args={"check_same_thread": False},
)
Session = sessionmaker(bind=engine)
class User(Base, BaseUser):
__tablename__ = "users"
books = relationship("Book", back_populates="author", cascade="all, delete-orphan")
class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
title = Column(String)
description = Column(Text)
author_id = Column(Integer, ForeignKey('users.id'))
author = relationship("User", back_populates="books")
@contextlib.asynccontextmanager
async def lifespan(app):
Base.metadata.create_all(engine)
yield
app = Starlette(lifespan=lifespan)
admin = Admin(
app,
secret_key,
engine,
authentication=True,
auth_model=User
)