Minor fixes

Signed-off-by: András Schmelczer <andras@schmelczer.dev>
This commit is contained in:
Andras Schmelczer 2022-04-10 12:59:05 +02:00
commit 709fb36701

View file

@ -1,5 +1,5 @@
from functools import wraps
from typing import Any, Callable, Dict, List, Optional, Type
from typing import Any, Callable, Dict, List
from ..exceptions import ArgumentValidationError
from ..helper import get_args
@ -9,20 +9,26 @@ from ..tracing import TracingContext
def log_argument(
argument_name: str,
*,
expected_type: Optional[Type] = None,
validator: Callable[[Any], bool] = lambda _: True,
) -> Callable[..., Any]:
def decorator(func: Callable[..., Any]) -> Callable[..., Any]:
actual_name = f"{func.__name__}:{argument_name}"
actual_name = f"arg:{func.__name__}:{argument_name}"
@wraps(func)
def wrapper(*args: List[Any], **kwargs: Dict[str, Any]) -> Any:
arguments = get_args(func, args, kwargs)
argument = arguments[argument_name]
expected_type = func.__annotations__.get(argument_name)
if (
expected_type is not None and not isinstance(argument, expected_type)
) or not validator(argument):
):
raise ArgumentValidationError(
f"Argument {argument_name} in {func.__name__} has the wrong type, expected: {expected_type.__name__}, got: {type(argument).__name__}"
)
if not validator(argument):
raise ArgumentValidationError(
f"Argument {argument_name} in {func.__name__} did not pass validation"
)