forked from django-json-api/django-rest-framework-json-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsettings.py
58 lines (43 loc) · 1.56 KB
/
settings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""
This module provides the `json_api_settings` object that is used to access
JSON API REST framework settings, checking for user settings first, then falling back to
the defaults.
"""
from django.conf import settings
from django.core.signals import setting_changed
JSON_API_SETTINGS_PREFIX = "JSON_API_"
DEFAULTS = {
"FORMAT_FIELD_NAMES": False,
"FORMAT_TYPES": False,
"FORMAT_LINKS": False,
"PLURALIZE_TYPES": False,
"UNIFORM_EXCEPTIONS": False,
}
class JSONAPISettings(object):
"""
A settings object that allows json api settings to be access as
properties.
"""
def __init__(self, user_settings=settings, defaults=DEFAULTS):
self.defaults = defaults
self.user_settings = user_settings
def __getattr__(self, attr):
if attr not in self.defaults:
raise AttributeError("Invalid JSON API setting: '%s'" % attr)
value = getattr(
self.user_settings, JSON_API_SETTINGS_PREFIX + attr, self.defaults[attr]
)
# Cache the result
setattr(self, attr, value)
return value
json_api_settings = JSONAPISettings()
def reload_json_api_settings(*args, **kwargs):
django_setting = kwargs["setting"]
setting = django_setting.replace(JSON_API_SETTINGS_PREFIX, "")
value = kwargs["value"]
if setting in DEFAULTS.keys():
if value is not None:
setattr(json_api_settings, setting, value)
elif hasattr(json_api_settings, setting):
delattr(json_api_settings, setting)
setting_changed.connect(reload_json_api_settings)