From 57dacc55a1db4bcc75baef8632bdfa4938044c6a Mon Sep 17 00:00:00 2001 From: Ali Nawaz Date: Tue, 7 Jan 2025 20:05:16 +0500 Subject: [PATCH] chore: cache retired types --- course_discovery/apps/api/utils.py | 16 +++++++++++++++- .../search_indexes/documents/course.py | 5 ++--- .../search_indexes/documents/course_run.py | 5 ++--- .../course_metadata/tests/test_algolia_models.py | 1 - 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/course_discovery/apps/api/utils.py b/course_discovery/apps/api/utils.py index 77c3c96fa3..82c1901c32 100644 --- a/course_discovery/apps/api/utils.py +++ b/course_discovery/apps/api/utils.py @@ -15,7 +15,7 @@ from course_discovery.apps.core.api_client.lms import LMSAPIClient from course_discovery.apps.core.utils import serialize_datetime from course_discovery.apps.course_metadata.choices import CourseRunRestrictionType -from course_discovery.apps.course_metadata.models import CourseRun +from course_discovery.apps.course_metadata.models import CourseRun, CourseRunType, CourseType logger = logging.getLogger(__name__) @@ -412,3 +412,17 @@ def wrapper(*args, **kwargs): return result return wrapper return inner + + +@use_request_cache("retired_run_types_cache", lambda: "retired_run_types") +def get_retired_run_type_ids(): + return list( + CourseRunType.objects.filter(slug__in=settings.RETIRED_RUN_TYPES).values_list('id', flat=True) + ) + + +@use_request_cache("retired_course_types_cache", lambda: "retired_course_types") +def get_retired_course_type_ids(): + return list( + CourseType.objects.filter(slug__in=settings.RETIRED_COURSE_TYPES).values_list('id', flat=True) + ) diff --git a/course_discovery/apps/course_metadata/search_indexes/documents/course.py b/course_discovery/apps/course_metadata/search_indexes/documents/course.py index d8e697341f..95e591924a 100644 --- a/course_discovery/apps/course_metadata/search_indexes/documents/course.py +++ b/course_discovery/apps/course_metadata/search_indexes/documents/course.py @@ -5,6 +5,7 @@ from taxonomy.choices import ProductTypes from taxonomy.utils import get_whitelisted_serialized_skills +from course_discovery.apps.api.utils import get_retired_course_type_ids from course_discovery.apps.course_metadata.models import Course, CourseRun, CourseType from course_discovery.apps.course_metadata.utils import get_product_skill_names @@ -126,9 +127,7 @@ def prepare_prerequisites(self, obj): def get_queryset(self, excluded_restriction_types=None): if excluded_restriction_types is None: excluded_restriction_types = [] - retired_type_ids = list( - CourseType.objects.filter(slug__in=settings.RETIRED_COURSE_TYPES).values_list('id', flat=True) - ) + retired_type_ids = get_retired_course_type_ids() return super().get_queryset().exclude(type_id__in=retired_type_ids).prefetch_related( Prefetch('course_runs', queryset=CourseRun.objects.exclude( diff --git a/course_discovery/apps/course_metadata/search_indexes/documents/course_run.py b/course_discovery/apps/course_metadata/search_indexes/documents/course_run.py index e9f85c4277..aecb3482e2 100644 --- a/course_discovery/apps/course_metadata/search_indexes/documents/course_run.py +++ b/course_discovery/apps/course_metadata/search_indexes/documents/course_run.py @@ -4,6 +4,7 @@ from taxonomy.choices import ProductTypes from taxonomy.utils import get_whitelisted_serialized_skills +from course_discovery.apps.api.utils import get_retired_run_type_ids from course_discovery.apps.course_metadata.choices import CourseRunStatus from course_discovery.apps.course_metadata.models import CourseRun, CourseRunType from course_discovery.apps.course_metadata.utils import get_product_skill_names @@ -148,9 +149,7 @@ def prepare_transcript_languages(self, obj): ] def get_queryset(self, excluded_restriction_types=None): # pylint: disable=unused-argument - retired_type_ids = list( - CourseRunType.objects.filter(slug__in=settings.RETIRED_RUN_TYPES).values_list('id', flat=True) - ) + retired_type_ids = get_retired_run_type_ids() return filter_visible_runs( super().get_queryset() .exclude(type_id__in=retired_type_ids) diff --git a/course_discovery/apps/course_metadata/tests/test_algolia_models.py b/course_discovery/apps/course_metadata/tests/test_algolia_models.py index e3767dd232..674b81a381 100644 --- a/course_discovery/apps/course_metadata/tests/test_algolia_models.py +++ b/course_discovery/apps/course_metadata/tests/test_algolia_models.py @@ -391,7 +391,6 @@ def test_product_external_status(self, external_status, should_index): course.additional_metadata = AdditionalMetadataFactory(product_status=external_status) assert course.should_index == should_index - @pytest.mark.foo @override_settings(RETIRED_COURSE_TYPES=['audit']) def test_retired_course_indexing(self): """