diff --git a/setup.cfg b/setup.cfg index 932452e..e0a817c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -38,6 +38,7 @@ install_requires = fastapi >= 0.70.0 uvicorn[standard] >= 0.18.0 watchdog >= 2.1.0 + typeguard >= 2.10.0 pymongo >= 3.0.0 dill >= 0.3.5.0 aiohttp[speedups] >= 3.8.0 diff --git a/src/great_ai/great_ai/parameters/parameter.py b/src/great_ai/great_ai/parameters/parameter.py index 5312498..40e64eb 100644 --- a/src/great_ai/great_ai/parameters/parameter.py +++ b/src/great_ai/great_ai/parameters/parameter.py @@ -1,6 +1,8 @@ from functools import wraps from typing import Any, Callable, Dict, TypeVar, cast +from typeguard import check_type + from ..exceptions import ArgumentValidationError from ..helper import get_arguments, get_function_metadata_store from ..helper.assert_function_is_not_finalised import assert_function_is_not_finalised @@ -24,14 +26,12 @@ def parameter( @wraps(func) def wrapper(*args: Any, **kwargs: Dict[str, Any]) -> Any: arguments = get_arguments(func, args, kwargs) - argument = arguments[parameter_name] + argument = arguments.get(parameter_name) expected_type = func.__annotations__.get(parameter_name) - if expected_type is not None and not isinstance(argument, expected_type): - raise ArgumentValidationError( - f"Argument {parameter_name} in {func.__name__} has the wrong type, expected: {expected_type.__name__}, got: {type(argument).__name__}" - ) + if expected_type is not None: + check_type(parameter_name, argument, expected_type) if not validator(argument): raise ArgumentValidationError(