Created
October 25, 2018 13:31
-
-
Save pedroburon/5609608716f9c0f7df79269edbde6f89 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.conf import settings as django_settings | |
class Setting(object): | |
def __init__(self, name): | |
self.name = name | |
def __get__(self, instance, owner): | |
return self.get_value() | |
def __set__(self, instance, value): | |
raise TypeError("Cannot assign value to setting.") | |
def get_value(self): | |
raise NotImplementedError | |
class DefaultSetting(Setting): | |
def __init__(self, name, default): | |
super(DefaultSetting, self).__init__(name) | |
self.default = default | |
def get_value(self): | |
return getattr(django_settings, self.name, self.default) | |
class VaultSetting(Setting): | |
def __init__(self, name): | |
self.name = name | |
def __get__(self, instance, owner): | |
return self.get_value() | |
def __set__(self, instance, value): | |
raise TypeError("Cannot assign value to vault.") | |
def get_value(self): | |
return self.get_vault_key(self.name) | |
def get_vault_key(self, name): | |
print("go vault setting", name) | |
return name | |
class CachedVaultSetting(VaultSetting): | |
def __init__(self, name): | |
super(CachedVaultSetting, self).__init__(name) | |
self.value = None | |
def get_value(self): | |
if self.value is None: | |
self.value = self.get_vault_key(self.name) | |
return self.value | |
class AppSettings(object): | |
_instances = {} | |
def __new__(cls, *args, **kwargs): | |
if cls not in cls._instances: | |
cls._instances[cls] = super(AppSettings, cls).__new__(cls, *args, **kwargs) | |
return cls._instances[cls] | |
def __getattr__(self, name): | |
return getattr(django_settings, name) | |
class Settings(AppSettings): | |
VAULT_SETTING = CachedVaultSetting('VAULT_KEY') | |
DEFAULT_SETTING = DefaultSetting('TIMEOUT', 10) | |
settings = Settings() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment