1- from fastapi import APIRouter , HTTPException
2- from pydantic import BaseModel
3- from typing import List , Any , Optional
41import logging
52
6- router = APIRouter ()
7- logger = logging .getLogger (__name__ )
8-
9-
10- class RowMatcher (BaseModel ):
11- columnName : str
12- operation : str
13- values : List [Any ]
3+ import pandas as pd
4+ from fastapi import APIRouter , HTTPException
145
6+ from src .service .utils .download import (
7+ DataRequestPayload ,
8+ DataResponsePayload ,
9+ apply_filters , # ← New utility function
10+ load_model_dataframe ,
11+ )
1512
16- class DataRequestPayload (BaseModel ):
17- modelId : str
18- matchAny : Optional [List [RowMatcher ]] = None
19- matchAll : Optional [List [RowMatcher ]] = None
20- matchNone : Optional [List [RowMatcher ]] = None
13+ router = APIRouter ()
14+ logger = logging .getLogger (__name__ )
2115
2216
2317@router .post ("/data/download" )
24- async def download_data (payload : DataRequestPayload ):
25- """Download model data."""
18+ async def download_data (payload : DataRequestPayload ) -> DataResponsePayload :
19+ """Download model data with filtering ."""
2620 try :
2721 logger .info (f"Received data download request for model: { payload .modelId } " )
28- # TODO: Implement
29- return {"status" : "success" , "data" : []}
22+ df = await load_model_dataframe (payload .modelId )
23+ if df .empty :
24+ return DataResponsePayload (dataCSV = "" )
25+ df = apply_filters (df , payload )
26+ csv_data = df .to_csv (index = False )
27+ return DataResponsePayload (dataCSV = csv_data )
28+ except HTTPException :
29+ raise
3030 except Exception as e :
3131 logger .error (f"Error downloading data: { str (e )} " )
32- raise HTTPException (status_code = 500 , detail = f"Error downloading data: { str (e )} " )
32+ raise HTTPException (status_code = 500 , detail = f"Error downloading data: { str (e )} " )
0 commit comments