83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
"""
|
|
Settings validations for the theming app
|
|
"""
|
|
|
|
|
|
import os
|
|
|
|
from django.conf import settings
|
|
from django.core.checks import Error, Tags, register
|
|
from edx_toggles.toggles import SettingToggle
|
|
|
|
|
|
@register(Tags.compatibility)
|
|
def check_comprehensive_theme_settings(app_configs, **kwargs): # lint-amnesty, pylint: disable=unused-argument
|
|
"""
|
|
Checks the comprehensive theming theme directory settings.
|
|
|
|
Raises compatibility Errors upon:
|
|
- COMPREHENSIVE_THEME_DIRS is not a list
|
|
- theme dir path is not a string
|
|
- theme dir path is not an absolute path
|
|
- path specified in COMPREHENSIVE_THEME_DIRS does not exist
|
|
|
|
Returns:
|
|
List of any Errors.
|
|
"""
|
|
if not SettingToggle("ENABLE_COMPREHENSIVE_THEMING", default=False).is_enabled():
|
|
# Only perform checks when comprehensive theming is enabled.
|
|
return []
|
|
|
|
errors = []
|
|
|
|
# COMPREHENSIVE_THEME_DIR is no longer supported - support has been removed.
|
|
if hasattr(settings, "COMPREHENSIVE_THEME_DIR"):
|
|
theme_dir = settings.COMPREHENSIVE_THEME_DIR
|
|
|
|
errors.append(
|
|
Error(
|
|
"COMPREHENSIVE_THEME_DIR setting has been removed in favor of COMPREHENSIVE_THEME_DIRS.",
|
|
hint='Transfer the COMPREHENSIVE_THEME_DIR value to COMPREHENSIVE_THEME_DIRS.',
|
|
obj=theme_dir,
|
|
id='openedx.core.djangoapps.theming.E001',
|
|
)
|
|
)
|
|
|
|
if hasattr(settings, "COMPREHENSIVE_THEME_DIRS"):
|
|
theme_dirs = settings.COMPREHENSIVE_THEME_DIRS
|
|
|
|
if not isinstance(theme_dirs, list):
|
|
errors.append(
|
|
Error(
|
|
"COMPREHENSIVE_THEME_DIRS must be a list.",
|
|
obj=theme_dirs,
|
|
id='openedx.core.djangoapps.theming.E004',
|
|
)
|
|
)
|
|
if not all(isinstance(theme_dir, str) for theme_dir in theme_dirs):
|
|
errors.append(
|
|
Error(
|
|
"COMPREHENSIVE_THEME_DIRS must contain only strings.",
|
|
obj=theme_dirs,
|
|
id='openedx.core.djangoapps.theming.E005',
|
|
)
|
|
)
|
|
if not all(theme_dir.startswith("/") for theme_dir in theme_dirs):
|
|
errors.append(
|
|
Error(
|
|
"COMPREHENSIVE_THEME_DIRS must contain only absolute paths to themes dirs.",
|
|
obj=theme_dirs,
|
|
id='openedx.core.djangoapps.theming.E006',
|
|
)
|
|
)
|
|
if not all(os.path.isdir(theme_dir) for theme_dir in theme_dirs):
|
|
errors.append(
|
|
Error(
|
|
"COMPREHENSIVE_THEME_DIRS must contain valid paths.",
|
|
obj=theme_dirs,
|
|
id='openedx.core.djangoapps.theming.E007',
|
|
)
|
|
)
|
|
|
|
return errors
|