From 50c21151b54759d297fdbef222aaa45c17f70027 Mon Sep 17 00:00:00 2001 From: Alexey Izbyshev Date: Fri, 8 Mar 2013 23:42:11 +0400 Subject: [PATCH] Fix circular dependencies in dashboard settings Importing horizon.utils from dashboard local_settings.py to generate SECRET_KEY results in a sequence of imports, and horizon.conf.default module gets imported at some point. During initialization of default HORIZON_CONFIG this module uses settings.LOGIN_REDIRECT_URL and ugettext() call. Both of them need django settings to be ready to use, therefore settings initialization starts again before it could finish. Since Python processes module only when it is imported the first time, this process stops, but the 'inner' settings object contains only parameters that were set above the point of import of local_settings. Therefore Django complains about missing SECRET_KEY when it processes 'inner' settings. The fix moves the import of horizon.conf.default to LazySetting._setup(). If keys of HORIZON_CONFIG obtained from horizon.conf are not used within openstask_dashboard settings.py or local_settings.py, the circular import won't happen. Fixes bug #1154564 Change-Id: If63ab1920ecc8e646fd5b6cc52c106ae0876fa2d --- horizon/conf/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/horizon/conf/__init__.py b/horizon/conf/__init__.py index ad5d51dad..b34b4f512 100644 --- a/horizon/conf/__init__.py +++ b/horizon/conf/__init__.py @@ -2,12 +2,11 @@ import copy from django.utils.functional import LazyObject, empty -from .default import HORIZON_CONFIG as DEFAULT_CONFIG - class LazySettings(LazyObject): def _setup(self, name=None): from django.conf import settings + from .default import HORIZON_CONFIG as DEFAULT_CONFIG HORIZON_CONFIG = copy.copy(DEFAULT_CONFIG) HORIZON_CONFIG.update(settings.HORIZON_CONFIG)