mirror of
https://git.isriupjv.fr/ISRI/ai-server
synced 2025-04-24 01:58:12 +02:00
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
import inspect
|
|
import fastapi
|
|
|
|
|
|
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]},
|
|
... "file": {"type": "file"},
|
|
... }
|
|
>>> parameters = load_parameters(parameters_definition)
|
|
"""
|
|
|
|
parameters: list[inspect.Parameter] = []
|
|
|
|
for name, definition in parameters_definition.items():
|
|
# preprocess the type
|
|
match definition["type"]:
|
|
case "file":
|
|
# shortcut for uploading a file
|
|
definition["type"] = fastapi.UploadFile
|
|
|
|
|
|
# deserialize the parameter
|
|
parameter = inspect.Parameter(
|
|
name,
|
|
inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
|
default=definition.get("default", inspect.Parameter.empty),
|
|
annotation=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
|