diff --git a/lms/djangoapps/courseware/tests/test_comprehensive_theming.py b/lms/djangoapps/courseware/tests/test_comprehensive_theming.py index 43eb9663a4..0e3bcf6b16 100644 --- a/lms/djangoapps/courseware/tests/test_comprehensive_theming.py +++ b/lms/djangoapps/courseware/tests/test_comprehensive_theming.py @@ -8,6 +8,8 @@ from path import Path from common.djangoapps import edxmako from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme +from openedx.core.djangoapps.theming.helpers import get_themes +from openedx.core.djangoapps.theming.helpers_dirs import get_theme_dirs from openedx.core.lib.tempdir import create_symlink, delete_symlink, mkdtemp_clean @@ -20,6 +22,10 @@ class TestComprehensiveTheming(TestCase): # Clear the internal staticfiles caches, to get test isolation. staticfiles.finders.get_finder.cache_clear() + # Clear cache on get_theme methods. + get_themes.cache_clear() + get_theme_dirs.cache_clear() + @with_comprehensive_theme('red-theme') def test_red_footer(self): """ diff --git a/openedx/core/djangoapps/theming/helpers.py b/openedx/core/djangoapps/theming/helpers.py index 33f709485b..4d1df64180 100644 --- a/openedx/core/djangoapps/theming/helpers.py +++ b/openedx/core/djangoapps/theming/helpers.py @@ -23,6 +23,7 @@ from openedx.core.djangoapps.theming.helpers_dirs import ( get_themes_unchecked ) from openedx.core.lib.cache_utils import request_cached +from functools import lru_cache logger = getLogger(__name__) # pylint: disable=invalid-name @@ -255,6 +256,7 @@ def theme_exists(theme_name, themes_dir=None): return False +@lru_cache def get_themes(themes_dir=None): """ get a list of all themes known to the system. diff --git a/openedx/core/djangoapps/theming/helpers_dirs.py b/openedx/core/djangoapps/theming/helpers_dirs.py index f179998fbd..9e40749e50 100644 --- a/openedx/core/djangoapps/theming/helpers_dirs.py +++ b/openedx/core/djangoapps/theming/helpers_dirs.py @@ -7,6 +7,7 @@ as the discovery happens during the initial setup of Django settings. import os from path import Path +from functools import lru_cache def get_theme_base_dirs_from_settings(theme_base_dirs=None): @@ -49,6 +50,7 @@ def get_themes_unchecked(themes_base_dirs, project_root=None): return themes +@lru_cache def get_theme_dirs(themes_base_dir=None): """ Get all the theme dirs directly under a given base dir. diff --git a/openedx/core/djangoapps/theming/tests/test_helpers.py b/openedx/core/djangoapps/theming/tests/test_helpers.py index d9828271fd..955e723df1 100644 --- a/openedx/core/djangoapps/theming/tests/test_helpers.py +++ b/openedx/core/djangoapps/theming/tests/test_helpers.py @@ -16,6 +16,7 @@ from openedx.core.djangoapps.theming.helpers import ( get_themes, strip_site_theme_templates_path ) +from openedx.core.djangoapps.theming.helpers_dirs import get_theme_dirs from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme from openedx.core.djangolib.testing.utils import skip_unless_cms, skip_unless_lms @@ -23,6 +24,15 @@ from openedx.core.djangolib.testing.utils import skip_unless_cms, skip_unless_lm class TestHelpers(TestCase): """Test comprehensive theming helper functions.""" + def setUp(self): + """ + Clear cache on get_theme methods. + """ + super().setUp() + + get_themes.cache_clear() + get_theme_dirs.cache_clear() + def test_get_themes(self): """ Tests template paths are returned from enabled theme.