Merge pull request #18782 from edx/jmbowman/TE-2689

TE-2689 Remove useless pylint suppressions part 1
This commit is contained in:
Jeremy Bowman
2018-08-14 15:04:42 -04:00
committed by GitHub
33 changed files with 159 additions and 179 deletions

View File

@@ -313,8 +313,8 @@ class CcxListTest(CcxRestApiTest):
"""
# there are no CCX courses
resp = self.client.get(self.list_url_master_course, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertIn('count', resp.data) # pylint: disable=no-member
self.assertEqual(resp.data['count'], 0) # pylint: disable=no-member
self.assertIn('count', resp.data)
self.assertEqual(resp.data['count'], 0)
# create few ccx courses
num_ccx = 10
@@ -322,10 +322,10 @@ class CcxListTest(CcxRestApiTest):
self.make_ccx()
resp = self.client.get(self.list_url_master_course, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertIn('count', resp.data) # pylint: disable=no-member
self.assertEqual(resp.data['count'], num_ccx) # pylint: disable=no-member
self.assertIn('results', resp.data) # pylint: disable=no-member
self.assertEqual(len(resp.data['results']), num_ccx) # pylint: disable=no-member
self.assertIn('count', resp.data)
self.assertEqual(resp.data['count'], num_ccx)
self.assertIn('results', resp.data)
self.assertEqual(len(resp.data['results']), num_ccx)
@ddt.data(*AUTH_ATTRS)
def test_get_sorted_list(self, auth_attr):
@@ -349,9 +349,9 @@ class CcxListTest(CcxRestApiTest):
url = '{0}&order_by=display_name'.format(self.list_url_master_course)
resp = self.client.get(url, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(len(resp.data['results']), num_ccx) # pylint: disable=no-member
self.assertEqual(len(resp.data['results']), num_ccx)
# the display_name should be sorted as "Title CCX x", "Title CCX y", "Title CCX z"
for num, ccx in enumerate(resp.data['results']): # pylint: disable=no-member
for num, ccx in enumerate(resp.data['results']):
self.assertEqual(title_str.format(string.ascii_lowercase[-(num_ccx - num)]), ccx['display_name'])
# add sort order desc
@@ -359,7 +359,7 @@ class CcxListTest(CcxRestApiTest):
resp = self.client.get(url, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
# the only thing I can check is that the display name is in alphabetically reversed order
# in the same way when the field has been updated above, so with the id asc
for num, ccx in enumerate(resp.data['results']): # pylint: disable=no-member
for num, ccx in enumerate(resp.data['results']):
self.assertEqual(title_str.format(string.ascii_lowercase[-(num + 1)]), ccx['display_name'])
@ddt.data(*AUTH_ATTRS)
@@ -376,34 +376,34 @@ class CcxListTest(CcxRestApiTest):
# get first page
resp = self.client.get(self.list_url_master_course, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp.data['count'], num_ccx) # pylint: disable=no-member
self.assertEqual(resp.data['num_pages'], num_pages) # pylint: disable=no-member
self.assertEqual(resp.data['current_page'], 1) # pylint: disable=no-member
self.assertEqual(resp.data['start'], 0) # pylint: disable=no-member
self.assertIsNotNone(resp.data['next']) # pylint: disable=no-member
self.assertIsNone(resp.data['previous']) # pylint: disable=no-member
self.assertEqual(resp.data['count'], num_ccx)
self.assertEqual(resp.data['num_pages'], num_pages)
self.assertEqual(resp.data['current_page'], 1)
self.assertEqual(resp.data['start'], 0)
self.assertIsNotNone(resp.data['next'])
self.assertIsNone(resp.data['previous'])
# get a page in the middle
url = '{0}&page=24'.format(self.list_url_master_course)
resp = self.client.get(url, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp.data['count'], num_ccx) # pylint: disable=no-member
self.assertEqual(resp.data['num_pages'], num_pages) # pylint: disable=no-member
self.assertEqual(resp.data['current_page'], 24) # pylint: disable=no-member
self.assertEqual(resp.data['start'], (resp.data['current_page'] - 1) * page_size) # pylint: disable=no-member
self.assertIsNotNone(resp.data['next']) # pylint: disable=no-member
self.assertIsNotNone(resp.data['previous']) # pylint: disable=no-member
self.assertEqual(resp.data['count'], num_ccx)
self.assertEqual(resp.data['num_pages'], num_pages)
self.assertEqual(resp.data['current_page'], 24)
self.assertEqual(resp.data['start'], (resp.data['current_page'] - 1) * page_size)
self.assertIsNotNone(resp.data['next'])
self.assertIsNotNone(resp.data['previous'])
# get last page
url = '{0}&page={1}'.format(self.list_url_master_course, num_pages)
resp = self.client.get(url, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp.data['count'], num_ccx) # pylint: disable=no-member
self.assertEqual(resp.data['num_pages'], num_pages) # pylint: disable=no-member
self.assertEqual(resp.data['current_page'], num_pages) # pylint: disable=no-member
self.assertEqual(resp.data['start'], (resp.data['current_page'] - 1) * page_size) # pylint: disable=no-member
self.assertIsNone(resp.data['next']) # pylint: disable=no-member
self.assertIsNotNone(resp.data['previous']) # pylint: disable=no-member
self.assertEqual(resp.data['count'], num_ccx)
self.assertEqual(resp.data['num_pages'], num_pages)
self.assertEqual(resp.data['current_page'], num_pages)
self.assertEqual(resp.data['start'], (resp.data['current_page'] - 1) * page_size)
self.assertIsNone(resp.data['next'])
self.assertIsNotNone(resp.data['previous'])
# last page + 1
url = '{0}&page={1}'.format(self.list_url_master_course, num_pages + 1)
@@ -765,14 +765,14 @@ class CcxListTest(CcxRestApiTest):
self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
# check if the response has at least the same data of the request
for key, val in data.iteritems():
self.assertEqual(resp.data.get(key), val) # pylint: disable=no-member
self.assertIn('ccx_course_id', resp.data) # pylint: disable=no-member
self.assertEqual(resp.data.get(key), val)
self.assertIn('ccx_course_id', resp.data)
# check that the new CCX actually exists
course_key = CourseKey.from_string(resp.data.get('ccx_course_id')) # pylint: disable=no-member
course_key = CourseKey.from_string(resp.data.get('ccx_course_id'))
ccx_course = CustomCourseForEdX.objects.get(pk=course_key.ccx)
self.assertEqual(
unicode(CCXLocator.from_course_locator(ccx_course.course.id, ccx_course.id)),
resp.data.get('ccx_course_id') # pylint: disable=no-member
resp.data.get('ccx_course_id')
)
# check that the coach user has coach role on the master course
coach_role_on_master_course = CourseCcxCoachRole(self.master_course_key)
@@ -784,7 +784,7 @@ class CcxListTest(CcxRestApiTest):
)
# check that an email has been sent to the coach
self.assertEqual(len(outbox), 1)
self.assertIn(self.coach.email, outbox[0].recipients()) # pylint: disable=no-member
self.assertIn(self.coach.email, outbox[0].recipients())
@ddt.data(
('auth', True),
@@ -798,7 +798,7 @@ class CcxListTest(CcxRestApiTest):
Test the creation of a CCX on user's active states.
"""
self.app_user.is_active = user_is_active
self.app_user.save() # pylint: disable=no-member
self.app_user.save()
data = {
'master_course_id': self.master_course_key_str,
@@ -830,7 +830,7 @@ class CcxListTest(CcxRestApiTest):
}
resp = self.client.post(self.list_url, data, format='json', HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
self.assertEqual(resp.data.get('course_modules'), chapters) # pylint: disable=no-member
self.assertEqual(resp.data.get('course_modules'), chapters)
@ddt.data(*AUTH_ATTRS)
def test_post_list_staff_master_course_in_ccx(self, auth_attr):
@@ -849,11 +849,11 @@ class CcxListTest(CcxRestApiTest):
self.assertEqual(resp.status_code, status.HTTP_201_CREATED)
# check that only one email has been sent and it is to to the coach
self.assertEqual(len(outbox), 1)
self.assertIn(self.coach.email, outbox[0].recipients()) # pylint: disable=no-member
self.assertIn(self.coach.email, outbox[0].recipients())
list_staff_master_course = list_with_level(self.course, 'staff')
list_instructor_master_course = list_with_level(self.course, 'instructor')
course_key = CourseKey.from_string(resp.data.get('ccx_course_id')) # pylint: disable=no-member
course_key = CourseKey.from_string(resp.data.get('ccx_course_id'))
with ccx_course_cm(course_key) as course_ccx:
list_staff_ccx_course = list_with_level(course_ccx, 'staff')
list_instructor_ccx_course = list_with_level(course_ccx, 'instructor')
@@ -1095,15 +1095,15 @@ class CcxDetailTest(CcxRestApiTest):
"""
resp = self.client.get(self.detail_url, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(resp.data.get('ccx_course_id'), self.ccx_key_str) # pylint: disable=no-member
self.assertEqual(resp.data.get('display_name'), self.ccx.display_name) # pylint: disable=no-member
self.assertEqual(resp.data.get('ccx_course_id'), self.ccx_key_str)
self.assertEqual(resp.data.get('display_name'), self.ccx.display_name)
self.assertEqual(
resp.data.get('max_students_allowed'), # pylint: disable=no-member
self.ccx.max_student_enrollments_allowed # pylint: disable=no-member
resp.data.get('max_students_allowed'),
self.ccx.max_student_enrollments_allowed
)
self.assertEqual(resp.data.get('coach_email'), self.ccx.coach.email) # pylint: disable=no-member
self.assertEqual(resp.data.get('master_course_id'), unicode(self.ccx.course_id)) # pylint: disable=no-member
self.assertItemsEqual(resp.data.get('course_modules'), self.master_course_chapters) # pylint: disable=no-member
self.assertEqual(resp.data.get('master_course_id'), unicode(self.ccx.course_id))
self.assertItemsEqual(resp.data.get('course_modules'), self.master_course_chapters)
@ddt.data(*AUTH_ATTRS)
def test_delete_detail(self, auth_attr):
@@ -1115,7 +1115,7 @@ class CcxDetailTest(CcxRestApiTest):
self.assertGreater(CourseEnrollment.objects.filter(course_id=self.ccx_key).count(), 0)
resp = self.client.delete(self.detail_url, {}, HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
self.assertIsNone(resp.data) # pylint: disable=no-member
self.assertIsNone(resp.data)
# the CCX does not exist any more
with self.assertRaises(CustomCourseForEdX.DoesNotExist):
CustomCourseForEdX.objects.get(id=self.ccx.id)
@@ -1238,9 +1238,9 @@ class CcxDetailTest(CcxRestApiTest):
An empty patch does not modify anything
"""
display_name = self.ccx.display_name
max_students_allowed = self.ccx.max_student_enrollments_allowed # pylint: disable=no-member
max_students_allowed = self.ccx.max_student_enrollments_allowed
coach_email = self.ccx.coach.email # pylint: disable=no-member
ccx_structure = self.ccx.structure # pylint: disable=no-member
ccx_structure = self.ccx.structure
resp = self.client.patch(self.detail_url, {}, format='json', HTTP_AUTHORIZATION=getattr(self, auth_attr))
self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
ccx = CustomCourseForEdX.objects.get(id=self.ccx.id)
@@ -1319,7 +1319,7 @@ class CcxDetailTest(CcxRestApiTest):
)
# check that an email has been sent to the coach
self.assertEqual(len(outbox), 1)
self.assertIn(new_coach.email, outbox[0].recipients()) # pylint: disable=no-member
self.assertIn(new_coach.email, outbox[0].recipients())
@ddt.data(*AUTH_ATTRS)
def test_patch_detail_modules(self, auth_attr):
@@ -1369,7 +1369,7 @@ class CcxDetailTest(CcxRestApiTest):
Test patch ccx course on user's active state.
"""
self.app_user.is_active = user_is_active
self.app_user.save() # pylint: disable=no-member
self.app_user.save()
chapters = self.master_course_chapters[0:1]
data = {'course_modules': chapters * 3}
@@ -1393,7 +1393,7 @@ class CcxDetailTest(CcxRestApiTest):
Test for deleting a ccx course on user's active state.
"""
self.app_user.is_active = user_is_active
self.app_user.save() # pylint: disable=no-member
self.app_user.save()
# check that there are overrides
self.assertGreater(CcxFieldOverride.objects.filter(ccx=self.ccx).count(), 0)
@@ -1404,7 +1404,7 @@ class CcxDetailTest(CcxRestApiTest):
self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
else:
self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
self.assertIsNone(resp.data) # pylint: disable=no-member
self.assertIsNone(resp.data)
# the CCX does not exist any more
with self.assertRaises(CustomCourseForEdX.DoesNotExist):
CustomCourseForEdX.objects.get(id=self.ccx.id)

View File

@@ -195,7 +195,7 @@ def clear_override_for_ccx(ccx, block, name):
pass
def clear_ccx_field_info_from_ccx_map(ccx, block, name): # pylint: disable=invalid-name
def clear_ccx_field_info_from_ccx_map(ccx, block, name):
"""
Remove field information from ccx overrides mapping dictionary
"""

View File

@@ -63,7 +63,7 @@ class TestCCX(ModuleStoreTestCase):
"""
expected = datetime.now(utc)
self.set_ccx_override('start', expected)
actual = self.ccx.start # pylint: disable=no-member
actual = self.ccx.start
diff = expected - actual
self.assertLess(abs(diff.total_seconds()), 1)
@@ -75,20 +75,20 @@ class TestCCX(ModuleStoreTestCase):
# these statements are used entirely to demonstrate the
# instance-level caching of these values on CCX objects. The
# check_mongo_calls context is the point here.
self.ccx.start # pylint: disable=pointless-statement, no-member
self.ccx.start # pylint: disable=pointless-statement
with check_mongo_calls(0):
self.ccx.start # pylint: disable=pointless-statement, no-member
self.ccx.start # pylint: disable=pointless-statement
def test_ccx_due_without_override(self):
"""verify that due returns None when the field has not been set"""
actual = self.ccx.due # pylint: disable=no-member
actual = self.ccx.due
self.assertIsNone(actual)
def test_ccx_due_is_correct(self):
"""verify that the due datetime for a ccx is correctly retrieved"""
expected = datetime.now(utc)
self.set_ccx_override('due', expected)
actual = self.ccx.due # pylint: disable=no-member
actual = self.ccx.due
diff = expected - actual
self.assertLess(abs(diff.total_seconds()), 1)
@@ -100,9 +100,9 @@ class TestCCX(ModuleStoreTestCase):
# these statements are used entirely to demonstrate the
# instance-level caching of these values on CCX objects. The
# check_mongo_calls context is the point here.
self.ccx.due # pylint: disable=pointless-statement, no-member
self.ccx.due # pylint: disable=pointless-statement
with check_mongo_calls(0):
self.ccx.due # pylint: disable=pointless-statement, no-member
self.ccx.due # pylint: disable=pointless-statement
def test_ccx_has_started(self):
"""verify that a ccx marked as starting yesterday has started"""
@@ -110,7 +110,7 @@ class TestCCX(ModuleStoreTestCase):
delta = timedelta(1)
then = now - delta
self.set_ccx_override('start', then)
self.assertTrue(self.ccx.has_started()) # pylint: disable=no-member
self.assertTrue(self.ccx.has_started())
def test_ccx_has_not_started(self):
"""verify that a ccx marked as starting tomorrow has not started"""
@@ -118,7 +118,7 @@ class TestCCX(ModuleStoreTestCase):
delta = timedelta(1)
then = now + delta
self.set_ccx_override('start', then)
self.assertFalse(self.ccx.has_started()) # pylint: disable=no-member
self.assertFalse(self.ccx.has_started())
def test_ccx_has_ended(self):
"""verify that a ccx that has a due date in the past has ended"""
@@ -126,7 +126,7 @@ class TestCCX(ModuleStoreTestCase):
delta = timedelta(1)
then = now - delta
self.set_ccx_override('due', then)
self.assertTrue(self.ccx.has_ended()) # pylint: disable=no-member
self.assertTrue(self.ccx.has_ended())
def test_ccx_has_not_ended(self):
"""verify that a ccx that has a due date in the future has not eneded
@@ -135,11 +135,11 @@ class TestCCX(ModuleStoreTestCase):
delta = timedelta(1)
then = now + delta
self.set_ccx_override('due', then)
self.assertFalse(self.ccx.has_ended()) # pylint: disable=no-member
self.assertFalse(self.ccx.has_ended())
def test_ccx_without_due_date_has_not_ended(self):
"""verify that a ccx without a due date has not ended"""
self.assertFalse(self.ccx.has_ended()) # pylint: disable=no-member
self.assertFalse(self.ccx.has_ended())
def test_ccx_max_student_enrollment_correct(self):
"""
@@ -147,15 +147,15 @@ class TestCCX(ModuleStoreTestCase):
"""
expected = 200
self.set_ccx_override('max_student_enrollments_allowed', expected)
actual = self.ccx.max_student_enrollments_allowed # pylint: disable=no-member
actual = self.ccx.max_student_enrollments_allowed
self.assertEqual(expected, actual)
def test_structure_json_default_empty(self):
"""
By default structure_json does not contain anything
"""
self.assertEqual(self.ccx.structure_json, None) # pylint: disable=no-member
self.assertEqual(self.ccx.structure, None) # pylint: disable=no-member
self.assertEqual(self.ccx.structure_json, None)
self.assertEqual(self.ccx.structure, None)
def test_structure_json(self):
"""
@@ -172,12 +172,12 @@ class TestCCX(ModuleStoreTestCase):
coach=self.coach,
structure_json=json_struct
)
self.assertEqual(ccx.structure_json, json_struct) # pylint: disable=no-member
self.assertEqual(ccx.structure, dummy_struct) # pylint: disable=no-member
self.assertEqual(ccx.structure_json, json_struct)
self.assertEqual(ccx.structure, dummy_struct)
def test_locator_property(self):
"""
Verify that the locator helper property returns a correct CCXLocator
"""
locator = self.ccx.locator # pylint: disable=no-member
locator = self.ccx.locator
self.assertEqual(self.ccx.id, long(locator.ccx))

View File

@@ -229,7 +229,7 @@ class TestCCXProgressChanges(CcxTestCase, LoginEnrollmentTestCase):
progress_page_response = self.client.get(
reverse('progress', kwargs={'course_id': ccx_course_key})
)
grade_summary = progress_page_response.mako_context['courseware_summary'] # pylint: disable=no-member
grade_summary = progress_page_response.mako_context['courseware_summary']
chapter = grade_summary[0]
section = chapter['sections'][0]
progress_page_due_date = section.due.strftime("%Y-%m-%d %H:%M")
@@ -250,7 +250,7 @@ class TestCCXProgressChanges(CcxTestCase, LoginEnrollmentTestCase):
url = reverse('ccx_coach_dashboard', kwargs={'course_id': ccx_course_key})
response = self.client.get(url)
schedule = json.loads(response.mako_context['schedule']) # pylint: disable=no-member
schedule = json.loads(response.mako_context['schedule'])
self.assertEqual(len(schedule), 1)
unhide(schedule[0])
@@ -375,7 +375,7 @@ class TestCoachDashboard(CcxTestCase, LoginEnrollmentTestCase):
response = self.client.post(url, {'name': ccx_name})
self.assertEqual(response.status_code, 302)
url = response.get('location') # pylint: disable=no-member
url = response.get('location')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
@@ -473,7 +473,7 @@ class TestCoachDashboard(CcxTestCase, LoginEnrollmentTestCase):
'ccx_coach_dashboard',
kwargs={'course_id': CCXLocator.from_course_locator(self.course.id, ccx.id)})
response = self.client.get(url)
schedule = json.loads(response.mako_context['schedule']) # pylint: disable=no-member
schedule = json.loads(response.mako_context['schedule'])
self.assertEqual(len(schedule), 2)
self.assertEqual(schedule[0]['hidden'], False)
@@ -587,7 +587,7 @@ class TestCoachDashboard(CcxTestCase, LoginEnrollmentTestCase):
kwargs={'course_id': course_id}
)
response = self.client.get(coach_dashboard_url)
schedule = json.loads(response.mako_context['schedule']) # pylint: disable=no-member
schedule = json.loads(response.mako_context['schedule'])
response = self.client.post(
save_ccx_url, json.dumps(schedule), content_type='application/json'
)
@@ -900,7 +900,7 @@ class TestCoachDashboardSchedule(CcxTestCase, LoginEnrollmentTestCase, ModuleSto
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
# the schedule contains chapters
chapters = json.loads(response.mako_context['schedule']) # pylint: disable=no-member
chapters = json.loads(response.mako_context['schedule'])
sequentials = flatten([chapter.get('children', []) for chapter in chapters])
verticals = flatten([sequential.get('children', []) for sequential in sequentials])
# check that the numbers of nodes at different level are the expected ones
@@ -1073,8 +1073,8 @@ class TestCCXGrades(FieldOverrideTestMixin, SharedModuleStoreTestCase, LoginEnro
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
# Max number of student per page is one. Patched setting MAX_STUDENTS_PER_PAGE_GRADE_BOOK = 1
self.assertEqual(len(response.mako_context['students']), 1) # pylint: disable=no-member
student_info = response.mako_context['students'][0] # pylint: disable=no-member
self.assertEqual(len(response.mako_context['students']), 1)
student_info = response.mako_context['students'][0]
self.assertEqual(student_info['grade_summary']['percent'], 0.5)
self.assertEqual(student_info['grade_summary']['grade_breakdown'].values()[0]['percent'], 0.5)
self.assertEqual(len(student_info['grade_summary']['section_breakdown']), 4)
@@ -1120,7 +1120,7 @@ class TestCCXGrades(FieldOverrideTestMixin, SharedModuleStoreTestCase, LoginEnro
)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
grades = response.mako_context['grade_summary'] # pylint: disable=no-member
grades = response.mako_context['grade_summary']
self.assertEqual(grades['percent'], 0.5)
self.assertEqual(grades['grade_breakdown'].values()[0]['percent'], 0.5)
self.assertEqual(len(grades['section_breakdown']), 4)

View File

@@ -177,7 +177,7 @@ def has_staff_access_to_preview_mode(user, course_key):
return has_admin_access_to_course or is_masquerading_as_student(user, course_key)
def _can_view_courseware_with_prerequisites(user, course): # pylint: disable=invalid-name
def _can_view_courseware_with_prerequisites(user, course):
"""
Checks if a user has access to a course based on its prerequisites.
@@ -623,7 +623,7 @@ def _dispatch(table, action, user, obj):
type(obj), action))
def _adjust_start_date_for_beta_testers(user, descriptor, course_key): # pylint: disable=invalid-name
def _adjust_start_date_for_beta_testers(user, descriptor, course_key):
"""
If user is in a beta test group, adjust the start date by the appropriate number of
days.
@@ -716,7 +716,7 @@ def administrative_accesses_to_course_for_user(user, course_key):
return global_staff, staff_access, instructor_access
def _has_instructor_access_to_descriptor(user, descriptor, course_key): # pylint: disable=invalid-name
def _has_instructor_access_to_descriptor(user, descriptor, course_key):
"""Helper method that checks whether the user has staff access to
the course of the location.

View File

@@ -100,7 +100,7 @@ class StartDateError(AccessError):
user_message = _("Course has not started")
else:
developer_message = "Course does not start until {}".format(start_date)
user_message = _("Course does not start until {}" # pylint: disable=translation-of-non-string
user_message = _("Course does not start until {}"
.format("{:%B %d, %Y}".format(start_date)))
super(StartDateError, self).__init__(error_code, developer_message, user_message)

View File

@@ -162,7 +162,7 @@ def is_masquerading_as_student(user, course_key):
return get_masquerade_role(user, course_key) == 'student'
def is_masquerading_as_specific_student(user, course_key): # pylint: disable=invalid-name
def is_masquerading_as_specific_student(user, course_key):
"""
Returns whether the user is a staff member masquerading as a specific student.
"""

View File

@@ -270,7 +270,6 @@ class XBlockFieldBase(models.Model):
modified = models.DateTimeField(auto_now=True, db_index=True)
def __unicode__(self):
# pylint: disable=protected-access
keys = [field.name for field in self._meta.get_fields() if field.name not in ('created', 'modified')]
return u'{}<{!r}'.format(self.__class__.__name__, {key: getattr(self, key) for key in keys})
@@ -352,7 +351,7 @@ class OfflineComputedGradeLog(models.Model):
nstudents = models.IntegerField(default=0)
def __unicode__(self):
return "[OCGLog] %s: %s" % (text_type(self.course_id), self.created) # pylint: disable=no-member
return "[OCGLog] %s: %s" % (text_type(self.course_id), self.created)
class StudentFieldOverride(TimeStampedModel):

View File

@@ -391,7 +391,7 @@ def get_module_for_descriptor(user, request, descriptor, field_data_cache, cours
def get_module_system_for_user(
user,
student_data, # TODO # pylint: disable=too-many-statements
student_data, # TODO
# Arguments preceding this comment have user binding, those following don't
descriptor,
course_id,
@@ -797,7 +797,7 @@ def get_module_system_for_user(
# TODO: Find all the places that this method is called and figure out how to
# get a loaded course passed into it
def get_module_for_descriptor_internal(user, descriptor, student_data, course_id, # pylint: disable=invalid-name
def get_module_for_descriptor_internal(user, descriptor, student_data, course_id,
track_function, xqueue_callback_url_prefix, request_token,
position=None, wrap_xmodule_display=True, grade_bucket_type=None,
static_asset_path='', user_location=None, disable_staff_debug_info=False,

View File

@@ -157,7 +157,7 @@ class ProgressPageCreditRequirementsTest(SharedModuleStoreTestCase):
def test_credit_requirements_on_progress_page(self, enrollment_mode, is_requirement_displayed):
"""Test the progress table is only displayed to the verified and credit students."""
self.enrollment.mode = enrollment_mode
self.enrollment.save() # pylint: disable=no-member
self.enrollment.save()
response = self._get_progress_page()
# Verify the requirements are shown only if the user is in a credit-eligible mode.

View File

@@ -367,8 +367,8 @@ class TestXBlockInCourse(SharedModuleStoreTestCase):
}
response = self.client.get(url, query_params)
self.assertEquals(response.status_code, 200)
self.assertEquals(response.data['root'], unicode(self.course_usage_key)) # pylint: disable=no-member
for block_key_string, block_data in response.data['blocks'].iteritems(): # pylint: disable=no-member
self.assertEquals(response.data['root'], unicode(self.course_usage_key))
for block_key_string, block_data in response.data['blocks'].iteritems():
block_key = deserialize_usage_key(block_key_string, self.course_key)
self.assertEquals(block_data['id'], block_key_string)
self.assertEquals(block_data['type'], block_key.block_type)

View File

@@ -141,7 +141,7 @@ class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, Milest
self.anonymous_user = AnonymousUserFactory()
self.request = get_mock_request(UserFactory())
modulestore().update_item(self.course, self.request.user.id) # pylint: disable=no-member
modulestore().update_item(self.course, self.request.user.id)
self.client.login(username=self.request.user.username, password="test")
CourseEnrollment.enroll(self.request.user, self.course.id)
@@ -311,7 +311,7 @@ class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, Milest
"""
minimum_score_pct = 29
self.course.entrance_exam_minimum_score_pct = float(minimum_score_pct) / 100
modulestore().update_item(self.course, self.request.user.id) # pylint: disable=no-member
modulestore().update_item(self.course, self.request.user.id)
# answer the problem so it results in only 20% correct.
answer_entrance_exam_problem(self.course, self.request, self.problem_1, value=1, max_value=5)

View File

@@ -43,7 +43,7 @@ def resolve_attrs(test_method):
replaces them with the resolved values of those attributes in the method
call.
"""
def _wrapper(self, *args): # pylint: disable=missing-docstring
def _wrapper(self, *args):
new_args = [getattr(self, arg) for arg in args]
return test_method(self, *new_args)
return _wrapper

View File

@@ -393,7 +393,7 @@ class ModuleRenderTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
)
# grab what _field_data was originally set to
original_field_data = descriptor._field_data # pylint: disable=protected-access, no-member
original_field_data = descriptor._field_data # pylint: disable=protected-access
render.get_module_for_descriptor(
self.mock_user, request, descriptor, field_data_cache, course.id, course=course
@@ -401,7 +401,7 @@ class ModuleRenderTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
# check that _unwrapped_field_data is the same as the original
# _field_data, but now _field_data as been reset.
# pylint: disable=protected-access, no-member
# pylint: disable=protected-access
self.assertIs(descriptor._unwrapped_field_data, original_field_data)
self.assertIsNot(descriptor._unwrapped_field_data, descriptor._field_data)
@@ -417,19 +417,19 @@ class ModuleRenderTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
)
# _field_data should now be wrapped by LmsFieldData
# pylint: disable=protected-access, no-member
# pylint: disable=protected-access
self.assertIsInstance(descriptor._field_data, LmsFieldData)
# the LmsFieldData should now wrap OverrideFieldData
self.assertIsInstance(
# pylint: disable=protected-access, no-member
# pylint: disable=protected-access
descriptor._field_data._authored_data._source,
OverrideFieldData
)
# the OverrideFieldData should point to the original unwrapped field_data
self.assertIs(
# pylint: disable=protected-access, no-member
# pylint: disable=protected-access
descriptor._field_data._authored_data._source.fallback,
descriptor._unwrapped_field_data
)
@@ -1476,13 +1476,13 @@ class JsonInitDataTest(ModuleStoreTestCase):
mock_request.user = mock_user
course = CourseFactory()
descriptor = ItemFactory(category='withjson', parent=course)
field_data_cache = FieldDataCache([course, descriptor], course.id, mock_user) # pylint: disable=no-member
field_data_cache = FieldDataCache([course, descriptor], course.id, mock_user)
module = render.get_module_for_descriptor(
mock_user,
mock_request,
descriptor,
field_data_cache,
course.id, # pylint: disable=no-member
course.id,
course=course
)
html = module.render(STUDENT_VIEW).content
@@ -2125,7 +2125,7 @@ class TestEventPublishing(ModuleStoreTestCase, LoginEnrollmentTestCase):
request.user = self.mock_user
course = CourseFactory()
descriptor = ItemFactory(category=block_type, parent=course)
field_data_cache = FieldDataCache([course, descriptor], course.id, self.mock_user) # pylint: disable=no-member
field_data_cache = FieldDataCache([course, descriptor], course.id, self.mock_user)
block = render.get_module(self.mock_user, request, descriptor.location, field_data_cache)
event_type = 'event_type'
@@ -2242,7 +2242,7 @@ class TestFilteredChildren(SharedModuleStoreTestCase):
super(TestFilteredChildren, cls).setUpClass()
cls.course = CourseFactory.create()
# pylint: disable=attribute-defined-outside-init, no-member
# pylint: disable=attribute-defined-outside-init
def setUp(self):
super(TestFilteredChildren, self).setUp()
self.users = {number: UserFactory() for number in USER_NUMBERS}
@@ -2391,7 +2391,6 @@ class TestDisabledXBlockTypes(ModuleStoreTestCase):
"""
Tests that verify disabled XBlock types are not loaded.
"""
# pylint: disable=no-member
def setUp(self):
super(TestDisabledXBlockTypes, self).setUp()
XBlockConfiguration(name='video', enabled=False).save()

View File

@@ -28,7 +28,6 @@ class TestNavigation(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(TestNavigation, cls).setUpClassAndTestData():
cls.test_course = CourseFactory.create()
cls.test_course_proctored = CourseFactory.create()

View File

@@ -167,7 +167,6 @@ class TestSplitTestVert(SplitTestBase):
def setUp(self):
# We define problem compenents that we need but don't explicitly call elsewhere.
# pylint: disable=unused-variable
super(TestSplitTestVert, self).setUp()
c0_url = self.course.id.make_usage_key("vertical", "split_test_cond0")
@@ -236,7 +235,6 @@ class TestVertSplitTestVert(SplitTestBase):
def setUp(self):
# We define problem compenents that we need but don't explicitly call elsewhere.
# pylint: disable=unused-variable
super(TestVertSplitTestVert, self).setUp()
vert1 = ItemFactory.create(

View File

@@ -48,7 +48,7 @@ from lms.djangoapps.certificates.models import (
)
from lms.djangoapps.certificates.tests.factories import CertificateInvalidationFactory, GeneratedCertificateFactory
from lms.djangoapps.commerce.models import CommerceConfiguration
from lms.djangoapps.commerce.utils import EcommerceService # pylint: disable=import-error
from lms.djangoapps.commerce.utils import EcommerceService
from lms.djangoapps.grades.config.waffle import waffle as grades_waffle
from lms.djangoapps.grades.config.waffle import ASSUME_ZERO_GRADE_IF_ABSENT
from openedx.core.djangoapps.catalog.tests.factories import CourseFactory as CatalogCourseFactory
@@ -317,7 +317,7 @@ class ViewsTestCase(ModuleStoreTestCase):
url = reverse('courseware', kwargs={'course_id': unicode(self.course_key)})
response = self.client.get(url)
self.assertEqual(response.status_code, 302)
response = self.client.get(response.url) # pylint: disable=no-member
response = self.client.get(response.url)
self.assertNotIn(unicode(self.problem.location), response.content.decode("utf-8"))
self.assertIn(unicode(self.problem2.location), response.content.decode("utf-8"))
@@ -920,7 +920,7 @@ class ViewsTestCase(ModuleStoreTestCase):
self.assertEqual(response.status_code, 200)
self.course.bypass_home = True
self.store.update_item(self.course, self.user.id) # pylint: disable=no-member
self.store.update_item(self.course, self.user.id)
self.assertTrue(self.course.bypass_home)
response = self.client.get(reverse('info', args=[course_id]), HTTP_REFERER=reverse('dashboard'))
@@ -965,7 +965,7 @@ class TestProgramMarketingView(SharedModuleStoreTestCase):
super(TestProgramMarketingView, cls).setUpClass()
modulestore_course = CourseFactory()
course_run = CourseRunFactory(key=unicode(modulestore_course.id)) # pylint: disable=no-member
course_run = CourseRunFactory(key=unicode(modulestore_course.id))
course = CatalogCourseFactory(course_runs=[course_run])
cls.data = ProgramFactory(
@@ -1167,7 +1167,6 @@ class StartDateTests(ModuleStoreTestCase):
self.assertContains(response, "2013-09-16T07:17:28+0000")
# pylint: disable=protected-access, no-member
@attr(shard=5)
class ProgressPageBaseTests(ModuleStoreTestCase):
"""
@@ -1225,7 +1224,7 @@ class ProgressPageBaseTests(ModuleStoreTestCase):
return resp
# pylint: disable=protected-access, no-member
# pylint: disable=protected-access
@attr(shard=5)
@ddt.ddt
class ProgressPageTests(ProgressPageBaseTests):
@@ -1783,7 +1782,6 @@ class ProgressPageTests(ProgressPageBaseTests):
}
# pylint: disable=protected-access, no-member
@attr(shard=5)
@ddt.ddt
class ProgressPageShowCorrectnessTests(ProgressPageBaseTests):
@@ -2135,8 +2133,8 @@ class GenerateUserCertTests(ModuleStoreTestCase):
self.assertEqual(resp.status_code, 200)
# Verify Google Analytics event fired after generating certificate
mock_tracker.track.assert_called_once_with( # pylint: disable=no-member
self.student.id, # pylint: disable=no-member
mock_tracker.track.assert_called_once_with(
self.student.id,
'edx.bi.user.certificate.generate',
{
'category': 'certificates',
@@ -2716,7 +2714,6 @@ class TestIndexViewCrawlerStudentStateWrites(SharedModuleStoreTestCase):
def setUpClass(cls):
"""Set up the simplest course possible."""
# setUpClassAndTestData() already calls setUpClass on SharedModuleStoreTestCase
# pylint: disable=super-method-not-called
with super(TestIndexViewCrawlerStudentStateWrites, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
with cls.store.bulk_operations(cls.course.id):

View File

@@ -45,7 +45,7 @@ class ActivateLoginTest(LoginEnrollmentTestCase):
has 'is_from_log_out' attribute set to true.
"""
response = self.client.get(reverse('logout'))
self.assertTrue(getattr(response.wsgi_request, 'is_from_logout', False)) # pylint: disable=no-member
self.assertTrue(getattr(response.wsgi_request, 'is_from_logout', False))
class PageLoaderTestCase(LoginEnrollmentTestCase):

View File

@@ -1,7 +1,6 @@
"""
Common test utilities for courseware functionality
"""
# pylint: disable=attribute-defined-outside-init
from abc import ABCMeta, abstractmethod
from datetime import datetime, timedelta

View File

@@ -197,13 +197,13 @@ def user_groups(user):
cache_expiration = 60 * 60 # one hour
# Kill caching on dev machines -- we switch groups a lot
group_names = cache.get(key) # pylint: disable=no-member
group_names = cache.get(key)
if settings.DEBUG:
group_names = None
if group_names is None:
group_names = [u.name for u in UserTestGroup.objects.filter(users=user)]
cache.set(key, group_names, cache_expiration) # pylint: disable=no-member
cache.set(key, group_names, cache_expiration)
return group_names
@@ -1413,7 +1413,7 @@ def generate_user_cert(request, course_id):
return HttpResponse()
def _track_successful_certificate_generation(user_id, course_id): # pylint: disable=invalid-name
def _track_successful_certificate_generation(user_id, course_id):
"""
Track a successful certificate generation event.
@@ -1616,7 +1616,7 @@ def financial_assistance_form(request):
enrolled_courses = get_financial_aid_courses(user)
incomes = ['Less than $5,000', '$5,000 - $10,000', '$10,000 - $15,000', '$15,000 - $20,000', '$20,000 - $25,000']
annual_incomes = [
{'name': _(income), 'value': income} for income in incomes # pylint: disable=translation-of-non-string
{'name': _(income), 'value': income} for income in incomes
]
return render_to_response('financial-assistance/apply.html', {
'header_text': FINANCIAL_ASSISTANCE_HEADER,

View File

@@ -1,2 +1,2 @@
# This import registers the ForumThreadViewedEventTransformer
import event_transformers # pylint: disable=unused-import
import event_transformers # pylint: disable=relative-import

View File

@@ -237,15 +237,15 @@ class ViewsTestCaseMixin(object):
with patch('student.models.cc.User.save'):
uname = 'student'
email = 'student@edx.org'
self.password = 'test' # pylint: disable=attribute-defined-outside-init
self.password = 'test'
# Create the user and make them active so we can log them in.
self.student = User.objects.create_user(uname, email, self.password) # pylint: disable=attribute-defined-outside-init
self.student = User.objects.create_user(uname, email, self.password)
self.student.is_active = True
self.student.save()
# Add a discussion moderator
self.moderator = UserFactory.create(password=self.password) # pylint: disable=attribute-defined-outside-init
self.moderator = UserFactory.create(password=self.password)
# Enroll the student in the course
CourseEnrollmentFactory(user=self.student,
@@ -435,7 +435,6 @@ class ViewsTestCase(
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(ViewsTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create(
org='MITx', course='999',
@@ -464,15 +463,15 @@ class ViewsTestCase(
with patch('student.models.cc.User.save'):
uname = 'student'
email = 'student@edx.org'
self.password = 'test' # pylint: disable=attribute-defined-outside-init
self.password = 'test'
# Create the user and make them active so we can log them in.
self.student = User.objects.create_user(uname, email, self.password) # pylint: disable=attribute-defined-outside-init
self.student = User.objects.create_user(uname, email, self.password)
self.student.is_active = True
self.student.save()
# Add a discussion moderator
self.moderator = UserFactory.create(password=self.password) # pylint: disable=attribute-defined-outside-init
self.moderator = UserFactory.create(password=self.password)
# Enroll the student in the course
CourseEnrollmentFactory(user=self.student,
@@ -1074,7 +1073,6 @@ class ViewPermissionsTestCase(ForumsEnableMixin, UrlResetMixin, SharedModuleStor
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(ViewPermissionsTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1186,7 +1184,6 @@ class CreateThreadUnicodeTestCase(
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(CreateThreadUnicodeTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1229,7 +1226,6 @@ class UpdateThreadUnicodeTestCase(
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(UpdateThreadUnicodeTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1272,7 +1268,6 @@ class CreateCommentUnicodeTestCase(
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(CreateCommentUnicodeTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1320,7 +1315,6 @@ class UpdateCommentUnicodeTestCase(
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(UpdateCommentUnicodeTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1361,7 +1355,6 @@ class CreateSubCommentUnicodeTestCase(
"""
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(CreateSubCommentUnicodeTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1443,7 +1436,6 @@ class TeamsPermissionsTestCase(ForumsEnableMixin, UrlResetMixin, SharedModuleSto
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(TeamsPermissionsTestCase, cls).setUpClassAndTestData():
teams_configuration = {
'topics': [{'id': "topic_id", 'name': 'Solar Power', 'description': 'Solar power is hot'}]
@@ -1754,7 +1746,6 @@ class ForumEventTestCase(ForumsEnableMixin, SharedModuleStoreTestCase, MockReque
"""
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(ForumEventTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()
@@ -1936,7 +1927,6 @@ class UsersEndpointTestCase(ForumsEnableMixin, SharedModuleStoreTestCase, MockRe
@classmethod
def setUpClass(cls):
# pylint: disable=super-method-not-called
with super(UsersEndpointTestCase, cls).setUpClassAndTestData():
cls.course = CourseFactory.create()

View File

@@ -100,7 +100,7 @@ def track_created_event(request, event_name, course, obj, data):
track_forum_event(request, event_name, course, obj, data)
def add_truncated_title_to_event_data(event_data, full_title): # pylint: disable=invalid-name
def add_truncated_title_to_event_data(event_data, full_title):
event_data['title_truncated'] = (len(full_title) > TRACKING_MAX_FORUM_TITLE)
event_data['title'] = full_title[:TRACKING_MAX_FORUM_TITLE]

View File

@@ -169,7 +169,7 @@ class NonCohortedTopicGroupIdTestMixin(GroupIdAssertionMixin):
def test_team_discussion_id_not_cohorted(self, mock_request):
team = CourseTeamFactory(course_id=self.course.id)
team.add_user(self.student) # pylint: disable=no-member
team.add_user(self.student)
self.call_view(mock_request, team.discussion_topic_id, self.student, None)
self._assert_comments_service_called_without_group_id(mock_request)

View File

@@ -419,7 +419,7 @@ class CategoryMapTestCase(CategoryMapTestMixin, ModuleStoreTestCase):
"Topic C": {"id": "Topic_C"}
}
def check_cohorted_topics(expected_ids): # pylint: disable=missing-docstring
def check_cohorted_topics(expected_ids):
self.assert_category_map_equals(
{
"entries": {
@@ -1327,7 +1327,7 @@ class IsCommentableDividedTestCase(ModuleStoreTestCase):
course = modulestore().get_course(self.toy_course_key)
self.assertFalse(cohorts.is_course_cohorted(course.id))
def to_id(name): # pylint: disable=missing-docstring
def to_id(name):
return topic_name_to_id(course, name)
config_course_cohorts(

View File

@@ -128,7 +128,7 @@ def has_required_keys(xblock):
return True
def get_accessible_discussion_xblocks(course, user, include_all=False): # pylint: disable=invalid-name
def get_accessible_discussion_xblocks(course, user, include_all=False):
"""
Return a list of all valid discussion xblocks in this course that
are accessible to the given user.
@@ -198,7 +198,7 @@ def get_cached_discussion_id_map(course, discussion_ids, user):
return get_cached_discussion_id_map_by_course_id(course.id, discussion_ids, user)
def get_cached_discussion_id_map_by_course_id(course_id, discussion_ids, user): # pylint: disable=invalid-name
def get_cached_discussion_id_map_by_course_id(course_id, discussion_ids, user):
"""
Returns a dict mapping discussion_ids to respective discussion xblock metadata if it is cached and visible to the
user. If not, returns the result of get_discussion_id_map
@@ -227,7 +227,7 @@ def get_discussion_id_map(course, user):
return get_discussion_id_map_by_course_id(course.id, user)
def get_discussion_id_map_by_course_id(course_id, user): # pylint: disable=invalid-name
def get_discussion_id_map_by_course_id(course_id, user):
"""
Transform the list of this course's discussion xblocks (visible to a given user) into a dictionary of metadata keyed
by discussion_id.
@@ -397,7 +397,7 @@ def get_discussion_category_map(course, user, divided_only_if_explicit=False, ex
if node[level]["start_date"] > category_start_date:
node[level]["start_date"] = category_start_date
divide_all_inline_discussions = ( # pylint: disable=invalid-name
divide_all_inline_discussions = (
not divided_only_if_explicit and discussion_settings.always_divide_inline_discussions
)
dupe_counters = defaultdict(lambda: 0) # counts the number of times we see each title

View File

@@ -80,7 +80,7 @@ def get_instructor_task_history(course_id, usage_key=None, student=None, task_ty
return instructor_tasks.order_by('-id')
def get_entrance_exam_instructor_task_history(course_id, usage_key=None, student=None): # pylint: disable=invalid-name
def get_entrance_exam_instructor_task_history(course_id, usage_key=None, student=None):
"""
Returns a query of InstructorTask objects of historical tasks for a given course,
that optionally match an entrance exam and student if present.
@@ -94,7 +94,7 @@ def get_entrance_exam_instructor_task_history(course_id, usage_key=None, student
# Disabling invalid-name because this fn name is longer than 30 chars.
def submit_rescore_problem_for_student(request, usage_key, student, only_if_higher=False): # pylint: disable=invalid-name
def submit_rescore_problem_for_student(request, usage_key, student, only_if_higher=False):
"""
Request a problem to be rescored as a background task.
@@ -138,7 +138,7 @@ def submit_override_score(request, usage_key, student, score):
return submit_task(request, task_type, task_class, usage_key.course_key, task_input, task_key)
def submit_rescore_problem_for_all_students(request, usage_key, only_if_higher=False): # pylint: disable=invalid-name
def submit_rescore_problem_for_all_students(request, usage_key, only_if_higher=False):
"""
Request a problem to be rescored as a background task.
@@ -162,7 +162,7 @@ def submit_rescore_problem_for_all_students(request, usage_key, only_if_higher=F
return submit_task(request, task_type, task_class, usage_key.course_key, task_input, task_key)
def submit_rescore_entrance_exam_for_student(request, usage_key, student=None, only_if_higher=False): # pylint: disable=invalid-name
def submit_rescore_entrance_exam_for_student(request, usage_key, student=None, only_if_higher=False):
"""
Request entrance exam problems to be re-scored as a background task.
@@ -321,7 +321,7 @@ def submit_bulk_course_email(request, course_key, email_id):
return submit_task(request, task_type, task_class, course_key, task_input, task_key)
def submit_calculate_problem_responses_csv(request, course_key, problem_location): # pylint: disable=invalid-name
def submit_calculate_problem_responses_csv(request, course_key, problem_location):
"""
Submits a task to generate a CSV file containing all student
answers to a given problem.
@@ -374,7 +374,7 @@ def submit_calculate_students_features_csv(request, course_key, features):
return submit_task(request, task_type, task_class, course_key, task_input, task_key)
def submit_detailed_enrollment_features_csv(request, course_key): # pylint: disable=invalid-name
def submit_detailed_enrollment_features_csv(request, course_key):
"""
Submits a task to generate a CSV containing detailed enrollment info.
@@ -431,7 +431,7 @@ def submit_course_survey_report(request, course_key):
return submit_task(request, task_type, task_class, course_key, task_input, task_key)
def submit_proctored_exam_results_report(request, course_key): # pylint: disable=invalid-name
def submit_proctored_exam_results_report(request, course_key):
"""
Submits a task to generate a HTML File containing the executive summary report.
@@ -471,7 +471,7 @@ def submit_export_ora2_data(request, course_key):
return submit_task(request, task_type, task_class, course_key, task_input, task_key)
def generate_certificates_for_students(request, course_key, student_set=None, specific_student_id=None): # pylint: disable=invalid-name
def generate_certificates_for_students(request, course_key, student_set=None, specific_student_id=None):
"""
Submits a task to generate certificates for given students enrolled in the course.

View File

@@ -370,7 +370,7 @@ def check_entrance_exam_problems_for_rescoring(exam_key): # pylint: disable=inv
raise NotImplementedError(msg)
def encode_problem_and_student_input(usage_key, student=None): # pylint: disable=invalid-name
def encode_problem_and_student_input(usage_key, student=None):
"""
Encode optional usage_key and optional student into task_key and task_input values.
@@ -393,7 +393,7 @@ def encode_problem_and_student_input(usage_key, student=None): # pylint: disabl
return task_input, task_key
def encode_entrance_exam_and_student_input(usage_key, student=None): # pylint: disable=invalid-name
def encode_entrance_exam_and_student_input(usage_key, student=None):
"""
Encode usage_key and optional student into task_key and task_input values.

View File

@@ -54,7 +54,7 @@ from lms.djangoapps.instructor_task.tasks_helper.runner import run_main_task
TASK_LOG = logging.getLogger('edx.celery.task')
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def rescore_problem(entry_id, xmodule_instance_args):
"""Rescores a problem in a course, for all students or one specific student.
@@ -81,7 +81,7 @@ def rescore_problem(entry_id, xmodule_instance_args):
return run_main_task(entry_id, visit_fcn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def override_problem_score(entry_id, xmodule_instance_args):
"""
Overrides a specific learner's score on a problem.
@@ -94,7 +94,7 @@ def override_problem_score(entry_id, xmodule_instance_args):
return run_main_task(entry_id, visit_fcn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def reset_problem_attempts(entry_id, xmodule_instance_args):
"""Resets problem attempts to zero for a particular problem for all students in a course.
@@ -116,7 +116,7 @@ def reset_problem_attempts(entry_id, xmodule_instance_args):
return run_main_task(entry_id, visit_fcn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def delete_problem_state(entry_id, xmodule_instance_args):
"""Deletes problem state entirely for all students on a particular problem in a course.
@@ -138,7 +138,7 @@ def delete_problem_state(entry_id, xmodule_instance_args):
return run_main_task(entry_id, visit_fcn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def send_bulk_course_email(entry_id, _xmodule_instance_args):
"""Sends emails to recipients enrolled in a course.
@@ -159,7 +159,7 @@ def send_bulk_course_email(entry_id, _xmodule_instance_args):
return run_main_task(entry_id, visit_fcn, action_name)
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY)
def calculate_problem_responses_csv(entry_id, xmodule_instance_args):
"""
Compute student answers to a given problem and upload the CSV to
@@ -171,7 +171,7 @@ def calculate_problem_responses_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY)
def calculate_grades_csv(entry_id, xmodule_instance_args):
"""
Grade a course and push the results to an S3 bucket for download.
@@ -187,7 +187,7 @@ def calculate_grades_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY)
def calculate_problem_grade_report(entry_id, xmodule_instance_args):
"""
Generate a CSV for a course containing all students' problem
@@ -204,7 +204,7 @@ def calculate_problem_grade_report(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def calculate_students_features_csv(entry_id, xmodule_instance_args):
"""
Compute student profile information for a course and upload the
@@ -216,7 +216,7 @@ def calculate_students_features_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def enrollment_report_features_csv(entry_id, xmodule_instance_args):
"""
Compute student profile information for a course and upload the
@@ -228,7 +228,7 @@ def enrollment_report_features_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def exec_summary_report_csv(entry_id, xmodule_instance_args):
"""
Compute executive summary report for a course and upload the
@@ -240,7 +240,7 @@ def exec_summary_report_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def course_survey_report_csv(entry_id, xmodule_instance_args):
"""
Compute the survey report for a course and upload the
@@ -252,7 +252,7 @@ def course_survey_report_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def proctored_exam_results_csv(entry_id, xmodule_instance_args):
"""
Compute proctored exam results report for a course and upload the
@@ -263,7 +263,7 @@ def proctored_exam_results_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def calculate_may_enroll_csv(entry_id, xmodule_instance_args):
"""
Compute information about invited students who have not enrolled
@@ -276,7 +276,7 @@ def calculate_may_enroll_csv(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY)
def generate_certificates(entry_id, xmodule_instance_args):
"""
Grade students and generate certificates.
@@ -292,7 +292,7 @@ def generate_certificates(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def cohort_students(entry_id, xmodule_instance_args):
"""
Cohort students in bulk, and upload the results.
@@ -304,7 +304,7 @@ def cohort_students(entry_id, xmodule_instance_args):
return run_main_task(entry_id, task_fn, action_name)
@task(base=BaseInstructorTask) # pylint: disable=not-callable
@task(base=BaseInstructorTask)
def export_ora2_data(entry_id, xmodule_instance_args):
"""
Generate a CSV of ora2 responses and push it to S3.

View File

@@ -120,7 +120,7 @@ def students_require_certificate(course_id, enrolled_students, statuses_to_regen
return list(set(enrolled_students) - set(students_already_have_certs))
def invalidate_generated_certificates(course_id, enrolled_students, certificate_statuses): # pylint: disable=invalid-name
def invalidate_generated_certificates(course_id, enrolled_students, certificate_statuses):
"""
Invalidate generated certificates for all enrolled students in the given course having status in
'certificate_statuses'.

View File

@@ -87,7 +87,7 @@ def upload_course_survey_report(_xmodule_instance_args, _entry_id, course_id, _t
return task_progress.update_task_state(extra_meta=current_step)
def upload_proctored_exam_results_report(_xmodule_instance_args, _entry_id, course_id, _task_input, action_name): # pylint: disable=invalid-name
def upload_proctored_exam_results_report(_xmodule_instance_args, _entry_id, course_id, _task_input, action_name):
"""
For a given `course_id`, generate a CSV file containing
information about proctored exam results, and store using a `ReportStore`.

View File

@@ -1425,14 +1425,14 @@ class TestCourseSurveyReport(TestReportMixin, InstructorTaskCourseTestCase):
report_store = ReportStore.from_config(config_name='GRADES_DOWNLOAD')
header_row = ",".join(['User ID', 'User Name', 'Email', self.question1, self.question2, self.question3])
student1_row = ",".join([
str(self.student1.id), # pylint: disable=no-member
str(self.student1.id),
self.student1.username,
self.student1.email,
self.answer1,
self.answer2
])
student2_row = ",".join([
str(self.student2.id), # pylint: disable=no-member
str(self.student2.id),
self.student2.username,
self.student2.email,
self.answer3,
@@ -2734,7 +2734,6 @@ class TestInstructorOra2Report(SharedModuleStoreTestCase):
) as mock_store_rows:
return_val = upload_ora2_data(None, None, self.course.id, None, 'generated')
# pylint: disable=maybe-no-member
timestamp_str = datetime.now(UTC).strftime('%Y-%m-%d-%H%M')
course_id_string = urllib.quote(text_type(self.course.id).replace('/', '_'))
filename = u'{}_ORA_data_{}.csv'.format(course_id_string, timestamp_str)

View File

@@ -124,7 +124,7 @@ def get_task_completion_info(instructor_task):
log.warning(fmt.format(instructor_task.task_id, instructor_task.task_output))
return (succeeded, _("No progress status information available"))
action_name = _(task_output['action_name']) # pylint: disable=translation-of-non-string
action_name = _(task_output['action_name'])
num_attempted = task_output['attempted']
num_total = task_output['total']