diff --git a/common/djangoapps/enrollment/api.py b/common/djangoapps/enrollment/api.py
index ea76e032a8..7a66d3b335 100644
--- a/common/djangoapps/enrollment/api.py
+++ b/common/djangoapps/enrollment/api.py
@@ -11,33 +11,36 @@ log = logging.getLogger(__name__)
class CourseEnrollmentError(Exception):
- """ Generic Course Enrollment Error.
+ """Generic Course Enrollment Error.
Describes any error that may occur when reading or updating enrollment information for a student or a course.
"""
def __init__(self, msg, data=None):
- super(Exception, self).__init__(msg)
+ super(CourseEnrollmentError, self).__init__(msg)
# Corresponding information to help resolve the error.
self.data = data
class CourseModeNotFoundError(CourseEnrollmentError):
+ """The requested course mode could not be found."""
pass
class EnrollmentNotFoundError(CourseEnrollmentError):
+ """The requested enrollment could not be found."""
pass
class EnrollmentApiLoadError(CourseEnrollmentError):
+ """The data API could not be loaded."""
pass
DEFAULT_DATA_API = 'enrollment.data'
def get_enrollments(student_id):
- """ Retrieves all the courses a student is enrolled in.
+ """Retrieves all the courses a student is enrolled in.
Takes a student and retrieves all relative enrollments. Includes information regarding how the student is enrolled
in the the course.
@@ -107,7 +110,7 @@ def get_enrollments(student_id):
def get_enrollment(student_id, course_id):
- """ Retrieves all enrollment information for the student in respect to a specific course.
+ """Retrieves all enrollment information for the student in respect to a specific course.
Gets all the course enrollment information specific to a student in a course.
@@ -151,7 +154,7 @@ def get_enrollment(student_id, course_id):
def add_enrollment(student_id, course_id, mode='honor', is_active=True):
- """ Enrolls a student in a course.
+ """Enrolls a student in a course.
Enrolls a student in a course. If the mode is not specified, this will default to 'honor'.
@@ -199,7 +202,7 @@ def add_enrollment(student_id, course_id, mode='honor', is_active=True):
def deactivate_enrollment(student_id, course_id):
- """ Un-enrolls a student in a course
+ """Un-enrolls a student in a course
Deactivate the enrollment of a student in a course. We will not remove the enrollment data, but simply flag it
as inactive.
@@ -249,7 +252,7 @@ def deactivate_enrollment(student_id, course_id):
def update_enrollment(student_id, course_id, mode):
- """ Updates the course mode for the enrolled user.
+ """Updates the course mode for the enrolled user.
Update a course enrollment for the given student and course.
@@ -295,7 +298,7 @@ def update_enrollment(student_id, course_id, mode):
def get_course_enrollment_details(course_id):
- """ Get the course modes for course. Also get enrollment start and end date, invite only, etc.
+ """Get the course modes for course. Also get enrollment start and end date, invite only, etc.
Given a course_id, return a serializable dictionary of properties describing course enrollment information.
diff --git a/common/djangoapps/enrollment/data.py b/common/djangoapps/enrollment/data.py
index 82db6734fa..fe1e07552f 100644
--- a/common/djangoapps/enrollment/data.py
+++ b/common/djangoapps/enrollment/data.py
@@ -7,7 +7,6 @@ import logging
from django.contrib.auth.models import User
from opaque_keys.edx.keys import CourseKey
from xmodule.modulestore.django import modulestore
-from xmodule.modulestore.exceptions import ItemNotFoundError
from enrollment.serializers import CourseEnrollmentSerializer, CourseField
from student.models import CourseEnrollment, NonExistentCourseError
@@ -17,7 +16,7 @@ log = logging.getLogger(__name__)
def get_course_enrollments(student_id):
"""Retrieve a list representing all aggregated data for a student's course enrollments.
- Construct a representation of all course enrollment data for a specific student..
+ Construct a representation of all course enrollment data for a specific student.
Args:
student_id (str): The name of the student to retrieve course enrollment information for.
@@ -29,7 +28,7 @@ def get_course_enrollments(student_id):
qset = CourseEnrollment.objects.filter(
user__username=student_id, is_active=True
).order_by('created')
- return CourseEnrollmentSerializer(qset).data
+ return CourseEnrollmentSerializer(qset).data # pylint: disable=no-member
def get_course_enrollment(student_id, course_id):
@@ -50,7 +49,7 @@ def get_course_enrollment(student_id, course_id):
enrollment = CourseEnrollment.objects.get(
user__username=student_id, course_id=course_key
)
- return CourseEnrollmentSerializer(enrollment).data
+ return CourseEnrollmentSerializer(enrollment).data # pylint: disable=no-member
except CourseEnrollment.DoesNotExist:
return None
@@ -79,7 +78,7 @@ def update_course_enrollment(student_id, course_id, mode=None, is_active=None):
enrollment.update_enrollment(is_active=is_active, mode=mode)
enrollment.save()
- return CourseEnrollmentSerializer(enrollment).data
+ return CourseEnrollmentSerializer(enrollment).data # pylint: disable=no-member
def get_course_enrollment_info(course_id):
diff --git a/common/djangoapps/enrollment/serializers.py b/common/djangoapps/enrollment/serializers.py
index d01deb0023..5306f228cd 100644
--- a/common/djangoapps/enrollment/serializers.py
+++ b/common/djangoapps/enrollment/serializers.py
@@ -3,7 +3,6 @@ Serializers for all Course Enrollment related return objects.
"""
from rest_framework import serializers
-from rest_framework.fields import Field
from student.models import CourseEnrollment
from course_modes.models import CourseMode
@@ -36,7 +35,7 @@ class CourseField(serializers.RelatedField):
def to_native(self, course):
course_id = unicode(course.id)
- course_modes = ModeSerializer(CourseMode.modes_for_course(course.id)).data
+ course_modes = ModeSerializer(CourseMode.modes_for_course(course.id)).data # pylint: disable=no-member
return {
"course_id": course_id,
diff --git a/common/djangoapps/enrollment/tests/fake_data_api.py b/common/djangoapps/enrollment/tests/fake_data_api.py
index d1374c3fef..80140aaec5 100644
--- a/common/djangoapps/enrollment/tests/fake_data_api.py
+++ b/common/djangoapps/enrollment/tests/fake_data_api.py
@@ -20,6 +20,7 @@ _ENROLLMENTS = []
_COURSES = []
+# pylint: disable=unused-argument
def get_course_enrollments(student_id):
"""Stubbed out Enrollment data request."""
return _ENROLLMENTS
@@ -48,18 +49,21 @@ def get_course_enrollment_info(course_id):
def _get_fake_enrollment(student_id, course_id):
+ """Get an enrollment from the enrollments array."""
for enrollment in _ENROLLMENTS:
if student_id == enrollment['student'] and course_id == enrollment['course']['course_id']:
return enrollment
def _get_fake_course_info(course_id):
+ """Get a course from the courses array."""
for course in _COURSES:
if course_id == course['course_id']:
return course
def add_enrollment(student_id, course_id, is_active=True, mode='honor'):
+ """Append an enrollment to the enrollments array."""
enrollment = {
"created": datetime.datetime.now(),
"mode": mode,
@@ -72,6 +76,7 @@ def add_enrollment(student_id, course_id, is_active=True, mode='honor'):
def add_course(course_id, enrollment_start=None, enrollment_end=None, invite_only=False, course_modes=None):
+ """Append course to the courses array."""
course_info = {
"course_id": course_id,
"enrollment_end": enrollment_end,
@@ -90,7 +95,8 @@ def add_course(course_id, enrollment_start=None, enrollment_end=None, invite_onl
def reset():
- global _COURSES
+ """Set the enrollments and courses arrays to be empty."""
+ global _COURSES # pylint: disable=global-statement
_COURSES = []
- global _ENROLLMENTS
+ global _ENROLLMENTS # pylint: disable=global-statement
_ENROLLMENTS = []
diff --git a/common/djangoapps/enrollment/tests/test_data.py b/common/djangoapps/enrollment/tests/test_data.py
index 9655ecb00d..f069f68bcc 100644
--- a/common/djangoapps/enrollment/tests/test_data.py
+++ b/common/djangoapps/enrollment/tests/test_data.py
@@ -34,7 +34,7 @@ class EnrollmentDataTest(ModuleStoreTestCase):
PASSWORD = "edx"
def setUp(self):
- """ Create a course and user, then log in. """
+ """Create a course and user, then log in. """
super(EnrollmentDataTest, self).setUp()
self.course = CourseFactory.create()
self.user = UserFactory.create(username=self.USERNAME, email=self.EMAIL, password=self.PASSWORD)
@@ -163,6 +163,7 @@ class EnrollmentDataTest(ModuleStoreTestCase):
data.get_course_enrollment_info("this/is/bananas")
def _create_course_modes(self, course_modes, course=None):
+ """Create the course modes required for a test. """
course_id = course.id if course else self.course.id
for mode_slug in course_modes:
CourseModeFactory.create(
diff --git a/common/djangoapps/enrollment/tests/test_views.py b/common/djangoapps/enrollment/tests/test_views.py
index 0b4adbc738..06e55a6d02 100644
--- a/common/djangoapps/enrollment/tests/test_views.py
+++ b/common/djangoapps/enrollment/tests/test_views.py
@@ -60,7 +60,7 @@ class EnrollmentTest(ModuleStoreTestCase, APITestCase):
mode_display_name=mode_slug,
)
- # Enroll in the course and verify the URL we get sent to
+ # Create an enrollment
self._create_enrollment()
self.assertTrue(CourseEnrollment.is_enrolled(self.user, self.course.id))
@@ -159,6 +159,7 @@ class EnrollmentTest(ModuleStoreTestCase, APITestCase):
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
def _create_enrollment(self):
+ """Enroll in the course and verify the URL we are sent to. """
resp = self.client.post(reverse('courseenrollment', kwargs={'course_id': (unicode(self.course.id))}))
self.assertEqual(resp.status_code, status.HTTP_200_OK)
data = json.loads(resp.content)
diff --git a/common/djangoapps/enrollment/views.py b/common/djangoapps/enrollment/views.py
index 35a3fc603d..c3970cfe58 100644
--- a/common/djangoapps/enrollment/views.py
+++ b/common/djangoapps/enrollment/views.py
@@ -14,7 +14,9 @@ from student.models import NonExistentCourseError, CourseEnrollmentException
class EnrollmentUserThrottle(UserRateThrottle):
- rate = '50/second' # TODO Limit significantly after performance testing.
+ """Limit the number of requests users can make to the enrollment API."""
+ # TODO Limit significantly after performance testing. # pylint: disable=fixme
+ rate = '50/second'
class SessionAuthenticationAllowInactiveUser(SessionAuthentication):
@@ -48,7 +50,7 @@ class SessionAuthenticationAllowInactiveUser(SessionAuthentication):
"""
# Get the underlying HttpRequest object
- request = request._request
+ request = request._request # pylint: disable=protected-access
user = getattr(request, 'user', None)
# Unauthenticated, CSRF validation not required
diff --git a/common/djangoapps/third_party_auth/pipeline.py b/common/djangoapps/third_party_auth/pipeline.py
index 4114b5ee36..6fb7951fb5 100644
--- a/common/djangoapps/third_party_auth/pipeline.py
+++ b/common/djangoapps/third_party_auth/pipeline.py
@@ -111,7 +111,8 @@ AUTH_ENTRY_LOGIN = 'login'
AUTH_ENTRY_PROFILE = 'profile'
AUTH_ENTRY_REGISTER = 'register'
-# TODO (ECOM-369): Repace `AUTH_ENTRY_LOGIN` and `AUTH_ENTRY_REGISTER`
+# pylint: disable=fixme
+# TODO (ECOM-369): Replace `AUTH_ENTRY_LOGIN` and `AUTH_ENTRY_REGISTER`
# with these values once the A/B test completes, then delete
# these constants.
AUTH_ENTRY_LOGIN_2 = 'account_login'
@@ -153,6 +154,7 @@ _AUTH_ENTRY_CHOICES = frozenset([
# login/registration, we needed to introduce two
# additional end-points. Once the test completes,
# delete these constants from the choices list.
+ # pylint: disable=fixme
AUTH_ENTRY_LOGIN_2,
AUTH_ENTRY_REGISTER_2,
@@ -445,6 +447,7 @@ def parse_query_params(strategy, response, *args, **kwargs):
# TODO (ECOM-369): Delete these once the A/B test
# for the combined login/registration form completes.
+ # pylint: disable=fixme
'is_login_2': auth_entry == AUTH_ENTRY_LOGIN_2,
'is_register_2': auth_entry == AUTH_ENTRY_REGISTER_2,
}
@@ -457,6 +460,7 @@ def parse_query_params(strategy, response, *args, **kwargs):
# these kwargs in `redirect_to_supplementary_form`, but
# these should redirect to the same location as "is_login" and "is_register"
# (whichever login/registration end-points win in the test).
+# pylint: disable=fixme
@partial.partial
def ensure_user_information(
strategy,
@@ -500,7 +504,7 @@ def ensure_user_information(
return HttpResponseBadRequest()
# TODO (ECOM-369): Consolidate this with `dispatch_to_login`
- # once the A/B test completes.
+ # once the A/B test completes. # pylint: disable=fixme
dispatch_to_login_2 = is_login_2 and (user_unset or user_inactive)
if is_dashboard or is_profile:
@@ -510,7 +514,7 @@ def ensure_user_information(
return redirect(AUTH_DISPATCH_URLS[AUTH_ENTRY_LOGIN], name='signin_user')
# TODO (ECOM-369): Consolidate this with `dispatch_to_login`
- # once the A/B test completes.
+ # once the A/B test completes. # pylint: disable=fixme
if dispatch_to_login_2:
return redirect(AUTH_DISPATCH_URLS[AUTH_ENTRY_LOGIN_2])
@@ -518,7 +522,7 @@ def ensure_user_information(
return redirect(AUTH_DISPATCH_URLS[AUTH_ENTRY_REGISTER], name='register_user')
# TODO (ECOM-369): Consolidate this with `is_register`
- # once the A/B test completes.
+ # once the A/B test completes. # pylint: disable=fixme
if is_register_2 and user_unset:
return redirect(AUTH_DISPATCH_URLS[AUTH_ENTRY_REGISTER_2])
diff --git a/common/djangoapps/user_api/api/account.py b/common/djangoapps/user_api/api/account.py
index 06c9c5b035..118838c7b4 100644
--- a/common/djangoapps/user_api/api/account.py
+++ b/common/djangoapps/user_api/api/account.py
@@ -8,7 +8,6 @@ information and preferences).
"""
from django.conf import settings
from django.db import transaction, IntegrityError
-from django.db.models import Q
from django.core.validators import validate_email, validate_slug, ValidationError
from django.contrib.auth.forms import PasswordResetForm
diff --git a/common/djangoapps/user_api/api/course_tag.py b/common/djangoapps/user_api/api/course_tag.py
index 7c7a01ce34..43907fbe72 100644
--- a/common/djangoapps/user_api/api/course_tag.py
+++ b/common/djangoapps/user_api/api/course_tag.py
@@ -53,6 +53,10 @@ def set_course_tag(user, course_id, key, value):
key: arbitrary (<=255 char string)
value: arbitrary string
"""
+ # pylint: disable=W0511
+ # TODO: There is a risk of IntegrityErrors being thrown here given
+ # simultaneous calls from many processes. Handle by retrying after
+ # a short delay?
record, _ = UserCourseTag.objects.get_or_create(
user=user,
@@ -61,6 +65,3 @@ def set_course_tag(user, course_id, key, value):
record.value = value
record.save()
-
- # TODO: There is a risk of IntegrityErrors being thrown here given
- # simultaneous calls from many processes. Handle by retrying after a short delay?
diff --git a/common/djangoapps/user_api/helpers.py b/common/djangoapps/user_api/helpers.py
index 06eb2497d7..233284e791 100644
--- a/common/djangoapps/user_api/helpers.py
+++ b/common/djangoapps/user_api/helpers.py
@@ -72,9 +72,9 @@ def require_post_params(required_params):
HttpResponse
"""
- def _decorator(func):
+ def _decorator(func): # pylint: disable=missing-docstring
@wraps(func)
- def _wrapped(*args, **kwargs):
+ def _wrapped(*args, **_kwargs): # pylint: disable=missing-docstring
request = args[0]
missing_params = set(required_params) - set(request.POST.keys())
if len(missing_params) > 0:
@@ -342,7 +342,7 @@ def shim_student_view(view_func, check_logged_in=False):
"""
@wraps(view_func)
- def _inner(request):
+ def _inner(request): # pylint: disable=missing-docstring
# Ensure that the POST querydict is mutable
request.POST = request.POST.copy()
diff --git a/common/djangoapps/user_api/tests/test_constants.py b/common/djangoapps/user_api/tests/test_constants.py
index 7f2b086847..7508965559 100644
--- a/common/djangoapps/user_api/tests/test_constants.py
+++ b/common/djangoapps/user_api/tests/test_constants.py
@@ -250,4 +250,4 @@ SORTED_COUNTRIES = [
(u'ZM', u'Zambia'),
(u'ZW', u'Zimbabwe'),
(u'AX', u'\xc5land Islands')
-]
\ No newline at end of file
+]
diff --git a/common/djangoapps/user_api/tests/test_helpers.py b/common/djangoapps/user_api/tests/test_helpers.py
index 215957dd40..94101e04c0 100644
--- a/common/djangoapps/user_api/tests/test_helpers.py
+++ b/common/djangoapps/user_api/tests/test_helpers.py
@@ -14,12 +14,12 @@ from user_api.helpers import (
class FakeInputException(Exception):
- """Fake exception that should be intercepted. """
+ """Fake exception that should be intercepted."""
pass
class FakeOutputException(Exception):
- """Fake exception that should be raised. """
+ """Fake exception that should be raised."""
pass
@@ -36,9 +36,7 @@ def intercepted_function(raise_error=None):
class InterceptErrorsTest(TestCase):
- """
- Tests for the decorator that intercepts errors.
- """
+ """Tests for the decorator that intercepts errors."""
@raises(FakeOutputException)
def test_intercepts_errors(self):
@@ -73,7 +71,7 @@ class InterceptErrorsTest(TestCase):
class FormDescriptionTest(TestCase):
-
+ """Tests of helper functions which generate form descriptions."""
def test_to_json(self):
desc = FormDescription("post", "/submit")
desc.add_field(
@@ -134,7 +132,7 @@ class FormDescriptionTest(TestCase):
@ddt.ddt
class StudentViewShimTest(TestCase):
-
+ "Tests of the student view shim."
def setUp(self):
self.captured_request = None
@@ -211,8 +209,8 @@ class StudentViewShimTest(TestCase):
response = view(HttpRequest())
self.assertEqual(response.status_code, 403)
- def _shimmed_view(self, response, check_logged_in=False):
- def stub_view(request):
+ def _shimmed_view(self, response, check_logged_in=False): # pylint: disable=missing-docstring
+ def stub_view(request): # pylint: disable=missing-docstring
self.captured_request = request
return response
return shim_student_view(stub_view, check_logged_in=check_logged_in)
diff --git a/common/djangoapps/user_api/tests/test_views.py b/common/djangoapps/user_api/tests/test_views.py
index 49d3741875..01886c0093 100644
--- a/common/djangoapps/user_api/tests/test_views.py
+++ b/common/djangoapps/user_api/tests/test_views.py
@@ -112,6 +112,11 @@ class ApiTestCase(TestCase):
self.assertEqual(response.status_code, 405)
def assertAuthDisabled(self, method, uri):
+ """
+ Assert that the Django rest framework does not interpret basic auth
+ headers for views exposed to anonymous users as an attempt to authenticate.
+
+ """
# Django rest framework interprets basic auth headers
# as an attempt to authenticate with the API.
# We don't want this for views available to anonymous users.
@@ -987,7 +992,7 @@ class RegistrationViewTest(ApiTestCase):
)
def test_register_form_year_of_birth(self):
- this_year = datetime.datetime.now(UTC).year
+ this_year = datetime.datetime.now(UTC).year # pylint: disable=maybe-no-member
year_options = (
[{"value": "", "name": "--", "default": True}] + [
{"value": unicode(year), "name": unicode(year)}
@@ -1067,13 +1072,17 @@ class RegistrationViewTest(ApiTestCase):
self._assert_reg_field(
{"honor_code": "required"},
{
- "label": "I agree to the Terms of Service and Honor Code",
+ "label": "I agree to the {platform_name} Terms of Service and Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ ),
"name": "honor_code",
"defaultValue": False,
"type": "checkbox",
"required": True,
"errorMessages": {
- "required": "You must agree to the Terms of Service and Honor Code"
+ "required": "You must agree to the {platform_name} Terms of Service and Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ )
}
}
)
@@ -1084,13 +1093,17 @@ class RegistrationViewTest(ApiTestCase):
self._assert_reg_field(
{"honor_code": "required"},
{
- "label": "I agree to the Terms of Service and Honor Code",
+ "label": "I agree to the {platform_name} Terms of Service and Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ ),
"name": "honor_code",
"defaultValue": False,
"type": "checkbox",
"required": True,
"errorMessages": {
- "required": "You must agree to the Terms of Service and Honor Code"
+ "required": "You must agree to the {platform_name} Terms of Service and Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ )
}
}
)
@@ -1107,13 +1120,17 @@ class RegistrationViewTest(ApiTestCase):
self._assert_reg_field(
{"honor_code": "required", "terms_of_service": "required"},
{
- "label": "I agree to the Honor Code",
+ "label": "I agree to the {platform_name} Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ ),
"name": "honor_code",
"defaultValue": False,
"type": "checkbox",
"required": True,
"errorMessages": {
- "required": "You must agree to the Honor Code"
+ "required": "You must agree to the {platform_name} Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ )
}
}
)
@@ -1122,13 +1139,17 @@ class RegistrationViewTest(ApiTestCase):
self._assert_reg_field(
{"honor_code": "required", "terms_of_service": "required"},
{
- "label": "I agree to the Terms of Service",
+ "label": "I agree to the {platform_name} Terms of Service.".format(
+ platform_name=settings.PLATFORM_NAME
+ ),
"name": "terms_of_service",
"defaultValue": False,
"type": "checkbox",
"required": True,
"errorMessages": {
- "required": "You must agree to the Terms of Service"
+ "required": "You must agree to the {platform_name} Terms of Service.".format(
+ platform_name=settings.PLATFORM_NAME
+ )
}
}
)
@@ -1141,13 +1162,17 @@ class RegistrationViewTest(ApiTestCase):
self._assert_reg_field(
{"honor_code": "required", "terms_of_service": "required"},
{
- "label": "I agree to the Honor Code",
+ "label": "I agree to the {platform_name} Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ ),
"name": "honor_code",
"defaultValue": False,
"type": "checkbox",
"required": True,
"errorMessages": {
- "required": "You must agree to the Honor Code"
+ "required": "You must agree to the {platform_name} Honor Code.".format(
+ platform_name=settings.PLATFORM_NAME
+ )
}
}
)
@@ -1156,13 +1181,17 @@ class RegistrationViewTest(ApiTestCase):
self._assert_reg_field(
{"honor_code": "required", "terms_of_service": "required"},
{
- "label": "I agree to the Terms of Service",
+ "label": "I agree to the {platform_name} Terms of Service.".format(
+ platform_name=settings.PLATFORM_NAME
+ ),
"name": "terms_of_service",
"defaultValue": False,
"type": "checkbox",
"required": True,
"errorMessages": {
- "required": "You must agree to the Terms of Service"
+ "required": "You must agree to the {platform_name} Terms of Service.".format(
+ platform_name=settings.PLATFORM_NAME
+ )
}
}
)
@@ -1372,7 +1401,7 @@ class RegistrationViewTest(ApiTestCase):
self.assertEqual(response.status_code, 409)
self.assertEqual(
response.content,
- "It looks like {} belongs to an existing account. Try again with a different email address and username.".format(
+ "It looks like {} belongs to an existing account. Try again with a different username.".format(
self.USERNAME
)
)
diff --git a/common/djangoapps/user_api/urls.py b/common/djangoapps/user_api/urls.py
index 7ae4f5f350..55a2e077cd 100644
--- a/common/djangoapps/user_api/urls.py
+++ b/common/djangoapps/user_api/urls.py
@@ -1,3 +1,4 @@
+# pylint: disable=missing-docstring
from django.conf import settings
from django.conf.urls import include, patterns, url
from rest_framework import routers
diff --git a/common/djangoapps/user_api/views.py b/common/djangoapps/user_api/views.py
index 4791f15d2d..c6739c30c3 100644
--- a/common/djangoapps/user_api/views.py
+++ b/common/djangoapps/user_api/views.py
@@ -1,6 +1,5 @@
"""HTTP end-points for the User API. """
import copy
-import json
from django.conf import settings
from django.contrib.auth.models import User
@@ -25,7 +24,6 @@ from opaque_keys.edx.locations import SlashSeparatedCourseKey
from edxmako.shortcuts import marketing_link
import third_party_auth
-from microsite_configuration import microsite
from user_api.api import account as account_api, profile as profile_api
from user_api.helpers import FormDescription, shim_student_view, require_post_params
@@ -54,7 +52,7 @@ class LoginSessionView(APIView):
# so do not require authentication.
authentication_classes = []
- def get(self, request):
+ def get(self, request): # pylint: disable=unused-argument
"""Return a description of the login form.
This decouples clients from the API definition:
@@ -64,9 +62,6 @@ class LoginSessionView(APIView):
See `user_api.helpers.FormDescription` for examples
of the JSON-encoded form description.
- Arguments:
- request (HttpRequest)
-
Returns:
HttpResponse
@@ -307,6 +302,15 @@ class RegistrationView(APIView):
return shim_student_view(create_account)(request)
def _add_email_field(self, form_desc, required=True):
+ """Add an email field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a field on the registration form
# meant to hold the user's email address.
email_label = _(u"Email")
@@ -328,6 +332,15 @@ class RegistrationView(APIView):
)
def _add_name_field(self, form_desc, required=True):
+ """Add a name field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a field on the registration form
# meant to hold the user's full name.
name_label = _(u"Full Name")
@@ -347,6 +360,15 @@ class RegistrationView(APIView):
)
def _add_username_field(self, form_desc, required=True):
+ """Add a username field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a field on the registration form
# meant to hold the user's public username.
username_label = _(u"Username")
@@ -369,6 +391,15 @@ class RegistrationView(APIView):
)
def _add_password_field(self, form_desc, required=True):
+ """Add a password field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a field on the registration form
# meant to hold the user's password.
password_label = _(u"Password")
@@ -385,6 +416,15 @@ class RegistrationView(APIView):
)
def _add_level_of_education_field(self, form_desc, required=True):
+ """Add a level of education field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a dropdown menu on the registration
# form used to select the user's highest completed level of education.
education_level_label = _(u"Highest Level of Education Completed")
@@ -399,6 +439,15 @@ class RegistrationView(APIView):
)
def _add_gender_field(self, form_desc, required=True):
+ """Add a gender field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a dropdown menu on the registration
# form used to select the user's gender.
gender_label = _(u"Gender")
@@ -413,6 +462,15 @@ class RegistrationView(APIView):
)
def _add_year_of_birth_field(self, form_desc, required=True):
+ """Add a year of birth field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a dropdown menu on the registration
# form used to select the user's year of birth.
yob_label = _(u"Year of Birth")
@@ -428,6 +486,15 @@ class RegistrationView(APIView):
)
def _add_mailing_address_field(self, form_desc, required=True):
+ """Add a mailing address field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a field on the registration form
# meant to hold the user's mailing address.
mailing_address_label = _(u"Mailing Address")
@@ -440,6 +507,15 @@ class RegistrationView(APIView):
)
def _add_goals_field(self, form_desc, required=True):
+ """Add a goals field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This phrase appears above a field on the registration form
# meant to hold the user's reasons for registering with edX.
goals_label = _(
@@ -454,6 +530,15 @@ class RegistrationView(APIView):
)
def _add_city_field(self, form_desc, required=True):
+ """Add a city field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a field on the registration form
# which allows the user to input the city in which they live.
city_label = _(u"City")
@@ -465,6 +550,15 @@ class RegistrationView(APIView):
)
def _add_country_field(self, form_desc, required=True):
+ """Add a country field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This label appears above a dropdown menu on the registration
# form used to select the country in which the user lives.
country_label = _(u"Country")
@@ -486,6 +580,15 @@ class RegistrationView(APIView):
)
def _add_honor_code_field(self, form_desc, required=True):
+ """Add an honor code field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Separate terms of service and honor code checkboxes
if self._is_field_visible("terms_of_service"):
terms_text = _(u"Honor Code")
@@ -531,6 +634,15 @@ class RegistrationView(APIView):
)
def _add_terms_of_service_field(self, form_desc, required=True):
+ """Add a terms of service field to a form description.
+
+ Arguments:
+ form_desc: A form description
+
+ Keyword Arguments:
+ required (Boolean): Whether this field is required; defaults to True
+
+ """
# Translators: This is a legal document users must agree to
# in order to register a new account.
terms_text = _(u"Terms of Service")
@@ -615,6 +727,7 @@ class RegistrationView(APIView):
restrictions={}
)
+
class PasswordResetView(APIView):
"""HTTP end-point for GETting a description of the password reset form. """
@@ -622,7 +735,7 @@ class PasswordResetView(APIView):
# so do not require authentication.
authentication_classes = []
- def get(self, request):
+ def get(self, request): # pylint: disable=unused-argument
"""Return a description of the password reset form.
This decouples clients from the API definition:
@@ -632,9 +745,6 @@ class PasswordResetView(APIView):
See `user_api.helpers.FormDescription` for examples
of the JSON-encoded form description.
- Arguments:
- request (HttpRequest)
-
Returns:
HttpResponse
diff --git a/common/djangoapps/util/testing.py b/common/djangoapps/util/testing.py
index 311ed89244..ccfd29e91d 100644
--- a/common/djangoapps/util/testing.py
+++ b/common/djangoapps/util/testing.py
@@ -20,6 +20,7 @@ class UrlResetMixin(object):
"""
def _reset_urls(self, urlconf_modules):
+ """Reset `urls.py` for a set of Django apps."""
for urlconf in urlconf_modules:
if urlconf in sys.modules:
reload(sys.modules[urlconf])
diff --git a/lms/djangoapps/student_account/helpers.py b/lms/djangoapps/student_account/helpers.py
index 7683791a3b..cd2e8d947f 100644
--- a/lms/djangoapps/student_account/helpers.py
+++ b/lms/djangoapps/student_account/helpers.py
@@ -1,4 +1,4 @@
"""Helper functions for the student account app. """
-# TODO: move this function here instead of importing it from student
-from student.helpers import auth_pipeline_urls
+# TODO: move this function here instead of importing it from student # pylint: disable=fixme
+from student.helpers import auth_pipeline_urls # pylint: disable=unused-import