mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
816 B
40 lines
816 B
# -*- coding: utf-8 -*- |
|
# |
|
from jumpserver.const import DYNAMIC |
|
from werkzeug.local import Local, LocalProxy |
|
|
|
thread_local = Local() |
|
|
|
|
|
def _find(attr): |
|
return getattr(thread_local, attr, None) |
|
|
|
|
|
class _Settings: |
|
pass |
|
|
|
|
|
def get_dynamic_cfg_from_thread_local(): |
|
KEY = 'dynamic_config' |
|
|
|
try: |
|
cfg = getattr(thread_local, KEY) |
|
except AttributeError: |
|
cfg = _Settings() |
|
setattr(thread_local, KEY, cfg) |
|
|
|
return cfg |
|
|
|
|
|
class DynamicDefaultLocalProxy(LocalProxy): |
|
def __getattr__(self, item): |
|
try: |
|
value = super().__getattr__(item) |
|
except AttributeError: |
|
value = getattr(DYNAMIC, item)() |
|
setattr(self, item, value) |
|
|
|
return value |
|
|
|
|
|
LOCAL_DYNAMIC_SETTINGS = DynamicDefaultLocalProxy(get_dynamic_cfg_from_thread_local)
|
|
|