diff --git a/agr_literature_service/api/crud/dataset_crud.py b/agr_literature_service/api/crud/dataset_crud.py index be25141e2..1537686f8 100644 --- a/agr_literature_service/api/crud/dataset_crud.py +++ b/agr_literature_service/api/crud/dataset_crud.py @@ -12,13 +12,18 @@ def get_dataset(db: Session, mod_abbreviation: str, data_type: str, dataset_type: str, - version: int) -> DatasetModel: - dataset = db.query(DatasetModel).join(DatasetModel.mod).filter( + version: int = None) -> DatasetModel: + + dataset_query = db.query(DatasetModel).join(DatasetModel.mod).filter( DatasetModel.mod.has(abbreviation=mod_abbreviation), DatasetModel.data_type == data_type, - DatasetModel.dataset_type == dataset_type, - DatasetModel.version == version, - ).first() + DatasetModel.dataset_type == dataset_type + ) + if version is not None and version > 0: + dataset_query = dataset_query.filter(DatasetModel.version == version) + else: + dataset_query = dataset_query.order_by(DatasetModel.version.desc()) + dataset = dataset_query.first() if not dataset: raise HTTPException(status_code=404, detail="Dataset not found") return dataset @@ -73,7 +78,7 @@ def delete_dataset(db: Session, mod_abbreviation: str, data_type: str, dataset_t def download_dataset(db: Session, mod_abbreviation: str, data_type: str, - dataset_type: str, version: int) -> DatasetSchemaDownload: + dataset_type: str, version: int = None) -> DatasetSchemaDownload: dataset = get_dataset(db, mod_abbreviation, data_type, dataset_type, version) if not dataset: raise HTTPException(status_code=404, detail="Dataset not found") diff --git a/agr_literature_service/api/routers/dataset_router.py b/agr_literature_service/api/routers/dataset_router.py index 855991f1e..c7ab62f17 100644 --- a/agr_literature_service/api/routers/dataset_router.py +++ b/agr_literature_service/api/routers/dataset_router.py @@ -59,7 +59,9 @@ def patch_dataset(request: DatasetSchemaUpdate, mod_abbreviation: str, data_type @router.get("/download/{mod_abbreviation}/{data_type}/{dataset_type}/{version}/", response_model=DatasetSchemaDownload) -def download_dataset(mod_abbreviation: str, data_type: str, dataset_type: str, version: int, +@router.get("/download/{mod_abbreviation}/{data_type}/{dataset_type}/", + response_model=DatasetSchemaDownload) +def download_dataset(mod_abbreviation: str, data_type: str, dataset_type: str, version: int = None, db: Session = db_session): db_dataset = dataset_crud.download_dataset(db, mod_abbreviation=mod_abbreviation, data_type=data_type, dataset_type=dataset_type, version=version)