Merge pull request #16613 from edx/mulby/remove-restrictions-on-schedule-updates
Remove restrictions on schedule updates when course start dates change
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
"""
|
||||
Signal handler for invalidating cached course overviews
|
||||
"""
|
||||
import logging
|
||||
|
||||
from django.dispatch.dispatcher import receiver
|
||||
|
||||
from .models import CourseOverview
|
||||
from openedx.core.djangoapps.signals.signals import COURSE_PACING_CHANGED, COURSE_START_DATE_CHANGED
|
||||
from xmodule.modulestore.django import SignalHandler
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@receiver(SignalHandler.course_published)
|
||||
def _listen_for_course_publish(sender, course_key, **kwargs): # pylint: disable=unused-argument
|
||||
@@ -40,6 +44,7 @@ def _check_for_course_changes(previous_course_overview, updated_course_overview)
|
||||
|
||||
def _check_for_course_date_changes(previous_course_overview, updated_course_overview):
|
||||
if previous_course_overview.start != updated_course_overview.start:
|
||||
_log_start_date_change(previous_course_overview, updated_course_overview)
|
||||
COURSE_START_DATE_CHANGED.send(
|
||||
sender=None,
|
||||
updated_course_overview=updated_course_overview,
|
||||
@@ -47,6 +52,19 @@ def _check_for_course_date_changes(previous_course_overview, updated_course_over
|
||||
)
|
||||
|
||||
|
||||
def _log_start_date_change(previous_course_overview, updated_course_overview):
|
||||
previous_start_str = 'None'
|
||||
if previous_course_overview.start is not None:
|
||||
previous_start_str = previous_course_overview.start.isoformat()
|
||||
new_start_str = 'None'
|
||||
if updated_course_overview.start is not None:
|
||||
new_start_str = updated_course_overview.start.isoformat()
|
||||
LOG.info('Course start date changed: previous={0} new={1}'.format(
|
||||
previous_start_str,
|
||||
new_start_str,
|
||||
))
|
||||
|
||||
|
||||
def _check_for_pacing_changes(previous_course_overview, updated_course_overview):
|
||||
if previous_course_overview.self_paced != updated_course_overview.self_paced:
|
||||
COURSE_PACING_CHANGED.send(
|
||||
|
||||
@@ -89,19 +89,17 @@ def update_schedules_on_course_start_changed(sender, updated_course_overview, pr
|
||||
Updates all course schedules if course hasn't started yet and
|
||||
the updated start date is still in the future.
|
||||
"""
|
||||
current_time = timezone.now()
|
||||
if previous_start_date > current_time and updated_course_overview.start > current_time:
|
||||
upgrade_deadline = _calculate_upgrade_deadline(
|
||||
updated_course_overview.id,
|
||||
content_availability_date=updated_course_overview.start,
|
||||
)
|
||||
update_course_schedules.apply_async(
|
||||
kwargs=dict(
|
||||
course_id=unicode(updated_course_overview.id),
|
||||
new_start_date_str=date.serialize(updated_course_overview.start),
|
||||
new_upgrade_deadline_str=date.serialize(upgrade_deadline),
|
||||
),
|
||||
)
|
||||
upgrade_deadline = _calculate_upgrade_deadline(
|
||||
updated_course_overview.id,
|
||||
content_availability_date=updated_course_overview.start,
|
||||
)
|
||||
update_course_schedules.apply_async(
|
||||
kwargs=dict(
|
||||
course_id=unicode(updated_course_overview.id),
|
||||
new_start_date_str=date.serialize(updated_course_overview.start),
|
||||
new_upgrade_deadline_str=date.serialize(upgrade_deadline),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def _calculate_upgrade_deadline(course_id, content_availability_date):
|
||||
|
||||
@@ -143,7 +143,7 @@ class UpdateScheduleTests(SharedModuleStoreTestCase):
|
||||
_strip_secs(expected_start) + datetime.timedelta(days=self.VERIFICATION_DEADLINE_DAYS),
|
||||
)
|
||||
|
||||
def test_updated_since_course_not_started(self, mock_get_current_site):
|
||||
def test_updated_when_course_not_started(self, mock_get_current_site):
|
||||
mock_get_current_site.return_value = self.site
|
||||
|
||||
course = _create_course_run(self_paced=True, start_day_offset=5) # course starts in future
|
||||
@@ -155,7 +155,7 @@ class UpdateScheduleTests(SharedModuleStoreTestCase):
|
||||
enrollment = CourseEnrollment.objects.get(id=enrollment.id)
|
||||
self.assert_schedule_dates(enrollment.schedule, course.start) # start set to new course start
|
||||
|
||||
def test_not_updated_since_course_already_started(self, mock_get_current_site):
|
||||
def test_updated_when_course_already_started(self, mock_get_current_site):
|
||||
mock_get_current_site.return_value = self.site
|
||||
|
||||
course = _create_course_run(self_paced=True, start_day_offset=-5) # course starts in past
|
||||
@@ -165,9 +165,9 @@ class UpdateScheduleTests(SharedModuleStoreTestCase):
|
||||
course.start = course.start + datetime.timedelta(days=3) # new course start changes to another future date
|
||||
self.store.update_item(course, ModuleStoreEnum.UserID.test)
|
||||
enrollment = CourseEnrollment.objects.get(id=enrollment.id)
|
||||
self.assert_schedule_dates(enrollment.schedule, enrollment.created) # start remains unchanged
|
||||
self.assert_schedule_dates(enrollment.schedule, course.start) # start set to new course start
|
||||
|
||||
def test_not_updated_since_new_start_in_past(self, mock_get_current_site):
|
||||
def test_updated_when_new_start_in_past(self, mock_get_current_site):
|
||||
mock_get_current_site.return_value = self.site
|
||||
|
||||
course = _create_course_run(self_paced=True, start_day_offset=5) # course starts in future
|
||||
@@ -178,7 +178,7 @@ class UpdateScheduleTests(SharedModuleStoreTestCase):
|
||||
course.start = course.start + datetime.timedelta(days=-10) # new course start changes to a past date
|
||||
self.store.update_item(course, ModuleStoreEnum.UserID.test)
|
||||
enrollment = CourseEnrollment.objects.get(id=enrollment.id)
|
||||
self.assert_schedule_dates(enrollment.schedule, previous_start) # start remains unchanged
|
||||
self.assert_schedule_dates(enrollment.schedule, course.start) # start set to new course start
|
||||
|
||||
|
||||
def _create_course_run(self_paced=True, start_day_offset=-1):
|
||||
|
||||
Reference in New Issue
Block a user