Conditions | 6 |
Total Lines | 34 |
Code Lines | 25 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
1 | from enum import Enum |
||
16 | def validate_with_pydantic( |
||
17 | *, |
||
18 | payload_location: PayloadLocation, |
||
19 | model: Type[BaseModel], |
||
20 | json_force_load: bool = False, |
||
21 | ): |
||
22 | def decorator(fn): |
||
23 | @wraps(fn) |
||
24 | def wrapper(*args, **kwargs): |
||
25 | if payload_location == PayloadLocation.JSON: |
||
26 | if json_force_load: |
||
27 | payload = request.get_json(force=True) |
||
28 | else: |
||
29 | payload = request.json |
||
30 | else: |
||
31 | payload = request.args |
||
32 | |||
33 | if hasattr(payload, "to_dict"): |
||
34 | payload = payload.to_dict() |
||
35 | |||
36 | try: |
||
37 | instance = model(**payload) |
||
38 | except ValidationError: |
||
39 | raise |
||
40 | except: |
||
41 | instance = None |
||
42 | |||
43 | context_property.request_payload = instance |
||
44 | |||
45 | return fn(*args, **kwargs) |
||
46 | |||
47 | return wrapper |
||
48 | |||
49 | return decorator |
||
50 |