This reverts commit a235425ac3.
This commit is contained in:
@@ -37,10 +37,10 @@ class MarketingSiteViewTests(TestCase):
|
||||
"""
|
||||
Test the about view with the header and content set in SiteConfiguration.
|
||||
"""
|
||||
test_header = "Very Unique Test Header"
|
||||
test_content = "Very Unique Test Content"
|
||||
test_header_key = 'static_template_about_header'
|
||||
test_content_key = 'static_template_about_content'
|
||||
test_header = u"Very Unique Test Header"
|
||||
test_content = u"Very Unique Test Content"
|
||||
test_header_key = u'static_template_about_header'
|
||||
test_content_key = u'static_template_about_content'
|
||||
response = None
|
||||
configuration = {test_header_key: test_header, test_content_key: test_content}
|
||||
with with_site_configuration_context(configuration=configuration):
|
||||
@@ -52,10 +52,10 @@ class MarketingSiteViewTests(TestCase):
|
||||
"""
|
||||
Test the about view with html in the header.
|
||||
"""
|
||||
test_header = "<i>Very Unique Test Header</i>"
|
||||
test_content = "<i>Very Unique Test Content</i>"
|
||||
test_header_key = 'static_template_about_header'
|
||||
test_content_key = 'static_template_about_content'
|
||||
test_header = u"<i>Very Unique Test Header</i>"
|
||||
test_content = u"<i>Very Unique Test Content</i>"
|
||||
test_header_key = u'static_template_about_header'
|
||||
test_content_key = u'static_template_about_content'
|
||||
response = None
|
||||
configuration = {test_header_key: test_header, test_content_key: test_content}
|
||||
with with_site_configuration_context(configuration=configuration):
|
||||
@@ -85,7 +85,7 @@ class MarketingSiteViewTests(TestCase):
|
||||
resp = self.client.get(url)
|
||||
self.assertContains(
|
||||
resp,
|
||||
'There has been a 500 error on the <em>{platform_name}</em> servers'.format(
|
||||
u'There has been a 500 error on the <em>{platform_name}</em> servers'.format(
|
||||
platform_name=settings.PLATFORM_NAME
|
||||
),
|
||||
status_code=500
|
||||
|
||||
@@ -46,7 +46,7 @@ for key, value in settings.MKTG_URL_LINK_MAP.items():
|
||||
if '.' not in template:
|
||||
# Append STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION if
|
||||
# no file extension was specified in the key
|
||||
template = f"{template}.{settings.STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION}"
|
||||
template = "%s.%s" % (template, settings.STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION)
|
||||
|
||||
# Make the assumption that the URL we want is the lowercased
|
||||
# version of the map key
|
||||
|
||||
@@ -15,13 +15,13 @@ from django.template import TemplateDoesNotExist
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
from django.views.defaults import permission_denied
|
||||
from mako.exceptions import TopLevelLookupException
|
||||
from ratelimit.exceptions import Ratelimited
|
||||
from mako.exceptions import TopLevelLookupException
|
||||
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response, render_to_string
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from common.djangoapps.util.cache import cache_if_anonymous
|
||||
from common.djangoapps.util.views import fix_crum_request
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
|
||||
valid_templates = []
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@ Test the lms/staticbook views.
|
||||
|
||||
|
||||
import textwrap
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
import mock
|
||||
import requests
|
||||
from django.urls import NoReverseMatch, reverse
|
||||
from six import text_type
|
||||
|
||||
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
@@ -50,7 +50,7 @@ class StaticBookTest(ModuleStoreTestCase):
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
super(StaticBookTest, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.course = None
|
||||
|
||||
def make_course(self, **kwargs):
|
||||
@@ -69,7 +69,7 @@ class StaticBookTest(ModuleStoreTestCase):
|
||||
Automatically provides the course id.
|
||||
|
||||
"""
|
||||
kwargs['course_id'] = str(self.course.id)
|
||||
kwargs['course_id'] = text_type(self.course.id)
|
||||
url = reverse(url_name, kwargs=kwargs)
|
||||
return url
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ from django.http import Http404
|
||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.static_replace import replace_static_urls
|
||||
from lms.djangoapps.courseware.access import has_access
|
||||
from lms.djangoapps.courseware.courses import get_course_with_access
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.static_replace import replace_static_urls
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -25,7 +25,7 @@ def index(request, course_id, book_index, page=None):
|
||||
|
||||
book_index = int(book_index)
|
||||
if book_index < 0 or book_index >= len(course.textbooks):
|
||||
raise Http404(f"Invalid book index value: {book_index}")
|
||||
raise Http404(u"Invalid book index value: {0}".format(book_index))
|
||||
textbook = course.textbooks[book_index]
|
||||
table_of_contents = textbook.table_of_contents
|
||||
|
||||
@@ -83,7 +83,7 @@ def pdf_index(request, course_id, book_index, chapter=None, page=None):
|
||||
|
||||
book_index = int(book_index)
|
||||
if book_index < 0 or book_index >= len(course.pdf_textbooks):
|
||||
raise Http404(f"Invalid book index value: {book_index}")
|
||||
raise Http404(u"Invalid book index value: {0}".format(book_index))
|
||||
textbook = course.pdf_textbooks[book_index]
|
||||
|
||||
viewer_params = '&file='
|
||||
@@ -108,7 +108,7 @@ def pdf_index(request, course_id, book_index, chapter=None, page=None):
|
||||
|
||||
viewer_params += '#zoom=page-fit&disableRange=true'
|
||||
if page is not None:
|
||||
viewer_params += f'&page={page}'
|
||||
viewer_params += '&page={}'.format(page)
|
||||
|
||||
if request.GET.get('viewer', '') == 'true':
|
||||
template = 'pdf_viewer.html'
|
||||
@@ -151,7 +151,7 @@ def html_index(request, course_id, book_index, chapter=None):
|
||||
|
||||
book_index = int(book_index)
|
||||
if book_index < 0 or book_index >= len(course.html_textbooks):
|
||||
raise Http404(f"Invalid book index value: {book_index}")
|
||||
raise Http404(u"Invalid book index value: {0}".format(book_index))
|
||||
textbook = course.html_textbooks[book_index]
|
||||
|
||||
if 'url' in textbook:
|
||||
|
||||
@@ -4,10 +4,14 @@ Serializers for use in the support app.
|
||||
import json
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from common.djangoapps.student.models import CourseEnrollment, ManualEnrollmentAudit
|
||||
from lms.djangoapps.program_enrollments.models import ProgramCourseEnrollment, ProgramEnrollment
|
||||
from lms.djangoapps.program_enrollments.models import (
|
||||
ProgramEnrollment,
|
||||
ProgramCourseEnrollment,
|
||||
)
|
||||
from openedx.core.djangoapps.catalog.utils import get_programs_by_uuids
|
||||
from openedx.features.course_experience import default_course_url_name
|
||||
|
||||
@@ -19,7 +23,7 @@ class ManualEnrollmentSerializer(serializers.ModelSerializer):
|
||||
"""Serializes a manual enrollment audit object."""
|
||||
enrolled_by = serializers.SlugRelatedField(slug_field='email', read_only=True, default='')
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = ManualEnrollmentAudit
|
||||
fields = ('enrolled_by', 'time_stamp', 'reason')
|
||||
|
||||
@@ -30,7 +34,7 @@ class CourseEnrollmentSerializer(serializers.Serializer):
|
||||
is_active = serializers.BooleanField()
|
||||
mode = serializers.CharField()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = CourseEnrollment
|
||||
|
||||
|
||||
@@ -43,7 +47,7 @@ class ProgramCourseEnrollmentSerializer(serializers.Serializer):
|
||||
course_enrollment = CourseEnrollmentSerializer()
|
||||
course_url = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = ProgramCourseEnrollment
|
||||
|
||||
def get_course_url(self, obj):
|
||||
@@ -61,7 +65,7 @@ class ProgramEnrollmentSerializer(serializers.Serializer):
|
||||
program_course_enrollments = ProgramCourseEnrollmentSerializer(many=True)
|
||||
program_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
class Meta(object):
|
||||
model = ProgramEnrollment
|
||||
|
||||
def get_program_name(self, obj):
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# coding: UTF-8
|
||||
"""
|
||||
Tests for support views.
|
||||
"""
|
||||
@@ -7,35 +8,31 @@ import itertools
|
||||
import json
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
from unittest.mock import patch
|
||||
from uuid import UUID, uuid4
|
||||
|
||||
import ddt
|
||||
import six
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.db.models import signals
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse
|
||||
from mock import patch
|
||||
from organizations.tests.factories import OrganizationFactory
|
||||
from pytz import UTC
|
||||
from social_django.models import UserSocialAuth
|
||||
|
||||
from common.test.utils import disable_signal
|
||||
from common.djangoapps.course_modes.models import CourseMode
|
||||
from common.djangoapps.course_modes.tests.factories import CourseModeFactory
|
||||
from common.djangoapps.student.models import ( # lint-amnesty, pylint: disable=line-too-long
|
||||
ENROLLED_TO_ENROLLED,
|
||||
CourseEnrollment,
|
||||
CourseEnrollmentAttribute,
|
||||
ManualEnrollmentAudit
|
||||
)
|
||||
from common.djangoapps.student.roles import GlobalStaff, SupportStaffRole
|
||||
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from common.djangoapps.third_party_auth.tests.factories import SAMLProviderConfigFactory
|
||||
from common.test.utils import disable_signal
|
||||
from lms.djangoapps.program_enrollments.tests.factories import ProgramCourseEnrollmentFactory, ProgramEnrollmentFactory
|
||||
from lms.djangoapps.support.serializers import ProgramEnrollmentSerializer
|
||||
from lms.djangoapps.verify_student.models import VerificationDeadline
|
||||
from lms.djangoapps.verify_student.services import IDVerificationService
|
||||
from lms.djangoapps.verify_student.tests.factories import SSOVerificationFactory
|
||||
from common.djangoapps.student.models import ENROLLED_TO_ENROLLED, CourseEnrollment, CourseEnrollmentAttribute, ManualEnrollmentAudit # lint-amnesty, pylint: disable=line-too-long
|
||||
from common.djangoapps.student.roles import GlobalStaff, SupportStaffRole
|
||||
from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||
from common.djangoapps.third_party_auth.tests.factories import SAMLProviderConfigFactory
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase, SharedModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
@@ -51,7 +48,7 @@ class SupportViewTestCase(ModuleStoreTestCase):
|
||||
|
||||
def setUp(self):
|
||||
"""Create a user and log in. """
|
||||
super().setUp()
|
||||
super(SupportViewTestCase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.user = UserFactory(username=self.USERNAME, email=self.EMAIL, password=self.PASSWORD)
|
||||
self.course = CourseFactory.create()
|
||||
success = self.client.login(username=self.USERNAME, password=self.PASSWORD)
|
||||
@@ -65,7 +62,7 @@ class SupportViewManageUserTests(SupportViewTestCase):
|
||||
|
||||
def setUp(self):
|
||||
"""Make the user support staff"""
|
||||
super().setUp()
|
||||
super(SupportViewManageUserTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
SupportStaffRole().add_users(self.user)
|
||||
|
||||
def test_get_contact_us(self):
|
||||
@@ -192,7 +189,7 @@ class SupportViewIndexTests(SupportViewTestCase):
|
||||
|
||||
def setUp(self):
|
||||
"""Make the user support staff. """
|
||||
super().setUp()
|
||||
super(SupportViewIndexTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
SupportStaffRole().add_users(self.user)
|
||||
|
||||
def test_index(self):
|
||||
@@ -210,7 +207,7 @@ class SupportViewCertificatesTests(SupportViewTestCase):
|
||||
"""
|
||||
def setUp(self):
|
||||
"""Make the user support staff. """
|
||||
super().setUp()
|
||||
super(SupportViewCertificatesTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
SupportStaffRole().add_users(self.user)
|
||||
|
||||
def test_certificates_no_filter(self):
|
||||
@@ -226,10 +223,10 @@ class SupportViewCertificatesTests(SupportViewTestCase):
|
||||
|
||||
def test_certificates_along_with_course_filter(self):
|
||||
# Check that an initial filter is passed to the JavaScript client.
|
||||
url = reverse("support:certificates") + "?user=student@example.com&course_id=" + str(self.course.id)
|
||||
url = reverse("support:certificates") + "?user=student@example.com&course_id=" + six.text_type(self.course.id)
|
||||
response = self.client.get(url)
|
||||
self.assertContains(response, "userFilter: 'student@example.com'")
|
||||
self.assertContains(response, "courseFilter: '" + str(self.course.id) + "'")
|
||||
self.assertContains(response, "courseFilter: '" + six.text_type(self.course.id) + "'")
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
@@ -237,10 +234,10 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
||||
"""Tests for the enrollment support view."""
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
super(SupportViewEnrollmentsTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
SupportStaffRole().add_users(self.user)
|
||||
|
||||
self.course = CourseFactory(display_name='teꜱᴛ')
|
||||
self.course = CourseFactory(display_name=u'teꜱᴛ')
|
||||
self.student = UserFactory.create(username='student', email='test@example.com', password='test')
|
||||
|
||||
for mode in (
|
||||
@@ -280,7 +277,7 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
||||
'mode': CourseMode.AUDIT,
|
||||
'manual_enrollment': {},
|
||||
'user': self.student.username,
|
||||
'course_id': str(self.course.id),
|
||||
'course_id': six.text_type(self.course.id),
|
||||
'is_active': True,
|
||||
'verified_upgrade_deadline': None,
|
||||
}, data[0])
|
||||
@@ -311,7 +308,7 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
||||
kwargs={'username_or_email': getattr(self.student, search_string_type)}
|
||||
)
|
||||
response = self.client.post(url, data={
|
||||
'course_id': str(self.course.id),
|
||||
'course_id': six.text_type(self.course.id),
|
||||
'old_mode': CourseMode.AUDIT,
|
||||
'new_mode': CourseMode.VERIFIED,
|
||||
'reason': 'Financial Assistance'
|
||||
@@ -424,11 +421,11 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
||||
|
||||
with patch('lms.djangoapps.support.views.enrollments.get_credit_provider_attribute_values') as mock_method:
|
||||
credit_provider = (
|
||||
['Arizona State University'], 'You are now eligible for credit from Arizona State University'
|
||||
[u'Arizona State University'], 'You are now eligible for credit from Arizona State University'
|
||||
)
|
||||
mock_method.return_value = credit_provider
|
||||
response = self.client.post(url, data={
|
||||
'course_id': str(self.course.id),
|
||||
'course_id': six.text_type(self.course.id),
|
||||
'old_mode': CourseMode.AUDIT,
|
||||
'new_mode': new_mode,
|
||||
'reason': 'Financial Assistance'
|
||||
@@ -439,7 +436,7 @@ class SupportViewEnrollmentsTests(SharedModuleStoreTestCase, SupportViewTestCase
|
||||
self.assert_enrollment(new_mode)
|
||||
if new_mode == 'credit':
|
||||
enrollment_attr = CourseEnrollmentAttribute.objects.first()
|
||||
assert enrollment_attr.value == str(credit_provider[0])
|
||||
assert enrollment_attr.value == six.text_type(credit_provider[0])
|
||||
|
||||
def set_course_end_date_and_expiry(self):
|
||||
""" Set the course-end date and expire its verified mode."""
|
||||
@@ -468,7 +465,7 @@ class SupportViewLinkProgramEnrollmentsTests(SupportViewTestCase):
|
||||
|
||||
def setUp(self):
|
||||
"""Make the user support staff. """
|
||||
super().setUp()
|
||||
super(SupportViewLinkProgramEnrollmentsTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.url = reverse("support:link_program_enrollments")
|
||||
SupportStaffRole().add_users(self.user)
|
||||
self.program_uuid = str(uuid4())
|
||||
@@ -490,7 +487,7 @@ class SupportViewLinkProgramEnrollmentsTests(SupportViewTestCase):
|
||||
Test the view without mocking out the rendering like the rest of the tests.
|
||||
"""
|
||||
response = self.client.get(self.url)
|
||||
content = str(response.content, encoding='utf-8')
|
||||
content = six.text_type(response.content, encoding='utf-8')
|
||||
assert '"programUUID": ""' in content
|
||||
assert '"text": ""' in content
|
||||
|
||||
@@ -500,7 +497,7 @@ class SupportViewLinkProgramEnrollmentsTests(SupportViewTestCase):
|
||||
'program_uuid': 'notauuid',
|
||||
'text': self.text,
|
||||
})
|
||||
msg = "Supplied program UUID 'notauuid' is not a valid UUID."
|
||||
msg = u"Supplied program UUID 'notauuid' is not a valid UUID."
|
||||
render_call_dict = mocked_render.call_args[0][1]
|
||||
assert render_call_dict['errors'] == [msg]
|
||||
|
||||
@@ -513,9 +510,9 @@ class SupportViewLinkProgramEnrollmentsTests(SupportViewTestCase):
|
||||
@ddt.unpack
|
||||
def test_missing_parameter(self, program_uuid, text, mocked_render):
|
||||
error = (
|
||||
"You must provide both a program uuid "
|
||||
"and a series of lines with the format "
|
||||
"'external_user_key,lms_username'."
|
||||
u"You must provide both a program uuid "
|
||||
u"and a series of lines with the format "
|
||||
u"'external_user_key,lms_username'."
|
||||
)
|
||||
self.client.post(self.url, data={
|
||||
'program_uuid': program_uuid,
|
||||
@@ -551,7 +548,7 @@ class SupportViewLinkProgramEnrollmentsTests(SupportViewTestCase):
|
||||
'program_uuid': self.program_uuid,
|
||||
'text': text,
|
||||
})
|
||||
msg = "All linking lines must be in the format 'external_user_key,lms_username'"
|
||||
msg = u"All linking lines must be in the format 'external_user_key,lms_username'"
|
||||
render_call_dict = mocked_render.call_args[0][1]
|
||||
assert render_call_dict['errors'] == [msg]
|
||||
|
||||
@@ -613,14 +610,14 @@ class SupportViewLinkProgramEnrollmentsTests(SupportViewTestCase):
|
||||
})
|
||||
render_call_dict = mocked_render.call_args[0][1]
|
||||
if username:
|
||||
expected_success = f"('{external_user_key}', '{username}')"
|
||||
expected_success = "('{}', '{}')".format(external_user_key, username)
|
||||
assert render_call_dict['successes'] == [expected_success]
|
||||
program_enrollment.refresh_from_db()
|
||||
assert program_enrollment.user == linked_user
|
||||
program_course_enrollment.refresh_from_db()
|
||||
assert program_course_enrollment.course_enrollment.user == linked_user
|
||||
else:
|
||||
error = "All linking lines must be in the format 'external_user_key,lms_username'"
|
||||
error = u"All linking lines must be in the format 'external_user_key,lms_username'"
|
||||
assert render_call_dict['errors'] == [error]
|
||||
|
||||
|
||||
@@ -636,7 +633,7 @@ class ProgramEnrollmentsInspectorViewTests(SupportViewTestCase):
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
super(ProgramEnrollmentsInspectorViewTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
self.url = reverse("support:program_enrollments_inspector")
|
||||
SupportStaffRole().add_users(self.user)
|
||||
self.program_uuid = str(uuid4())
|
||||
@@ -662,7 +659,7 @@ class ProgramEnrollmentsInspectorViewTests(SupportViewTestCase):
|
||||
|
||||
def test_initial_rendering(self):
|
||||
response = self.client.get(self.url)
|
||||
content = str(response.content, encoding='utf-8')
|
||||
content = six.text_type(response.content, encoding='utf-8')
|
||||
expected_organization_serialized = '"orgKeys": {}'.format(
|
||||
json.dumps(sorted(self.org_key_list))
|
||||
)
|
||||
@@ -684,7 +681,7 @@ class ProgramEnrollmentsInspectorViewTests(SupportViewTestCase):
|
||||
if org_key and external_user_key:
|
||||
user_social_auth = UserSocialAuth.objects.create(
|
||||
user=user,
|
||||
uid=f'{org_key}:{external_user_key}',
|
||||
uid='{0}:{1}'.format(org_key, external_user_key),
|
||||
provider='tpa-saml'
|
||||
)
|
||||
user_info['sso_list'] = [{
|
||||
@@ -957,7 +954,7 @@ class SsoRecordsTests(SupportViewTestCase): # lint-amnesty, pylint: disable=mis
|
||||
|
||||
def setUp(self):
|
||||
"""Make the user support staff"""
|
||||
super().setUp()
|
||||
super(SsoRecordsTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments
|
||||
SupportStaffRole().add_users(self.user)
|
||||
self.student = UserFactory.create(username='student', email='test@example.com', password='test')
|
||||
self.url = reverse("support:sso_records", kwargs={'username_or_email': self.student.username})
|
||||
|
||||
@@ -5,8 +5,8 @@ URLs for the student support app.
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
from .views.certificate import CertificatesSupportView
|
||||
from .views.contact_us import ContactUsView
|
||||
from .views.certificate import CertificatesSupportView
|
||||
from .views.course_entitlements import EntitlementSupportView
|
||||
from .views.enrollments import EnrollmentSupportListView, EnrollmentSupportView
|
||||
from .views.feature_based_enrollments import FeatureBasedEnrollmentsSupportView
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
"""
|
||||
Certificate tool in the student support app.
|
||||
"""
|
||||
from urllib.parse import quote_plus, unquote
|
||||
|
||||
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views.generic import View
|
||||
from six.moves.urllib.parse import quote_plus, unquote
|
||||
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from lms.djangoapps.support.decorators import require_support_permission
|
||||
|
||||
@@ -8,9 +8,9 @@ from django.http import Http404
|
||||
from django.views.generic import View
|
||||
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.student.models import CourseEnrollment
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.features.enterprise_support import api as enterprise_api
|
||||
from common.djangoapps.student.models import CourseEnrollment
|
||||
|
||||
|
||||
class ContactUsView(View):
|
||||
@@ -35,7 +35,7 @@ class ContactUsView(View):
|
||||
current_site_name = configuration_helpers.get_value("SITE_NAME")
|
||||
if current_site_name:
|
||||
current_site_name = current_site_name.replace(".", "_")
|
||||
tags.append(f"site_name_{current_site_name}")
|
||||
tags.append("site_name_{site}".format(site=current_site_name))
|
||||
|
||||
if request.user.is_authenticated:
|
||||
context['course_id'] = request.session.get('course_id', '')
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
Support tool for changing course enrollments.
|
||||
"""
|
||||
|
||||
|
||||
import six
|
||||
from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user
|
||||
from django.db import transaction
|
||||
from django.db.models import Q
|
||||
@@ -12,16 +14,10 @@ from django.views.generic import View
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from rest_framework.generics import GenericAPIView
|
||||
from six import text_type
|
||||
|
||||
from common.djangoapps.course_modes.models import CourseMode
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.student.models import ( # lint-amnesty, pylint: disable=line-too-long
|
||||
ENROLLED_TO_ENROLLED,
|
||||
CourseEnrollment,
|
||||
CourseEnrollmentAttribute,
|
||||
ManualEnrollmentAudit
|
||||
)
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
from lms.djangoapps.support.decorators import require_support_permission
|
||||
from lms.djangoapps.support.serializers import ManualEnrollmentSerializer
|
||||
from lms.djangoapps.verify_student.models import VerificationDeadline
|
||||
@@ -29,6 +25,8 @@ from openedx.core.djangoapps.credit.email_utils import get_credit_provider_attri
|
||||
from openedx.core.djangoapps.enrollments.api import get_enrollments, update_enrollment
|
||||
from openedx.core.djangoapps.enrollments.errors import CourseModeNotFoundError
|
||||
from openedx.core.djangoapps.enrollments.serializers import ModeSerializer
|
||||
from common.djangoapps.student.models import ENROLLED_TO_ENROLLED, CourseEnrollment, CourseEnrollmentAttribute, ManualEnrollmentAudit # lint-amnesty, pylint: disable=line-too-long
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
|
||||
|
||||
class EnrollmentSupportView(View):
|
||||
@@ -93,19 +91,19 @@ class EnrollmentSupportListView(GenericAPIView):
|
||||
reason = request.data['reason']
|
||||
enrollment = CourseEnrollment.objects.get(user=user, course_id=course_key)
|
||||
if enrollment.mode != old_mode:
|
||||
return HttpResponseBadRequest('User {username} is not enrolled with mode {old_mode}.'.format(
|
||||
return HttpResponseBadRequest(u'User {username} is not enrolled with mode {old_mode}.'.format(
|
||||
username=user.username,
|
||||
old_mode=old_mode
|
||||
))
|
||||
except KeyError as err:
|
||||
return HttpResponseBadRequest('The field {} is required.'.format(str(err)))
|
||||
return HttpResponseBadRequest(u'The field {} is required.'.format(text_type(err)))
|
||||
except InvalidKeyError:
|
||||
return HttpResponseBadRequest('Could not parse course key.')
|
||||
return HttpResponseBadRequest(u'Could not parse course key.')
|
||||
except (CourseEnrollment.DoesNotExist, User.DoesNotExist):
|
||||
return HttpResponseBadRequest(
|
||||
'Could not find enrollment for user {username} in course {course}.'.format(
|
||||
u'Could not find enrollment for user {username} in course {course}.'.format(
|
||||
username=username_or_email,
|
||||
course=str(course_key)
|
||||
course=six.text_type(course_key)
|
||||
)
|
||||
)
|
||||
try:
|
||||
@@ -132,7 +130,7 @@ class EnrollmentSupportListView(GenericAPIView):
|
||||
)
|
||||
return JsonResponse(ManualEnrollmentSerializer(instance=manual_enrollment).data)
|
||||
except CourseModeNotFoundError as err:
|
||||
return HttpResponseBadRequest(str(err))
|
||||
return HttpResponseBadRequest(text_type(err))
|
||||
|
||||
@staticmethod
|
||||
def include_verified_mode_info(enrollment_data, course_key):
|
||||
|
||||
@@ -11,12 +11,13 @@ from django.utils.translation import ugettext as _
|
||||
from django.views.generic import View
|
||||
from rest_framework.generics import GenericAPIView
|
||||
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.student.models import UserPasswordToggleHistory
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from lms.djangoapps.support.decorators import require_support_permission
|
||||
from openedx.core.djangoapps.user_api.accounts.serializers import AccountUserSerializer
|
||||
from openedx.core.djangoapps.user_authn.utils import generate_password
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
|
||||
from openedx.core.djangolib.oauth2_retirement_utils import retire_dot_oauth2_models
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ from django.views.generic import View
|
||||
from social_django.models import UserSocialAuth
|
||||
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from common.djangoapps.third_party_auth.models import SAMLProviderConfig
|
||||
from lms.djangoapps.program_enrollments.api import (
|
||||
fetch_program_enrollments_by_student,
|
||||
get_users_by_external_keys_and_org_key,
|
||||
@@ -25,8 +24,12 @@ from lms.djangoapps.program_enrollments.exceptions import (
|
||||
ProviderDoesNotExistException
|
||||
)
|
||||
from lms.djangoapps.support.decorators import require_support_permission
|
||||
from lms.djangoapps.support.serializers import ProgramEnrollmentSerializer, serialize_user_info
|
||||
from lms.djangoapps.support.serializers import (
|
||||
ProgramEnrollmentSerializer,
|
||||
serialize_user_info
|
||||
)
|
||||
from lms.djangoapps.verify_student.services import IDVerificationService
|
||||
from common.djangoapps.third_party_auth.models import SAMLProviderConfig
|
||||
|
||||
TEMPLATE_PATH = 'support/link_program_enrollments.html'
|
||||
DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
|
||||
@@ -91,7 +94,7 @@ class LinkProgramEnrollmentSupportView(View):
|
||||
program_uuid = UUID(program_uuid_string)
|
||||
except ValueError:
|
||||
return [], [
|
||||
f"Supplied program UUID '{program_uuid_string}' is not a valid UUID."
|
||||
"Supplied program UUID '{}' is not a valid UUID.".format(program_uuid_string)
|
||||
]
|
||||
reader = csv.DictReader(
|
||||
linkage_text.splitlines(), fieldnames=('external_key', 'username')
|
||||
@@ -210,7 +213,7 @@ class ProgramEnrollmentsInspectorView(View):
|
||||
result['id_verification'] = IDVerificationService.user_status(user)
|
||||
return result, ''
|
||||
except User.DoesNotExist:
|
||||
return {}, f'Could not find edx account with {username_or_email}'
|
||||
return {}, 'Could not find edx account with {}'.format(username_or_email)
|
||||
|
||||
def _get_external_user_info(self, external_user_key, org_key, idp_provider=None):
|
||||
"""
|
||||
|
||||
@@ -8,9 +8,9 @@ from django.utils.decorators import method_decorator
|
||||
from rest_framework.generics import GenericAPIView
|
||||
from social_django.models import UserSocialAuth
|
||||
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
from lms.djangoapps.support.decorators import require_support_permission
|
||||
from lms.djangoapps.support.serializers import serialize_sso_records
|
||||
from common.djangoapps.util.json_request import JsonResponse
|
||||
|
||||
|
||||
class SsoView(GenericAPIView):
|
||||
|
||||
Reference in New Issue
Block a user