Commit c19eaef0 by Troy Sankey

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.
parent 47e3c68f
...@@ -925,6 +925,9 @@ INSTALLED_APPS = [ ...@@ -925,6 +925,9 @@ INSTALLED_APPS = [
'djcelery', 'djcelery',
'method_override', 'method_override',
# Common Initialization
'openedx.core.djangoapps.common_initialization.apps.CommonInitializationConfig',
# Common views # Common views
'openedx.core.djangoapps.common_views', 'openedx.core.djangoapps.common_views',
......
...@@ -15,7 +15,6 @@ from openedx.core.lib.django_startup import autostartup ...@@ -15,7 +15,6 @@ from openedx.core.lib.django_startup import autostartup
settings.INSTALLED_APPS # pylint: disable=pointless-statement settings.INSTALLED_APPS # pylint: disable=pointless-statement
from openedx.core.lib.xblock_utils import xblock_local_resource_url from openedx.core.lib.xblock_utils import xblock_local_resource_url
from startup_configurations.validate_config import validate_cms_config
def run(): def run():
...@@ -40,9 +39,6 @@ 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_handler_url = cms.lib.xblock.runtime.handler_url
xmodule.x_module.descriptor_global_local_resource_url = xblock_local_resource_url xmodule.x_module.descriptor_global_local_resource_url = xblock_local_resource_url
# validate configurations on startup
validate_cms_config(settings)
def add_mimetypes(): def add_mimetypes():
""" """
......
"""
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'.")
...@@ -2034,7 +2034,10 @@ INSTALLED_APPS = [ ...@@ -2034,7 +2034,10 @@ INSTALLED_APPS = [
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'djcelery', 'djcelery',
# Initialization # Common Initialization
'openedx.core.djangoapps.common_initialization.apps.CommonInitializationConfig',
# LMS-specific Initialization
'lms_initialization.apps.LMSInitializationConfig', 'lms_initialization.apps.LMSInitializationConfig',
# Common views # Common views
......
...@@ -18,8 +18,6 @@ from openedx.core.djangoapps.monkey_patch import django_db_models_options ...@@ -18,8 +18,6 @@ from openedx.core.djangoapps.monkey_patch import django_db_models_options
import xmodule.x_module import xmodule.x_module
import lms_xblock.runtime import lms_xblock.runtime
from startup_configurations.validate_config import validate_lms_config
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -45,9 +43,6 @@ def run(): ...@@ -45,9 +43,6 @@ def run():
xmodule.x_module.descriptor_global_handler_url = lms_xblock.runtime.handler_url 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 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(): def add_mimetypes():
""" """
......
"""
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
"""
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment