diff --git a/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py b/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py index 5e4dbe5a5ab79314c96006230c22cf4ec21221c8..29963f016430bb8ecb05070585f4b1cfa703a9a0 100644 --- a/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py +++ b/common/lib/xmodule/xmodule/modulestore/tests/django_utils.py @@ -8,7 +8,7 @@ import os from contextlib import contextmanager from enum import Enum -from courseware.field_overrides import OverrideFieldData # pylint: disable=import-error +from lms.djangoapps.courseware.field_overrides import OverrideFieldData # pylint: disable=import-error from courseware.tests.factories import StaffFactory from django.conf import settings from django.contrib.auth.models import AnonymousUser, User diff --git a/lms/djangoapps/ccx/overrides.py b/lms/djangoapps/ccx/overrides.py index 503a812fb2141cb0f4627ab1a3e71daf97bff6d5..01a8200425e92e4ebae3d265125eb9c1bfd5a0bd 100644 --- a/lms/djangoapps/ccx/overrides.py +++ b/lms/djangoapps/ccx/overrides.py @@ -10,7 +10,7 @@ from django.db import transaction from opaque_keys.edx.keys import CourseKey, UsageKey from openedx.core.lib.cache_utils import get_cache -from courseware.field_overrides import FieldOverrideProvider +from lms.djangoapps.courseware.field_overrides import FieldOverrideProvider from lms.djangoapps.ccx.models import CcxFieldOverride, CustomCourseForEdX log = logging.getLogger(__name__) diff --git a/lms/djangoapps/ccx/tests/test_field_override_performance.py b/lms/djangoapps/ccx/tests/test_field_override_performance.py index 3588600594c660598cd36e0c49059d8f2772e16a..672c9bc38ce4bb5236b2be51755abfbab952ede4 100644 --- a/lms/djangoapps/ccx/tests/test_field_override_performance.py +++ b/lms/djangoapps/ccx/tests/test_field_override_performance.py @@ -9,7 +9,7 @@ import ddt import mock import pytest from ccx_keys.locator import CCXLocator -from courseware.field_overrides import OverrideFieldData +from lms.djangoapps.courseware.field_overrides import OverrideFieldData from courseware.testutils import FieldOverrideTestMixin from courseware.views.views import progress from django.conf import settings diff --git a/lms/djangoapps/ccx/tests/test_overrides.py b/lms/djangoapps/ccx/tests/test_overrides.py index 1665fef9f059e1a88cd135f7761ac21b1a8ebec3..9cb3a50783cf731b80d7db030757dbd3796998ff 100644 --- a/lms/djangoapps/ccx/tests/test_overrides.py +++ b/lms/djangoapps/ccx/tests/test_overrides.py @@ -11,7 +11,7 @@ from django.test.utils import override_settings from edx_django_utils.cache import RequestCache from courseware.courses import get_course_by_id -from courseware.field_overrides import OverrideFieldData +from lms.djangoapps.courseware.field_overrides import OverrideFieldData from courseware.testutils import FieldOverrideTestMixin from lms.djangoapps.ccx.models import CustomCourseForEdX from lms.djangoapps.ccx.overrides import override_field_for_ccx diff --git a/lms/djangoapps/ccx/views.py b/lms/djangoapps/ccx/views.py index 491e133781e72e6c07b01e0f7f5fca1d178cf0f5..03e6b342b8deb0643e132936480a2bc14a44f0e1 100644 --- a/lms/djangoapps/ccx/views.py +++ b/lms/djangoapps/ccx/views.py @@ -25,7 +25,7 @@ from opaque_keys.edx.keys import CourseKey from courseware.access import has_access from courseware.courses import get_course_by_id -from courseware.field_overrides import disable_overrides +from lms.djangoapps.courseware.field_overrides import disable_overrides from django_comment_common.models import FORUM_ROLE_ADMINISTRATOR, assign_role from django_comment_common.utils import seed_permissions_roles from edxmako.shortcuts import render_to_response diff --git a/lms/djangoapps/course_blocks/api.py b/lms/djangoapps/course_blocks/api.py index a2dda446e053c99f02b765aad1aed8616a221643..3b58aac9a5d3673198cb9256080ee7c87783e49f 100644 --- a/lms/djangoapps/course_blocks/api.py +++ b/lms/djangoapps/course_blocks/api.py @@ -10,13 +10,15 @@ from openedx.core.djangoapps.content.block_structure.transformers import BlockSt from .transformers import library_content, start_date, user_partitions, visibility, load_override_data from .usage_info import CourseUsageInfo -INDIVIDUAL_STUDENT_OVERRIDE_PROVIDER = 'courseware.student_field_overrides.IndividualStudentOverrideProvider' +INDIVIDUAL_STUDENT_OVERRIDE_PROVIDER = ( + 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider' +) def has_individual_student_override_provider(): """ check if FIELD_OVERRIDE_PROVIDERS has class - `courseware.student_field_overrides.IndividualStudentOverrideProvider` + `lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider` """ return INDIVIDUAL_STUDENT_OVERRIDE_PROVIDER in getattr(settings, 'FIELD_OVERRIDE_PROVIDERS', ()) diff --git a/lms/djangoapps/course_blocks/transformers/tests/test_load_override_data.py b/lms/djangoapps/course_blocks/transformers/tests/test_load_override_data.py index e1966891e7d65053bc3b31dd69e0b8c5641f4468..0e6cb0fbd69735e5040201dc171b188755f3f8cb 100644 --- a/lms/djangoapps/course_blocks/transformers/tests/test_load_override_data.py +++ b/lms/djangoapps/course_blocks/transformers/tests/test_load_override_data.py @@ -5,7 +5,7 @@ import datetime import ddt import pytz -from courseware.student_field_overrides import get_override_for_user, override_field_for_user +from lms.djangoapps.courseware.student_field_overrides import get_override_for_user, override_field_for_user from student.tests.factories import CourseEnrollmentFactory, UserFactory from xmodule.modulestore.django import modulestore from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase diff --git a/lms/djangoapps/courseware/__init__.py b/lms/djangoapps/courseware/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..07fabffcdb367f05470fe7ab85d6085635e05ca5 100644 --- a/lms/djangoapps/courseware/__init__.py +++ b/lms/djangoapps/courseware/__init__.py @@ -0,0 +1,5 @@ +#pylint: disable=missing-docstring +import warnings + +if __name__ == 'courseware': + warnings.warn("Importing 'lms.djangoapps.courseware' as 'courseware' is no longer supported", DeprecationWarning) diff --git a/lms/djangoapps/courseware/field_overrides.py b/lms/djangoapps/courseware/field_overrides.py index ae172064d61576f4b50a144eb0e09e667afeccf0..2340f01a5ec7b8653943adc22998d48af54849b9 100644 --- a/lms/djangoapps/courseware/field_overrides.py +++ b/lms/djangoapps/courseware/field_overrides.py @@ -2,7 +2,7 @@ This module provides a :class:`~xblock.field_data.FieldData` implementation which wraps an other `FieldData` object and provides overrides based on the user. The use of providers allows for overrides that are arbitrarily -extensible. One provider is found in `courseware.student_field_overrides` +extensible. One provider is found in `lms.djangoapps.courseware.student_field_overrides` which allows for fields to be overridden for individual students. One can envision other providers being written that allow for fields to be overridden base on membership of a student in a cohort, or similar. The use of an diff --git a/lms/djangoapps/courseware/models.py b/lms/djangoapps/courseware/models.py index 8f64b80957637399c981f5c82eaf7d81ce9fff01..abeff618376ea67cec748b8fdcff2bbdacfa2fbe 100644 --- a/lms/djangoapps/courseware/models.py +++ b/lms/djangoapps/courseware/models.py @@ -357,7 +357,7 @@ class OfflineComputedGradeLog(models.Model): class StudentFieldOverride(TimeStampedModel): """ Holds the value of a specific field overriden for a student. This is used - by the code in the `courseware.student_field_overrides` module to provide + by the code in the `lms.djangoapps.courseware.student_field_overrides` module to provide overrides of xblock fields on a per user basis. """ course_id = CourseKeyField(max_length=255, db_index=True) diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py index 7ffc7a8b78c3f11b721564785ac9078515dd0eea..d5be4123b6bc5bfc08a14204b1b14a10dadf6be8 100644 --- a/lms/djangoapps/courseware/module_render.py +++ b/lms/djangoapps/courseware/module_render.py @@ -44,6 +44,7 @@ from courseware.masquerade import ( from courseware.model_data import DjangoKeyValueStore, FieldDataCache from edxmako.shortcuts import render_to_string from eventtracking import tracker +from lms.djangoapps.courseware.field_overrides import OverrideFieldData from lms.djangoapps.grades.signals.signals import SCORE_PUBLISHED from lms.djangoapps.lms_xblock.field_data import LmsFieldData from lms.djangoapps.lms_xblock.models import XBlockAsidesConfig @@ -80,7 +81,6 @@ from xmodule.modulestore.django import modulestore from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.x_module import XModuleDescriptor -from .field_overrides import OverrideFieldData log = logging.getLogger(__name__) diff --git a/lms/djangoapps/courseware/student_field_overrides.py b/lms/djangoapps/courseware/student_field_overrides.py index cd34bd9b873eb2160acc2dce8c2a50a2cd02cb5f..e00cf83107608231e96e9a5a538603ac2bb83d4f 100644 --- a/lms/djangoapps/courseware/student_field_overrides.py +++ b/lms/djangoapps/courseware/student_field_overrides.py @@ -4,8 +4,9 @@ by the individual due dates feature. """ import json +from courseware.models import StudentFieldOverride + from .field_overrides import FieldOverrideProvider -from .models import StudentFieldOverride class IndividualStudentOverrideProvider(FieldOverrideProvider): diff --git a/lms/djangoapps/courseware/tests/test_module_render.py b/lms/djangoapps/courseware/tests/test_module_render.py index 577fdb40867ad89e14d148b6c2f4c8b6586f4172..f9ca31b1acc145a26bca9119a80bd51327b35435 100644 --- a/lms/djangoapps/courseware/tests/test_module_render.py +++ b/lms/djangoapps/courseware/tests/test_module_render.py @@ -38,7 +38,7 @@ from capa.tests.response_xml_factory import OptionResponseXMLFactory from course_modes.models import CourseMode from courseware import module_render as render from courseware.courses import get_course_info_section, get_course_with_access -from courseware.field_overrides import OverrideFieldData +from lms.djangoapps.courseware.field_overrides import OverrideFieldData from courseware.masquerade import CourseMasquerade from courseware.model_data import FieldDataCache from courseware.models import StudentModule @@ -376,7 +376,7 @@ class ModuleRenderTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase): ) @override_settings(FIELD_OVERRIDE_PROVIDERS=( - 'courseware.student_field_overrides.IndividualStudentOverrideProvider', + 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider', )) def test_rebind_different_users(self): """ diff --git a/lms/djangoapps/instructor/tests/test_tools.py b/lms/djangoapps/instructor/tests/test_tools.py index 5b67c549d8153dc5d7d04fd53ea29fec82fabddf..60b23a05a40d52f1c3d8dfa2d9593561e2e424d6 100644 --- a/lms/djangoapps/instructor/tests/test_tools.py +++ b/lms/djangoapps/instructor/tests/test_tools.py @@ -16,7 +16,7 @@ from pytz import UTC from opaque_keys.edx.keys import CourseKey from six import text_type -from courseware.field_overrides import OverrideFieldData +from lms.djangoapps.courseware.field_overrides import OverrideFieldData from lms.djangoapps.ccx.tests.test_overrides import inject_field_overrides from openedx.core.lib.tests import attr from student.tests.factories import UserFactory @@ -202,7 +202,7 @@ class TestTitleOrUrl(unittest.TestCase): @attr(shard=1) @override_settings( FIELD_OVERRIDE_PROVIDERS=( - 'courseware.student_field_overrides.IndividualStudentOverrideProvider',), + 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider',), ) class TestSetDueDateExtension(ModuleStoreTestCase): """ diff --git a/lms/djangoapps/instructor/views/tools.py b/lms/djangoapps/instructor/views/tools.py index e3ce1ffe0bf6845203da2d1d13c3341814cfa8a0..e78d42c97998d5086ac4f1a8a77e2ea51a58d0bf 100644 --- a/lms/djangoapps/instructor/views/tools.py +++ b/lms/djangoapps/instructor/views/tools.py @@ -11,10 +11,14 @@ from django.utils.translation import ugettext as _ from opaque_keys.edx.keys import UsageKey from six import text_type, string_types -from student.models import get_user_by_username_or_email -from courseware.field_overrides import disable_overrides from courseware.models import StudentFieldOverride -from courseware.student_field_overrides import clear_override_for_user, get_override_for_user, override_field_for_user +from lms.djangoapps.courseware.field_overrides import disable_overrides +from lms.djangoapps.courseware.student_field_overrides import ( + clear_override_for_user, + get_override_for_user, + override_field_for_user, +) +from student.models import get_user_by_username_or_email from xmodule.fields import Date DATE_FIELD = Date() diff --git a/lms/envs/aws.py b/lms/envs/aws.py index 37f68af3e9ede8025cf749d9c214361d54c95ce5..3c8f62ab5c6fa27faacd930894406016f4c40bcd 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -463,7 +463,7 @@ if FEATURES.get('ENABLE_CORS_HEADERS') or FEATURES.get('ENABLE_CROSS_DOMAIN_CSRF # Field overrides. To use the IDDE feature, add -# 'courseware.student_field_overrides.IndividualStudentOverrideProvider'. +# 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider'. FIELD_OVERRIDE_PROVIDERS = tuple(ENV_TOKENS.get('FIELD_OVERRIDE_PROVIDERS', [])) ############################## SECURE AUTH ITEMS ############### @@ -830,7 +830,7 @@ CCX_MAX_STUDENTS_ALLOWED = ENV_TOKENS.get('CCX_MAX_STUDENTS_ALLOWED', CCX_MAX_ST ##### Individual Due Date Extensions ##### if FEATURES.get('INDIVIDUAL_DUE_DATES'): FIELD_OVERRIDE_PROVIDERS += ( - 'courseware.student_field_overrides.IndividualStudentOverrideProvider', + 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider', ) ##### Self-Paced Course Due Dates ##### diff --git a/lms/envs/common.py b/lms/envs/common.py index 8f5aab0a632686684c71371f96ade61c41d7cc7d..459a04f0c928b3b9da00811553b077c0eaa459a4 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -167,7 +167,7 @@ FEATURES = { # Enable instructor to assign individual due dates # Note: In order for this feature to work, you must also add - # 'courseware.student_field_overrides.IndividualStudentOverrideProvider' to + # 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider' to # the setting FIELD_OVERRIDE_PROVIDERS, in addition to setting this flag to # True. 'INDIVIDUAL_DUE_DATES': False, @@ -3067,7 +3067,7 @@ CHECKPOINT_PATTERN = r'(?P<checkpoint_name>[^/]+)' # For the fields override feature # If using FEATURES['INDIVIDUAL_DUE_DATES'], you should add -# 'courseware.student_field_overrides.IndividualStudentOverrideProvider' to +# 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider' to # this setting. FIELD_OVERRIDE_PROVIDERS = ()