From 0ad8753cd6328947a8fa437bb66b8f67b16a566b Mon Sep 17 00:00:00 2001
From: Matt Hughes <mhughes@edx.org>
Date: Tue, 20 Aug 2019 15:38:29 -0400
Subject: [PATCH] Add waffle for hiding bulk management in masters courses

---
 lms/djangoapps/grades/api.py                      |  2 +-
 lms/djangoapps/grades/config/waffle.py            | 15 +++++++++++++++
 .../grades/rest_api/v1/gradebook_views.py         |  2 ++
 .../rest_api/v1/tests/test_gradebook_views.py     |  1 +
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/lms/djangoapps/grades/api.py b/lms/djangoapps/grades/api.py
index 6f1dc155df4..4a9e624550c 100644
--- a/lms/djangoapps/grades/api.py
+++ b/lms/djangoapps/grades/api.py
@@ -15,7 +15,7 @@ from six import text_type
 from lms.djangoapps.grades import constants, context, course_data, events
 # Grades APIs that should NOT belong within the Grades subsystem
 # TODO move Gradebook to be an external feature outside of core Grades
-from lms.djangoapps.grades.config.waffle import is_writable_gradebook_enabled
+from lms.djangoapps.grades.config.waffle import is_writable_gradebook_enabled, gradebook_can_see_bulk_management
 # Public Grades Factories
 from lms.djangoapps.grades.course_grade_factory import CourseGradeFactory
 from lms.djangoapps.grades.models_api import *
diff --git a/lms/djangoapps/grades/config/waffle.py b/lms/djangoapps/grades/config/waffle.py
index 97a7da1918f..46e85363291 100644
--- a/lms/djangoapps/grades/config/waffle.py
+++ b/lms/djangoapps/grades/config/waffle.py
@@ -17,6 +17,7 @@ DISABLE_REGRADE_ON_POLICY_CHANGE = u'disable_regrade_on_policy_change'
 REJECTED_EXAM_OVERRIDES_GRADE = u'rejected_exam_overrides_grade'
 ENFORCE_FREEZE_GRADE_AFTER_COURSE_END = u'enforce_freeze_grade_after_course_end'
 WRITABLE_GRADEBOOK = u'writable_gradebook'
+BULK_MANAGEMENT = u'bulk_management'
 
 
 def waffle():
@@ -49,6 +50,11 @@ def waffle_flags():
             WRITABLE_GRADEBOOK,
             flag_undefined_default=True,
         ),
+        BULK_MANAGEMENT: CourseWaffleFlag(
+            namespace,
+            BULK_MANAGEMENT,
+            flag_undefined_default=False,
+        ),
     }
 
 
@@ -57,3 +63,12 @@ def is_writable_gradebook_enabled(course_key):
     Returns whether the writable gradebook app is enabled for the given course.
     """
     return waffle_flags()[WRITABLE_GRADEBOOK].is_enabled(course_key)
+
+
+def gradebook_can_see_bulk_management(course_key):
+    """
+    Returns whether bulk management features should be visible for the given course.
+
+    (provided that course contains a masters track, as of this writing)
+    """
+    return waffle_flags()[BULK_MANAGEMENT].is_enabled(course_key)
diff --git a/lms/djangoapps/grades/rest_api/v1/gradebook_views.py b/lms/djangoapps/grades/rest_api/v1/gradebook_views.py
index f0c1aee0a9d..283db3d55ce 100644
--- a/lms/djangoapps/grades/rest_api/v1/gradebook_views.py
+++ b/lms/djangoapps/grades/rest_api/v1/gradebook_views.py
@@ -26,6 +26,7 @@ from lms.djangoapps.grades.api import constants as grades_constants
 from lms.djangoapps.grades.api import context as grades_context
 from lms.djangoapps.grades.api import events as grades_events
 from lms.djangoapps.grades.api import is_writable_gradebook_enabled, prefetch_course_and_subsection_grades
+from lms.djangoapps.grades.api import gradebook_can_see_bulk_management as can_see_bulk_management
 from lms.djangoapps.grades.course_data import CourseData
 from lms.djangoapps.grades.grade_utils import are_grades_frozen
 # TODO these imports break abstraction of the core Grades layer. This code needs
@@ -276,6 +277,7 @@ class CourseGradingView(BaseCourseView):
                 'assignment_types': self._get_assignment_types(course),
                 'subsections': self._get_subsections(course, graded_only),
                 'grades_frozen': are_grades_frozen(course_key),
+                'can_see_bulk_management': can_see_bulk_management(course_key),
             }
             return Response(results)
 
diff --git a/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py b/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py
index 6ec932c64bd..1ca5d784e2f 100644
--- a/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py
+++ b/lms/djangoapps/grades/rest_api/v1/tests/test_gradebook_views.py
@@ -197,6 +197,7 @@ class CourseGradingViewTest(SharedModuleStoreTestCase, APITestCase):
                 },
             ],
             'grades_frozen': False,
+            'can_see_bulk_management': False,
         }
 
     def test_student_fails(self):
-- 
GitLab