Skip to content

Commit 4e6a658

Browse files
committed
fix: use course-run specific metadata
1 parent f4d8c4b commit 4e6a658

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

enterprise_access/apps/content_assignments/tasks.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from enterprise_access.tasks import LoggedTaskWithRetry
2121
from enterprise_access.utils import (
2222
get_automatic_expiration_date_and_reason,
23+
get_course_run_metadata_for_assignment,
2324
get_normalized_metadata_for_assignment,
2425
localized_utcnow
2526
)
@@ -215,16 +216,16 @@ def get_start_date(self):
215216
Checks if the start_date is matches the criteria set by `get_self_paced_normalized_start_date`
216217
for old start_dates, if so, return today's date, otherwise, return the start_date
217218
"""
218-
start_date = self.normalized_metadata.get('start_date')
219-
end_date = self.normalized_metadata.get('end_date')
220-
course_metadata = self.course_metadata
219+
course_run_metadata = get_course_run_metadata_for_assignment(self.assignment, self.course_metadata)
220+
start_date = course_run_metadata.get('start_date')
221+
end_date = course_run_metadata.get('end_date')
221222
logger.info(
222223
f"[get_start_date] Assignment UUID: {self.assignment.uuid} - start_date: {start_date}, "
223224
f"end_date: {end_date}, "
224-
f"course_metadata: {course_metadata}"
225+
f"course_run_metadata: {course_run_metadata}"
225226
)
226227
return get_human_readable_date(
227-
get_self_paced_normalized_start_date(start_date, end_date, course_metadata)
228+
get_self_paced_normalized_start_date(start_date, end_date, course_run_metadata)
228229
)
229230

230231
def get_action_required_by_timestamp(self):

enterprise_access/apps/content_assignments/tests/test_tasks.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,17 @@ def setUpTestData(cls):
232232
}
233233
cls.mock_content_metadata = {
234234
'key': TEST_COURSE_KEY,
235+
'course_runs':[
236+
{
237+
'key': TEST_COURSE_RUN_KEY,
238+
'start': '2020-01-01T12:00:00Z',
239+
'end': '2024-03-22T23:59:59Z',
240+
'enrollment_start': None,
241+
'enrollment_end': '2023-09-11T19:00:00Z',
242+
'pacing_type': 'instructor_paced',
243+
'weeks_to_complete': 8,
244+
}
245+
],
235246
'normalized_metadata': {
236247
'start_date': '2020-01-01T12:00:00Z',
237248
'end_date': '2022-01-01 12:00:00Z',

enterprise_access/utils.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,27 @@ def _days_from_now(days_from_now=0, date_format=None):
245245
if not date_format:
246246
return date
247247
return date.strftime(date_format)
248+
249+
250+
def get_course_run_metadata_for_assignment(assignment, content_metadata):
251+
"""
252+
Retrieves metadata for a specific course run associated with an assignment. If the assignment has
253+
a preferred course run, returns the metadata for that run. If the preferred run metadata is not
254+
found, returns normalized_metadata.
255+
256+
Args:
257+
assignment (dict): The assignment object.
258+
content_metadata (dict): The content metadata object.
259+
260+
Returns:
261+
dict: Course run metadata if available, otherwise normalized_metadata.
262+
"""
263+
if preferred_course_run_key := assignment.preferred_course_run_key:
264+
course_runs = content_metadata.get('course_runs', [])
265+
for course_run in course_runs:
266+
if course_run.get('key') == preferred_course_run_key:
267+
# manually applying existing key value mappings for consistent return structure
268+
course_run['start_date'] = course_run.get('start')
269+
course_run['end_date'] = course_run.get('end')
270+
return course_run
271+
return content_metadata.get('normalized_metadata', {})

0 commit comments

Comments
 (0)