added support of inputs parameters that are recognised by the API.

Models are now loaded in separate endpoints for the inputs to be easier to recognise
This commit is contained in:
faraphel 2025-01-09 23:12:54 +01:00
parent 900c58ffcb
commit 7bd84c8570
17 changed files with 163 additions and 128 deletions

1
source/utils/__init__.py Normal file
View file

@ -0,0 +1 @@
from . import parameters

View file

@ -0,0 +1,54 @@
import inspect
from datetime import datetime
import fastapi
# the list of types and their name that can be used by the API
types: dict[str, type] = {
"bool": bool,
"int": int,
"float": float,
"str": str,
"bytes": bytes,
"list": list,
"tuple": tuple,
"set": set,
"dict": dict,
"datetime": datetime,
"file": fastapi.UploadFile,
}
def load(parameters_definition: dict[str, dict]) -> list[inspect.Parameter]:
"""
Load a list python function parameters from their definitions.
:param parameters_definition: the definitions of the parameters
:return: the python function parameters
Examples:
>>> parameters_definition = {
... "boolean": {"type": "bool", "default": False},
... "list": {"type": "list", "default": [1, 2, 3]},
... "datetime": {"type": "datetime"},
... "file": {"type": "file"},
... }
>>> parameters = load_parameters(parameters_definition)
"""
parameters: list[inspect.Parameter] = []
for name, definition in parameters_definition.items():
# deserialize the parameter
parameter = inspect.Parameter(
name,
inspect.Parameter.POSITIONAL_OR_KEYWORD,
default=definition.get("default", inspect.Parameter.empty),
annotation=types[definition["type"]],
)
parameters.append(parameter)
# sort the parameters so that non-default arguments always end up before default ones
parameters.sort(key=lambda parameter: parameter.default is inspect.Parameter.empty, reverse=True)
return parameters