From 9f36723ed6a26ced117bb3c0b6a7e57a0a42f370 Mon Sep 17 00:00:00 2001 From: dristysrivastava Date: Thu, 11 Apr 2024 11:25:14 +0530 Subject: [PATCH] Changes for showing pebblo server and client version on DAXA UI. Updated UTs as well --- pebblo/app/models/models.py | 16 +++++++++ pebblo/app/service/discovery_service.py | 47 ++++++++++++++++++++----- tests/app/test_daemon.py | 13 ++++--- 3 files changed, 60 insertions(+), 16 deletions(-) diff --git a/pebblo/app/models/models.py b/pebblo/app/models/models.py index 8eb001db..578fcc42 100644 --- a/pebblo/app/models/models.py +++ b/pebblo/app/models/models.py @@ -175,3 +175,19 @@ class LoaderDocs(BaseModel): class LoaderDocResponseModel(BaseModel): docs: List[LoaderDocs] = [] message: Optional[str] = None + + +class DiscoverAIApps(BaseModel): + name: str + description: Optional[str] + owner: str + instanceDetails: Optional[InstanceDetails] + framework: Optional[FrameworkInfo] + lastUsed: datetime + pebbloServerVersion: Optional[str] + pebbloClientVersion: Optional[str] + + +class DiscoverAIAppsResponseModel(BaseModel): + ai_apps_data: Union[DiscoverAIApps, None] = None + message: Optional[str] = None diff --git a/pebblo/app/service/discovery_service.py b/pebblo/app/service/discovery_service.py index 68e1a936..2fc2ae47 100644 --- a/pebblo/app/service/discovery_service.py +++ b/pebblo/app/service/discovery_service.py @@ -4,12 +4,18 @@ from datetime import datetime -from fastapi import HTTPException from pydantic import ValidationError from pebblo.app.enums.enums import CacheDir from pebblo.app.libs.logger import logger -from pebblo.app.models.models import AiApp, InstanceDetails, Metadata +from pebblo.app.libs.responses import PebbloJsonResponse +from pebblo.app.models.models import ( + AiApp, + DiscoverAIApps, + DiscoverAIAppsResponseModel, + InstanceDetails, + Metadata, +) from pebblo.app.utils.utils import ( get_pebblo_server_version, read_json_file, @@ -45,7 +51,7 @@ def _create_ai_apps_model(self, instance_details): framework=self.data.get("framework"), lastUsed=last_used, pebbloServerVersion=get_pebblo_server_version(), - pebbloClientVersion=self.data.get("pebblo_client_version", ""), + pebbloClientVersion=self.data.get("plugin_version", ""), ) return ai_apps_model @@ -145,11 +151,34 @@ def process_request(self): ) self._write_file_content_to_path(ai_apps.dict(), file_path) - logger.debug("AiApp discovery request completed successfully") - return {"message": "App Discover Request Processed Successfully"} + ai_apps_data = ai_apps.dict() + ai_apps_obj = DiscoverAIApps( + name=ai_apps_data.get("name"), + description=ai_apps_data.get("description"), + owner=ai_apps_data.get("owner"), + instanceDetails=ai_apps_data.get("instanceDetails"), + framework=ai_apps_data.get("framework"), + lastUsed=ai_apps_data.get("lastUsed"), + pebbloServerVersion=ai_apps_data.get("pebbloServerVersion"), + pebbloClientVersion=ai_apps_data.get("pebbloClientVersion"), + ) + message = "App Discover Request Processed Successfully" + logger.debug(message) + response = DiscoverAIAppsResponseModel( + ai_apps_data=ai_apps_obj, message=message + ) + return PebbloJsonResponse.build( + body=response.dict(exclude_none=True), status_code=200 + ) except ValidationError as ex: - logger.error(f"Error in process_request. Error:{ex}") - raise HTTPException(status_code=400, detail=str(ex)) + response = DiscoverAIAppsResponseModel(ai_apps_data=None, message=str(ex)) + logger.error(f"Error in Discovery API process_request. Error:{ex}") + return PebbloJsonResponse.build( + body=response.dict(exclude_none=True), status_code=400 + ) except Exception as ex: - logger.error(f"Error in process_request. Error:{ex}") - raise HTTPException(status_code=500, detail=str(ex)) + response = DiscoverAIAppsResponseModel(ai_apps_data=None, message=str(ex)) + logger.error(f"Error in Discovery API process_request. Error:{ex}") + return PebbloJsonResponse.build( + body=response.dict(exclude_none=True), status_code=500 + ) diff --git a/tests/app/test_daemon.py b/tests/app/test_daemon.py index bf95f5c9..e4d5b19c 100644 --- a/tests/app/test_daemon.py +++ b/tests/app/test_daemon.py @@ -95,7 +95,10 @@ def test_app_discover_success(mock_write_json_to_file): # Assertions assert response.status_code == 200 - assert response.json() == {"message": "App Discover Request Processed Successfully"} + assert response.json()["ai_apps_data"]["description"] == "This is a test app." + assert response.json()["ai_apps_data"]["name"] == "Test App" + assert response.json()["ai_apps_data"]["owner"] == "Test owner" + assert response.json()["message"] == "App Discover Request Processed Successfully" def test_app_discover_validation_errors(mock_write_json_to_file): @@ -110,11 +113,7 @@ def test_app_discover_validation_errors(mock_write_json_to_file): } response = client.post("/v1/app/discover", json=app) assert response.status_code == 400 - detail = response.json()["detail"] - assert ( - "name\n none is not an allowed value (type=type_error.none.not_allowed)" - in detail - ) + assert "1 validation error for AiApp" in response.json()["message"] def test_app_discover_server_error(mock_write_json_to_file): @@ -132,7 +131,7 @@ def test_app_discover_server_error(mock_write_json_to_file): # Assertions assert response.status_code == 500 - assert response.json() == {"detail": "Mocked exception"} + assert response.json() == {"message": "Mocked exception"} def test_loader_doc_success(