From b14edc41c0091be9043c344393825096d3af5ee4 Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Tue, 14 Feb 2023 12:51:30 +0100 Subject: [PATCH] Handling client running non-existent model --- app/internal/model_factory.py | 3 ++- app/main.py | 35 +++++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/internal/model_factory.py b/app/internal/model_factory.py index 4c8821a..cb91d11 100644 --- a/app/internal/model_factory.py +++ b/app/internal/model_factory.py @@ -34,7 +34,8 @@ def discover_models(): return models def get_model_instance(model_id): - return get_vips_models().get(model_id)() + model_class = get_vips_models().get(model_id) + return model_class() if model_class is not None else None def get_vips_model_packages(): global _packages diff --git a/app/main.py b/app/main.py index be6ad2e..7c8f073 100644 --- a/app/main.py +++ b/app/main.py @@ -1,4 +1,4 @@ -from fastapi import FastAPI +from fastapi import FastAPI, Response, status from fastapi.responses import PlainTextResponse from app.internal.model_factory import * from vipscore_common.vips_model import VIPSModel @@ -49,12 +49,17 @@ async def print_model_list(language: str) -> str: ####### Model running endpoints ####### @app.post("/models/run/", name="Run a model") -async def run_model_from_config_only(model_configuration:ModelConfiguration): - return _run_model(model_configuration.model_id, model_configuration) +async def run_model_from_config_only(model_configuration:ModelConfiguration, response:Response): + result = _run_model(model_configuration.model_id, model_configuration) + return _result_or_404(result, model_id=model_id, response=response) @app.post("/models/{model_id}/run/", name="Run a model") -async def run_model_from_config_only(model_id, model_configuration:ModelConfiguration): - return _run_model(model_id, model_configuration) +async def run_model_from_config_only(model_id, model_configuration:ModelConfiguration, response:Response): + result = _run_model(model_id, model_configuration) + return _result_or_404(result, model_id=model_id, response=response) + + + ####### Helper functions ####### @@ -66,8 +71,10 @@ def _run_model(model_id:str, model_configuration:ModelConfiguration): Return a list of Result objects """ requested_model = get_model_instance(model_id) - requested_model.set_configuration(model_configuration) - return requested_model.get_result() + if requested_model is not None: + requested_model.set_configuration(model_configuration) + return requested_model.get_result() + return None def _print_model_list(language:str): @@ -91,4 +98,16 @@ def _print_model_list_json(language:str): "modelId" : model_id, "modelName" : get_model_instance(model_id).get_model_name() }) - return model_list \ No newline at end of file + return model_list + + + +def _result_or_404(result, model_id:str, response:Response): + """ + DRY + """ + if result is not None: + return result + else: + response.status_code = status.HTTP_404_NOT_FOUND + return {"ERROR":"VIPS model with id=%s could not be found." % model_id} \ No newline at end of file -- GitLab