| 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 |