From 7c923355b2491a7f1f178dff4f47068eb4211aad Mon Sep 17 00:00:00 2001 From: Douglas Hall Date: Fri, 29 Jan 2016 16:43:47 -0500 Subject: [PATCH] Remove gating api import from course xmodule to avoid importing django related code into non-django related code --- cms/djangoapps/contentstore/views/item.py | 4 ++++ .../contentstore/views/tests/test_gating.py | 2 +- common/lib/xmodule/xmodule/course_module.py | 13 ------------- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/cms/djangoapps/contentstore/views/item.py b/cms/djangoapps/contentstore/views/item.py index 841475afce..6b305b075f 100644 --- a/cms/djangoapps/contentstore/views/item.py +++ b/cms/djangoapps/contentstore/views/item.py @@ -780,6 +780,10 @@ def _get_gating_info(course, xblock): """ info = {} if xblock.category == 'sequential' and course.enable_subsection_gating: + if not hasattr(course, 'gating_prerequisites'): + # Cache gating prerequisites on course module so that we are not + # hitting the database for every xblock in the course + setattr(course, 'gating_prerequisites', gating_api.get_prerequisites(course.id)) # pylint: disable=literal-used-as-attribute info["is_prereq"] = gating_api.is_prerequisite(course.id, xblock.location) info["prereqs"] = [ p for p in course.gating_prerequisites if unicode(xblock.location) not in p['namespace'] diff --git a/cms/djangoapps/contentstore/views/tests/test_gating.py b/cms/djangoapps/contentstore/views/tests/test_gating.py index 770d467ff1..5ef6438ba2 100644 --- a/cms/djangoapps/contentstore/views/tests/test_gating.py +++ b/cms/djangoapps/contentstore/views/tests/test_gating.py @@ -108,7 +108,7 @@ class TestSubsectionGating(CourseTestCase): '' ) - @patch('xmodule.course_module.gating_api.get_prerequisites') + @patch('contentstore.views.item.gating_api.get_prerequisites') @patch('contentstore.views.item.gating_api.get_required_content') @patch('contentstore.views.item.gating_api.is_prerequisite') def test_get_prerequisite(self, mock_is_prereq, mock_get_required_content, mock_get_prereqs): diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py index 31f57026e7..60ca406180 100644 --- a/common/lib/xmodule/xmodule/course_module.py +++ b/common/lib/xmodule/xmodule/course_module.py @@ -14,7 +14,6 @@ from path import Path as path from xblock.core import XBlock from xblock.fields import Scope, List, String, Dict, Boolean, Integer, Float -from openedx.core.lib.gating import api as gating_api from xmodule import course_metadata_utils from xmodule.course_metadata_utils import DEFAULT_START_DATE from xmodule.exceptions import UndefinedContext @@ -1395,18 +1394,6 @@ class CourseDescriptor(CourseFields, SequenceDescriptor, LicenseMixin): """ return datetime.now(UTC()) <= self.start - @property - def gating_prerequisites(self): - """ - Course content that can be used to gate other course content within this course. - - Returns: - list: Returns a list of dicts containing the gating milestone data - """ - if not self._gating_prerequisites: - self._gating_prerequisites = gating_api.get_prerequisites(self.id) - return self._gating_prerequisites - class CourseSummary(object): """