Unverified Commit 3bc05d37 by Gabe Mulley Committed by GitHub

Merge pull request #16613 from edx/mulby/remove-restrictions-on-schedule-updates

Remove restrictions on schedule updates when course start dates change
parents 29f81807 1f3085b2
"""
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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment