From f9351ef830f60b8192598b499304c434feaecb74 Mon Sep 17 00:00:00 2001
From: Carlos de la Guardia <cguardia@yahoo.com>
Date: Mon, 30 Mar 2015 10:29:42 -0600
Subject: [PATCH] MIT: CCX. Code Quality Fixes

Remove duplicated course listings template code on the student dashboard.
---
 common/lib/xmodule/xmodule/course_module.py   |  2 +-
 lms/djangoapps/ccx/migrations/0001_initial.py |  5 +-
 lms/djangoapps/ccx/tests/test_views.py        |  9 ++-
 .../0011_add_model_StudentFieldOverride.py    |  6 +-
 ...erride_course_id_location_student__add_.py |  4 +-
 ...rride_created__add_field_studentfieldov.py |  4 +-
 .../courseware/tests/test_field_overrides.py  |  1 +
 lms/djangoapps/instructor/tests/test_tools.py |  7 +-
 lms/templates/dashboard.html                  | 64 ++-----------------
 9 files changed, 27 insertions(+), 75 deletions(-)

diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py
index 2bca5d3405a..e71fa5fdb87 100644
--- a/common/lib/xmodule/xmodule/course_module.py
+++ b/common/lib/xmodule/xmodule/course_module.py
@@ -835,7 +835,7 @@ class CourseFields(object):
     )
 
 
-class CourseModule(CourseFields, SequenceModule):
+class CourseModule(CourseFields, SequenceModule):  # pylint: disable=abstract-method
     """
     The CourseDescriptor needs its module_class to be a SequenceModule, but some code that
     expects a CourseDescriptor to have all its fields can fail if it gets a SequenceModule instead.
diff --git a/lms/djangoapps/ccx/migrations/0001_initial.py b/lms/djangoapps/ccx/migrations/0001_initial.py
index 80eb4a2cc4c..6ec2fe67cef 100644
--- a/lms/djangoapps/ccx/migrations/0001_initial.py
+++ b/lms/djangoapps/ccx/migrations/0001_initial.py
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
+# pylint: disable=invalid-name, missing-docstring, unused-argument, unused-import, line-too-long
 import datetime
 from south.db import db
 from south.v2 import SchemaMigration
@@ -48,7 +49,6 @@ class Migration(SchemaMigration):
         # Adding unique constraint on 'CcxFieldOverride', fields ['ccx', 'location', 'field']
         db.create_unique('ccx_ccxfieldoverride', ['ccx_id', 'location', 'field'])
 
-
     def backwards(self, orm):
         # Removing unique constraint on 'CcxFieldOverride', fields ['ccx', 'location', 'field']
         db.delete_unique('ccx_ccxfieldoverride', ['ccx_id', 'location', 'field'])
@@ -65,7 +65,6 @@ class Migration(SchemaMigration):
         # Deleting model 'CcxFieldOverride'
         db.delete_table('ccx_ccxfieldoverride')
 
-
     models = {
         'auth.group': {
             'Meta': {'object_name': 'Group'},
@@ -134,4 +133,4 @@ class Migration(SchemaMigration):
         }
     }
 
-    complete_apps = ['ccx']
\ No newline at end of file
+    complete_apps = ['ccx']
diff --git a/lms/djangoapps/ccx/tests/test_views.py b/lms/djangoapps/ccx/tests/test_views.py
index 46a7d28dbb7..d3211833752 100644
--- a/lms/djangoapps/ccx/tests/test_views.py
+++ b/lms/djangoapps/ccx/tests/test_views.py
@@ -120,6 +120,7 @@ class TestCoachDashboard(ModuleStoreTestCase, LoginEnrollmentTestCase):
         """
         Undo patches.
         """
+        super(TestCoachDashboard, self).tearDown()
         patch.stopall()
 
     def test_not_a_coach(self):
@@ -419,11 +420,13 @@ class TestCoachDashboard(ModuleStoreTestCase, LoginEnrollmentTestCase):
         )
 
 
-original_get_children = XModuleMixin.get_children
+GET_CHILDREN = XModuleMixin.get_children
+
+
 def patched_get_children(self, usage_key_filter=None):  # pylint: disable=missing-docstring
     def iter_children():  # pylint: disable=missing-docstring
         print self.__dict__
-        for child in original_get_children(self, usage_key_filter=usage_key_filter):
+        for child in GET_CHILDREN(self, usage_key_filter=usage_key_filter):
             child._field_data_cache = {}  # pylint: disable=protected-access
             if not child.visible_to_staff_only:
                 yield child
@@ -492,7 +495,7 @@ class TestCCXGrades(ModuleStoreTestCase, LoginEnrollmentTestCase):
         for block in iter_blocks(course):
             block._field_data = OverrideFieldData.wrap(   # pylint: disable=protected-access
                 coach, block._field_data)   # pylint: disable=protected-access
-            block._field_data_cache = {'tabs':[],'discussion_topics':[]}  # pylint: disable=protected-access
+            block._field_data_cache = {'tabs': [], 'discussion_topics': []}  # pylint: disable=protected-access
 
         def cleanup_provider_classes():
             """
diff --git a/lms/djangoapps/courseware/migrations/0011_add_model_StudentFieldOverride.py b/lms/djangoapps/courseware/migrations/0011_add_model_StudentFieldOverride.py
index d8f5caadd62..22bc4ae6896 100644
--- a/lms/djangoapps/courseware/migrations/0011_add_model_StudentFieldOverride.py
+++ b/lms/djangoapps/courseware/migrations/0011_add_model_StudentFieldOverride.py
@@ -1,4 +1,6 @@
 # -*- coding: utf-8 -*-
+# pylint: disable=invalid-name, missing-docstring, unused-argument, unused-import, line-too-long
+
 import datetime
 from south.db import db
 from south.v2 import SchemaMigration
@@ -19,12 +21,10 @@ class Migration(SchemaMigration):
         ))
         db.send_create_signal('courseware', ['StudentFieldOverride'])
 
-
     def backwards(self, orm):
         # Deleting model 'StudentFieldOverride'
         db.delete_table('courseware_studentfieldoverride')
 
-
     models = {
         'auth.group': {
             'Meta': {'object_name': 'Group'},
@@ -142,4 +142,4 @@ class Migration(SchemaMigration):
         }
     }
 
-    complete_apps = ['courseware']
\ No newline at end of file
+    complete_apps = ['courseware']
diff --git a/lms/djangoapps/courseware/migrations/0012_auto__del_unique_studentfieldoverride_course_id_location_student__add_.py b/lms/djangoapps/courseware/migrations/0012_auto__del_unique_studentfieldoverride_course_id_location_student__add_.py
index d79f119a247..38091383734 100644
--- a/lms/djangoapps/courseware/migrations/0012_auto__del_unique_studentfieldoverride_course_id_location_student__add_.py
+++ b/lms/djangoapps/courseware/migrations/0012_auto__del_unique_studentfieldoverride_course_id_location_student__add_.py
@@ -1,4 +1,6 @@
 # -*- coding: utf-8 -*-
+# pylint: disable=invalid-name, missing-docstring, unused-argument, unused-import, line-too-long
+
 import datetime
 from south.db import db
 from south.v2 import SchemaMigration
@@ -12,12 +14,10 @@ class Migration(SchemaMigration):
         # Adding unique constraint on 'StudentFieldOverride', fields ['course_id', 'field', 'location', 'student']
         db.create_unique('courseware_studentfieldoverride', ['course_id', 'field', 'location', 'student_id'])
 
-
     def backwards(self, orm):
         # Removing unique constraint on 'StudentFieldOverride', fields ['course_id', 'field', 'location', 'student']
         db.delete_unique('courseware_studentfieldoverride', ['course_id', 'field', 'location', 'student_id'])
 
-
     models = {
         'auth.group': {
             'Meta': {'object_name': 'Group'},
diff --git a/lms/djangoapps/courseware/migrations/0013_auto__add_field_studentfieldoverride_created__add_field_studentfieldov.py b/lms/djangoapps/courseware/migrations/0013_auto__add_field_studentfieldoverride_created__add_field_studentfieldov.py
index bd672261376..28b82c84252 100644
--- a/lms/djangoapps/courseware/migrations/0013_auto__add_field_studentfieldoverride_created__add_field_studentfieldov.py
+++ b/lms/djangoapps/courseware/migrations/0013_auto__add_field_studentfieldoverride_created__add_field_studentfieldov.py
@@ -1,4 +1,6 @@
 # -*- coding: utf-8 -*-
+# pylint: disable=invalid-name, missing-docstring, unused-argument, unused-import, line-too-long
+
 import datetime
 from south.db import db
 from south.v2 import SchemaMigration
@@ -21,7 +23,6 @@ class Migration(SchemaMigration):
         # Adding index on 'StudentFieldOverride', fields ['course_id', 'location', 'student']
         db.create_index('courseware_studentfieldoverride', ['course_id', 'location', 'student_id'])
 
-
     def backwards(self, orm):
         # Deleting field 'StudentFieldOverride.created'
         db.delete_column('courseware_studentfieldoverride', 'created')
@@ -32,7 +33,6 @@ class Migration(SchemaMigration):
         # Removing index on 'StudentFieldOverride', fields ['course_id', 'location', 'student']
         db.delete_index('courseware_studentfieldoverride', ['course_id', 'location', 'student_id'])
 
-
     models = {
         'auth.group': {
             'Meta': {'object_name': 'Group'},
diff --git a/lms/djangoapps/courseware/tests/test_field_overrides.py b/lms/djangoapps/courseware/tests/test_field_overrides.py
index 76cd636c917..1504be6d480 100644
--- a/lms/djangoapps/courseware/tests/test_field_overrides.py
+++ b/lms/djangoapps/courseware/tests/test_field_overrides.py
@@ -30,6 +30,7 @@ class OverrideFieldDataTests(TestCase):
         OverrideFieldData.provider_classes = None
 
     def tearDown(self):
+        super(OverrideFieldDataTests, self).tearDown()
         OverrideFieldData.provider_classes = None
 
     def make_one(self):
diff --git a/lms/djangoapps/instructor/tests/test_tools.py b/lms/djangoapps/instructor/tests/test_tools.py
index 7be040a6744..17a08c72eda 100644
--- a/lms/djangoapps/instructor/tests/test_tools.py
+++ b/lms/djangoapps/instructor/tests/test_tools.py
@@ -10,9 +10,8 @@ import unittest
 from django.utils.timezone import utc
 from django.test.utils import override_settings
 
-from courseware.models import StudentModule
-from courseware.field_overrides import OverrideFieldData
-from student.tests.factories import UserFactory
+from courseware.field_overrides import OverrideFieldData  # pylint: disable=import-error
+from student.tests.factories import UserFactory  # pylint: disable=import-error
 from xmodule.fields import Date
 from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
 from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
@@ -222,6 +221,7 @@ class TestSetDueDateExtension(ModuleStoreTestCase):
                 user, block._field_data)  # pylint: disable=protected-access
 
     def tearDown(self):
+        super(TestSetDueDateExtension, self).tearDown()
         OverrideFieldData.provider_classes = None
 
     def _clear_field_data_cache(self):
@@ -280,7 +280,6 @@ class TestDataDumps(ModuleStoreTestCase):
         course = CourseFactory.create()
         week1 = ItemFactory.create(due=due, parent=course)
         week2 = ItemFactory.create(due=due, parent=course)
-        week3 = ItemFactory.create(due=due, parent=course)
 
         homework = ItemFactory.create(
             parent=week1,
diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html
index 28a743f0ff2..30fd0768165 100644
--- a/lms/templates/dashboard.html
+++ b/lms/templates/dashboard.html
@@ -94,6 +94,13 @@
         <% course_requirements = courses_requirements_not_met.get(course.id) %>
         <%include file='dashboard/_dashboard_course_listing.html' args="course=course, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, show_refund_option = show_refund_option, is_paid_course = is_paid_course, is_course_blocked = is_course_blocked, verification_status=course_verification_status, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings" />
       % endfor
+
+      % if settings.FEATURES.get('CUSTOM_COURSES_EDX', False):
+        % for ccx, membership, course in ccx_membership_triplets:
+            <%include file='ccx/_dashboard_ccx_listing.html' args="ccx=ccx, membership=membership, course=course" />
+        % endfor
+      % endif
+
       </ul>
     % else:
       <section class="empty-dashboard-message">
@@ -222,63 +229,6 @@
       </ul>
     </section>
   </section>
-
-  <section id="my-courses" class="my-courses" role="main" aria-label="Content">
-    <header>
-      <h2>${_("Current Courses")}</h2>
-    </header>
-
-    % if len(course_enrollment_pairs) > 0:
-      <ul class="listing-courses">
-        % for course, enrollment in course_enrollment_pairs:
-            <% show_courseware_link = (course.id in show_courseware_links_for) %>
-            <% cert_status = cert_statuses.get(course.id) %>
-            <% show_email_settings = (course.id in show_email_settings_for) %>
-            <% course_mode_info = all_course_modes.get(course.id) %>
-            <% show_refund_option = (course.id in show_refund_option_for) %>
-            <% is_paid_course = (course.id in enrolled_courses_either_paid) %>
-            <% is_course_blocked = (course.id in block_courses) %>
-            <% course_verification_status = verification_status_by_course.get(course.id, {}) %>
-            <% course_requirements = courses_requirements_not_met.get(course.id) %>
-            <%include file='dashboard/_dashboard_course_listing.html' args="course=course, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, show_refund_option = show_refund_option, is_paid_course = is_paid_course, is_course_blocked = is_course_blocked, verification_status=course_verification_status, course_requirements=course_requirements" />
-      % endfor
-
-      % if settings.FEATURES.get('CUSTOM_COURSES_EDX', False):
-        % for ccx, membership, course in ccx_membership_triplets:
-            <%include file='ccx/_dashboard_ccx_listing.html' args="ccx=ccx, membership=membership, course=course" />
-        % endfor
-      % endif
-
-      </ul>
-    % else:
-      <section class="empty-dashboard-message">
-        % if settings.FEATURES.get('COURSES_ARE_BROWSABLE'):
-          <p>${_("Looks like you haven't enrolled in any courses yet.")}</p>
-          <a href="${marketing_link('COURSES')}">
-            ${_("Find courses now!")}
-          </a>
-        % else:
-          <p>${_("Looks like you haven't enrolled in any courses yet.")}</p>
-        %endif
-      </section>
-    % endif
-
-    % if staff_access and len(errored_courses) > 0:
-      <div id="course-errors">
-        <h2>${_("Course-loading errors")}</h2>
-
-      % for course_dir, errors in errored_courses.items():
-         <h3>${course_dir | h}</h3>
-             <ul>
-           % for (msg, err) in errors:
-               <li>${msg}
-                 <ul><li><pre>${err}</pre></li></ul>
-               </li>
-           % endfor
-             </ul>
-      % endfor
-    % endif
-  </section>
 </section>
 
 <section id="email-settings-modal" class="modal" aria-hidden="true">
-- 
GitLab