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.
 
 

70 lines
2.2 KiB

# Taken from django-rest-framework
# https://github.com/tomchristie/django-rest-framework
# Copyright (c) 2011-2015, Tom Christie All rights reserved.
from django.conf import settings
SETTINGS_ATTR = "DYNAMIC_PREFERENCES"
USER_SETTINGS = None
DEFAULTS = {
# 'REGISTRY_MODULE': 'prefs',
# 'BASE_PREFIX': 'base',
# 'SECTIONS_PREFIX': 'sections',
# 'PREFERENCES_PREFIX': 'preferences',
# 'PERMISSIONS_PREFIX': 'permissions',
"MANAGER_ATTRIBUTE": "preferences",
"SECTION_KEY_SEPARATOR": "__",
"REGISTRY_MODULE": "dynamic_preferences_registry",
"ADMIN_ENABLE_CHANGELIST_FORM": False,
"ENABLE_GLOBAL_MODEL_AUTO_REGISTRATION": True,
"ENABLE_USER_PREFERENCES": True,
"ENABLE_CACHE": True,
"CACHE_NAME": "default",
"VALIDATE_NAMES": True,
"FILE_PREFERENCE_UPLOAD_DIR": "dynamic_preferences",
# this will be used to cache empty values, since some cache backends
# does not support it on get_many
"CACHE_NONE_VALUE": "__dynamic_preferences_empty_value",
}
class PreferenceSettings(object):
"""
A settings object, that allows API settings to be accessed as properties.
For example:
from rest_framework.settings import api_settings
print(api_settings.DEFAULT_RENDERER_CLASSES)
Any setting with string import paths will be automatically resolved
and return the class, rather than the string literal.
"""
def __init__(self, defaults=None):
self.defaults = defaults or DEFAULTS
@property
def user_settings(self):
return getattr(settings, SETTINGS_ATTR, {})
def __getattr__(self, attr):
if attr not in self.defaults.keys():
raise AttributeError("Invalid preference setting: '%s'" % attr)
try:
# Check if present in user settings
val = self.user_settings[attr]
except KeyError:
# Fall back to defaults
val = self.defaults[attr]
# Cache the result
# We sometimes need to bypass that, like in tests
if getattr(settings, "CACHE_DYNAMIC_PREFERENCES_SETTINGS", True):
setattr(self, attr, val)
return val
preferences_settings = PreferenceSettings(DEFAULTS)