Skip to content
This repository was archived by the owner on Nov 19, 2024. It is now read-only.

Commit b44ae78

Browse files
MewsSeluj78
authored andcommitted
Decorators: Validate_params gets expected types from type hints
1 parent 3ec12cf commit b44ae78

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

flask_utils/decorators.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from functools import wraps
22
from typing import Any
3-
from typing import Dict
43
from typing import get_args
54
from typing import get_origin
5+
from typing import get_type_hints
66
from typing import Optional
77
from typing import Type
88
from typing import Union
@@ -173,7 +173,6 @@ def _check_type(value: Any, expected_type: Type, allow_empty: bool = False, curr
173173

174174

175175
def validate_params(
176-
parameters: Dict[Any, Any],
177176
allow_empty: bool = False,
178177
):
179178
"""
@@ -241,6 +240,14 @@ def example():
241240
def decorator(fn):
242241
@wraps(fn)
243242
def wrapper(*args, **kwargs):
243+
244+
# Load expected parameter types from function type hints
245+
parameters = get_type_hints(fn)
246+
247+
# Remove return value type hints
248+
if "return" in parameters.keys():
249+
del parameters["return"]
250+
244251
try:
245252
data = request.get_json()
246253
except BadRequest:
@@ -271,6 +278,13 @@ def wrapper(*args, **kwargs):
271278
if key in parameters and not _check_type(data[key], parameters[key], allow_empty):
272279
raise BadRequestError(f"Wrong type for key {key}.", f"It should be {parameters[key]}")
273280

281+
for key in parameters:
282+
if _is_optional(parameters[key]) and key not in data:
283+
kwargs[key] = None
284+
285+
else:
286+
kwargs[key] = data[key]
287+
274288
return fn(*args, **kwargs)
275289

276290
return wrapper

0 commit comments

Comments
 (0)