From f014f48a7b3ec28d22e8049e216996e47040ba5f Mon Sep 17 00:00:00 2001 From: Sameen Fatima <55431213+sameenfatima78@users.noreply.github.com> Date: Wed, 11 Jan 2023 11:08:01 +0500 Subject: [PATCH] fix: fix 500 error when fetching course run (#31518) --- .../user_api/learner_skill_levels/utils.py | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/openedx/core/djangoapps/user_api/learner_skill_levels/utils.py b/openedx/core/djangoapps/user_api/learner_skill_levels/utils.py index 9bdc854cfc..22f8745e08 100644 --- a/openedx/core/djangoapps/user_api/learner_skill_levels/utils.py +++ b/openedx/core/djangoapps/user_api/learner_skill_levels/utils.py @@ -1,6 +1,7 @@ """ Utilities for learner_skill_levels. """ +from logging import getLogger from urllib.parse import urlparse from lms.djangoapps.grades.models import PersistentCourseGrade # lint-amnesty, pylint: disable=unused-import @@ -15,6 +16,8 @@ from openedx.core.lib.edx_api_utils import get_api_data from .constants import LEVEL_TYPE_SCORE_MAPPING +LOGGER = getLogger(__name__) # pylint: disable=invalid-name + def get_course_run_ids(user): """ @@ -39,22 +42,25 @@ def generate_skill_score_mapping(user): for course_run_id in course_run_ids: # fetch course details from course run id to get course key course_run_data = get_course_run_data(course_run_id, ['course']) + if course_run_data: + # fetch course details to get level type and skills + course_data = get_course_data(course_run_data['course'], ['skill_names', 'level_type']) + skill_names = course_data['skill_names'] + level_type = course_data['level_type'] - # fetch course details to get level type and skills - course_data = get_course_data(course_run_data['course'], ['skill_names', 'level_type']) - skill_names = course_data['skill_names'] - level_type = course_data['level_type'] - - # if a level_type is None for a course, we should skip that course. - if level_type: - score = LEVEL_TYPE_SCORE_MAPPING[level_type.capitalize()] - for skill in skill_names: - if skill in skill_score_mapping: - # assign scores b/w 1-3 based on level type - # assign the larger score if skill is repeated in 2 courses - skill_score_mapping[skill] = max(score, skill_score_mapping[skill]) - else: - skill_score_mapping.update({skill: score}) + # if a level_type is None for a course, we should skip that course. + if level_type: + score = LEVEL_TYPE_SCORE_MAPPING[level_type.capitalize()] + for skill in skill_names: + if skill in skill_score_mapping: + # assign scores b/w 1-3 based on level type + # assign the larger score if skill is repeated in 2 courses + skill_score_mapping[skill] = max(score, skill_score_mapping[skill]) + else: + skill_score_mapping.update({skill: score}) + LOGGER.info( + "Could not find course_key for course run id [%s].", course_run_id + ) return skill_score_mapping