Merge pull request #20161 from jolyonb/incr-199
INCR-199 migrate openedx/core/djangoapps/schedules
This commit is contained in:
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
@@ -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__)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
Base management command for sending emails
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
|
||||
import datetime
|
||||
|
||||
import pytz
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
import logging
|
||||
|
||||
from openedx.core.djangoapps.ace_common.message import BaseMessageType
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
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
|
||||
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
|
||||
@@ -18,13 +20,11 @@ from edx_django_utils.monitoring import set_custom_metric
|
||||
from eventtracking import tracker
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
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', [])
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
import logging
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
Reference in New Issue
Block a user