Skip to content
Snippets Groups Projects
main.py 2.83 KiB
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
from app.internal.model_factory import *
from vipscore_common.vips_model import VIPSModel
from vipscore_common.entities import ModelConfiguration, Result

description = """
    Python implementation of VIPSCore, to enable models written in Python.
"""


app = FastAPI(
    title = "VIPSCore-Python",
    description=description,
    contact= {
        "name": "Berit Nordskog",
        "email": "post@vips.no",
        "url": "https://nibio.no/en/employees/berit-nordskog",
    },
    license_info={
        "name": "GNU Affero General Public License v3",
        "url": "https://www.gnu.org/licenses/agpl-3.0.en.html"
    }
)


@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/models", response_class=PlainTextResponse,
         name="List all models (plain text, default language)")
async def print_model_list_default_language() -> str:
    return _print_model_list(VIPSModel.default_language)


@app.get("/models/{language}", response_class=PlainTextResponse,
         name="List all models (plain text)"
         )
async def print_model_list(language: str) -> str:
    return _print_model_list(language)



@app.get("/models/json",
         name="List all models (Json, default language)"
         )
async def print_model_list_json_default_language():
    return _print_model_list_json(VIPSModel.default_language)


@app.get("/models/json/{language}",
         name="List all models (Json)")
async def print_model_list_json(language:str):
    return _print_model_list_json(language)


@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)

@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_configuration.model_id, model_configuration)


def _run_model(model_id:str, model_configuration:ModelConfiguration):
    requested_model = get_model_instance(model_id)
    requested_model.set_configuration(model_configuration)
    return requested_model.get_result()


def _print_model_list(language:str):
    model_list = ""
    vips_models = get_vips_models()
    for model_id in vips_models:
        model_list = "%s%s %s\n" %(model_list, model_id, get_model_instance(model_id).get_model_name(language))
    return model_list

def _print_model_list_json(language:str):
    """
    Common method for the web service methods
    """
    model_list = []
    vips_models = get_vips_models()
    for model_id in vips_models:
        model_list.append({
            "modelId" : model_id, 
            "modelName" : get_model_instance(model_id).get_model_name()
        }) 
    return model_list