Total Complexity | 6 |
Total Lines | 44 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | from typing import Optional, Type |
||
2 | |||
3 | from flask import current_app, g, request |
||
4 | from pydantic import BaseModel |
||
5 | |||
6 | |||
7 | class _ContextLocalData: |
||
8 | def __init__(self, proxy_object, key_name, default): |
||
9 | self.proxy_object = proxy_object |
||
10 | self.key_name = key_name |
||
11 | self.default = default |
||
12 | |||
13 | def get(self): |
||
14 | return getattr(g, self.key_name, self.default) |
||
15 | |||
16 | def set(self, value): |
||
17 | setattr(g, self.key_name, value) |
||
18 | |||
19 | |||
20 | class _ContextProperty: |
||
21 | class ContextLocalData: |
||
22 | request_payload = _ContextLocalData( |
||
23 | request, |
||
24 | 'request_payload', |
||
25 | None |
||
26 | ) |
||
27 | |||
28 | @property |
||
29 | def secret_key(self) -> str: |
||
30 | return current_app.secret_key |
||
31 | |||
32 | # - request payload - |
||
33 | |||
34 | @property |
||
35 | def request_payload(self) -> Optional[BaseModel]: |
||
36 | return self.ContextLocalData.request_payload.get() |
||
37 | |||
38 | @request_payload.setter |
||
39 | def request_payload(self, value: Type[BaseModel]): |
||
40 | self.ContextLocalData.request_payload.set(value) |
||
41 | |||
42 | |||
43 | context_property = _ContextProperty() |
||
44 |