Skip to content

Commit

Permalink
feat: course metadata overrides
Browse files Browse the repository at this point in the history
  • Loading branch information
muhammad-ammar committed May 24, 2023
1 parent 2549fcc commit 54fb05e
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 6 deletions.
8 changes: 6 additions & 2 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,21 @@ Unreleased
* Switch from ``edx-sphinx-theme`` to ``sphinx-book-theme`` since the former is
deprecated

[3.64.2]
--------
feat: Course metadata overrides

[3.64.1]
--------
fix: Reverted course_run_url for Executive Education courses

[3.64.0]
--------
feat: Updated course_run_url for Executive Education courses

[3.63.0]
--------
feat: Hooking enterprise enrollments up to platform signals to write unenrollment records.
feat: Hooking enterprise enrollments up to platform signals to write unenrollment records.
New field `unenrolled` on enterprise enrollments to track enrollment status, defaults to `None`.

[3.62.7]
Expand Down
2 changes: 1 addition & 1 deletion enterprise/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
Your project description goes here.
"""

__version__ = "3.64.1"
__version__ = "3.64.2"

default_app_config = "enterprise.apps.EnterpriseConfig"
54 changes: 51 additions & 3 deletions enterprise_learner_portal/api/v1/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
enterprise_learner_portal serializer
"""

from opaque_keys.edx.keys import CourseKey
from rest_framework import serializers

from django.conf import settings
from django.utils.translation import gettext as _

from enterprise.api_client.discovery import get_course_catalog_api_service_client
from enterprise.utils import NotConnectedToOpenEdX
from enterprise_learner_portal.utils import get_course_run_status

Expand Down Expand Up @@ -58,11 +61,15 @@ def to_representation(self, instance):
certificate_info,
instance
)

course_metadata_overrides = self._course_metadata_overrides(course_run_id)
representation['course_run_url'] = course_metadata_overrides.get('course_run_url') or get_course_run_url(request, course_run_id)
representation['start_date'] = course_metadata_overrides.get('start_date') or course_overview['start']
representation['end_date'] = course_metadata_overrides.get('end_date') or course_overview['end']
representation['enroll_by'] = course_metadata_overrides.get('enroll_by')

representation['created'] = instance.created.isoformat()
representation['start_date'] = course_overview['start']
representation['end_date'] = course_overview['end']
representation['display_name'] = course_overview['display_name_with_default']
representation['course_run_url'] = get_course_run_url(request, course_run_id)
representation['due_dates'] = []
representation['pacing'] = course_overview['pacing']
representation['org_name'] = course_overview['display_org_with_default']
Expand All @@ -81,3 +88,44 @@ def _get_course_overview(self, course_run_id):
return overview

return None

def _course_metadata_overrides(self, course_run_key):
"""
Override course metadata values.
"""
if not settings.COURSE_HOME_URL_OVERRIDES_FOR_EXTERNAL_COURSES:
return {}

course_run_key = 'course-v1:edX+DemoX+Demo_Course'
course_locator = CourseKey.from_string(course_run_key)
course_key_str = '{}+{}'.format(course_locator.org, course_locator.course)
course_data = get_course_catalog_api_service_client().get_course_details(course_key_str)
if not course_data:
return {}

course_type = course_data.get('course_type')
product_source = course_data.get('product_source')
product_source_slug = product_source.get('slug') if product_source else None

for override in settings.COURSE_HOME_URL_OVERRIDES_FOR_EXTERNAL_COURSES:
override_course_type = override.get('course_type')
override_product_source = override.get('product_source')

if override_course_type == course_type and override_product_source == product_source_slug:
course_run_url = override.get('course_run_url')

if override.get('uses_additional_metadata'):
additional_metadata = course_data.get('additional_metadata')
if additional_metadata:
start_date = additional_metadata.get('start_date')
end_date = additional_metadata.get('end_date')
registration_deadline = additional_metadata.get('registration_deadline')

return {
'course_run_url': course_run_url,
'start_date': start_date,
'end_date': end_date,
'enroll_by': registration_deadline,
}

return {}

0 comments on commit 54fb05e

Please sign in to comment.