From 1d440d994240f25a3320c7d993968f6d855858a9 Mon Sep 17 00:00:00 2001 From: Bryann Valderrama Date: Tue, 10 Feb 2026 14:01:10 -0500 Subject: [PATCH 1/2] fix: update course settings retrieval method --- nau_openedx_extensions/edxapp_wrapper/course_module.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nau_openedx_extensions/edxapp_wrapper/course_module.py b/nau_openedx_extensions/edxapp_wrapper/course_module.py index 7e55046..ff14a82 100644 --- a/nau_openedx_extensions/edxapp_wrapper/course_module.py +++ b/nau_openedx_extensions/edxapp_wrapper/course_module.py @@ -9,11 +9,10 @@ def get_other_course_settings(course_id): """Get Other Course Settings.""" - from cms.djangoapps.models.settings.course_metadata import CourseMetadata # pylint: disable=import-error from xmodule.modulestore.django import modulestore # pylint: disable=import-error try: course = modulestore().get_course(course_id) - other_course_settings = CourseMetadata.fetch_all(course).get('other_course_settings', {}) + other_course_settings = course.other_course_settings or {} except Exception as e: # pylint: disable=broad-except other_course_settings = {} log.error(f'Error fetching other_course_settings for {e}') From bbdb3faa10e902d6a0ce14e2c6f3f0110cd5ebb7 Mon Sep 17 00:00:00 2001 From: Kevyn Suarez Date: Tue, 10 Feb 2026 15:51:43 -0500 Subject: [PATCH 2/2] fix: normalize other_course_settings for enrollment_by_domain --- .../edxapp_wrapper/course_module.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/nau_openedx_extensions/edxapp_wrapper/course_module.py b/nau_openedx_extensions/edxapp_wrapper/course_module.py index ff14a82..888a16b 100644 --- a/nau_openedx_extensions/edxapp_wrapper/course_module.py +++ b/nau_openedx_extensions/edxapp_wrapper/course_module.py @@ -1,5 +1,6 @@ """ Course block backend abstraction """ +import json import logging from opaque_keys.edx.keys import CourseKey @@ -15,7 +16,18 @@ def get_other_course_settings(course_id): other_course_settings = course.other_course_settings or {} except Exception as e: # pylint: disable=broad-except other_course_settings = {} - log.error(f'Error fetching other_course_settings for {e}') + log.error('Error fetching other_course_settings: %s', e) + + # Normalize shape for callers. + # Some callers expect `{"value": {...}}`, while modulestore returns `{...}`. + if isinstance(other_course_settings, str): + try: + other_course_settings = json.loads(other_course_settings) + except Exception: # pylint: disable=broad-except + other_course_settings = {} + + if isinstance(other_course_settings, dict) and "value" not in other_course_settings: + return {"value": other_course_settings} return other_course_settings