BOM-2281 : Pylint amnesty for grades,gating and instructor app (#26343)
* pyint amnesty for grades,gating and instructor app
This commit is contained in:
@@ -7,7 +7,7 @@ import logging
|
||||
|
||||
import six
|
||||
from celery import shared_task
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from edx_django_utils.monitoring import set_code_owner_attribute
|
||||
from opaque_keys.edx.keys import CourseKey, UsageKey
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class GatingTestCase(LoginEnrollmentTestCase, ModuleStoreTestCase):
|
||||
"""
|
||||
Initial data setup
|
||||
"""
|
||||
super(GatingTestCase, self).setUp()
|
||||
super(GatingTestCase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
# create course
|
||||
self.course = CourseFactory.create(
|
||||
@@ -65,7 +65,7 @@ class TestEvaluatePrerequisite(GatingTestCase, MilestonesTestCaseMixin):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestEvaluatePrerequisite, self).setUp()
|
||||
super(TestEvaluatePrerequisite, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user_dict = {'id': self.user.id}
|
||||
self.prereq_milestone = None
|
||||
self.subsection_grade = Mock(location=self.seq1.location, percent_graded=0.5)
|
||||
|
||||
@@ -35,7 +35,7 @@ class TestGatedContent(MilestonesTestCaseMixin, SharedModuleStoreTestCase):
|
||||
cls.set_up_course()
|
||||
|
||||
def setUp(self):
|
||||
super(TestGatedContent, self).setUp()
|
||||
super(TestGatedContent, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.setup_gating_milestone(50, 100)
|
||||
self.non_staff_user = UserFactory()
|
||||
self.staff_user = UserFactory(is_staff=True, is_superuser=True)
|
||||
|
||||
@@ -18,7 +18,7 @@ class TestHandleScoreChanged(ModuleStoreTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestHandleScoreChanged, self).setUp()
|
||||
super(TestHandleScoreChanged, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course = CourseFactory.create(org='TestX', number='TS01', run='2016_Q1')
|
||||
self.user = UserFactory.create()
|
||||
self.subsection_grade = Mock()
|
||||
|
||||
@@ -25,7 +25,7 @@ class PersistentGradesFeatureFlagTests(TestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(PersistentGradesFeatureFlagTests, self).setUp()
|
||||
super(PersistentGradesFeatureFlagTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_id_1 = CourseLocator(org="edx", course="course", run="run")
|
||||
self.course_id_2 = CourseLocator(org="edx", course="course2", run="run")
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ class CourseData(object):
|
||||
self._location = None
|
||||
|
||||
@property
|
||||
def course_key(self):
|
||||
def course_key(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
if not self._course_key:
|
||||
if self._course:
|
||||
self._course_key = self._course.id
|
||||
@@ -45,7 +45,7 @@ class CourseData(object):
|
||||
return self._course_key
|
||||
|
||||
@property
|
||||
def location(self):
|
||||
def location(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
if not self._location:
|
||||
structure = self.effective_structure
|
||||
if structure:
|
||||
@@ -57,7 +57,7 @@ class CourseData(object):
|
||||
return self._location
|
||||
|
||||
@property
|
||||
def structure(self):
|
||||
def structure(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
if self._structure is None:
|
||||
self._structure = get_course_blocks(
|
||||
self.user,
|
||||
@@ -79,7 +79,7 @@ class CourseData(object):
|
||||
return self._course
|
||||
|
||||
@property
|
||||
def grading_policy_hash(self):
|
||||
def grading_policy_hash(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
structure = self.effective_structure
|
||||
if structure:
|
||||
return structure.get_transformer_block_field(
|
||||
@@ -97,7 +97,7 @@ class CourseData(object):
|
||||
return getattr(course_block, 'course_version', None)
|
||||
|
||||
@property
|
||||
def edited_on(self):
|
||||
def edited_on(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
# get course block from structure only; subtree_edited_on field on modulestore's course block isn't optimized.
|
||||
structure = self.effective_structure
|
||||
if structure:
|
||||
@@ -110,7 +110,7 @@ class CourseData(object):
|
||||
"""
|
||||
return u'Course: course_key: {}'.format(self.course_key)
|
||||
|
||||
def full_string(self):
|
||||
def full_string(self): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
if self.effective_structure:
|
||||
return u'Course: course_key: {}, version: {}, edited_on: {}, grading_policy: {}'.format(
|
||||
self.course_key, self.version, self.edited_on, self.grading_policy_hash,
|
||||
|
||||
@@ -249,7 +249,7 @@ class CourseGrade(CourseGradeBase):
|
||||
Course Grade class when grades are updated or read from storage.
|
||||
"""
|
||||
def __init__(self, user, course_data, *args, **kwargs):
|
||||
super(CourseGrade, self).__init__(user, course_data, *args, **kwargs)
|
||||
super(CourseGrade, self).__init__(user, course_data, *args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self._subsection_grade_factory = SubsectionGradeFactory(user, course_data=course_data)
|
||||
|
||||
def update(self):
|
||||
@@ -270,7 +270,7 @@ class CourseGrade(CourseGradeBase):
|
||||
return self
|
||||
|
||||
@lazy
|
||||
def attempted(self):
|
||||
def attempted(self): # lint-amnesty, pylint: disable=invalid-overridden-method
|
||||
"""
|
||||
Returns whether any of the subsections in this course
|
||||
have been attempted by the student.
|
||||
|
||||
@@ -108,11 +108,11 @@ class CourseGradeFactory(object):
|
||||
course_data = CourseData(
|
||||
user=None, course=course, collected_block_structure=collected_block_structure, course_key=course_key,
|
||||
)
|
||||
stats_tags = [u'action:{}'.format(course_data.course_key)]
|
||||
stats_tags = [u'action:{}'.format(course_data.course_key)] # lint-amnesty, pylint: disable=unused-variable
|
||||
for user in users:
|
||||
yield self._iter_grade_result(user, course_data, force_update)
|
||||
|
||||
def _iter_grade_result(self, user, course_data, force_update):
|
||||
def _iter_grade_result(self, user, course_data, force_update): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
try:
|
||||
kwargs = {
|
||||
'user': user,
|
||||
@@ -187,7 +187,7 @@ class CourseGradeFactory(object):
|
||||
|
||||
should_persist = should_persist and course_grade.attempted
|
||||
if should_persist:
|
||||
course_grade._subsection_grade_factory.bulk_create_unsaved()
|
||||
course_grade._subsection_grade_factory.bulk_create_unsaved() # lint-amnesty, pylint: disable=protected-access
|
||||
PersistentCourseGrade.update_or_create(
|
||||
user_id=user.id,
|
||||
course_id=course_data.course_key,
|
||||
|
||||
@@ -8,4 +8,4 @@ class DatabaseNotReadyError(IOError):
|
||||
Subclass of IOError to indicate the database has not yet committed
|
||||
the data we're trying to find.
|
||||
"""
|
||||
pass
|
||||
pass # lint-amnesty, pylint: disable=unnecessary-pass
|
||||
|
||||
@@ -104,7 +104,7 @@ class Command(BaseCommand):
|
||||
# This is a tuple to reduce memory consumption.
|
||||
# The dictionaries with their extra overhead will be created
|
||||
# and consumed one at a time.
|
||||
for task_arg_tuple in tasks._course_task_args(course_key, **options):
|
||||
for task_arg_tuple in tasks._course_task_args(course_key, **options): # lint-amnesty, pylint: disable=protected-access
|
||||
all_args.append(task_arg_tuple)
|
||||
|
||||
all_args.sort(key=lambda x: hashlib.md5('{!r}'.format(x).encode('utf-8')).digest())
|
||||
|
||||
@@ -22,7 +22,7 @@ class TestRecalculateLearnerGrades(HasCourseWithProblemsMixin, ModuleStoreTestCa
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestRecalculateLearnerGrades, self).setUp()
|
||||
super(TestRecalculateLearnerGrades, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.command = recalculate_learner_grades.Command()
|
||||
|
||||
self.course1 = CourseFactory.create()
|
||||
|
||||
@@ -30,7 +30,7 @@ class TestRecalculateSubsectionGrades(HasCourseWithProblemsMixin, ModuleStoreTes
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestRecalculateSubsectionGrades, self).setUp()
|
||||
super(TestRecalculateSubsectionGrades, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.command = recalculate_subsection_grades.Command()
|
||||
|
||||
@patch('lms.djangoapps.grades.management.commands.recalculate_subsection_grades.Submission')
|
||||
@@ -63,7 +63,7 @@ class TestRecalculateSubsectionGrades(HasCourseWithProblemsMixin, ModuleStoreTes
|
||||
id_mock.return_value.id = "ID"
|
||||
self._run_command_and_check_output(task_mock, ScoreDatabaseTableEnum.courseware_student_module)
|
||||
|
||||
def _run_command_and_check_output(self, task_mock, score_db_table, include_anonymous_id=False):
|
||||
def _run_command_and_check_output(self, task_mock, score_db_table, include_anonymous_id=False): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
self.command.handle(modified_start='2016-08-25 16:42', modified_end='2018-08-25 16:44')
|
||||
kwargs = {
|
||||
"user_id": "ID",
|
||||
|
||||
@@ -17,7 +17,7 @@ from hashlib import sha1
|
||||
|
||||
import six
|
||||
from django.apps import apps
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user, unused-import
|
||||
from django.db import models
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from django.utils.timezone import now
|
||||
@@ -29,7 +29,7 @@ from simple_history.models import HistoricalRecords
|
||||
from six.moves import map
|
||||
|
||||
from lms.djangoapps.courseware.fields import UnsignedBigIntAutoField
|
||||
from lms.djangoapps.grades import constants, events
|
||||
from lms.djangoapps.grades import constants, events # lint-amnesty, pylint: disable=unused-import
|
||||
from openedx.core.lib.cache_utils import get_cache
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -330,7 +330,7 @@ class PersistentSubsectionGrade(TimeStampedModel):
|
||||
"""
|
||||
Returns the "correct" usage key value with the run filled in.
|
||||
"""
|
||||
if self.usage_key.run is None:
|
||||
if self.usage_key.run is None: # lint-amnesty, pylint: disable=no-member
|
||||
# pylint: disable=unexpected-keyword-arg,no-value-for-parameter
|
||||
return self.usage_key.replace(course_key=self.course_id)
|
||||
else:
|
||||
@@ -600,7 +600,7 @@ class PersistentCourseGrade(TimeStampedModel):
|
||||
except KeyError:
|
||||
# user's grade is not in the prefetched dict, so
|
||||
# assume they have no grade
|
||||
raise cls.DoesNotExist
|
||||
raise cls.DoesNotExist # lint-amnesty, pylint: disable=raise-missing-from
|
||||
except KeyError:
|
||||
# grades were not prefetched for the course, so fetch it
|
||||
return cls.objects.get(user_id=user_id, course_id=course_id)
|
||||
@@ -701,7 +701,7 @@ class PersistentSubsectionGradeOverride(models.Model):
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_override(cls, user_id, usage_key):
|
||||
def get_override(cls, user_id, usage_key): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
prefetch_values = get_cache(cls._CACHE_NAMESPACE).get((user_id, str(usage_key.course_key)), None)
|
||||
if prefetch_values is not None:
|
||||
return prefetch_values.get(usage_key)
|
||||
@@ -716,7 +716,7 @@ class PersistentSubsectionGradeOverride(models.Model):
|
||||
|
||||
@classmethod
|
||||
def update_or_create_override(
|
||||
cls, requesting_user, subsection_grade_model, feature=None, action=None, **override_data
|
||||
cls, requesting_user, subsection_grade_model, feature=None, action=None, **override_data # lint-amnesty, pylint: disable=unused-argument
|
||||
):
|
||||
"""
|
||||
Creates or updates an override object for the given PersistentSubsectionGrade.
|
||||
|
||||
@@ -26,7 +26,7 @@ class GradingPolicySerializer(serializers.Serializer):
|
||||
# When the grader dictionary was missing keys, DRF v2 would default to None;
|
||||
# DRF v3 unhelpfully raises an exception.
|
||||
return dict(
|
||||
super(GradingPolicySerializer, self).to_representation(
|
||||
super(GradingPolicySerializer, self).to_representation( # lint-amnesty, pylint: disable=super-with-arguments
|
||||
defaultdict(lambda: None, instance)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -510,7 +510,7 @@ class GradebookView(GradeViewMixin, PaginatedAPIView):
|
||||
@verify_course_exists
|
||||
@verify_writable_gradebook_enabled
|
||||
@course_author_access_required
|
||||
def get(self, request, course_key):
|
||||
def get(self, request, course_key): # lint-amnesty, pylint: disable=too-many-statements
|
||||
"""
|
||||
Returns a gradebook entry/entries (i.e. both course and subsection-level grade data)
|
||||
for all users enrolled in a course, or a single user enrolled in a course
|
||||
@@ -906,7 +906,7 @@ class GradebookBulkUpdateView(GradeViewMixin, PaginatedAPIView):
|
||||
return override
|
||||
|
||||
@staticmethod
|
||||
def _log_update_result(
|
||||
def _log_update_result( # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
request_user,
|
||||
user_id, usage_id,
|
||||
subsection_grade_model=None,
|
||||
@@ -1031,7 +1031,7 @@ class SubsectionGradeView(GradeViewMixin, APIView):
|
||||
try:
|
||||
usage_key = UsageKey.from_string(subsection_id)
|
||||
except InvalidKeyError:
|
||||
raise self.api_error(
|
||||
raise self.api_error( # lint-amnesty, pylint: disable=raise-missing-from
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
developer_message='Invalid UsageKey',
|
||||
error_code='invalid_usage_key'
|
||||
@@ -1047,7 +1047,7 @@ class SubsectionGradeView(GradeViewMixin, APIView):
|
||||
try:
|
||||
user_id = int(request.GET.get('user_id'))
|
||||
except ValueError:
|
||||
raise self.api_error(
|
||||
raise self.api_error( # lint-amnesty, pylint: disable=raise-missing-from
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
developer_message='Invalid UserID',
|
||||
error_code='invalid_user_id'
|
||||
|
||||
@@ -77,7 +77,7 @@ class GradeViewTestMixin(SharedModuleStoreTestCase):
|
||||
created=self.date,
|
||||
)
|
||||
|
||||
def _create_user_program_enrollments(self, *users, **kwargs):
|
||||
def _create_user_program_enrollments(self, *users, **kwargs): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
# supply mode for enrollment. Use 'masters' to create a masters track enrollment
|
||||
for index, user in enumerate(users):
|
||||
course_enrollment = CourseEnrollmentFactory(
|
||||
@@ -99,7 +99,7 @@ class GradeViewTestMixin(SharedModuleStoreTestCase):
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(GradeViewTestMixin, self).setUp()
|
||||
super(GradeViewTestMixin, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.password = 'test'
|
||||
self.global_staff = GlobalStaffFactory.create()
|
||||
self.student = UserFactory(password=self.password, username='student', email='student@example.com')
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""
|
||||
""" # lint-amnesty, pylint: disable=cyclic-import
|
||||
Tests for the course grading API view
|
||||
"""
|
||||
|
||||
@@ -18,7 +18,7 @@ from rest_framework.test import APITestCase
|
||||
from six import text_type
|
||||
|
||||
from common.djangoapps.course_modes.models import CourseMode
|
||||
from edx_toggles.toggles.testutils import override_waffle_flag
|
||||
from edx_toggles.toggles.testutils import override_waffle_flag # lint-amnesty, pylint: disable=wrong-import-order
|
||||
from lms.djangoapps.certificates.models import CertificateStatuses, GeneratedCertificate
|
||||
from lms.djangoapps.courseware.tests.factories import InstructorFactory, StaffFactory
|
||||
from lms.djangoapps.grades.config.waffle import WRITABLE_GRADEBOOK, waffle_flags
|
||||
@@ -397,7 +397,7 @@ class GradebookViewTest(GradebookViewTestBase):
|
||||
"""
|
||||
Helper function to create the course gradebook API read url.
|
||||
"""
|
||||
base_url = super(GradebookViewTest, self).get_url(course_key)
|
||||
base_url = super(GradebookViewTest, self).get_url(course_key) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
if username:
|
||||
return "{0}?username={1}".format(base_url, username)
|
||||
if user_contains:
|
||||
|
||||
@@ -27,7 +27,7 @@ class GradingPolicyTestMixin(object):
|
||||
view_name = None
|
||||
|
||||
def setUp(self):
|
||||
super(GradingPolicyTestMixin, self).setUp()
|
||||
super(GradingPolicyTestMixin, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.create_user_and_access_token()
|
||||
|
||||
def create_user_and_access_token(self):
|
||||
@@ -36,7 +36,7 @@ class GradingPolicyTestMixin(object):
|
||||
self.access_token = AccessTokenFactory.create(user=self.user, application=self.oauth_client).token
|
||||
|
||||
@classmethod
|
||||
def create_course_data(cls):
|
||||
def create_course_data(cls): # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
cls.invalid_course_id = 'foo/bar/baz'
|
||||
cls.course = CourseFactory.create(display_name='An Introduction to API Testing', raw_grader=cls.raw_grader)
|
||||
cls.course_id = six.text_type(cls.course.id)
|
||||
@@ -188,7 +188,7 @@ class CourseGradingPolicyTests(GradingPolicyTestMixin, SharedModuleStoreTestCase
|
||||
"""
|
||||
The view should return grading policy for a course.
|
||||
"""
|
||||
response = super(CourseGradingPolicyTests, self).test_get()
|
||||
response = super(CourseGradingPolicyTests, self).test_get() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
expected = [
|
||||
{
|
||||
@@ -240,7 +240,7 @@ class CourseGradingPolicyMissingFieldsTests(GradingPolicyTestMixin, SharedModule
|
||||
"""
|
||||
The view should return grading policy for a course.
|
||||
"""
|
||||
response = super(CourseGradingPolicyMissingFieldsTests, self).test_get()
|
||||
response = super(CourseGradingPolicyMissingFieldsTests, self).test_get() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
expected = [
|
||||
{
|
||||
|
||||
@@ -45,7 +45,7 @@ class CourseEnrollmentPagination(CursorPagination):
|
||||
Return a response given serialized page data, optional status_code (defaults to 200),
|
||||
and kwargs. Each key-value pair of kwargs is added to the response data.
|
||||
"""
|
||||
resp = super(CourseEnrollmentPagination, self).get_paginated_response(data)
|
||||
resp = super(CourseEnrollmentPagination, self).get_paginated_response(data) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
for (key, value) in kwargs.items():
|
||||
resp.data[key] = value
|
||||
@@ -103,13 +103,13 @@ class GradeViewMixin(DeveloperErrorViewMixin):
|
||||
try:
|
||||
yield self._get_single_user(request, course_key)
|
||||
except USER_MODEL.DoesNotExist:
|
||||
raise self.api_error(
|
||||
raise self.api_error( # lint-amnesty, pylint: disable=raise-missing-from
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
developer_message='The user matching the requested username does not exist.',
|
||||
error_code='user_does_not_exist'
|
||||
)
|
||||
except CourseEnrollment.DoesNotExist:
|
||||
raise self.api_error(
|
||||
raise self.api_error( # lint-amnesty, pylint: disable=raise-missing-from
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
developer_message='The user matching the requested username is not enrolled in this course',
|
||||
error_code='user_not_enrolled'
|
||||
@@ -181,6 +181,6 @@ class GradeViewMixin(DeveloperErrorViewMixin):
|
||||
"""
|
||||
Ensures that the user is authenticated (e.g. not an AnonymousUser).
|
||||
"""
|
||||
super(GradeViewMixin, self).perform_authentication(request)
|
||||
super(GradeViewMixin, self).perform_authentication(request) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
if request.user.is_anonymous:
|
||||
raise AuthenticationFailed
|
||||
|
||||
@@ -182,7 +182,7 @@ class CourseGradingPolicy(GradeViewMixin, ListAPIView):
|
||||
try:
|
||||
course_key = get_course_key(request, course_id)
|
||||
except InvalidKeyError:
|
||||
raise self.api_error(
|
||||
raise self.api_error( # lint-amnesty, pylint: disable=raise-missing-from
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
developer_message='The provided course key cannot be parsed.',
|
||||
error_code='invalid_course_key'
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# lint-amnesty, pylint: disable=missing-function-docstring, missing-module-docstring
|
||||
def plugin_settings(settings):
|
||||
# Queue to use for updating persistent grades
|
||||
settings.RECALCULATE_GRADES_ROUTING_KEY = settings.DEFAULT_PRIORITY_QUEUE
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# lint-amnesty, pylint: disable=missing-module-docstring
|
||||
def plugin_settings(settings):
|
||||
settings.FEATURES['PERSISTENT_GRADES_ENABLED_FOR_ALL_TESTS'] = True
|
||||
settings.FEATURES['ASSUME_ZERO_GRADE_IF_ABSENT_FOR_ALL_TESTS'] = True
|
||||
|
||||
@@ -24,7 +24,7 @@ from .. import events
|
||||
from ..constants import ScoreDatabaseTableEnum
|
||||
from ..course_grade_factory import CourseGradeFactory
|
||||
from ..scores import weighted_score
|
||||
from lms.djangoapps.grades.tasks import (
|
||||
from lms.djangoapps.grades.tasks import ( # lint-amnesty, pylint: disable=wrong-import-order
|
||||
RECALCULATE_GRADE_DELAY_SECONDS,
|
||||
recalculate_course_and_subsection_grades_for_user,
|
||||
recalculate_subsection_grade_v3
|
||||
|
||||
@@ -79,7 +79,7 @@ class ZeroSubsectionGrade(SubsectionGradeBase):
|
||||
"""
|
||||
|
||||
def __init__(self, subsection, course_data):
|
||||
super(ZeroSubsectionGrade, self).__init__(subsection)
|
||||
super(ZeroSubsectionGrade, self).__init__(subsection) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_data = course_data
|
||||
|
||||
@property
|
||||
@@ -146,7 +146,7 @@ class NonZeroSubsectionGrade(six.with_metaclass(ABCMeta, SubsectionGradeBase)):
|
||||
"""
|
||||
|
||||
def __init__(self, subsection, all_total, graded_total, override=None):
|
||||
super(NonZeroSubsectionGrade, self).__init__(subsection)
|
||||
super(NonZeroSubsectionGrade, self).__init__(subsection) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.all_total = all_total
|
||||
self.graded_total = graded_total
|
||||
self.override = override
|
||||
@@ -160,7 +160,7 @@ class NonZeroSubsectionGrade(six.with_metaclass(ABCMeta, SubsectionGradeBase)):
|
||||
return compute_percent(self.graded_total.earned, self.graded_total.possible)
|
||||
|
||||
@staticmethod
|
||||
def _compute_block_score(
|
||||
def _compute_block_score( # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
block_key,
|
||||
course_structure,
|
||||
submissions_scores,
|
||||
@@ -244,7 +244,7 @@ class ReadSubsectionGrade(NonZeroSubsectionGrade):
|
||||
self.model = model
|
||||
self.factory = factory
|
||||
|
||||
super(ReadSubsectionGrade, self).__init__(subsection, all_total, graded_total, override)
|
||||
super(ReadSubsectionGrade, self).__init__(subsection, all_total, graded_total, override) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
@lazy
|
||||
def problem_scores(self):
|
||||
@@ -297,7 +297,7 @@ class CreateSubsectionGrade(NonZeroSubsectionGrade):
|
||||
u' and grade_total ***{}*** for subsection ***{}***'
|
||||
.format(all_total, graded_total, subsection.location))
|
||||
|
||||
super(CreateSubsectionGrade, self).__init__(subsection, all_total, graded_total)
|
||||
super(CreateSubsectionGrade, self).__init__(subsection, all_total, graded_total) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
def update_or_create_model(self, student, score_deleted=False, force_update_subsections=False):
|
||||
"""
|
||||
|
||||
@@ -72,7 +72,7 @@ class SubsectionGradeFactory(object):
|
||||
)
|
||||
self._unsaved_subsection_grades.clear()
|
||||
|
||||
def update(self, subsection, only_if_higher=None, score_deleted=False, force_update_subsections=False, persist_grade=True):
|
||||
def update(self, subsection, only_if_higher=None, score_deleted=False, force_update_subsections=False, persist_grade=True): # lint-amnesty, pylint: disable=line-too-long
|
||||
"""
|
||||
Updates the SubsectionGrade object for the student and subsection.
|
||||
"""
|
||||
|
||||
@@ -9,7 +9,7 @@ import six
|
||||
from celery import shared_task
|
||||
from celery_utils.persist_on_failure import LoggedPersistOnFailureTask
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.utils import DatabaseError
|
||||
from edx_django_utils.monitoring import (
|
||||
@@ -24,7 +24,7 @@ from submissions import api as sub_api
|
||||
from lms.djangoapps.courseware.model_data import get_score
|
||||
from lms.djangoapps.course_blocks.api import get_course_blocks
|
||||
from lms.djangoapps.grades.config.models import ComputeGradesSetting
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview # lint-amnesty, pylint: disable=unused-import
|
||||
from common.djangoapps.student.models import CourseEnrollment
|
||||
from common.djangoapps.track.event_transaction_utils import set_event_transaction_id, set_event_transaction_type
|
||||
from common.djangoapps.util.date_utils import from_timestamp
|
||||
|
||||
@@ -78,7 +78,7 @@ class GradeTestBase(SharedModuleStoreTestCase):
|
||||
cls.store.update_item(cls.chapter_2, UserFactory().id)
|
||||
|
||||
def setUp(self):
|
||||
super(GradeTestBase, self).setUp()
|
||||
super(GradeTestBase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.addCleanup(set_current_request, None)
|
||||
self.request = get_mock_request(UserFactory())
|
||||
self.client.login(username=self.request.user.username, password="test")
|
||||
|
||||
@@ -69,7 +69,7 @@ class GradesAccessIntegrationTest(ProblemSubmissionTestMixin, SharedModuleStoreT
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(GradesAccessIntegrationTest, self).setUp()
|
||||
super(GradesAccessIntegrationTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.addCleanup(set_current_request, None)
|
||||
self.request = get_mock_request(UserFactory())
|
||||
self.student = self.request.user
|
||||
|
||||
@@ -68,7 +68,7 @@ class GradesEventIntegrationTest(ProblemSubmissionTestMixin, SharedModuleStoreTe
|
||||
|
||||
def setUp(self):
|
||||
self.reset_course()
|
||||
super(GradesEventIntegrationTest, self).setUp()
|
||||
super(GradesEventIntegrationTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.addCleanup(set_current_request, None)
|
||||
self.request = get_mock_request(UserFactory())
|
||||
self.student = self.request.user
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# lint-amnesty, pylint: disable=missing-module-docstring
|
||||
import datetime
|
||||
import itertools
|
||||
|
||||
@@ -40,7 +41,7 @@ class TestMultipleProblemTypesSubsectionScores(SharedModuleStoreTestCase):
|
||||
cls.seq1 = chapter1.get_children()[0]
|
||||
|
||||
def setUp(self):
|
||||
super(TestMultipleProblemTypesSubsectionScores, self).setUp()
|
||||
super(TestMultipleProblemTypesSubsectionScores, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
password = u'test'
|
||||
self.student = UserFactory.create(is_staff=False, username=u'test_student', password=password)
|
||||
self.client.login(username=self.student.username, password=password)
|
||||
@@ -109,7 +110,7 @@ class TestVariedMetadata(ProblemSubmissionTestMixin, ModuleStoreTestCase):
|
||||
}
|
||||
|
||||
def setUp(self):
|
||||
super(TestVariedMetadata, self).setUp()
|
||||
super(TestVariedMetadata, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course = CourseFactory.create()
|
||||
with self.store.bulk_operations(self.course.id):
|
||||
self.chapter = ItemFactory.create(
|
||||
@@ -232,7 +233,7 @@ class TestWeightedProblems(SharedModuleStoreTestCase):
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(TestWeightedProblems, self).setUp()
|
||||
super(TestWeightedProblems, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user = UserFactory()
|
||||
self.addCleanup(set_current_request, None)
|
||||
self.request = get_mock_request(self.user)
|
||||
|
||||
@@ -41,7 +41,7 @@ class OverrideSubsectionGradeTests(ModuleStoreTestCase):
|
||||
cls.type_patcher.stop()
|
||||
|
||||
def setUp(self):
|
||||
super(OverrideSubsectionGradeTests, self).setUp()
|
||||
super(OverrideSubsectionGradeTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course = CourseFactory.create(org='edX', number='DemoX', display_name='Demo_Course', run='Spring2019')
|
||||
self.subsection = ItemFactory.create(parent=self.course, category="subsection", display_name="Subsection")
|
||||
self.grade = PersistentSubsectionGrade.update_or_create_grade(
|
||||
@@ -57,7 +57,7 @@ class OverrideSubsectionGradeTests(ModuleStoreTestCase):
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
super(OverrideSubsectionGradeTests, self).tearDown()
|
||||
super(OverrideSubsectionGradeTests, self).tearDown() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
PersistentSubsectionGradeOverride.objects.all().delete() # clear out all previous overrides
|
||||
|
||||
@ddt.data(0.0, None, 3.0)
|
||||
|
||||
@@ -22,7 +22,7 @@ class CourseDataTest(ModuleStoreTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(CourseDataTest, self).setUp()
|
||||
super(CourseDataTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
with self.store.default_store(ModuleStoreEnum.Type.split):
|
||||
self.course = CourseFactory.create()
|
||||
# need to re-retrieve the course since the version on the original course isn't accurate.
|
||||
@@ -53,13 +53,13 @@ class CourseDataTest(ModuleStoreTestCase):
|
||||
course_data = CourseData(self.user, **kwargs)
|
||||
for arg in self.expected_results:
|
||||
# No point validating the data we used as input, and c_b_s is input-only
|
||||
if arg != kwarg and arg != "collected_block_structure":
|
||||
if arg != kwarg and arg != "collected_block_structure": # lint-amnesty, pylint: disable=consider-using-in
|
||||
expected = self.expected_results[arg]
|
||||
actual = getattr(course_data, arg)
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
def test_properties(self):
|
||||
expected_edited_on = getattr(
|
||||
expected_edited_on = getattr( # lint-amnesty, pylint: disable=literal-used-as-attribute
|
||||
self.one_true_structure[self.one_true_structure.root_block_usage_key],
|
||||
'subtree_edited_on',
|
||||
)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# lint-amnesty, pylint: disable=missing-module-docstring
|
||||
import ddt
|
||||
import six
|
||||
from crum import set_current_request
|
||||
|
||||
@@ -262,7 +262,7 @@ class TestGradeIteration(SharedModuleStoreTestCase):
|
||||
"""
|
||||
Create a course and a handful of users to assign grades
|
||||
"""
|
||||
super(TestGradeIteration, self).setUp()
|
||||
super(TestGradeIteration, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.students = [
|
||||
UserFactory.create(username='student1'),
|
||||
|
||||
@@ -40,7 +40,7 @@ class BlockRecordListTestCase(TestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(BlockRecordListTestCase, self).setUp()
|
||||
super(BlockRecordListTestCase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_key = CourseLocator(
|
||||
org='some_org',
|
||||
course='some_course',
|
||||
@@ -70,7 +70,7 @@ class GradesModelTestCase(TestCase):
|
||||
Base class for common setup of grades model tests.
|
||||
"""
|
||||
def setUp(self):
|
||||
super(GradesModelTestCase, self).setUp()
|
||||
super(GradesModelTestCase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_key = CourseLocator(
|
||||
org='some_org',
|
||||
course='some_course',
|
||||
@@ -136,7 +136,7 @@ class VisibleBlocksTest(GradesModelTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(VisibleBlocksTest, self).setUp()
|
||||
super(VisibleBlocksTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user_id = 12345
|
||||
|
||||
def _create_block_record_list(self, blocks, user_id=None):
|
||||
@@ -209,7 +209,7 @@ class PersistentSubsectionGradeTest(GradesModelTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(PersistentSubsectionGradeTest, self).setUp()
|
||||
super(PersistentSubsectionGradeTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.usage_key = BlockUsageLocator(
|
||||
course_key=self.course_key,
|
||||
block_type='subsection',
|
||||
@@ -360,7 +360,7 @@ class PersistentCourseGradesTest(GradesModelTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(PersistentCourseGradesTest, self).setUp()
|
||||
super(PersistentCourseGradesTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.params = {
|
||||
"user_id": 12345,
|
||||
"course_id": self.course_key,
|
||||
|
||||
@@ -44,7 +44,7 @@ class GradesServiceTests(ModuleStoreTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(GradesServiceTests, self).setUp()
|
||||
super(GradesServiceTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.service = GradesService()
|
||||
self.course = CourseFactory.create(org='edX', number='DemoX', display_name='Demo_Course', run='Spring2019')
|
||||
self.subsection = ItemFactory.create(parent=self.course, category="subsection", display_name="Subsection")
|
||||
@@ -79,7 +79,7 @@ class GradesServiceTests(ModuleStoreTestCase):
|
||||
}
|
||||
|
||||
def tearDown(self):
|
||||
super(GradesServiceTests, self).tearDown()
|
||||
super(GradesServiceTests, self).tearDown() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
PersistentSubsectionGradeOverride.objects.all().delete() # clear out all previous overrides
|
||||
self.signal_patcher.stop()
|
||||
self.id_patcher.stop()
|
||||
@@ -252,7 +252,7 @@ class GradesServiceTests(ModuleStoreTestCase):
|
||||
grade=self.grade,
|
||||
system=GradeOverrideFeatureEnum.proctoring
|
||||
)
|
||||
override_id = override.id
|
||||
override_id = override.id # lint-amnesty, pylint: disable=unused-variable
|
||||
self.service.undo_override_subsection_grade(
|
||||
user_id=self.user.id,
|
||||
course_key_or_id=self.course.id,
|
||||
|
||||
@@ -103,7 +103,7 @@ class ScoreChangedSignalRelayTest(TestCase):
|
||||
"""
|
||||
Configure mocks for all the dependencies of the render method
|
||||
"""
|
||||
super(ScoreChangedSignalRelayTest, self).setUp()
|
||||
super(ScoreChangedSignalRelayTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.signal_mock = self.setup_patch(
|
||||
'lms.djangoapps.grades.signals.signals.PROBLEM_WEIGHTED_SCORE_CHANGED.send',
|
||||
None,
|
||||
|
||||
@@ -12,7 +12,7 @@ from .utils import mock_get_score
|
||||
|
||||
|
||||
@ddt
|
||||
class SubsectionGradeTest(GradeTestBase):
|
||||
class SubsectionGradeTest(GradeTestBase): # lint-amnesty, pylint: disable=missing-class-docstring
|
||||
|
||||
@data((50, 100, .50), (59.49, 100, .59), (59.51, 100, .60), (59.50, 100, .60), (60.5, 100, .60))
|
||||
@unpack
|
||||
@@ -22,8 +22,8 @@ class SubsectionGradeTest(GradeTestBase):
|
||||
created_grade = CreateSubsectionGrade(
|
||||
self.sequence,
|
||||
self.course_structure,
|
||||
self.subsection_grade_factory._submissions_scores,
|
||||
self.subsection_grade_factory._csm_scores,
|
||||
self.subsection_grade_factory._submissions_scores, # lint-amnesty, pylint: disable=protected-access
|
||||
self.subsection_grade_factory._csm_scores, # lint-amnesty, pylint: disable=protected-access
|
||||
)
|
||||
self.assertEqual(PersistentSubsectionGrade.objects.count(), 0)
|
||||
self.assertEqual(created_grade.percent_graded, expected_result)
|
||||
@@ -53,7 +53,7 @@ class SubsectionGradeTest(GradeTestBase):
|
||||
grade = CreateSubsectionGrade(
|
||||
self.sequence,
|
||||
self.course_structure,
|
||||
self.subsection_grade_factory._submissions_scores,
|
||||
self.subsection_grade_factory._csm_scores,
|
||||
self.subsection_grade_factory._submissions_scores, # lint-amnesty, pylint: disable=protected-access
|
||||
self.subsection_grade_factory._csm_scores, # lint-amnesty, pylint: disable=protected-access
|
||||
)
|
||||
self.assertEqual(grade.percent_graded, 0.0)
|
||||
|
||||
@@ -23,7 +23,7 @@ from lms.djangoapps.grades.config.models import PersistentGradesEnabledFlag
|
||||
from lms.djangoapps.grades.config.waffle import ENFORCE_FREEZE_GRADE_AFTER_COURSE_END, waffle_flags
|
||||
from lms.djangoapps.grades.constants import ScoreDatabaseTableEnum
|
||||
from lms.djangoapps.grades.models import PersistentCourseGrade, PersistentSubsectionGrade
|
||||
from lms.djangoapps.grades.services import GradesService
|
||||
from lms.djangoapps.grades.services import GradesService # lint-amnesty, pylint: disable=unused-import
|
||||
from lms.djangoapps.grades.signals.signals import PROBLEM_WEIGHTED_SCORE_CHANGED
|
||||
from lms.djangoapps.grades.tasks import (
|
||||
RECALCULATE_GRADE_DELAY_SECONDS,
|
||||
@@ -115,7 +115,7 @@ class RecalculateSubsectionGradeTest(HasCourseWithProblemsMixin, ModuleStoreTest
|
||||
ENABLED_SIGNALS = ['course_published', 'pre_publish']
|
||||
|
||||
def setUp(self):
|
||||
super(RecalculateSubsectionGradeTest, self).setUp()
|
||||
super(RecalculateSubsectionGradeTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user = UserFactory()
|
||||
PersistentGradesEnabledFlag.objects.create(enabled_for_all_courses=True, enabled=True)
|
||||
|
||||
@@ -411,7 +411,7 @@ class ComputeGradesForCourseTest(HasCourseWithProblemsMixin, ModuleStoreTestCase
|
||||
ENABLED_SIGNALS = ['course_published', 'pre_publish']
|
||||
|
||||
def setUp(self):
|
||||
super(ComputeGradesForCourseTest, self).setUp()
|
||||
super(ComputeGradesForCourseTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.users = [UserFactory.create() for _ in range(12)]
|
||||
self.set_up_course()
|
||||
for user in self.users:
|
||||
@@ -452,7 +452,7 @@ class RecalculateGradesForUserTest(HasCourseWithProblemsMixin, ModuleStoreTestCa
|
||||
Test recalculate_course_and_subsection_grades_for_user task.
|
||||
"""
|
||||
def setUp(self):
|
||||
super(RecalculateGradesForUserTest, self).setUp()
|
||||
super(RecalculateGradesForUserTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user = UserFactory.create()
|
||||
self.set_up_course()
|
||||
CourseEnrollment.enroll(self.user, self.course.id)
|
||||
@@ -500,7 +500,7 @@ class FreezeGradingAfterCourseEndTest(HasCourseWithProblemsMixin, ModuleStoreTes
|
||||
Test enforce_freeze_grade_after_course_end waffle flag controlling grading tasks.
|
||||
"""
|
||||
def setUp(self):
|
||||
super(FreezeGradingAfterCourseEndTest, self).setUp()
|
||||
super(FreezeGradingAfterCourseEndTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.users = [UserFactory.create() for _ in range(12)]
|
||||
self.user = self.users[0]
|
||||
self.freeze_grade_flag = waffle_flags()[ENFORCE_FREEZE_GRADE_AFTER_COURSE_END]
|
||||
@@ -513,7 +513,7 @@ class FreezeGradingAfterCourseEndTest(HasCourseWithProblemsMixin, ModuleStoreTes
|
||||
mock_log.info.call_args_list[0][0][0]
|
||||
)
|
||||
|
||||
def _assert_for_freeze_grade_flag(
|
||||
def _assert_for_freeze_grade_flag( # lint-amnesty, pylint: disable=missing-function-docstring
|
||||
self,
|
||||
result,
|
||||
freeze_flag_value,
|
||||
@@ -637,7 +637,7 @@ class FreezeGradingAfterCourseEndTest(HasCourseWithProblemsMixin, ModuleStoreTes
|
||||
CourseEnrollment.enroll(user, self.course.id)
|
||||
|
||||
with override_waffle_flag(self.freeze_grade_flag, active=freeze_flag_value):
|
||||
modified_datetime = datetime.utcnow().replace(tzinfo=pytz.UTC) - timedelta(days=1)
|
||||
modified_datetime = datetime.utcnow().replace(tzinfo=pytz.UTC) - timedelta(days=1) # lint-amnesty, pylint: disable=unused-variable
|
||||
with patch('lms.djangoapps.grades.tasks._has_db_updated_with_new_score') as mock_has_db_updated:
|
||||
result = recalculate_subsection_grade_v3.apply_async(kwargs=self.recalculate_subsection_grade_kwargs)
|
||||
self._assert_for_freeze_grade_flag(
|
||||
|
||||
@@ -41,7 +41,7 @@ class GradesTransformerTestCase(CourseStructureTestCase):
|
||||
}
|
||||
|
||||
def setUp(self):
|
||||
super(GradesTransformerTestCase, self).setUp()
|
||||
super(GradesTransformerTestCase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
password = u'test'
|
||||
self.student = UserFactory.create(is_staff=False, username=u'test_student', password=password)
|
||||
self.client.login(username=self.student.username, password=password)
|
||||
@@ -433,7 +433,7 @@ class MultiProblemModulestoreAccessTestCase(CourseStructureTestCase, SharedModul
|
||||
TRANSFORMER_CLASS_TO_TEST = GradesTransformer
|
||||
|
||||
def setUp(self):
|
||||
super(MultiProblemModulestoreAccessTestCase, self).setUp()
|
||||
super(MultiProblemModulestoreAccessTestCase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
password = u'test'
|
||||
self.student = UserFactory.create(is_staff=False, username=u'test_student', password=password)
|
||||
self.client.login(username=self.student.username, password=password)
|
||||
|
||||
@@ -77,11 +77,11 @@ class GradesTransformer(BlockStructureTransformer):
|
||||
cls._collect_explicit_graded(block_structure)
|
||||
cls._collect_grading_policy_hash(block_structure)
|
||||
|
||||
def transform(self, block_structure, usage_context):
|
||||
def transform(self, block_structure, usage_context): # lint-amnesty, pylint: disable=arguments-differ
|
||||
"""
|
||||
Perform no transformations.
|
||||
"""
|
||||
pass
|
||||
pass # lint-amnesty, pylint: disable=unnecessary-pass
|
||||
|
||||
@classmethod
|
||||
def grading_policy_hash(cls, course):
|
||||
|
||||
@@ -9,7 +9,7 @@ class GradesUtilService(object):
|
||||
An interface to be used by xblocks.
|
||||
"""
|
||||
def __init__(self, **kwargs):
|
||||
super(GradesUtilService, self).__init__()
|
||||
super(GradesUtilService, self).__init__() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_id = kwargs.get('course_id', None)
|
||||
|
||||
def are_grades_frozen(self):
|
||||
|
||||
@@ -72,7 +72,7 @@ def _change_access(course, user, level, action, send_email=True):
|
||||
try:
|
||||
role = ROLES[level](course.id)
|
||||
except KeyError:
|
||||
raise ValueError(u"unrecognized level '{}'".format(level))
|
||||
raise ValueError(u"unrecognized level '{}'".format(level)) # lint-amnesty, pylint: disable=raise-missing-from
|
||||
|
||||
if action == 'allow':
|
||||
if level == 'ccx_coach':
|
||||
|
||||
@@ -12,8 +12,8 @@ from datetime import datetime
|
||||
import pytz
|
||||
import six
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.mail import send_mail
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.core.mail import send_mail # lint-amnesty, pylint: disable=unused-import
|
||||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import override as override_language
|
||||
@@ -43,7 +43,7 @@ from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.user_api.models import UserPreference
|
||||
from openedx.core.djangolib.markup import Text
|
||||
from common.djangoapps.student.models import CourseEnrollment, CourseEnrollmentAllowed, anonymous_id_for_user, is_email_retired
|
||||
from common.djangoapps.student.models import CourseEnrollment, CourseEnrollmentAllowed, anonymous_id_for_user, is_email_retired # lint-amnesty, pylint: disable=line-too-long
|
||||
from common.djangoapps.track.event_transaction_utils import (
|
||||
create_new_event_transaction_id,
|
||||
get_event_transaction_id,
|
||||
|
||||
@@ -15,7 +15,7 @@ class AccountCreationAndEnrollment(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AccountCreationAndEnrollment, self).__init__(*args, **kwargs)
|
||||
super(AccountCreationAndEnrollment, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class AddBetaTester(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AddBetaTester, self).__init__(*args, **kwargs)
|
||||
super(AddBetaTester, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class AllowedEnroll(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AllowedEnroll, self).__init__(*args, **kwargs)
|
||||
super(AllowedEnroll, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class AllowedUnenroll(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AllowedUnenroll, self).__init__(*args, **kwargs)
|
||||
super(AllowedUnenroll, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ class EnrollEnrolled(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(EnrollEnrolled, self).__init__(*args, **kwargs)
|
||||
super(EnrollEnrolled, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ class EnrolledUnenroll(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(EnrolledUnenroll, self).__init__(*args, **kwargs)
|
||||
super(EnrolledUnenroll, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
|
||||
@@ -81,5 +81,5 @@ class RemoveBetaTester(BaseMessageType):
|
||||
APP_LABEL = 'instructor'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(RemoveBetaTester, self).__init__(*args, **kwargs)
|
||||
super(RemoveBetaTester, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.options['transactional'] = True
|
||||
|
||||
@@ -23,7 +23,7 @@ class TestInstructorAccessList(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAccessList, self).setUp()
|
||||
super(TestInstructorAccessList, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.instructors = [UserFactory.create() for _ in range(4)]
|
||||
for user in self.instructors:
|
||||
allow_access(self.course, user, 'instructor')
|
||||
@@ -48,7 +48,7 @@ class TestInstructorAccessAllow(EmailTemplateTagMixin, SharedModuleStoreTestCase
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAccessAllow, self).setUp()
|
||||
super(TestInstructorAccessAllow, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.course = CourseFactory.create()
|
||||
|
||||
@@ -93,7 +93,7 @@ class TestInstructorAccessRevoke(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAccessRevoke, self).setUp()
|
||||
super(TestInstructorAccessRevoke, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.staff = [UserFactory.create() for _ in range(4)]
|
||||
for user in self.staff:
|
||||
allow_access(self.course, user, 'staff')
|
||||
@@ -132,7 +132,7 @@ class TestInstructorAccessForum(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAccessForum, self).setUp()
|
||||
super(TestInstructorAccessForum, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.mod_role = Role.objects.create(
|
||||
course_id=self.course.id,
|
||||
name=FORUM_ROLE_MODERATOR
|
||||
|
||||
@@ -17,7 +17,7 @@ import pytest
|
||||
import six
|
||||
from boto.exception import BotoServerError
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.core import mail
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
@@ -36,12 +36,12 @@ from testfixtures import LogCapture
|
||||
from lms.djangoapps.bulk_email.models import BulkEmailFlag, CourseEmail, CourseEmailTemplate
|
||||
from common.djangoapps.course_modes.models import CourseMode
|
||||
from common.djangoapps.course_modes.tests.factories import CourseModeFactory
|
||||
from edx_toggles.toggles.testutils import override_waffle_flag
|
||||
from edx_toggles.toggles.testutils import override_waffle_flag # lint-amnesty, pylint: disable=unused-import, wrong-import-order
|
||||
from lms.djangoapps.certificates.api import generate_user_certificates
|
||||
from lms.djangoapps.certificates.models import CertificateStatuses
|
||||
from lms.djangoapps.certificates.tests.factories import GeneratedCertificateFactory
|
||||
from lms.djangoapps.courseware.models import StudentModule
|
||||
from lms.djangoapps.courseware.tests.factories import (
|
||||
from lms.djangoapps.courseware.tests.factories import ( # lint-amnesty, pylint: disable=unused-import
|
||||
BetaTesterFactory,
|
||||
GlobalStaffFactory,
|
||||
InstructorFactory,
|
||||
@@ -87,14 +87,14 @@ from common.djangoapps.student.models import (
|
||||
get_retired_email_by_email,
|
||||
get_retired_username_by_username
|
||||
)
|
||||
from common.djangoapps.student.roles import (
|
||||
from common.djangoapps.student.roles import ( # lint-amnesty, pylint: disable=unused-import
|
||||
CourseBetaTesterRole,
|
||||
CourseDataResearcherRole,
|
||||
CourseFinanceAdminRole,
|
||||
CourseInstructorRole,
|
||||
CourseSalesAdminRole
|
||||
)
|
||||
from common.djangoapps.student.tests.factories import AdminFactory, UserFactory
|
||||
from common.djangoapps.student.tests.factories import AdminFactory, UserFactory # lint-amnesty, pylint: disable=unused-import
|
||||
from xmodule.fields import Date
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase
|
||||
@@ -251,7 +251,7 @@ class TestCommonExceptions400(TestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestCommonExceptions400, self).setUp()
|
||||
super(TestCommonExceptions400, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.request = Mock(spec=HttpRequest)
|
||||
self.request.META = {}
|
||||
|
||||
@@ -318,7 +318,7 @@ class TestEndpointHttpMethods(SharedModuleStoreTestCase, LoginEnrollmentTestCase
|
||||
"""
|
||||
Set up global staff role so authorization will not fail.
|
||||
"""
|
||||
super(TestEndpointHttpMethods, self).setUp()
|
||||
super(TestEndpointHttpMethods, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
global_user = GlobalStaffFactory()
|
||||
self.client.login(username=global_user.username, password='test')
|
||||
|
||||
@@ -353,7 +353,7 @@ class TestEndpointHttpMethods(SharedModuleStoreTestCase, LoginEnrollmentTestCase
|
||||
)
|
||||
|
||||
|
||||
@patch('lms.djangoapps.bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True))
|
||||
@patch('lms.djangoapps.bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True)) # lint-amnesty, pylint: disable=line-too-long
|
||||
class TestInstructorAPIDenyLevels(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
"""
|
||||
Ensure that users cannot access endpoints they shouldn't be able to.
|
||||
@@ -402,7 +402,7 @@ class TestInstructorAPIDenyLevels(SharedModuleStoreTestCase, LoginEnrollmentTest
|
||||
BulkEmailFlag.objects.all().delete()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPIDenyLevels, self).setUp()
|
||||
super(TestInstructorAPIDenyLevels, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user = UserFactory.create()
|
||||
CourseEnrollment.enroll(self.user, self.course.id)
|
||||
|
||||
@@ -613,7 +613,7 @@ class TestInstructorAPIBulkAccountCreationAndEnrollment(SharedModuleStoreTestCas
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPIBulkAccountCreationAndEnrollment, self).setUp()
|
||||
super(TestInstructorAPIBulkAccountCreationAndEnrollment, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
# Create a course with mode 'honor' and with price
|
||||
self.white_label_course = CourseFactory.create()
|
||||
@@ -754,7 +754,7 @@ class TestInstructorAPIBulkAccountCreationAndEnrollment(SharedModuleStoreTestCas
|
||||
self.assertEqual(len(data['row_errors']), 0)
|
||||
self.assertEqual(len(data['warnings']), 0)
|
||||
self.assertEqual(len(data['general_errors']), 1)
|
||||
self.assertEqual(data['general_errors'][0]['response'], 'Data in row #1 must have exactly four columns: email, username, full name, and country')
|
||||
self.assertEqual(data['general_errors'][0]['response'], 'Data in row #1 must have exactly four columns: email, username, full name, and country') # lint-amnesty, pylint: disable=line-too-long
|
||||
|
||||
manual_enrollments = ManualEnrollmentAudit.objects.all()
|
||||
self.assertEqual(manual_enrollments.count(), 0)
|
||||
@@ -808,7 +808,7 @@ class TestInstructorAPIBulkAccountCreationAndEnrollment(SharedModuleStoreTestCas
|
||||
self.assertEqual(response.status_code, 200)
|
||||
data = json.loads(response.content.decode('utf-8'))
|
||||
warning_message = u'An account with email {email} exists but the provided username {username} ' \
|
||||
u'is different. Enrolling anyway with {email}.'.format(email='test_student@example.com', username='test_student_2')
|
||||
u'is different. Enrolling anyway with {email}.'.format(email='test_student@example.com', username='test_student_2') # lint-amnesty, pylint: disable=line-too-long
|
||||
self.assertNotEqual(len(data['warnings']), 0)
|
||||
self.assertEqual(data['warnings'][0]['response'], warning_message)
|
||||
user = User.objects.get(email='test_student@example.com')
|
||||
@@ -861,7 +861,7 @@ class TestInstructorAPIBulkAccountCreationAndEnrollment(SharedModuleStoreTestCas
|
||||
self.assertEqual(response.status_code, 200)
|
||||
data = json.loads(response.content.decode('utf-8'))
|
||||
self.assertNotEqual(len(data['row_errors']), 0)
|
||||
self.assertEqual(data['row_errors'][0]['response'], u'Username {user} already exists.'.format(user='test_student_1'))
|
||||
self.assertEqual(data['row_errors'][0]['response'], u'Username {user} already exists.'.format(user='test_student_1')) # lint-amnesty, pylint: disable=line-too-long
|
||||
|
||||
def test_csv_file_not_attached(self):
|
||||
"""
|
||||
@@ -1046,7 +1046,7 @@ class TestInstructorAPIEnrollment(SharedModuleStoreTestCase, LoginEnrollmentTest
|
||||
cls.course_path = '/courses/{}/'.format(cls.course.id)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPIEnrollment, self).setUp()
|
||||
super(TestInstructorAPIEnrollment, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.request = RequestFactory().request()
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
@@ -1088,7 +1088,7 @@ class TestInstructorAPIEnrollment(SharedModuleStoreTestCase, LoginEnrollmentTest
|
||||
|
||||
def test_invalid_email(self):
|
||||
url = reverse('students_update_enrollment', kwargs={'course_id': text_type(self.course.id)})
|
||||
response = self.client.post(url, {'identifiers': 'percivaloctavius@', 'action': 'enroll', 'email_students': False})
|
||||
response = self.client.post(url, {'identifiers': 'percivaloctavius@', 'action': 'enroll', 'email_students': False}) # lint-amnesty, pylint: disable=line-too-long
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# test the response data
|
||||
@@ -1935,7 +1935,7 @@ class TestInstructorAPIBulkBetaEnrollment(SharedModuleStoreTestCase, LoginEnroll
|
||||
cls.course_path = '/courses/{}/'.format(cls.course.id)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPIBulkBetaEnrollment, self).setUp()
|
||||
super(TestInstructorAPIBulkBetaEnrollment, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
@@ -2019,25 +2019,25 @@ class TestInstructorAPIBulkBetaEnrollment(SharedModuleStoreTestCase, LoginEnroll
|
||||
|
||||
def test_add_notenrolled_email(self):
|
||||
url = reverse('bulk_beta_modify_access', kwargs={'course_id': text_type(self.course.id)})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.email, 'action': 'add', 'email_students': False})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.email, 'action': 'add', 'email_students': False}) # lint-amnesty, pylint: disable=line-too-long
|
||||
self.add_notenrolled(response, self.notenrolled_student.email)
|
||||
self.assertFalse(CourseEnrollment.is_enrolled(self.notenrolled_student, self.course.id))
|
||||
|
||||
def test_add_notenrolled_email_autoenroll(self):
|
||||
url = reverse('bulk_beta_modify_access', kwargs={'course_id': text_type(self.course.id)})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.email, 'action': 'add', 'email_students': False, 'auto_enroll': True})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.email, 'action': 'add', 'email_students': False, 'auto_enroll': True}) # lint-amnesty, pylint: disable=line-too-long
|
||||
self.add_notenrolled(response, self.notenrolled_student.email)
|
||||
self.assertTrue(CourseEnrollment.is_enrolled(self.notenrolled_student, self.course.id))
|
||||
|
||||
def test_add_notenrolled_username(self):
|
||||
url = reverse('bulk_beta_modify_access', kwargs={'course_id': text_type(self.course.id)})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.username, 'action': 'add', 'email_students': False})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.username, 'action': 'add', 'email_students': False}) # lint-amnesty, pylint: disable=line-too-long
|
||||
self.add_notenrolled(response, self.notenrolled_student.username)
|
||||
self.assertFalse(CourseEnrollment.is_enrolled(self.notenrolled_student, self.course.id))
|
||||
|
||||
def test_add_notenrolled_username_autoenroll(self):
|
||||
url = reverse('bulk_beta_modify_access', kwargs={'course_id': text_type(self.course.id)})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.username, 'action': 'add', 'email_students': False, 'auto_enroll': True})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.username, 'action': 'add', 'email_students': False, 'auto_enroll': True}) # lint-amnesty, pylint: disable=line-too-long
|
||||
self.add_notenrolled(response, self.notenrolled_student.username)
|
||||
self.assertTrue(CourseEnrollment.is_enrolled(self.notenrolled_student, self.course.id))
|
||||
|
||||
@@ -2155,7 +2155,7 @@ class TestInstructorAPIBulkBetaEnrollment(SharedModuleStoreTestCase, LoginEnroll
|
||||
def test_add_notenrolled_email_mktgsite(self):
|
||||
# Try with marketing site enabled
|
||||
url = reverse('bulk_beta_modify_access', kwargs={'course_id': text_type(self.course.id)})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.email, 'action': 'add', 'email_students': True})
|
||||
response = self.client.post(url, {'identifiers': self.notenrolled_student.email, 'action': 'add', 'email_students': True}) # lint-amnesty, pylint: disable=line-too-long
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -2302,7 +2302,7 @@ class TestInstructorAPILevelsAccess(SharedModuleStoreTestCase, LoginEnrollmentTe
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPILevelsAccess, self).setUp()
|
||||
super(TestInstructorAPILevelsAccess, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
@@ -2537,7 +2537,7 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPILevelsDataDump, self).setUp()
|
||||
super(TestInstructorAPILevelsDataDump, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_mode = CourseMode(course_id=self.course.id,
|
||||
mode_slug="honor",
|
||||
mode_display_name="honor cert",
|
||||
@@ -2957,7 +2957,7 @@ class TestInstructorAPIRegradeTask(SharedModuleStoreTestCase, LoginEnrollmentTes
|
||||
cls.problem_urlname = text_type(cls.problem_location)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPIRegradeTask, self).setUp()
|
||||
super(TestInstructorAPIRegradeTask, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
|
||||
@@ -3147,7 +3147,7 @@ class TestEntranceExamInstructorAPIRegradeTask(SharedModuleStoreTestCase, LoginE
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(TestEntranceExamInstructorAPIRegradeTask, self).setUp()
|
||||
super(TestEntranceExamInstructorAPIRegradeTask, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
# Add instructor to invalid ee course
|
||||
@@ -3382,7 +3382,7 @@ class TestEntranceExamInstructorAPIRegradeTask(SharedModuleStoreTestCase, LoginE
|
||||
self.assertContains(response, message)
|
||||
|
||||
|
||||
@patch('lms.djangoapps.bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True))
|
||||
@patch('lms.djangoapps.bulk_email.models.html_to_text', Mock(return_value='Mocking CourseEmail.text_message', autospec=True)) # lint-amnesty, pylint: disable=line-too-long
|
||||
class TestInstructorSendEmail(SiteMixin, SharedModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
"""
|
||||
Checks that only instructors have access to email endpoints, and that
|
||||
@@ -3408,7 +3408,7 @@ class TestInstructorSendEmail(SiteMixin, SharedModuleStoreTestCase, LoginEnrollm
|
||||
BulkEmailFlag.objects.all().delete()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorSendEmail, self).setUp()
|
||||
super(TestInstructorSendEmail, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
@@ -3581,7 +3581,7 @@ class TestInstructorAPITaskLists(SharedModuleStoreTestCase, LoginEnrollmentTestC
|
||||
cls.problem_urlname = text_type(cls.problem_location)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPITaskLists, self).setUp()
|
||||
super(TestInstructorAPITaskLists, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
|
||||
@@ -3700,7 +3700,7 @@ class TestInstructorEmailContentList(SharedModuleStoreTestCase, LoginEnrollmentT
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorEmailContentList, self).setUp()
|
||||
super(TestInstructorEmailContentList, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
@@ -3909,7 +3909,7 @@ class TestDueDateExtensions(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
|
||||
"""
|
||||
Fixtures.
|
||||
"""
|
||||
super(TestDueDateExtensions, self).setUp()
|
||||
super(TestDueDateExtensions, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
user1 = UserFactory.create()
|
||||
StudentModule(
|
||||
@@ -4075,7 +4075,7 @@ class TestDueDateExtensionsDeletedDate(ModuleStoreTestCase, LoginEnrollmentTestC
|
||||
"""
|
||||
Fixtures.
|
||||
"""
|
||||
super(TestDueDateExtensionsDeletedDate, self).setUp()
|
||||
super(TestDueDateExtensionsDeletedDate, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.course = CourseFactory.create()
|
||||
self.due = datetime.datetime(2010, 5, 12, 2, 42, tzinfo=UTC)
|
||||
@@ -4192,7 +4192,7 @@ class TestCourseIssuedCertificatesData(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestCourseIssuedCertificatesData, self).setUp()
|
||||
super(TestCourseIssuedCertificatesData, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.client.login(username=self.instructor.username, password='test')
|
||||
|
||||
@@ -4302,7 +4302,7 @@ class TestBulkCohorting(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestBulkCohorting, self).setUp()
|
||||
super(TestBulkCohorting, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.staff_user = StaffFactory(course_key=self.course.id)
|
||||
self.non_staff_user = UserFactory.create()
|
||||
self.tempdir = tempfile.mkdtemp()
|
||||
|
||||
@@ -30,7 +30,7 @@ class TestInstructorAPIEnrollmentEmailLocalization(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorAPIEnrollmentEmailLocalization, self).setUp()
|
||||
super(TestInstructorAPIEnrollmentEmailLocalization, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
# Platform language is English, instructor's language is Chinese,
|
||||
# student's language is Esperanto, so the emails should all be sent in
|
||||
|
||||
@@ -58,7 +58,7 @@ class CertificatesInstructorDashTest(SharedModuleStoreTestCase):
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(CertificatesInstructorDashTest, self).setUp()
|
||||
super(CertificatesInstructorDashTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.global_staff = GlobalStaffFactory()
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
|
||||
@@ -224,7 +224,7 @@ class CertificatesInstructorApiTest(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(CertificatesInstructorApiTest, self).setUp()
|
||||
super(CertificatesInstructorApiTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.global_staff = GlobalStaffFactory()
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.user = UserFactory()
|
||||
@@ -491,7 +491,7 @@ class CertificateExceptionViewInstructorApiTest(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(CertificateExceptionViewInstructorApiTest, self).setUp()
|
||||
super(CertificateExceptionViewInstructorApiTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.global_staff = GlobalStaffFactory()
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.user = UserFactory()
|
||||
@@ -777,7 +777,7 @@ class GenerateCertificatesInstructorApiTest(SharedModuleStoreTestCase):
|
||||
cls.course = CourseFactory.create()
|
||||
|
||||
def setUp(self):
|
||||
super(GenerateCertificatesInstructorApiTest, self).setUp()
|
||||
super(GenerateCertificatesInstructorApiTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.global_staff = GlobalStaffFactory()
|
||||
self.instructor = InstructorFactory(course_key=self.course.id)
|
||||
self.user = UserFactory()
|
||||
@@ -897,7 +897,7 @@ class TestCertificatesInstructorApiBulkWhiteListExceptions(SharedModuleStoreTest
|
||||
kwargs={'course_id': cls.course.id})
|
||||
|
||||
def setUp(self):
|
||||
super(TestCertificatesInstructorApiBulkWhiteListExceptions, self).setUp()
|
||||
super(TestCertificatesInstructorApiBulkWhiteListExceptions, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.global_staff = GlobalStaffFactory()
|
||||
self.enrolled_user_1 = UserFactory(
|
||||
username='TestStudent1',
|
||||
@@ -1055,7 +1055,7 @@ class CertificateInvalidationViewTests(SharedModuleStoreTestCase):
|
||||
cls.notes = "Test notes."
|
||||
|
||||
def setUp(self):
|
||||
super(CertificateInvalidationViewTests, self).setUp()
|
||||
super(CertificateInvalidationViewTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.global_staff = GlobalStaffFactory()
|
||||
self.enrolled_user_1 = UserFactory(
|
||||
username='TestStudent1',
|
||||
|
||||
@@ -34,14 +34,14 @@ class TestNewInstructorDashboardEmailViewMongoBacked(SharedModuleStoreTestCase):
|
||||
cls.email_link = '<button type="button" class="btn-link send_email" data-section="send_email">Email</button>'
|
||||
|
||||
def setUp(self):
|
||||
super(TestNewInstructorDashboardEmailViewMongoBacked, self).setUp()
|
||||
super(TestNewInstructorDashboardEmailViewMongoBacked, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
# Create instructor account
|
||||
instructor = AdminFactory.create()
|
||||
self.client.login(username=instructor.username, password="test")
|
||||
|
||||
def tearDown(self):
|
||||
super(TestNewInstructorDashboardEmailViewMongoBacked, self).tearDown()
|
||||
super(TestNewInstructorDashboardEmailViewMongoBacked, self).tearDown() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
BulkEmailFlag.objects.all().delete()
|
||||
|
||||
# In order for bulk email to work, we must have both the BulkEmailFlag.is_enabled()
|
||||
@@ -128,7 +128,7 @@ class TestNewInstructorDashboardEmailViewXMLBacked(SharedModuleStoreTestCase):
|
||||
cls.email_link = '<button type="button" class="btn-link send_email" data-section="send_email">Email</button>'
|
||||
|
||||
def setUp(self):
|
||||
super(TestNewInstructorDashboardEmailViewXMLBacked, self).setUp()
|
||||
super(TestNewInstructorDashboardEmailViewXMLBacked, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
# Create instructor account
|
||||
instructor = AdminFactory.create()
|
||||
@@ -140,7 +140,7 @@ class TestNewInstructorDashboardEmailViewXMLBacked(SharedModuleStoreTestCase):
|
||||
self.email_link = '<button type="button" class="btn-link send_email" data-section="send_email">Email</button>'
|
||||
|
||||
def tearDown(self):
|
||||
super(TestNewInstructorDashboardEmailViewXMLBacked, self).tearDown()
|
||||
super(TestNewInstructorDashboardEmailViewXMLBacked, self).tearDown() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
BulkEmailFlag.objects.all().delete()
|
||||
|
||||
# The flag is enabled, and since REQUIRE_COURSE_EMAIL_AUTH is False, all courses should
|
||||
|
||||
@@ -48,7 +48,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
|
||||
class TestSettableEnrollmentState(CacheIsolationTestCase):
|
||||
""" Test the basis class for enrollment tests. """
|
||||
def setUp(self):
|
||||
super(TestSettableEnrollmentState, self).setUp()
|
||||
super(TestSettableEnrollmentState, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_key = CourseLocator('Robot', 'fAKE', 'C--se--ID')
|
||||
|
||||
def test_mes_create(self):
|
||||
@@ -77,7 +77,7 @@ class TestEnrollmentChangeBase(six.with_metaclass(ABCMeta, CacheIsolationTestCas
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestEnrollmentChangeBase, self).setUp()
|
||||
super(TestEnrollmentChangeBase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course_key = CourseLocator('Robot', 'fAKE', 'C--se--ID')
|
||||
|
||||
def _run_state_change_test(self, before_ideal, after_ideal, action):
|
||||
@@ -378,8 +378,8 @@ class TestInstructorEnrollmentStudentModule(SharedModuleStoreTestCase):
|
||||
org='course',
|
||||
run='id',
|
||||
)
|
||||
cls.course_key = cls.course.location.course_key
|
||||
with cls.store.bulk_operations(cls.course.id, emit_signals=False):
|
||||
cls.course_key = cls.course.location.course_key # lint-amnesty, pylint: disable=no-member
|
||||
with cls.store.bulk_operations(cls.course.id, emit_signals=False): # lint-amnesty, pylint: disable=no-member
|
||||
cls.parent = ItemFactory(
|
||||
category="library_content",
|
||||
parent=cls.course,
|
||||
@@ -403,7 +403,7 @@ class TestInstructorEnrollmentStudentModule(SharedModuleStoreTestCase):
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super(TestInstructorEnrollmentStudentModule, self).setUp()
|
||||
super(TestInstructorEnrollmentStudentModule, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.user = UserFactory()
|
||||
|
||||
@@ -860,7 +860,7 @@ class TestSendBetaRoleEmail(CacheIsolationTestCase):
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(TestSendBetaRoleEmail, self).setUp()
|
||||
super(TestSendBetaRoleEmail, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user = UserFactory.create()
|
||||
self.email_params = {'course': 'Robot Super Course'}
|
||||
|
||||
@@ -885,7 +885,7 @@ class TestGetEmailParamsCCX(SharedModuleStoreTestCase):
|
||||
|
||||
@patch.dict('django.conf.settings.FEATURES', {'CUSTOM_COURSES_EDX': True})
|
||||
def setUp(self):
|
||||
super(TestGetEmailParamsCCX, self).setUp()
|
||||
super(TestGetEmailParamsCCX, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.coach = AdminFactory.create()
|
||||
role = CourseCcxCoachRole(self.course.id)
|
||||
role.add_users(self.coach)
|
||||
@@ -978,7 +978,7 @@ class TestRenderMessageToString(EmailTemplateTagMixin, SharedModuleStoreTestCase
|
||||
|
||||
@patch.dict('django.conf.settings.FEATURES', {'CUSTOM_COURSES_EDX': True})
|
||||
def setUp(self):
|
||||
super(TestRenderMessageToString, self).setUp()
|
||||
super(TestRenderMessageToString, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
coach = AdminFactory.create()
|
||||
role = CourseCcxCoachRole(self.course.id)
|
||||
role.add_users(coach)
|
||||
|
||||
@@ -29,11 +29,11 @@ class TestProctoringDashboardViews(SharedModuleStoreTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestProctoringDashboardViews, cls).setUpClass()
|
||||
button = '<button type="button" class="btn-link special_exams" data-section="special_exams">Special Exams</button>'
|
||||
button = '<button type="button" class="btn-link special_exams" data-section="special_exams">Special Exams</button>' # lint-amnesty, pylint: disable=line-too-long
|
||||
cls.proctoring_link = button
|
||||
|
||||
def setUp(self):
|
||||
super(TestProctoringDashboardViews, self).setUp()
|
||||
super(TestProctoringDashboardViews, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
# Create instructor account
|
||||
self.instructor = AdminFactory.create()
|
||||
@@ -43,13 +43,13 @@ class TestProctoringDashboardViews(SharedModuleStoreTestCase):
|
||||
"""
|
||||
Create URL for instructor dashboard
|
||||
"""
|
||||
self.url = reverse('instructor_dashboard', kwargs={'course_id': text_type(course.id)})
|
||||
self.url = reverse('instructor_dashboard', kwargs={'course_id': text_type(course.id)}) # lint-amnesty, pylint: disable=attribute-defined-outside-init
|
||||
|
||||
def setup_course(self, enable_proctored_exams, enable_timed_exams):
|
||||
"""
|
||||
Create course based on proctored exams and timed exams values
|
||||
"""
|
||||
self.course = CourseFactory.create(enable_proctored_exams=enable_proctored_exams,
|
||||
self.course = CourseFactory.create(enable_proctored_exams=enable_proctored_exams, # lint-amnesty, pylint: disable=attribute-defined-outside-init
|
||||
enable_timed_exams=enable_timed_exams)
|
||||
self.setup_course_url(self.course)
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class InstructorServiceTests(SharedModuleStoreTestCase):
|
||||
cls.other_problem_urlname = six.text_type(cls.other_problem_location)
|
||||
|
||||
def setUp(self):
|
||||
super(InstructorServiceTests, self).setUp()
|
||||
super(InstructorServiceTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.student = UserFactory()
|
||||
CourseEnrollment.enroll(self.student, self.course.id)
|
||||
@@ -94,7 +94,7 @@ class InstructorServiceTests(SharedModuleStoreTestCase):
|
||||
Negative test of trying to reset attempts with bad content_id
|
||||
"""
|
||||
|
||||
result = self.service.delete_student_attempt(
|
||||
result = self.service.delete_student_attempt( # lint-amnesty, pylint: disable=assignment-from-none
|
||||
self.student.username,
|
||||
six.text_type(self.course.id),
|
||||
'foo/bar/baz',
|
||||
@@ -107,7 +107,7 @@ class InstructorServiceTests(SharedModuleStoreTestCase):
|
||||
Negative test of trying to reset attempts with bad user identifier
|
||||
"""
|
||||
|
||||
result = self.service.delete_student_attempt(
|
||||
result = self.service.delete_student_attempt( # lint-amnesty, pylint: disable=assignment-from-none
|
||||
'bad_student',
|
||||
six.text_type(self.course.id),
|
||||
'foo/bar/baz',
|
||||
@@ -120,7 +120,7 @@ class InstructorServiceTests(SharedModuleStoreTestCase):
|
||||
Negative test of trying to reset attempts with bad user identifier
|
||||
"""
|
||||
|
||||
result = self.service.delete_student_attempt(
|
||||
result = self.service.delete_student_attempt( # lint-amnesty, pylint: disable=assignment-from-none
|
||||
self.student.username,
|
||||
six.text_type(self.course.id),
|
||||
self.other_problem_urlname,
|
||||
|
||||
@@ -57,7 +57,7 @@ class TestGradebook(SharedModuleStoreTestCase):
|
||||
]
|
||||
|
||||
def setUp(self):
|
||||
super(TestGradebook, self).setUp()
|
||||
super(TestGradebook, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
instructor = AdminFactory.create()
|
||||
self.client.login(username=instructor.username, password='test')
|
||||
|
||||
@@ -9,7 +9,7 @@ import unittest
|
||||
|
||||
import mock
|
||||
import six
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.core.exceptions import MultipleObjectsReturned
|
||||
from django.test import TestCase
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
@@ -56,7 +56,7 @@ class TestHandleDashboardError(unittest.TestCase):
|
||||
|
||||
def test_no_error(self):
|
||||
@tools.handle_dashboard_error
|
||||
def view(request, course_id):
|
||||
def view(request, course_id): # lint-amnesty, pylint: disable=unused-argument
|
||||
"""
|
||||
Returns "Oh yes!"
|
||||
"""
|
||||
@@ -73,7 +73,7 @@ class TestRequireStudentIdentifier(TestCase):
|
||||
"""
|
||||
Fixtures
|
||||
"""
|
||||
super(TestRequireStudentIdentifier, self).setUp()
|
||||
super(TestRequireStudentIdentifier, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.student = UserFactory.create()
|
||||
|
||||
def test_valid_student_id(self):
|
||||
@@ -208,7 +208,7 @@ class TestSetDueDateExtension(ModuleStoreTestCase):
|
||||
"""
|
||||
Fixtures.
|
||||
"""
|
||||
super(TestSetDueDateExtension, self).setUp()
|
||||
super(TestSetDueDateExtension, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
self.due = due = datetime.datetime(2010, 5, 12, 2, 42, tzinfo=UTC)
|
||||
course = CourseFactory.create()
|
||||
@@ -297,7 +297,7 @@ class TestDataDumps(ModuleStoreTestCase):
|
||||
"""
|
||||
Fixtures.
|
||||
"""
|
||||
super(TestDataDumps, self).setUp()
|
||||
super(TestDataDumps, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
|
||||
due = datetime.datetime(2010, 5, 12, 2, 42, tzinfo=UTC)
|
||||
course = CourseFactory.create()
|
||||
|
||||
@@ -34,8 +34,8 @@ class FakeContentTask(FakeInfo):
|
||||
'requester',
|
||||
]
|
||||
|
||||
def __init__(self, email_id, num_sent, num_failed, sent_to):
|
||||
super(FakeContentTask, self).__init__()
|
||||
def __init__(self, email_id, num_sent, num_failed, sent_to): # lint-amnesty, pylint: disable=unused-argument
|
||||
super(FakeContentTask, self).__init__() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.task_input = {'email_id': email_id}
|
||||
self.task_input = json.dumps(self.task_input)
|
||||
self.task_output = {'succeeded': num_sent, 'failed': num_failed}
|
||||
@@ -57,7 +57,7 @@ class FakeEmail(FakeInfo):
|
||||
]
|
||||
|
||||
def __init__(self, email_id):
|
||||
super(FakeEmail, self).__init__()
|
||||
super(FakeEmail, self).__init__() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.id = six.text_type(email_id) # pylint: disable=invalid-name
|
||||
# Select a random data for create field
|
||||
year = random.randint(1950, 2000)
|
||||
@@ -102,7 +102,7 @@ class FakeEmailInfo(FakeInfo):
|
||||
]
|
||||
|
||||
def __init__(self, fake_email, num_sent, num_failed):
|
||||
super(FakeEmailInfo, self).__init__()
|
||||
super(FakeEmailInfo, self).__init__() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.created = get_default_time_display(fake_email.created)
|
||||
|
||||
number_sent = str(num_sent) + ' sent'
|
||||
|
||||
@@ -20,7 +20,7 @@ from six.moves import range
|
||||
|
||||
from common.test.utils import XssTestMixin
|
||||
from common.djangoapps.course_modes.models import CourseMode
|
||||
from edx_toggles.toggles.testutils import override_waffle_flag
|
||||
from edx_toggles.toggles.testutils import override_waffle_flag # lint-amnesty, pylint: disable=wrong-import-order
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from lms.djangoapps.courseware.tabs import get_course_tab_list
|
||||
from lms.djangoapps.courseware.tests.factories import StaffFactory, StudentModuleFactory, UserFactory
|
||||
@@ -30,7 +30,7 @@ from lms.djangoapps.instructor.toggles import DATA_DOWNLOAD_V2
|
||||
from lms.djangoapps.instructor.views.gradebook_api import calculate_page_info
|
||||
from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
|
||||
from common.djangoapps.student.models import CourseEnrollment
|
||||
from common.djangoapps.student.roles import CourseFinanceAdminRole
|
||||
from common.djangoapps.student.roles import CourseFinanceAdminRole # lint-amnesty, pylint: disable=unused-import
|
||||
from common.djangoapps.student.tests.factories import AdminFactory, CourseAccessRoleFactory, CourseEnrollmentFactory
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase
|
||||
@@ -61,7 +61,7 @@ class TestInstructorDashboard(ModuleStoreTestCase, LoginEnrollmentTestCase, XssT
|
||||
"""
|
||||
Set up tests
|
||||
"""
|
||||
super(TestInstructorDashboard, self).setUp()
|
||||
super(TestInstructorDashboard, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course = CourseFactory.create(
|
||||
grading_policy={"GRADE_CUTOFFS": {"A": 0.75, "B": 0.63, "C": 0.57, "D": 0.5}},
|
||||
display_name='<script>alert("XSS")</script>'
|
||||
@@ -574,7 +574,7 @@ class TestInstructorDashboardPerformance(ModuleStoreTestCase, LoginEnrollmentTes
|
||||
"""
|
||||
Set up tests
|
||||
"""
|
||||
super(TestInstructorDashboardPerformance, self).setUp()
|
||||
super(TestInstructorDashboardPerformance, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course = CourseFactory.create(
|
||||
grading_policy={"GRADE_CUTOFFS": {"A": 0.75, "B": 0.63, "C": 0.57, "D": 0.5}},
|
||||
display_name='<script>alert("XSS")</script>',
|
||||
|
||||
@@ -3,7 +3,7 @@ Waffle flags for instructor dashboard.
|
||||
"""
|
||||
|
||||
from edx_toggles.toggles import LegacyWaffleFlag, LegacyWaffleFlagNamespace
|
||||
from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag
|
||||
from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag # lint-amnesty, pylint: disable=unused-import
|
||||
|
||||
WAFFLE_NAMESPACE = 'instructor'
|
||||
# Namespace for instructor waffle flags.
|
||||
|
||||
@@ -13,7 +13,7 @@ class DummyRequest(object):
|
||||
|
||||
META = {}
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self): # lint-amnesty, pylint: disable=useless-return
|
||||
self.session = {}
|
||||
self.user = None
|
||||
return
|
||||
|
||||
@@ -105,7 +105,7 @@ def show_analytics_dashboard_message(course_key):
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
|
||||
def instructor_dashboard_2(request, course_id):
|
||||
def instructor_dashboard_2(request, course_id): # lint-amnesty, pylint: disable=too-many-statements
|
||||
""" Display the instructor dashboard for a course. """
|
||||
try:
|
||||
course_key = CourseKey.from_string(course_id)
|
||||
@@ -128,9 +128,9 @@ def instructor_dashboard_2(request, course_id):
|
||||
if not request.user.has_perm(permissions.VIEW_DASHBOARD, course_key):
|
||||
raise Http404()
|
||||
|
||||
is_white_label = CourseMode.is_white_label(course_key)
|
||||
is_white_label = CourseMode.is_white_label(course_key) # lint-amnesty, pylint: disable=unused-variable
|
||||
|
||||
reports_enabled = configuration_helpers.get_value('SHOW_ECOMMERCE_REPORTS', False)
|
||||
reports_enabled = configuration_helpers.get_value('SHOW_ECOMMERCE_REPORTS', False) # lint-amnesty, pylint: disable=unused-variable
|
||||
|
||||
sections = []
|
||||
if access['staff']:
|
||||
@@ -160,7 +160,7 @@ def instructor_dashboard_2(request, course_id):
|
||||
sections.append(_section_analytics(course, access))
|
||||
|
||||
# Check if there is corresponding entry in the CourseMode Table related to the Instructor Dashboard course
|
||||
course_mode_has_price = False
|
||||
course_mode_has_price = False # lint-amnesty, pylint: disable=unused-variable
|
||||
paid_modes = CourseMode.paid_modes_for_course(course_key)
|
||||
if len(paid_modes) == 1:
|
||||
course_mode_has_price = True
|
||||
@@ -510,7 +510,7 @@ def _section_cohort_management(course, access):
|
||||
return section_data
|
||||
|
||||
|
||||
def _section_discussions_management(course, access):
|
||||
def _section_discussions_management(course, access): # lint-amnesty, pylint: disable=unused-argument
|
||||
""" Provide data for the corresponding discussion management section """
|
||||
course_key = course.id
|
||||
enrollment_track_schemes = available_division_schemes(course_key)
|
||||
@@ -626,7 +626,7 @@ def _section_data_download(course, access):
|
||||
'list_report_downloads_url': reverse('list_report_downloads', kwargs={'course_id': six.text_type(course_key)}),
|
||||
'calculate_grades_csv_url': reverse('calculate_grades_csv', kwargs={'course_id': six.text_type(course_key)}),
|
||||
'problem_grade_report_url': reverse('problem_grade_report', kwargs={'course_id': six.text_type(course_key)}),
|
||||
'course_has_survey': True if course.course_survey_name else False,
|
||||
'course_has_survey': True if course.course_survey_name else False, # lint-amnesty, pylint: disable=simplifiable-if-expression
|
||||
'course_survey_results_url': reverse(
|
||||
'get_course_survey_results', kwargs={'course_id': six.text_type(course_key)}
|
||||
),
|
||||
|
||||
@@ -8,7 +8,7 @@ import operator
|
||||
|
||||
import dateutil
|
||||
import six
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.http import HttpResponseBadRequest
|
||||
from django.utils.translation import ugettext as _
|
||||
from edx_when import api
|
||||
@@ -79,7 +79,7 @@ def require_student_from_identifier(unique_student_identifier):
|
||||
try:
|
||||
return get_student_from_identifier(unique_student_identifier)
|
||||
except User.DoesNotExist:
|
||||
raise DashboardError(
|
||||
raise DashboardError( # lint-amnesty, pylint: disable=raise-missing-from
|
||||
_(u"Could not find student matching identifier: {student_identifier}").format(
|
||||
student_identifier=unique_student_identifier
|
||||
)
|
||||
@@ -94,7 +94,7 @@ def parse_datetime(datestr):
|
||||
try:
|
||||
return dateutil.parser.parse(datestr).replace(tzinfo=UTC)
|
||||
except ValueError:
|
||||
raise DashboardError(_("Unable to parse date: ") + datestr)
|
||||
raise DashboardError(_("Unable to parse date: ") + datestr) # lint-amnesty, pylint: disable=raise-missing-from
|
||||
|
||||
|
||||
def find_unit(course, url):
|
||||
|
||||
Reference in New Issue
Block a user