Projet

Général

Profil

0001-hobo-add-setting-loader-for-variables-28930.patch

Benjamin Dauvergne, 20 décembre 2018 09:44

Télécharger (5,94 ko)

Voir les différences:

Subject: [PATCH] hobo: add setting loader for variables (#28930)

Variables must be prefixed with SETTING_, suffix .extend and .update are
supported.

Ex.: SETTING_LDAP_AUTH_SETTINGS.extend = [{...}]
 hobo/multitenant/settings_loaders.py | 12 ++++++++++--
 tests_multitenant/conftest.py        | 12 ++++++++++++
 tests_multitenant/settings.py        |  8 ++++++++
 tests_multitenant/test_settings.py   | 15 +++++++++++++++
 4 files changed, 45 insertions(+), 2 deletions(-)
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
            else:
176
                tenant_settings.TEMPLATE_VARS[key] = value
170 177

  
171 178
        if variables.get('default_from_email'):
172 179
            if variables.get('global_title'):
......
176 183
                tenant_settings.DEFAULT_FROM_EMAIL = variables['default_from_email']
177 184

  
178 185
        tenant_settings.USER_PROFILE_CONFIG = hobo_json.get('profile')
186
        self.handle_settings(tenant_settings, settings_dict)
179 187

  
180 188

  
181 189
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
-