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:
parent
900c58ffcb
commit
7bd84c8570
17 changed files with 163 additions and 128 deletions
1
source/utils/__init__.py
Normal file
1
source/utils/__init__.py
Normal file
|
@ -0,0 +1 @@
|
|||
from . import parameters
|
54
source/utils/parameters.py
Normal file
54
source/utils/parameters.py
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue