diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index a112e0501b..be120824a4 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -1015,10 +1015,10 @@ class MiscCourseTests(ContentStoreTestCase): course = self.store.get_course(self.course.id, depth=2, lazy=False) # make sure we pre-fetched a known sequential which should be at depth=2 - self.assertIn(BlockKey.from_usage_key(self.seq_loc), course.system.module_data) + self.assertIn(BlockKey.from_usage_key(self.seq_loc), course.runtime.module_data) # make sure we don't have a specific vertical which should be at depth=3 - self.assertNotIn(BlockKey.from_usage_key(self.vert_loc), course.system.module_data) + self.assertNotIn(BlockKey.from_usage_key(self.vert_loc), course.runtime.module_data) # Now, test with the branch set to draft. No extra round trips b/c it doesn't go deep enough to get # beyond direct only categories diff --git a/cms/djangoapps/contentstore/tests/test_crud.py b/cms/djangoapps/contentstore/tests/test_crud.py index ab3796cc70..a7d283e466 100644 --- a/cms/djangoapps/contentstore/tests/test_crud.py +++ b/cms/djangoapps/contentstore/tests/test_crud.py @@ -90,7 +90,7 @@ class TemplateTests(ModuleStoreTestCase): ) test_chapter = self.store.create_xblock( - test_course.system, test_course.id, 'chapter', fields={'display_name': 'chapter n'}, + test_course.runtime, test_course.id, 'chapter', fields={'display_name': 'chapter n'}, parent_xblock=test_course ) self.assertIsInstance(test_chapter, SequenceBlock) @@ -100,7 +100,7 @@ class TemplateTests(ModuleStoreTestCase): # test w/ a definition (e.g., a problem) test_def_content = 'boo' test_problem = self.store.create_xblock( - test_course.system, test_course.id, 'problem', fields={'data': test_def_content}, + test_course.runtime, test_course.id, 'problem', fields={'data': test_def_content}, parent_xblock=test_chapter ) self.assertIsInstance(test_problem, ProblemBlock) diff --git a/lms/djangoapps/courseware/courses.py b/lms/djangoapps/courseware/courses.py index ffebfeaff9..676a42bd70 100644 --- a/lms/djangoapps/courseware/courses.py +++ b/lms/djangoapps/courseware/courses.py @@ -731,7 +731,7 @@ def get_course_syllabus_section(course, section_key): if section_key in ['syllabus', 'guest_syllabus']: try: - filesys = course.system.resources_fs + filesys = course.runtime.resources_fs # first look for a run-specific version dirs = [path("syllabus") / course.url_name, path("syllabus")] filepath = find_file(filesys, dirs, section_key + ".html") diff --git a/lms/djangoapps/courseware/tests/test_block_render.py b/lms/djangoapps/courseware/tests/test_block_render.py index 26506987ff..53e10b5c51 100644 --- a/lms/djangoapps/courseware/tests/test_block_render.py +++ b/lms/djangoapps/courseware/tests/test_block_render.py @@ -2108,7 +2108,7 @@ class TestXBlockRuntimeEvent(TestSubmittingProblems): def set_block_grade_using_publish(self, grade_dict): """Publish the user's grade, takes grade_dict as input""" block = self.get_block_for_user(self.student_user) - block.system.publish(block, 'grade', grade_dict) + block.runtime.publish(block, 'grade', grade_dict) return block def test_xblock_runtime_publish(self): @@ -2121,7 +2121,7 @@ class TestXBlockRuntimeEvent(TestSubmittingProblems): def test_xblock_runtime_publish_delete(self): """Test deleting the grade using the publish mechanism""" block = self.set_block_grade_using_publish(self.grade_dict) - block.system.publish(block, 'grade', self.delete_dict) + block.runtime.publish(block, 'grade', self.delete_dict) student_module = StudentModule.objects.get(student=self.student_user, module_state_key=self.problem.location) assert student_module.grade is None assert student_module.max_grade is None @@ -2185,7 +2185,7 @@ class TestRebindBlock(TestSubmittingProblems): # Bind the block to another student, which will remove "correct_map" # from the block's _field_data_cache and _dirty_fields. user2 = UserFactory.create() - block.bind_for_student(block.system, user2.id) + block.bind_for_student(block.runtime, user2.id) # XBlock's save method assumes that if a field is in _dirty_fields, # then it's also in _field_data_cache. If this assumption @@ -2194,7 +2194,7 @@ class TestRebindBlock(TestSubmittingProblems): # _field_data cache, but not _dirty_fields, when we bound # this block to the second student. (TNL-2640) user3 = UserFactory.create() - block.bind_for_student(block.system, user3.id) + block.bind_for_student(block.runtime, user3.id) def test_rebind_noauth_block_to_user_not_anonymous(self): """ @@ -2220,7 +2220,7 @@ class TestRebindBlock(TestSubmittingProblems): user2.id = 2 block.runtime.service(block, 'rebind_user').rebind_noauth_module_to_user(block, user2) assert block - assert block.system.anonymous_student_id == anonymous_id_for_user(user2, self.course.id) + assert block.runtime.anonymous_student_id == anonymous_id_for_user(user2, self.course.id) assert block.scope_ids.user_id == user2.id assert block.scope_ids.user_id == user2.id diff --git a/lms/djangoapps/courseware/tests/test_entrance_exam.py b/lms/djangoapps/courseware/tests/test_entrance_exam.py index c280160641..7024ea5c3c 100644 --- a/lms/djangoapps/courseware/tests/test_entrance_exam.py +++ b/lms/djangoapps/courseware/tests/test_entrance_exam.py @@ -384,7 +384,7 @@ def answer_entrance_exam_problem(course, request, problem, user=None, value=1, m problem.scope_ids.usage_id, field_data_cache, ) - block.system.publish(problem, 'grade', grade_dict) + block.runtime.publish(problem, 'grade', grade_dict) def add_entrance_exam_milestone(course, entrance_exam): diff --git a/lms/djangoapps/courseware/tests/test_views.py b/lms/djangoapps/courseware/tests/test_views.py index 408bc018e4..f8456349fd 100644 --- a/lms/djangoapps/courseware/tests/test_views.py +++ b/lms/djangoapps/courseware/tests/test_views.py @@ -1944,7 +1944,7 @@ class ProgressPageShowCorrectnessTests(ProgressPageBaseTests): # Submit the given score/max_score to the problem xmodule grade_dict = {'value': value, 'max_value': max_value, 'user_id': self.user.id} - block.system.publish(self.problem, 'grade', grade_dict) + block.runtime.publish(self.problem, 'grade', grade_dict) def assert_progress_page_show_grades(self, response, show_correctness, due_date, graded, show_grades, score, max_score, avg): # lint-amnesty, pylint: disable=unused-argument diff --git a/lms/djangoapps/grades/tests/utils.py b/lms/djangoapps/grades/tests/utils.py index 6c12e6e88d..dffe80c3dd 100644 --- a/lms/djangoapps/grades/tests/utils.py +++ b/lms/djangoapps/grades/tests/utils.py @@ -85,4 +85,4 @@ def answer_problem(course, request, problem, score=1, max_value=1): problem.scope_ids.usage_id, field_data_cache, ) - block.system.publish(problem, 'grade', grade_dict) + block.runtime.publish(problem, 'grade', grade_dict) diff --git a/lms/djangoapps/instructor/views/instructor_dashboard.py b/lms/djangoapps/instructor/views/instructor_dashboard.py index b413a037c6..579b8d035f 100644 --- a/lms/djangoapps/instructor/views/instructor_dashboard.py +++ b/lms/djangoapps/instructor/views/instructor_dashboard.py @@ -662,11 +662,11 @@ def _section_send_email(course, access): with patch.object(course.runtime, 'applicable_aside_types', null_applicable_aside_types): # This HtmlBlock is only being used to generate a nice text editor. html_block = HtmlBlock( - course.system, + course.runtime, DictFieldData({'data': ''}), ScopeIds(None, None, None, course_key.make_usage_key('html', 'fake')) ) - fragment = course.system.render(html_block, 'studio_view') + fragment = course.runtime.render(html_block, 'studio_view') fragment = wrap_xblock( 'LmsRuntime', html_block, 'studio_view', fragment, None, extra_data={"course-id": str(course_key)}, diff --git a/lms/djangoapps/mobile_api/course_info/views.py b/lms/djangoapps/mobile_api/course_info/views.py index 66ad68bedf..cb474a5fd7 100644 --- a/lms/djangoapps/mobile_api/course_info/views.py +++ b/lms/djangoapps/mobile_api/course_info/views.py @@ -111,7 +111,7 @@ def apply_wrappers_to_content(content, block, request): Returns: A piece of html content containing the original content updated by each wrapper. """ - content = block.system.service(block, "replace_urls").replace_urls(content) + content = block.runtime.service(block, "replace_urls").replace_urls(content) return make_static_urls_absolute(request, content) diff --git a/openedx/features/course_experience/course_updates.py b/openedx/features/course_experience/course_updates.py index f25bb864df..f073f69930 100644 --- a/openedx/features/course_experience/course_updates.py +++ b/openedx/features/course_experience/course_updates.py @@ -70,7 +70,7 @@ def get_ordered_updates(request, course): reverse=True ) for update in ordered_updates: - update['content'] = info_block.system.service(info_block, "replace_urls").replace_urls(update['content']) + update['content'] = info_block.runtime.service(info_block, "replace_urls").replace_urls(update['content']) return ordered_updates diff --git a/openedx/features/course_experience/views/course_updates.py b/openedx/features/course_experience/views/course_updates.py index d0fd50e850..6789172f36 100644 --- a/openedx/features/course_experience/views/course_updates.py +++ b/openedx/features/course_experience/views/course_updates.py @@ -78,6 +78,6 @@ class CourseUpdatesFragmentView(EdxFragmentView): """ info_block = get_course_info_section_block(request, request.user, course, 'updates') info_block = getattr(info_block, '_xmodule', info_block) - return info_block.system.service( + return info_block.runtime.service( info_block, "replace_urls" ).replace_urls(info_block.data) if info_block else '' diff --git a/xmodule/conditional_block.py b/xmodule/conditional_block.py index 8f9c53776c..5264db255e 100644 --- a/xmodule/conditional_block.py +++ b/xmodule/conditional_block.py @@ -318,7 +318,7 @@ class ConditionalBlock( Returns a list of bound XBlocks instances upon which XBlock depends. """ return [ - self.system.get_block_for_descriptor(descriptor) for descriptor in self.get_required_block_descriptors() + self.runtime.get_block_for_descriptor(descriptor) for descriptor in self.get_required_block_descriptors() ] def get_required_block_descriptors(self): @@ -333,7 +333,7 @@ class ConditionalBlock( except ItemNotFoundError: msg = "Invalid module by location." log.exception(msg) - self.system.error_tracker(msg) + self.runtime.error_tracker(msg) return descriptors diff --git a/xmodule/course_block.py b/xmodule/course_block.py index d6277784bf..27b5cabd44 100644 --- a/xmodule/course_block.py +++ b/xmodule/course_block.py @@ -1056,10 +1056,10 @@ class CourseBlock( # NOTE (THK): This is a last-minute addition for Fall 2012 launch to dynamically # disable the syllabus content for courses that do not provide a syllabus - if self.system.resources_fs is None: + if self.runtime.resources_fs is None: self.syllabus_present = False else: - self.syllabus_present = self.system.resources_fs.exists(path('syllabus')) + self.syllabus_present = self.runtime.resources_fs.exists(path('syllabus')) self._grading_policy = {} self.set_grading_policy(self.grading_policy) diff --git a/xmodule/mako_block.py b/xmodule/mako_block.py index 52415dfea8..017b277e03 100644 --- a/xmodule/mako_block.py +++ b/xmodule/mako_block.py @@ -67,7 +67,7 @@ class MakoTemplateBlockBase: """ # pylint: disable=no-member fragment = Fragment( - self.system.render_template(self.mako_template, self.get_context()) + self.runtime.render_template(self.mako_template, self.get_context()) ) shim_xmodule_js(fragment, self.js_module_name) return fragment diff --git a/xmodule/modulestore/split_mongo/split.py b/xmodule/modulestore/split_mongo/split.py index 9a10b931d5..8e7999ae75 100644 --- a/xmodule/modulestore/split_mongo/split.py +++ b/xmodule/modulestore/split_mongo/split.py @@ -2191,7 +2191,7 @@ class SplitMongoModuleStore(SplitBulkWriteMixin, ModuleStoreWriteBase): if xblock.has_children: for child in xblock.children: if isinstance(child.block_id, LocalId): - child_block = xblock.system.get_block(child) + child_block = xblock.runtime.get_block(child) is_updated = self._persist_subdag(course_key, child_block, user_id, structure_blocks, new_id) or is_updated # lint-amnesty, pylint: disable=line-too-long children.append(BlockKey.from_usage_key(child_block.location)) else: diff --git a/xmodule/modulestore/tests/test_mixed_modulestore.py b/xmodule/modulestore/tests/test_mixed_modulestore.py index a574a256cf..5d5360d8f0 100644 --- a/xmodule/modulestore/tests/test_mixed_modulestore.py +++ b/xmodule/modulestore/tests/test_mixed_modulestore.py @@ -2460,7 +2460,7 @@ class TestMixedModuleStore(CommonMixedModuleStoreSetup): # verify store used for creating a course course = self.store.create_course("org", "course{}".format(uuid4().hex[:5]), "run", self.user_id) - assert course.system.modulestore.get_modulestore_type() == store_type + assert course.runtime.modulestore.get_modulestore_type() == store_type @ddt.data(ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split) def test_default_store(self, default_ms): diff --git a/xmodule/modulestore/tests/test_split_modulestore.py b/xmodule/modulestore/tests/test_split_modulestore.py index 13d128382b..408d7b3002 100644 --- a/xmodule/modulestore/tests/test_split_modulestore.py +++ b/xmodule/modulestore/tests/test_split_modulestore.py @@ -704,7 +704,7 @@ class SplitModuleCourseTests(SplitModuleTest): locator = CourseLocator(org='testx', course='GreekHero', run="run", branch=BRANCH_NAME_DRAFT) course = modulestore().get_course(locator) block_map = modulestore().cache_items( - course.system, [BlockKey.from_usage_key(child) for child in course.children], course.id, depth=3 + course.runtime, [BlockKey.from_usage_key(child) for child in course.children], course.id, depth=3 ) assert BlockKey('chapter', 'chapter1') in block_map assert BlockKey('problem', 'problem3_2') in block_map @@ -719,14 +719,14 @@ class SplitModuleCourseTests(SplitModuleTest): master_branch=ModuleStoreEnum.BranchName.draft ) test_chapter = modulestore().create_xblock( - test_course.system, test_course.id, 'chapter', fields={'display_name': 'chapter n'}, + test_course.runtime, test_course.id, 'chapter', fields={'display_name': 'chapter n'}, parent_xblock=test_course ) assert test_chapter.display_name == 'chapter n' test_def_content = 'boo' # create child new_block = modulestore().create_xblock( - test_course.system, test_course.id, + test_course.runtime, test_course.id, 'problem', fields={ 'data': test_def_content, diff --git a/xmodule/randomize_block.py b/xmodule/randomize_block.py index abf3c2abb2..6c17804b11 100644 --- a/xmodule/randomize_block.py +++ b/xmodule/randomize_block.py @@ -71,8 +71,8 @@ class RandomizeBlock( if self.choice is None: # choose one based on the system seed, or randomly if that's not available if num_choices > 0: - if self.system.seed is not None: - self.choice = self.system.seed % num_choices + if self.runtime.seed is not None: + self.choice = self.runtime.seed % num_choices else: self.choice = random.randrange(0, num_choices) diff --git a/xmodule/seq_block.py b/xmodule/seq_block.py index ccee922693..242dbedfa4 100644 --- a/xmodule/seq_block.py +++ b/xmodule/seq_block.py @@ -306,10 +306,10 @@ class SequenceBlock( # and needs to be read here after the ModuleSystem has been set on the XBlock. super().bind_for_student(xmodule_runtime, user_id, wrappers) # If position is specified in system, then use that instead. - position = getattr(self.system, 'position', None) + position = getattr(self.runtime, 'position', None) if position is not None: assert isinstance(position, int) - self.position = self.system.position + self.position = self.runtime.position def get_progress(self): ''' Return the total progress, adding total done and total available. diff --git a/xmodule/split_test_block.py b/xmodule/split_test_block.py index f7ae0f9d96..c60d72c863 100644 --- a/xmodule/split_test_block.py +++ b/xmodule/split_test_block.py @@ -192,7 +192,7 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method Return the user bound child block for the partition or None. """ if self.child_descriptor is not None: - return self.system.get_block_for_descriptor(self.child_descriptor) + return self.runtime.get_block_for_descriptor(self.child_descriptor) else: return None @@ -272,7 +272,7 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method for child_location in self.children: # pylint: disable=no-member child_descriptor = self.get_child_descriptor_by_location(child_location) - child = self.system.get_block_for_descriptor(child_descriptor) + child = self.runtime.get_block_for_descriptor(child_descriptor) rendered_child = child.render(STUDENT_VIEW, context) fragment.add_fragment_resources(rendered_child) group_name, updated_group_id = self.get_data_for_vertical(child) @@ -347,7 +347,7 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method """ html = "" for active_child_descriptor in children: - active_child = self.system.get_block_for_descriptor(active_child_descriptor) + active_child = self.runtime.get_block_for_descriptor(active_child_descriptor) rendered_child = active_child.render(StudioEditableBlock.get_preview_view_name(active_child), context) if active_child.category == 'vertical': group_name, group_id = self.get_data_for_vertical(active_child) @@ -381,7 +381,7 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method # raise error instead? In fact, could complain on descriptor load... return Fragment(content="
Nothing here. Move along.
") - if self.system.user_is_staff: + if self.runtime.user_is_staff: return self._staff_view(context) else: child_fragment = self.child.render(STUDENT_VIEW, context) @@ -704,15 +704,15 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method if changed: # user.id - to be fixed by Publishing team - self.system.modulestore.update_item(self, None) + self.runtime.modulestore.update_item(self, None) return Response() @property def group_configuration_url(self): # lint-amnesty, pylint: disable=missing-function-docstring - assert hasattr(self.system, 'modulestore') and hasattr(self.system.modulestore, 'get_course'), \ + assert hasattr(self.runtime, 'modulestore') and hasattr(self.runtime.modulestore, 'get_course'), \ "modulestore has to be available" - course_block = self.system.modulestore.get_course(self.location.course_key) + course_block = self.runtime.modulestore.get_course(self.location.course_key) group_configuration_url = None if 'split_test' in course_block.advanced_modules: user_partition = self.get_selected_partition() @@ -732,9 +732,9 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method A mutable modulestore is needed to call this method (will need to update after mixed modulestore work, currently relies on mongo's create_item method). """ - assert hasattr(self.system, 'modulestore') and hasattr(self.system.modulestore, 'create_item'), \ + assert hasattr(self.runtime, 'modulestore') and hasattr(self.runtime.modulestore, 'create_item'), \ "editor_saved should only be called when a mutable modulestore is available" - modulestore = self.system.modulestore + modulestore = self.runtime.modulestore dest_usage_key = self.location.replace(category="vertical", name=uuid4().hex) metadata = {'display_name': DEFAULT_GROUP_NAME.format(group_id=group.id)} modulestore.create_item( @@ -744,7 +744,7 @@ class SplitTestBlock( # lint-amnesty, pylint: disable=abstract-method block_id=dest_usage_key.block_id, definition_data=None, metadata=metadata, - runtime=self.system, + runtime=self.runtime, ) self.children.append(dest_usage_key) # pylint: disable=no-member self.group_id_to_child[str(group.id)] = dest_usage_key diff --git a/xmodule/template_block.py b/xmodule/template_block.py index eff6e07343..70bafca775 100644 --- a/xmodule/template_block.py +++ b/xmodule/template_block.py @@ -118,7 +118,7 @@ class CustomTagBlock(CustomTagTemplateBlock): # pylint: disable=abstract-method @property def rendered_html(self): - return self.render_template(self.system, self.data) + return self.render_template(self.runtime, self.data) def student_view(self, _context): """ diff --git a/xmodule/tests/test_capa_block.py b/xmodule/tests/test_capa_block.py index bce2069844..2e14b2b1c9 100644 --- a/xmodule/tests/test_capa_block.py +++ b/xmodule/tests/test_capa_block.py @@ -1734,7 +1734,7 @@ class ProblemBlockTest(unittest.TestCase): # lint-amnesty, pylint: disable=miss error_msg = "Superterrible error happened: ☠" block.lcp.get_html = Mock(side_effect=Exception(error_msg)) - block.system.is_author_mode = True + block.runtime.is_author_mode = True # Try to render the block with the author mode turned on html = block.get_problem_html() diff --git a/xmodule/tests/test_split_test_block.py b/xmodule/tests/test_split_test_block.py index 5fae11c883..61ddd6f8c2 100644 --- a/xmodule/tests/test_split_test_block.py +++ b/xmodule/tests/test_split_test_block.py @@ -124,7 +124,7 @@ class SplitTestBlockTest(XModuleXmlImportTest, PartitionTestCase): # view, since mock services exist and the rendering code will not short-circuit. mocked_modulestore = Mock() mocked_modulestore.get_course.return_value = self.course - self.split_test_block.system.modulestore = mocked_modulestore + self.split_test_block.runtime.modulestore = mocked_modulestore @ddt.ddt @@ -239,7 +239,7 @@ class SplitTestBlockStudioTest(SplitTestBlockTest): mocked_course = Mock(advanced_modules=['split_test']) mocked_modulestore = Mock() mocked_modulestore.get_course.return_value = mocked_course - self.split_test_block.system.modulestore = mocked_modulestore + self.split_test_block.runtime.modulestore = mocked_modulestore self.split_test_block.user_partitions = [ UserPartition(0, 'first_partition', 'First Partition', [Group("0", 'alpha'), Group("1", 'beta')]) diff --git a/xmodule/video_block/bumper_utils.py b/xmodule/video_block/bumper_utils.py index 0e6f3a9fc1..297e0b7fbf 100644 --- a/xmodule/video_block/bumper_utils.py +++ b/xmodule/video_block/bumper_utils.py @@ -54,7 +54,7 @@ def is_bumper_enabled(video): video.bumper_do_not_show_again, (bumper_last_view_date and bumper_last_view_date + timedelta(seconds=periodicity) > utc_now) ]) - is_studio = getattr(video.system, "is_author_mode", False) + is_studio = getattr(video.runtime, "is_author_mode", False) return bool( not is_studio and settings.FEATURES.get('ENABLE_VIDEO_BUMPER') and