Skip to content

Commit 34e127b

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

File tree

6 files changed

+1788
-33
lines changed

6 files changed

+1788
-33
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: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,39 @@
1+
import logging
2+
import uuid
3+
from datetime import datetime
4+
from typing import Any, Dict, List, Optional
5+
6+
import numpy as np
17
from fastapi import APIRouter, HTTPException
28
from pydantic import BaseModel
3-
from typing import Dict, Any
4-
import logging
9+
10+
from src.service.constants import INPUT_SUFFIX, METADATA_SUFFIX, OUTPUT_SUFFIX
11+
from src.service.data.modelmesh_parser import ModelMeshPayloadParser
12+
from src.service.data.storage import get_storage_interface
13+
from src.service.utils.upload import process_upload_request
514

615
router = APIRouter()
716
logger = logging.getLogger(__name__)
817

918

10-
class ModelInferJointPayload(BaseModel):
19+
class UploadPayload(BaseModel):
1120
model_name: str
12-
data_tag: str = None
21+
data_tag: Optional[str] = None
1322
is_ground_truth: bool = False
1423
request: Dict[str, Any]
15-
response: Dict[str, Any]
24+
response: Optional[Dict[str, Any]] = None
1625

1726

1827
@router.post("/data/upload")
19-
async def upload_data(payload: ModelInferJointPayload):
20-
"""Upload a batch of model data to TrustyAI."""
28+
async def upload(payload: UploadPayload) -> Dict[str, str]:
29+
"""Upload model data - regular or ground truth."""
2130
try:
22-
logger.info(f"Received data upload for model: {payload.model_name}")
23-
# TODO: Implement
24-
return {"status": "success", "message": "Data uploaded successfully"}
31+
logger.info(f"Received upload request for model: {payload.model_name}")
32+
result = await process_upload_request(payload)
33+
logger.info(f"Upload completed for model: {payload.model_name}")
34+
return result
35+
except HTTPException:
36+
raise
2537
except Exception as e:
26-
logger.error(f"Error uploading data: {str(e)}")
27-
raise HTTPException(status_code=500, detail=f"Error uploading data: {str(e)}")
38+
logger.error(f"Unexpected error in upload endpoint for model {payload.model_name}: {str(e)}", exc_info=True)
39+
raise HTTPException(500, f"Internal server error: {str(e)}")

0 commit comments

Comments
 (0)