Skip to content
Snippets Groups Projects

Model factory

Merged Tor-Einar Skog requested to merge model_factory into main
2 files
+ 82
32
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 81
4
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
app = FastAPI()
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)
async def print_model_list() -> str:
@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())
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
\ No newline at end of file
Loading