From b66e367520f8194d0e4506bd40a8c7e20e3e1d99 Mon Sep 17 00:00:00 2001 From: Jolyon Bloomfield Date: Fri, 5 Apr 2019 00:43:41 -0400 Subject: [PATCH 1/2] INCR-199 migrate openedx/core/djangoapps/schedules --- openedx/core/djangoapps/schedules/admin.py | 14 +++++++++----- openedx/core/djangoapps/schedules/apps.py | 3 +++ openedx/core/djangoapps/schedules/config.py | 3 ++- .../djangoapps/schedules/content_highlights.py | 5 +++-- .../schedules/management/commands/__init__.py | 1 + .../management/commands/send_course_update.py | 4 +++- .../commands/send_recurring_nudge.py | 1 + .../commands/send_upgrade_reminder.py | 1 + .../setup_models_to_send_test_emails.py | 18 +++++++++++------- .../commands/tests/send_email_base.py | 3 ++- .../commands/tests/test_send_course_update.py | 15 ++++++++------- .../tests/test_send_email_base_command.py | 5 +++-- .../tests/test_send_recurring_nudge.py | 5 +++-- .../tests/test_send_upgrade_reminder.py | 8 ++++---- .../management/commands/tests/upsell_base.py | 15 ++++++++------- .../core/djangoapps/schedules/message_types.py | 2 ++ openedx/core/djangoapps/schedules/models.py | 11 ++++++----- openedx/core/djangoapps/schedules/resolvers.py | 10 ++++++---- openedx/core/djangoapps/schedules/signals.py | 13 ++++++++----- openedx/core/djangoapps/schedules/tasks.py | 18 +++++++++--------- openedx/core/djangoapps/schedules/utils.py | 2 ++ 21 files changed, 95 insertions(+), 62 deletions(-) diff --git a/openedx/core/djangoapps/schedules/admin.py b/openedx/core/djangoapps/schedules/admin.py index dedd85aa6e..bb6e5b13e1 100644 --- a/openedx/core/djangoapps/schedules/admin.py +++ b/openedx/core/djangoapps/schedules/admin.py @@ -1,15 +1,19 @@ +from __future__ import absolute_import + import functools -from django.contrib import admin +import six from django import forms +from django.contrib import admin from django.db.models import F from django.urls import reverse from django.utils.translation import ugettext_lazy as _ +from opaque_keys.edx.keys import CourseKey + +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangolib.markup import HTML from . import models -from openedx.core.djangoapps.content.course_overviews.models import CourseOverview -from opaque_keys.edx.keys import CourseKey class ScheduleExperienceAdminInline(admin.StackedInline): @@ -92,7 +96,7 @@ class CourseIdFilter(admin.SimpleListFilter): def lookups(self, request, model_admin): return ( - (overview.id, unicode(overview.id)) for overview in CourseOverview.objects.all().order_by('id') + (overview.id, six.text_type(overview.id)) for overview in CourseOverview.objects.all().order_by('id') ) def queryset(self, request, queryset): @@ -111,7 +115,7 @@ class CourseIdFilter(admin.SimpleListFilter): for lookup, title in self.lookup_choices: yield { 'selected': self.value() == lookup, - 'value': unicode(lookup), + 'value': six.text_type(lookup), 'display': title, } diff --git a/openedx/core/djangoapps/schedules/apps.py b/openedx/core/djangoapps/schedules/apps.py index 47086ddd63..1ae8e36fd6 100644 --- a/openedx/core/djangoapps/schedules/apps.py +++ b/openedx/core/djangoapps/schedules/apps.py @@ -1,5 +1,8 @@ +from __future__ import absolute_import + from django.apps import AppConfig from django.utils.translation import ugettext_lazy as _ + from openedx.core.djangoapps.plugins.constants import PluginSignals, ProjectType diff --git a/openedx/core/djangoapps/schedules/config.py b/openedx/core/djangoapps/schedules/config.py index 5090e9f7c5..ae110465d8 100644 --- a/openedx/core/djangoapps/schedules/config.py +++ b/openedx/core/djangoapps/schedules/config.py @@ -1,8 +1,9 @@ """ Contains configuration for schedules app """ -from openedx.core.djangoapps.waffle_utils import WaffleFlagNamespace, CourseWaffleFlag, WaffleFlag +from __future__ import absolute_import +from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag, WaffleFlag, WaffleFlagNamespace WAFFLE_FLAG_NAMESPACE = WaffleFlagNamespace(name=u'schedules') diff --git a/openedx/core/djangoapps/schedules/content_highlights.py b/openedx/core/djangoapps/schedules/content_highlights.py index 3bf296821a..1962472325 100644 --- a/openedx/core/djangoapps/schedules/content_highlights.py +++ b/openedx/core/djangoapps/schedules/content_highlights.py @@ -2,14 +2,15 @@ Contains methods for accessing weekly course highlights. Weekly highlights is a schedule experience built on the Schedules app. """ +from __future__ import absolute_import + import logging -from courseware.module_render import get_module_for_descriptor from courseware.model_data import FieldDataCache +from courseware.module_render import get_module_for_descriptor from openedx.core.djangoapps.schedules.config import COURSE_UPDATE_WAFFLE_FLAG from openedx.core.djangoapps.schedules.exceptions import CourseUpdateDoesNotExist from openedx.core.lib.request_utils import get_request_or_stub - from xmodule.modulestore.django import modulestore log = logging.getLogger(__name__) diff --git a/openedx/core/djangoapps/schedules/management/commands/__init__.py b/openedx/core/djangoapps/schedules/management/commands/__init__.py index 8614b63077..59e940bab6 100644 --- a/openedx/core/djangoapps/schedules/management/commands/__init__.py +++ b/openedx/core/djangoapps/schedules/management/commands/__init__.py @@ -2,6 +2,7 @@ Base management command for sending emails """ from __future__ import absolute_import + import datetime import pytz diff --git a/openedx/core/djangoapps/schedules/management/commands/send_course_update.py b/openedx/core/djangoapps/schedules/management/commands/send_course_update.py index 8161e05633..c55be1055b 100644 --- a/openedx/core/djangoapps/schedules/management/commands/send_course_update.py +++ b/openedx/core/djangoapps/schedules/management/commands/send_course_update.py @@ -2,9 +2,11 @@ Management command to send Schedule course updates """ from __future__ import absolute_import + +from six.moves import range + from openedx.core.djangoapps.schedules.management.commands import SendEmailBaseCommand from openedx.core.djangoapps.schedules.tasks import ScheduleCourseUpdate -from six.moves import range class Command(SendEmailBaseCommand): diff --git a/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py b/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py index e00e44aa75..e1506e7a8e 100644 --- a/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py +++ b/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py @@ -2,6 +2,7 @@ Management command to send recurring Schedule nudges """ from __future__ import absolute_import + from openedx.core.djangoapps.schedules.management.commands import SendEmailBaseCommand from openedx.core.djangoapps.schedules.tasks import ScheduleRecurringNudge diff --git a/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py b/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py index 7b0959277f..b36643cc9b 100644 --- a/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py +++ b/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py @@ -2,6 +2,7 @@ A management command to send Schedule upgrade reminders """ from __future__ import absolute_import + from openedx.core.djangoapps.schedules.management.commands import SendEmailBaseCommand from openedx.core.djangoapps.schedules.tasks import ScheduleUpgradeReminder diff --git a/openedx/core/djangoapps/schedules/management/commands/setup_models_to_send_test_emails.py b/openedx/core/djangoapps/schedules/management/commands/setup_models_to_send_test_emails.py index 0d2d7c4c58..4a1bfefab1 100644 --- a/openedx/core/djangoapps/schedules/management/commands/setup_models_to_send_test_emails.py +++ b/openedx/core/djangoapps/schedules/management/commands/setup_models_to_send_test_emails.py @@ -3,19 +3,23 @@ A managment command that can be used to set up Schedules with various configurat """ from __future__ import absolute_import -import datetime -import pytz -import factory -from django.core.management.base import BaseCommand +import datetime + +import factory +import pytz from django.contrib.sites.models import Site +from django.core.management.base import BaseCommand + +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.schedules.models import ScheduleExperience from openedx.core.djangoapps.schedules.tests.factories import ( - ScheduleFactory, ScheduleConfigFactory, ScheduleExperienceFactory + ScheduleConfigFactory, + ScheduleExperienceFactory, + ScheduleFactory ) -from xmodule.modulestore.tests.factories import CourseFactory, XMODULE_FACTORY_LOCK -from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from xmodule.modulestore.django import modulestore +from xmodule.modulestore.tests.factories import XMODULE_FACTORY_LOCK, CourseFactory class ThreeDayNudgeSchedule(ScheduleFactory): diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/send_email_base.py b/openedx/core/djangoapps/schedules/management/commands/tests/send_email_base.py index b692e056f6..406426cd1e 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/send_email_base.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/send_email_base.py @@ -2,6 +2,7 @@ Base file for testing email sending functionality """ from __future__ import absolute_import + import datetime import logging from collections import namedtuple @@ -17,6 +18,7 @@ from edx_ace.utils.date import serialize from freezegun import freeze_time from mock import Mock, patch from opaque_keys.edx.keys import CourseKey +from six.moves import range from course_modes.models import CourseMode from course_modes.tests.factories import CourseModeFactory @@ -31,7 +33,6 @@ from openedx.core.djangoapps.waffle_utils.testutils import WAFFLE_TABLES from openedx.core.djangolib.testing.utils import FilteredQueryCountMixin from student.models import CourseEnrollment from student.tests.factories import UserFactory -from six.moves import range SITE_QUERY = 1 # django_site SITE_CONFIG_QUERY = 1 # site_configuration_siteconfiguration diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_course_update.py b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_course_update.py index ddc8a4ea48..04de220568 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_course_update.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_course_update.py @@ -2,28 +2,29 @@ Tests for send_course_update management command. """ from __future__ import absolute_import -import ddt -from mock import patch, _is_started + from unittest import skipUnless +import ddt from django.conf import settings - from edx_ace.utils.date import serialize +from mock import _is_started, patch +from six.moves import range + from openedx.core.djangoapps.schedules import resolvers, tasks from openedx.core.djangoapps.schedules.config import COURSE_UPDATE_WAFFLE_FLAG from openedx.core.djangoapps.schedules.management.commands import send_course_update as nudge from openedx.core.djangoapps.schedules.management.commands.tests.send_email_base import ( - ScheduleSendEmailTestMixin, - ExperienceTest + ExperienceTest, + ScheduleSendEmailTestMixin ) from openedx.core.djangoapps.schedules.management.commands.tests.upsell_base import ScheduleUpsellTestMixin from openedx.core.djangoapps.schedules.models import ScheduleExperience -from openedx.core.djangolib.testing.utils import skip_unless_lms from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag +from openedx.core.djangolib.testing.utils import skip_unless_lms from student.tests.factories import CourseEnrollmentFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory -from six.moves import range @ddt.ddt diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_email_base_command.py b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_email_base_command.py index 780bbd6516..7092938484 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_email_base_command.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_email_base_command.py @@ -2,16 +2,17 @@ Tests for send_email_base_command """ from __future__ import absolute_import + import datetime from unittest import skipUnless import ddt import pytz from django.conf import settings -from mock import patch, DEFAULT, Mock +from mock import DEFAULT, Mock, patch from openedx.core.djangoapps.schedules.management.commands import SendEmailBaseCommand -from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory, SiteConfigurationFactory +from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory, SiteFactory from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_recurring_nudge.py b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_recurring_nudge.py index c89db7c45d..4f70cffff0 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_recurring_nudge.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_recurring_nudge.py @@ -2,6 +2,7 @@ Tests for send_recurring_nudge management command. """ from __future__ import absolute_import + from unittest import skipUnless import ddt @@ -10,12 +11,12 @@ from django.conf import settings from openedx.core.djangoapps.schedules import resolvers, tasks from openedx.core.djangoapps.schedules.management.commands import send_recurring_nudge as nudge from openedx.core.djangoapps.schedules.management.commands.tests.send_email_base import ( - ScheduleSendEmailTestMixin, ExperienceTest, + ScheduleSendEmailTestMixin ) from openedx.core.djangoapps.schedules.management.commands.tests.upsell_base import ScheduleUpsellTestMixin from openedx.core.djangoapps.schedules.models import ScheduleExperience -from openedx.core.djangolib.testing.utils import skip_unless_lms, CacheIsolationTestCase +from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms @ddt.ddt diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_upgrade_reminder.py b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_upgrade_reminder.py index 25eafc89f3..4174f67129 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/test_send_upgrade_reminder.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/test_send_upgrade_reminder.py @@ -2,6 +2,7 @@ Tests for send_upgrade_reminder management command. """ from __future__ import absolute_import + import logging from unittest import skipUnless @@ -11,19 +12,18 @@ from edx_ace import Message from edx_ace.utils.date import serialize from mock import patch from opaque_keys.edx.locator import CourseLocator +from six.moves import range from course_modes.models import CourseMode from openedx.core.djangoapps.schedules import resolvers, tasks from openedx.core.djangoapps.schedules.management.commands import send_upgrade_reminder as reminder from openedx.core.djangoapps.schedules.management.commands.tests.send_email_base import ( - ScheduleSendEmailTestMixin, ExperienceTest, + ScheduleSendEmailTestMixin ) from openedx.core.djangoapps.schedules.models import ScheduleExperience -from openedx.core.djangolib.testing.utils import skip_unless_lms, CacheIsolationTestCase +from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms from student.tests.factories import UserFactory -from six.moves import range - LOG = logging.getLogger(__name__) diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/upsell_base.py b/openedx/core/djangoapps/schedules/management/commands/tests/upsell_base.py index 3db7b19dea..c6d3359ba3 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/upsell_base.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/upsell_base.py @@ -2,15 +2,16 @@ Base file for testing schedules with upsell """ from __future__ import absolute_import -from collections import namedtuple -import datetime -import ddt -from freezegun import freeze_time -from mock import patch, PropertyMock -import itertools -from edx_ace.utils.date import serialize +import datetime +import itertools +from collections import namedtuple + +import ddt from edx_ace.message import Message +from edx_ace.utils.date import serialize +from freezegun import freeze_time +from mock import PropertyMock, patch from courseware.models import DynamicUpgradeDeadlineConfiguration diff --git a/openedx/core/djangoapps/schedules/message_types.py b/openedx/core/djangoapps/schedules/message_types.py index 029edb3d8f..8d13c52c1b 100644 --- a/openedx/core/djangoapps/schedules/message_types.py +++ b/openedx/core/djangoapps/schedules/message_types.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import logging from openedx.core.djangoapps.ace_common.message import BaseMessageType diff --git a/openedx/core/djangoapps/schedules/models.py b/openedx/core/djangoapps/schedules/models.py index 1b28c68167..80bebdb8b6 100644 --- a/openedx/core/djangoapps/schedules/models.py +++ b/openedx/core/djangoapps/schedules/models.py @@ -1,10 +1,11 @@ -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.contrib.sites.models import Site -from model_utils import Choices -from model_utils.models import TimeStampedModel +from __future__ import absolute_import from config_models.models import ConfigurationModel +from django.contrib.sites.models import Site +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from model_utils import Choices +from model_utils.models import TimeStampedModel class Schedule(TimeStampedModel): diff --git a/openedx/core/djangoapps/schedules/resolvers.py b/openedx/core/djangoapps/schedules/resolvers.py index 40575f5409..13fda21697 100644 --- a/openedx/core/djangoapps/schedules/resolvers.py +++ b/openedx/core/djangoapps/schedules/resolvers.py @@ -1,23 +1,25 @@ +from __future__ import absolute_import + import datetime -from itertools import groupby import logging +from itertools import groupby import attr from django.conf import settings from django.contrib.auth.models import User from django.contrib.staticfiles.templatetags.staticfiles import static -from django.urls import reverse from django.db.models import F, Q -from edx_ace.recipient_resolver import RecipientResolver +from django.urls import reverse from edx_ace.recipient import Recipient +from edx_ace.recipient_resolver import RecipientResolver from edx_django_utils.monitoring import function_trace, set_custom_metric from courseware.date_summary import verified_upgrade_deadline_link, verified_upgrade_link_is_valid +from openedx.core.djangoapps.ace_common.template_context import get_base_template_context from openedx.core.djangoapps.schedules.content_highlights import get_week_highlights from openedx.core.djangoapps.schedules.exceptions import CourseUpdateDoesNotExist from openedx.core.djangoapps.schedules.models import Schedule, ScheduleExperience from openedx.core.djangoapps.schedules.utils import PrefixedDebugLoggerMixin -from openedx.core.djangoapps.ace_common.template_context import get_base_template_context from openedx.core.djangoapps.site_configuration.models import SiteConfiguration from openedx.core.djangolib.translation_utils import translate_date from openedx.features.course_experience import course_home_url_name diff --git a/openedx/core/djangoapps/schedules/signals.py b/openedx/core/djangoapps/schedules/signals.py index 39be935826..8e01b9a79b 100644 --- a/openedx/core/djangoapps/schedules/signals.py +++ b/openedx/core/djangoapps/schedules/signals.py @@ -1,9 +1,13 @@ +from __future__ import absolute_import + import datetime import logging import random +import six from django.db.models.signals import post_save from django.dispatch import receiver +from edx_ace.utils import date from course_modes.models import CourseMode from courseware.models import ( @@ -11,17 +15,16 @@ from courseware.models import ( DynamicUpgradeDeadlineConfiguration, OrgDynamicUpgradeDeadlineConfiguration ) -from edx_ace.utils import date -from openedx.core.djangoapps.schedules.models import ScheduleExperience from openedx.core.djangoapps.schedules.content_highlights import course_has_highlights +from openedx.core.djangoapps.schedules.models import ScheduleExperience from openedx.core.djangoapps.theming.helpers import get_current_site from student.models import CourseEnrollment from track import segment + from .config import CREATE_SCHEDULE_WAFFLE_FLAG from .models import Schedule, ScheduleConfig from .tasks import update_course_schedules - log = logging.getLogger(__name__) @@ -64,7 +67,7 @@ def update_schedules_on_course_start_changed(sender, updated_course_overview, pr ) update_course_schedules.apply_async( kwargs=dict( - course_id=unicode(updated_course_overview.id), + course_id=six.text_type(updated_course_overview.id), new_start_date_str=date.serialize(updated_course_overview.start), new_upgrade_deadline_str=date.serialize(upgrade_deadline), ), @@ -140,7 +143,7 @@ def _should_randomly_suppress_schedule_creation( user_id=enrollment.user.id, event_name='edx.bi.schedule.suppressed', properties={ - 'course_id': unicode(enrollment.course_id), + 'course_id': six.text_type(enrollment.course_id), 'experience_type': experience_type, 'upgrade_deadline': upgrade_deadline_str, 'content_availability_date': content_availability_date.isoformat(), diff --git a/openedx/core/djangoapps/schedules/tasks.py b/openedx/core/djangoapps/schedules/tasks.py index 5782a5a5cd..c7f355213b 100644 --- a/openedx/core/djangoapps/schedules/tasks.py +++ b/openedx/core/djangoapps/schedules/tasks.py @@ -1,30 +1,30 @@ +from __future__ import absolute_import + import datetime import logging +import six from celery import task +from celery_utils.logged_task import LoggedTask +from celery_utils.persist_on_failure import LoggedPersistOnFailureTask from django.conf import settings from django.contrib.auth.models import User from django.contrib.sites.models import Site from django.core.exceptions import ValidationError - from django.db.utils import DatabaseError - -from celery_utils.logged_task import LoggedTask -from celery_utils.persist_on_failure import LoggedPersistOnFailureTask from edx_ace import ace from edx_ace.message import Message from edx_ace.utils.date import deserialize, serialize from edx_django_utils.monitoring import set_custom_metric from eventtracking import tracker from opaque_keys.edx.keys import CourseKey +from six.moves import range -from openedx.core.djangoapps.schedules import message_types +from openedx.core.djangoapps.schedules import message_types, resolvers from openedx.core.djangoapps.schedules.models import Schedule, ScheduleConfig -from openedx.core.djangoapps.schedules import resolvers from openedx.core.lib.celery.task_utils import emulate_http_request from track import segment - LOG = logging.getLogger(__name__) @@ -216,8 +216,8 @@ def _track_message_sent(site, user, msg): 'app_label': msg.app_label, 'name': msg.name, 'language': msg.language, - 'uuid': unicode(msg.uuid), - 'send_uuid': unicode(msg.send_uuid), + 'uuid': six.text_type(msg.uuid), + 'send_uuid': six.text_type(msg.send_uuid), 'nonInteraction': 1, } course_ids = msg.context.get('course_ids', []) diff --git a/openedx/core/djangoapps/schedules/utils.py b/openedx/core/djangoapps/schedules/utils.py index ee8b70725c..a04fee2d61 100644 --- a/openedx/core/djangoapps/schedules/utils.py +++ b/openedx/core/djangoapps/schedules/utils.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import logging LOG = logging.getLogger(__name__) From f2a0bd666e838035fdfac0377a48432dc48d0add Mon Sep 17 00:00:00 2001 From: Jolyon Bloomfield Date: Fri, 5 Apr 2019 12:00:04 -0400 Subject: [PATCH 2/2] Fixing quality --- openedx/core/djangoapps/schedules/tasks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openedx/core/djangoapps/schedules/tasks.py b/openedx/core/djangoapps/schedules/tasks.py index c7f355213b..e078921911 100644 --- a/openedx/core/djangoapps/schedules/tasks.py +++ b/openedx/core/djangoapps/schedules/tasks.py @@ -2,8 +2,9 @@ from __future__ import absolute_import import datetime import logging - import six +from six.moves import range + from celery import task from celery_utils.logged_task import LoggedTask from celery_utils.persist_on_failure import LoggedPersistOnFailureTask @@ -18,7 +19,6 @@ from edx_ace.utils.date import deserialize, serialize from edx_django_utils.monitoring import set_custom_metric from eventtracking import tracker from opaque_keys.edx.keys import CourseKey -from six.moves import range from openedx.core.djangoapps.schedules import message_types, resolvers from openedx.core.djangoapps.schedules.models import Schedule, ScheduleConfig