Passed
Push — master ( 0bc911...dd3d6b )
by Mingyu
52s
created

app.context   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 29
dl 0
loc 44
rs 10
c 0
b 0
f 0
wmc 6

5 Methods

Rating   Name   Duplication   Size   Complexity  
A _ContextProperty.request_payload() 0 3 1
A _ContextLocalData.get() 0 2 1
A _ContextProperty.secret_key() 0 3 1
A _ContextLocalData.__init__() 0 4 1
A _ContextLocalData.set() 0 2 1
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