0001-hobo-add-setting-loader-for-variables-28930.patch
hobo/multitenant/settings_loaders.py | ||
---|---|---|
116 | 116 |
tenant_settings.KNOWN_SERVICES = known_services |
117 | 117 | |
118 | 118 | |
119 |
class TemplateVars(FileBaseSettingsLoader): |
|
119 |
class TemplateVars(SettingsDictUpdateMixin, FileBaseSettingsLoader):
|
|
120 | 120 |
FILENAME = 'hobo.json' |
121 | 121 | |
122 | 122 |
@classmethod |
... | ... | |
166 | 166 |
tenant_settings.TEMPLATE_VARS = tenant_settings.default_settings.TEMPLATE_VARS.copy() |
167 | 167 |
else: |
168 | 168 |
tenant_settings.TEMPLATE_VARS = {} |
169 |
tenant_settings.TEMPLATE_VARS.update(variables) |
|
169 | ||
170 |
settings_dict = {} |
|
171 |
setting_prefix = 'SETTING_' |
|
172 |
for key, value in variables.items(): |
|
173 |
if key.startswith(setting_prefix): |
|
174 |
settings_dict[key[len(setting_prefix):]] = value |
|
175 |
tenant_settings.TEMPLATE_VARS[key] = value |
|
170 | 176 | |
171 | 177 |
if variables.get('default_from_email'): |
172 | 178 |
if variables.get('global_title'): |
... | ... | |
176 | 182 |
tenant_settings.DEFAULT_FROM_EMAIL = variables['default_from_email'] |
177 | 183 | |
178 | 184 |
tenant_settings.USER_PROFILE_CONFIG = hobo_json.get('profile') |
185 |
self.handle_settings(tenant_settings, settings_dict) |
|
179 | 186 | |
180 | 187 | |
181 | 188 |
class CORSSettings(FileBaseSettingsLoader): |
tests_multitenant/conftest.py | ||
---|---|---|
30 | 30 |
'hobo_test_variable': True, |
31 | 31 |
'other_variable': 'foo', |
32 | 32 |
'theme': 'publik', |
33 |
'SETTING_GLOBAL1': True, |
|
34 |
'SETTING_GLOBAL2.extend': [2, 3, 4], |
|
35 |
'SETTING_GLOBAL3.update': {"x": 1, "y": 2}, |
|
36 |
'SETTING_OVERRIDE1': False, |
|
37 |
'SETTING_OVERRIDE2.extend': [6, 7, 8], |
|
38 |
'SETTING_OVERRIDE3.update': {"a": 1, "b": 2}, |
|
33 | 39 |
}, |
34 | 40 |
'services': [ |
35 | 41 |
{'slug': 'test', |
... | ... | |
41 | 47 |
'saml-sp-metadata-url': 'http://%s/saml/metadata' % name, |
42 | 48 |
'variables': { |
43 | 49 |
'other_variable': 'bar', |
50 |
'SETTING_OVERRIDE1': True, |
|
51 |
'SETTING_OVERRIDE2.extend': [name, 7, 8], |
|
52 |
'SETTING_OVERRIDE3.update': {"a": name, "b": 2}, |
|
53 |
'SETTING_LOCAL1': False, |
|
54 |
'SETTING_LOCAL2.extend': [name, 7, 8], |
|
55 |
'SETTING_LOCAL3.update': {"a": name, "b": 2}, |
|
44 | 56 |
} |
45 | 57 |
}, |
46 | 58 |
{'slug': 'slug-with-hyphen', |
tests_multitenant/settings.py | ||
---|---|---|
73 | 73 |
'hobo.multitenant.settings_loaders.CookieNames', |
74 | 74 |
'hobo.multitenant.settings_loaders.SettingsJSON', |
75 | 75 |
) |
76 | ||
77 |
GLOBAL1 = 0 |
|
78 |
GLOBAL2 = [1, 2, 3] |
|
79 |
GLOBAL3 = {"z": 1} |
|
80 | ||
81 |
OVERRIDE1 = 0 |
|
82 |
OVERRIDE2 = [1, 2, 3] |
|
83 |
OVERRIDE3 = {"z": 1} |
tests_multitenant/test_settings.py | ||
---|---|---|
64 | 64 |
# check the setting is not defined |
65 | 65 |
with pytest.raises(AttributeError): |
66 | 66 |
django.conf.settings.TEMPLATE_VARS |
67 |
with pytest.raises(AttributeError): |
|
68 |
django.conf.settings.LOCAL1 |
|
69 |
with pytest.raises(AttributeError): |
|
70 |
django.conf.settings.LOCAL2 |
|
71 |
with pytest.raises(AttributeError): |
|
72 |
django.conf.settings.LOCAL3 |
|
67 | 73 | |
68 | 74 |
for tenant in tenants: |
69 | 75 |
with tenant_context(tenant): |
... | ... | |
74 | 80 |
assert django.conf.settings.TEMPLATE_VARS['other_url'] == 'http://other.example.net' |
75 | 81 |
assert django.conf.settings.TEMPLATE_VARS['site_title'] == 'Test' |
76 | 82 |
assert django.conf.settings.TEMPLATE_VARS['other_variable'] == 'bar' |
83 |
assert django.conf.settings.GLOBAL1 is True |
|
84 |
assert django.conf.settings.GLOBAL2 == [1, 2, 3, 2, 3, 4] |
|
85 |
assert django.conf.settings.GLOBAL3 == {'x': 1, 'y': 2, 'z': 1} |
|
86 |
assert django.conf.settings.OVERRIDE1 is True |
|
87 |
assert django.conf.settings.OVERRIDE2 == [1, 2, 3, tenant.domain_url, 7, 8] |
|
88 |
assert django.conf.settings.OVERRIDE3 == {'a': tenant.domain_url, 'b': 2, 'z': 1} |
|
89 |
assert django.conf.settings.LOCAL1 is False |
|
90 |
assert django.conf.settings.LOCAL2 == [tenant.domain_url, 7, 8] |
|
91 |
assert django.conf.settings.LOCAL3 == {'a': tenant.domain_url, 'b': 2} |
|
77 | 92 | |
78 | 93 |
# check it's no longer defined after going back to the public schema |
79 | 94 |
with pytest.raises(AttributeError): |
80 |
- |