diff --git a/lms/djangoapps/certificates/api.py b/lms/djangoapps/certificates/api.py index 79befef73b277017dbe61af3cd5eb0db6836efbe..4b337d6911fb7c03fd304d3560f4389375772e8e 100644 --- a/lms/djangoapps/certificates/api.py +++ b/lms/djangoapps/certificates/api.py @@ -43,6 +43,7 @@ from lms.djangoapps.certificates.utils import ( get_certificate_url as _get_certificate_url, has_html_certificates_enabled as _has_html_certificates_enabled ) +from openedx.core.djangoapps.content.course_overviews.api import get_course_overview_or_none from openedx.core.djangoapps.content.course_overviews.models import CourseOverview log = logging.getLogger("edx.certificate") @@ -52,7 +53,7 @@ MODES = GeneratedCertificate.MODES def _format_certificate_for_user(username, cert): """ - Helper function to serialize an user certificate. + Helper function to serialize a user certificate. Arguments: username (unicode): The identifier of the user. @@ -60,7 +61,8 @@ def _format_certificate_for_user(username, cert): Returns: dict """ - try: + course_overview = get_course_overview_or_none(cert.course_id) + if cert.download_url or course_overview: return { "username": username, "course_key": cert.course_id, @@ -78,8 +80,8 @@ def _format_certificate_for_user(username, cert): else None ), } - except CourseOverview.DoesNotExist: - return None + + return None def get_certificates_for_user(username): diff --git a/lms/djangoapps/certificates/apis/v0/tests/test_views.py b/lms/djangoapps/certificates/apis/v0/tests/test_views.py index e4ca6b82e47e7033134dfdc1b65b9eafef3c0ca9..2a88b1159d945bce720b080fa459bab0b56c5705 100644 --- a/lms/djangoapps/certificates/apis/v0/tests/test_views.py +++ b/lms/djangoapps/certificates/apis/v0/tests/test_views.py @@ -318,7 +318,7 @@ class CertificatesListRestApiTest(AuthAndScopesTestMixin, SharedModuleStoreTestC assert len(resp.data) == 0 # Test student with 1 certificate - with self.assertNumQueries(10): + with self.assertNumQueries(12): resp = self.get_response( AuthType.jwt, requesting_user=self.global_staff, @@ -358,7 +358,7 @@ class CertificatesListRestApiTest(AuthAndScopesTestMixin, SharedModuleStoreTestC download_url='www.google.com', grade="0.88", ) - with self.assertNumQueries(10): + with self.assertNumQueries(12): resp = self.get_response( AuthType.jwt, requesting_user=self.global_staff, diff --git a/lms/djangoapps/certificates/utils.py b/lms/djangoapps/certificates/utils.py index 93d9d4c0ba679f4ab8dd6c0caf7c2ad19ec829de..a8b5198693c70c728ac22682f6afa90ac4793167 100644 --- a/lms/djangoapps/certificates/utils.py +++ b/lms/djangoapps/certificates/utils.py @@ -10,7 +10,7 @@ from eventtracking import tracker from opaque_keys.edx.keys import CourseKey from lms.djangoapps.certificates.models import GeneratedCertificate -from openedx.core.djangoapps.content.course_overviews.api import get_course_overview +from openedx.core.djangoapps.content.course_overviews.api import get_course_overview_or_none log = logging.getLogger(__name__) @@ -42,7 +42,7 @@ def emit_certificate_event(event_name, user, course_id, course_overview=None, ev event_name = '.'.join(['edx', 'certificate', event_name]) if not course_overview: - course_overview = get_course_overview(course_id) + course_overview = get_course_overview_or_none(course_id) context = { 'org_id': course_overview.org, @@ -67,7 +67,7 @@ def get_certificate_url(user_id=None, course_id=None, uuid=None, user_certificat """ url = '' - course_overview = _course_from_key(course_id) + course_overview = get_course_overview_or_none(_safe_course_key(course_id)) if not course_overview: return url @@ -119,13 +119,6 @@ def _certificate_download_url(user_id, course_id, user_certificate=None): return '' -def _course_from_key(course_key): - """ - Returns the course overview - """ - return get_course_overview(_safe_course_key(course_key)) - - def _safe_course_key(course_key): """ Returns the course key diff --git a/lms/djangoapps/certificates/views/support.py b/lms/djangoapps/certificates/views/support.py index 1fb39f3fe94e9f23bb563cc6b3bbd62a2bd33419..f09aaa000496fca8199a35fb968d3f58859b3177 100644 --- a/lms/djangoapps/certificates/views/support.py +++ b/lms/djangoapps/certificates/views/support.py @@ -24,7 +24,7 @@ from common.djangoapps.util.json_request import JsonResponse from lms.djangoapps.certificates.api import generate_certificate_task, get_certificates_for_user from lms.djangoapps.certificates.permissions import GENERATE_ALL_CERTIFICATES, VIEW_ALL_CERTIFICATES from lms.djangoapps.instructor_task.api import generate_certificates_for_students -from openedx.core.djangoapps.content.course_overviews.api import get_course_overview +from openedx.core.djangoapps.content.course_overviews.api import get_course_overview_or_none from openedx.core.djangoapps.content.course_overviews.models import CourseOverview log = logging.getLogger(__name__) @@ -187,9 +187,8 @@ def regenerate_certificate_for_user(request): user = params["user"] course_key = params["course_key"] - try: - get_course_overview(course_key) - except CourseOverview.DoesNotExist: + course_overview = get_course_overview_or_none(course_key) + if not course_overview: msg = _("The course {course_key} does not exist").format(course_key=course_key) return HttpResponseBadRequest(msg) diff --git a/openedx/core/djangoapps/content/course_overviews/api.py b/openedx/core/djangoapps/content/course_overviews/api.py index c04750d5e6a3958e979d911a64c0fd904c84f849..d695b8409382e86ab897f91099fb5688ed5b4bfb 100644 --- a/openedx/core/djangoapps/content/course_overviews/api.py +++ b/openedx/core/djangoapps/content/course_overviews/api.py @@ -11,13 +11,6 @@ from openedx.core.djangoapps.content.course_overviews.serializers import ( log = logging.getLogger(__name__) -def get_course_overview(course_id): - """ - Retrieve and return course overview data for the provided course id. - """ - return CourseOverview.get_from_id(course_id) - - def get_course_overview_or_none(course_id): """ Retrieve and return course overview data for the provided course id. @@ -25,7 +18,7 @@ def get_course_overview_or_none(course_id): If the course overview does not exist, return None. """ try: - return get_course_overview(course_id) + return CourseOverview.get_from_id(course_id) except CourseOverview.DoesNotExist: log.warning(f"Course overview does not exist for {course_id}") return None diff --git a/openedx/core/djangoapps/content/course_overviews/tests/test_api.py b/openedx/core/djangoapps/content/course_overviews/tests/test_api.py index 1e4fd238dea5dfd372e48af228ae917fa5772bf0..37f972f5cae19536f923821c7c0c76424e2ccc70 100644 --- a/openedx/core/djangoapps/content/course_overviews/tests/test_api.py +++ b/openedx/core/djangoapps/content/course_overviews/tests/test_api.py @@ -5,7 +5,6 @@ course_overview api tests from opaque_keys.edx.keys import CourseKey from openedx.core.djangoapps.content.course_overviews.api import ( - get_course_overview, get_course_overview_or_none, get_course_overviews ) @@ -24,14 +23,6 @@ class TestCourseOverviewsApi(ModuleStoreTestCase): for _ in range(3): CourseOverviewFactory.create() - def test_get_course_overview(self): - """ - Test for `get_course_overview` function to retrieve a single course overview. - """ - course_overview = CourseOverviewFactory.create() - retrieved_course_overview = get_course_overview(course_overview.id) - assert course_overview.id == retrieved_course_overview.id - def test_get_course_overview_or_none(self): """ Test for `test_get_course_overview_or_none` function when the overview exists.