from sqlalchemy import Column, Integer, String, select, func
from sqlalchemy.orm import sessionmaker, declarative_base
from fastdaisy_admin import Admin, BaseView, expose
from starlette.applications import Starlette
Base = declarative_base()
engine = create_engine(
"sqlite:///example.db",
connect_args={"check_same_thread": False},
)
Session = sessionmaker(bind=engine)
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(length=16))
Base.metadata.create_all(engine) # Create tables
secret_key = "secret_key"
app = Starlette()
admin = Admin(app=app, secret_key=secret_key, engine=engine)
class ReportView(BaseView):
name = "Report Page"
icon = "fa-solid fa-chart-line"
@expose("/report", methods=["GET"])
async def report_page(self, request):
with Session(expire_on_commit=False) as session:
stmt = select(func.count(User.id))
result = session.execute(stmt)
users_count = result.scalar_one()
return await self.templates.TemplateResponse(
request,
"report.html",
context={"users_count": users_count, 'model_view':self},
)
admin.add_view(ReportView)