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:
Gabe Mulley
2017-11-17 16:17:29 -05:00
committed by GitHub
3 changed files with 34 additions and 18 deletions

View File

@@ -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(

View File

@@ -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):

View File

@@ -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):