From c19eaef07513ced0c75a6cc9cd8e9714b92f1932 Mon Sep 17 00:00:00 2001 From: Troy Sankey Date: Wed, 1 Nov 2017 15:43:55 -0400 Subject: [PATCH] Move settings validation out of startup.py This also creates a new app common_initialization in order to provide a place to run initialization code common to both the LMS and CMS. --- cms/envs/common.py | 3 ++ cms/startup.py | 4 -- .../startup_configurations/validate_config.py | 42 ---------------- lms/envs/common.py | 5 +- lms/startup.py | 5 -- .../common_initialization}/__init__.py | 0 .../djangoapps/common_initialization/apps.py | 14 ++++++ .../common_initialization/checks.py | 49 +++++++++++++++++++ 8 files changed, 70 insertions(+), 52 deletions(-) delete mode 100644 common/djangoapps/startup_configurations/validate_config.py rename {common/djangoapps/startup_configurations => openedx/core/djangoapps/common_initialization}/__init__.py (100%) create mode 100644 openedx/core/djangoapps/common_initialization/apps.py create mode 100644 openedx/core/djangoapps/common_initialization/checks.py diff --git a/cms/envs/common.py b/cms/envs/common.py index 0e3caa4979..6db12dcad1 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -925,6 +925,9 @@ INSTALLED_APPS = [ 'djcelery', 'method_override', + # Common Initialization + 'openedx.core.djangoapps.common_initialization.apps.CommonInitializationConfig', + # Common views 'openedx.core.djangoapps.common_views', diff --git a/cms/startup.py b/cms/startup.py index f49a2aed65..d7eac4c51d 100644 --- a/cms/startup.py +++ b/cms/startup.py @@ -15,7 +15,6 @@ from openedx.core.lib.django_startup import autostartup settings.INSTALLED_APPS # pylint: disable=pointless-statement from openedx.core.lib.xblock_utils import xblock_local_resource_url -from startup_configurations.validate_config import validate_cms_config def run(): @@ -40,9 +39,6 @@ def run(): xmodule.x_module.descriptor_global_handler_url = cms.lib.xblock.runtime.handler_url xmodule.x_module.descriptor_global_local_resource_url = xblock_local_resource_url - # validate configurations on startup - validate_cms_config(settings) - def add_mimetypes(): """ diff --git a/common/djangoapps/startup_configurations/validate_config.py b/common/djangoapps/startup_configurations/validate_config.py deleted file mode 100644 index fe3aebd957..0000000000 --- a/common/djangoapps/startup_configurations/validate_config.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Common Functions to Validate Configurations -""" - - -def validate_lms_config(settings): - """ - Validates configurations for lms and raise ValueError if not valid - """ - validate_common_config(settings) - - # validate feature based configurations - validate_marketing_site_config(settings) - - -def validate_cms_config(settings): - """ - Validates configurations for lms and raise ValueError if not valid - """ - validate_common_config(settings) - - # validate feature based configurations - validate_marketing_site_config(settings) - - -def validate_common_config(settings): - """ - Validates configurations common for all apps - """ - if not getattr(settings, 'LMS_ROOT_URL', None): - raise ValueError("'LMS_ROOT_URL' is not defined.") - - -def validate_marketing_site_config(settings): - """ - Validates 'marketing site' related configurations - """ - if settings.FEATURES.get('ENABLE_MKTG_SITE'): - if not hasattr(settings, 'MKTG_URLS'): - raise ValueError("'ENABLE_MKTG_SITE' is True, but 'MKTG_URLS' is not defined.") - if not settings.MKTG_URLS.get('ROOT'): - raise ValueError("There is no 'ROOT' defined in 'MKTG_URLS'.") diff --git a/lms/envs/common.py b/lms/envs/common.py index 378680e1f6..824435cbb4 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2034,7 +2034,10 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'djcelery', - # Initialization + # Common Initialization + 'openedx.core.djangoapps.common_initialization.apps.CommonInitializationConfig', + + # LMS-specific Initialization 'lms_initialization.apps.LMSInitializationConfig', # Common views diff --git a/lms/startup.py b/lms/startup.py index 86599cd58e..96bf6e9122 100644 --- a/lms/startup.py +++ b/lms/startup.py @@ -18,8 +18,6 @@ from openedx.core.djangoapps.monkey_patch import django_db_models_options import xmodule.x_module import lms_xblock.runtime -from startup_configurations.validate_config import validate_lms_config - log = logging.getLogger(__name__) @@ -45,9 +43,6 @@ def run(): xmodule.x_module.descriptor_global_handler_url = lms_xblock.runtime.handler_url xmodule.x_module.descriptor_global_local_resource_url = lms_xblock.runtime.local_resource_url - # validate configurations on startup - validate_lms_config(settings) - def add_mimetypes(): """ diff --git a/common/djangoapps/startup_configurations/__init__.py b/openedx/core/djangoapps/common_initialization/__init__.py similarity index 100% rename from common/djangoapps/startup_configurations/__init__.py rename to openedx/core/djangoapps/common_initialization/__init__.py diff --git a/openedx/core/djangoapps/common_initialization/apps.py b/openedx/core/djangoapps/common_initialization/apps.py new file mode 100644 index 0000000000..5749a91b88 --- /dev/null +++ b/openedx/core/djangoapps/common_initialization/apps.py @@ -0,0 +1,14 @@ +""" +Common initialization app for the LMS and CMS +""" + +from django.apps import AppConfig + + +class CommonInitializationConfig(AppConfig): + name = 'openedx.core.djangoapps.common_initialization' + verbose_name = 'Common Initialization' + + def ready(self): + # Common settings validations for the LMS and CMS. + from . import checks diff --git a/openedx/core/djangoapps/common_initialization/checks.py b/openedx/core/djangoapps/common_initialization/checks.py new file mode 100644 index 0000000000..dacb0358d7 --- /dev/null +++ b/openedx/core/djangoapps/common_initialization/checks.py @@ -0,0 +1,49 @@ +""" +Common settings validations for the LMS and CMS. + +Only populate this module with general settings validators which do not fit in +other, more specific djangoapps. Usually, settings which are widely used +across the entire LMS or CMS can be validated here. +""" +from django.conf import settings +from django.core.checks import Error, Tags, register + + +@register(Tags.compatibility) +def validate_lms_root_url_setting(app_configs, **kwargs): + """ + Validates the LMS_ROOT_URL setting. + """ + errors = [] + if not getattr(settings, 'LMS_ROOT_URL', None): + errors.append( + Error( + 'LMS_ROOT_URL is not defined.', + id='common.djangoapps.common_initialization.E001', + ) + ) + return errors + + +@register(Tags.compatibility) +def validate_marketing_site_setting(app_configs, **kwargs): + """ + Validates marketing site related settings. + """ + errors = [] + if settings.FEATURES.get('ENABLE_MKTG_SITE'): + if not hasattr(settings, 'MKTG_URLS'): + errors.append( + Error( + 'ENABLE_MKTG_SITE is True, but MKTG_URLS is not defined.', + id='common.djangoapps.common_initialization.E002', + ) + ) + if not settings.MKTG_URLS.get('ROOT'): + errors.append( + Error( + 'There is no ROOT defined in MKTG_URLS.', + id='common.djangoapps.common_initialization.E003', + ) + ) + return errors