From d4cf9a53dd1d498a20f367c91bbecb9beaaee7a7 Mon Sep 17 00:00:00 2001 From: matsewe Date: Thu, 11 Jul 2024 22:00:22 +0200 Subject: [PATCH] export results to csv --- app/routers/admin.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/routers/admin.py b/app/routers/admin.py index 9f8edd3..d70ae4b 100644 --- a/app/routers/admin.py +++ b/app/routers/admin.py @@ -3,12 +3,14 @@ import numpy as np import re import requests import os -from fastapi import APIRouter, Security, Depends +from fastapi import APIRouter, Security, Depends, HTTPException, Response +from fastapi.responses import JSONResponse from sqlalchemy.orm import Session from app.database import get_db, engine, Base from app.security import get_current_user from app.crud import create_song, get_setting, set_setting, get_all_songs_and_votes +from typing import Any router = APIRouter( prefix="/admin", @@ -130,5 +132,13 @@ async def toggle_veto_mode(db: Session = Depends(get_db)) -> bool: @router.get("/results") -async def get_evaluation(db = Depends(get_db)) -> list: - return get_all_songs_and_votes(db) +async def get_evaluation(format: str = "json", db = Depends(get_db)) -> Any: + res = get_all_songs_and_votes(db) + if format == "json": + return JSONResponse(content=res) + elif format == "csv": + df = pd.json_normalize(res) + df.columns = [c.split(".")[-1] for c in df.columns] + return Response(content=df.to_csv(), media_type="application/csv", headers={'Content-Disposition': 'attachment; filename="results.csv"'}) + else: + raise HTTPException(status_code=404, detail="format must be json or csv")