From e14d56aaac1ddb51b42f15447571f3c5feee301e Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 29 May 2019 18:56:46 +0200 Subject: [PATCH 2/6] factorize loader instance creation (#33563) --- hobo/multitenant/settings.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/hobo/multitenant/settings.py b/hobo/multitenant/settings.py index c138077..96c0fb1 100644 --- a/hobo/multitenant/settings.py +++ b/hobo/multitenant/settings.py @@ -37,27 +37,34 @@ class TenantSettingsWrapper(object): def clear_tenants_settings(self): self.__dict__['tenants_settings'] = {} + @property + def loaders(self): + loaders = getattr(self.default_settings, 'TENANT_SETTINGS_LOADERS', []) + for loader in loaders: + loader_class = import_class(loader) + yield loader_class() + def load_tenant_settings(self, wrapped, tenant, tenant_settings, last_time): '''Load tenant settings from loaders into tenant_settings object, only if any of the loaders say it is more recent than last update time''' - settings = self.default_settings update_time = time.time() if last_time and update_time - last_time < 3: return tenant_settings, last_time - for loader in getattr(settings, 'TENANT_SETTINGS_LOADERS', []): - loader_class = import_class(loader) - loader_instance = loader_class() - new_time = loader_instance.get_new_time(tenant) + new = False + for loader in self.loaders: + new_time = loader.get_new_time(tenant) if (not new_time and last_time) \ or (new_time and not last_time) \ or (new_time and new_time > last_time): - # something is new, call all loaders - for loader in settings.TENANT_SETTINGS_LOADERS: - loader_class = import_class(loader) - loader_instance = loader_class() - loader_instance.update_settings(tenant_settings, tenant) - return tenant_settings, update_time + new = True + break + + if new: + # something is new, call all loaders + for loader in self.loaders: + loader.update_settings(tenant_settings, tenant) + return tenant_settings, update_time return tenant_settings, last_time def get_tenant_settings(self, wrapped, tenant): -- 2.20.1