Skip to content

Commit eceaa34

Browse files
committed
🚧 working on the /data/download and /data/upload endpoints
1 parent 0a57e99 commit eceaa34

File tree

6 files changed

+1803
-21
lines changed

6 files changed

+1803
-21
lines changed
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
from fastapi import APIRouter, HTTPException
2-
from pydantic import BaseModel
3-
from typing import List, Any, Optional
41
import 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)}")

src/endpoints/data/data_upload.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,42 @@ async def upload_data(payload: ModelInferJointPayload):
2525
except Exception as e:
2626
logger.error(f"Error uploading data: {str(e)}")
2727
raise HTTPException(status_code=500, detail=f"Error uploading data: {str(e)}")
28+
import logging
29+
import uuid
30+
from datetime import datetime
31+
from typing import Any, Dict, List, Optional
32+
33+
import numpy as np
34+
from fastapi import APIRouter, HTTPException
35+
from pydantic import BaseModel
36+
37+
from src.service.constants import INPUT_SUFFIX, METADATA_SUFFIX, OUTPUT_SUFFIX
38+
from src.service.data.modelmesh_parser import ModelMeshPayloadParser
39+
from src.service.data.storage import get_storage_interface
40+
from src.service.utils.upload import process_upload_request
41+
42+
router = APIRouter()
43+
logger = logging.getLogger(__name__)
44+
45+
46+
class UploadPayload(BaseModel):
47+
model_name: str
48+
data_tag: Optional[str] = None
49+
is_ground_truth: bool = False
50+
request: Dict[str, Any]
51+
response: Optional[Dict[str, Any]] = None
52+
53+
54+
@router.post("/data/upload")
55+
async def upload(payload: UploadPayload) -> Dict[str, str]:
56+
"""Upload model data - regular or ground truth."""
57+
try:
58+
logger.info(f"Received upload request for model: {payload.model_name}")
59+
result = await process_upload_request(payload)
60+
logger.info(f"Upload completed for model: {payload.model_name}")
61+
return result
62+
except HTTPException:
63+
raise
64+
except Exception as e:
65+
logger.error(f"Unexpected error in upload endpoint for model {payload.model_name}: {str(e)}", exc_info=True)
66+
raise HTTPException(500, f"Internal server error: {str(e)}")

0 commit comments

Comments
 (0)