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.
This commit is contained in:
@@ -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',
|
||||
|
||||
|
||||
@@ -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():
|
||||
"""
|
||||
|
||||
@@ -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'.")
|
||||
@@ -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
|
||||
|
||||
@@ -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():
|
||||
"""
|
||||
|
||||
14
openedx/core/djangoapps/common_initialization/apps.py
Normal file
14
openedx/core/djangoapps/common_initialization/apps.py
Normal file
@@ -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
|
||||
49
openedx/core/djangoapps/common_initialization/checks.py
Normal file
49
openedx/core/djangoapps/common_initialization/checks.py
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user