From 372c4abfa67922173be0fb4b3fa7ca794fb4bf0f Mon Sep 17 00:00:00 2001 From: Usama Sadiq Date: Mon, 10 May 2021 13:55:48 +0500 Subject: [PATCH] refactor: pyupgrade second iteration (#27458) --- .../api/v1/tests/test_views.py | 2 +- .../features/course_experience/api/v1/urls.py | 2 +- .../course_experience/course_tools.py | 2 +- .../tests/views/test_course_dates.py | 4 +- .../tests/views/test_course_home.py | 22 +++++----- .../tests/views/test_course_outline.py | 42 +++++++++---------- .../tests/views/test_course_sock.py | 7 ++-- .../tests/views/test_masquerade.py | 4 +- .../features/course_experience/url_helpers.py | 16 +++---- .../course_experience/views/course_dates.py | 2 +- .../course_experience/views/course_home.py | 6 +-- .../views/course_home_messages.py | 24 +++++------ .../course_experience/views/course_updates.py | 6 +-- .../views/welcome_message.py | 2 +- openedx/features/course_experience/waffle.py | 6 +-- 15 files changed, 72 insertions(+), 75 deletions(-) diff --git a/openedx/features/course_experience/api/v1/tests/test_views.py b/openedx/features/course_experience/api/v1/tests/test_views.py index c92cf32f7e..d50bbfd7fc 100644 --- a/openedx/features/course_experience/api/v1/tests/test_views.py +++ b/openedx/features/course_experience/api/v1/tests/test_views.py @@ -6,7 +6,7 @@ import ddt from django.urls import reverse from django.utils import timezone -from mock import patch +from unittest.mock import patch from common.djangoapps.course_modes.models import CourseMode from common.djangoapps.student.models import CourseEnrollment diff --git a/openedx/features/course_experience/api/v1/urls.py b/openedx/features/course_experience/api/v1/urls.py index 575ddfdb3f..9a2c7106cd 100644 --- a/openedx/features/course_experience/api/v1/urls.py +++ b/openedx/features/course_experience/api/v1/urls.py @@ -22,7 +22,7 @@ urlpatterns += [ # URL for retrieving course deadlines info urlpatterns += [ re_path( - r'v1/course_deadlines_info/{}'.format(settings.COURSE_KEY_PATTERN), + fr'v1/course_deadlines_info/{settings.COURSE_KEY_PATTERN}', CourseDeadlinesMobileView.as_view(), name='course-experience-course-deadlines-mobile' ), diff --git a/openedx/features/course_experience/course_tools.py b/openedx/features/course_experience/course_tools.py index 896b5eecd6..d1c47ada86 100644 --- a/openedx/features/course_experience/course_tools.py +++ b/openedx/features/course_experience/course_tools.py @@ -20,7 +20,7 @@ class HttpMethod(Enum): PUT = 'PUT' -class CourseTool(object): +class CourseTool: """ This is an optional base class for Course Tool plugins. diff --git a/openedx/features/course_experience/tests/views/test_course_dates.py b/openedx/features/course_experience/tests/views/test_course_dates.py index ea0c359da6..19d5ef8f0a 100644 --- a/openedx/features/course_experience/tests/views/test_course_dates.py +++ b/openedx/features/course_experience/tests/views/test_course_dates.py @@ -20,7 +20,7 @@ class TestCourseDatesFragmentView(ModuleStoreTestCase): """Tests for the course dates fragment view.""" def setUp(self): - super(TestCourseDatesFragmentView, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() with self.store.default_store(ModuleStoreEnum.Type.split): self.course = CourseFactory.create( org='edX', @@ -35,7 +35,7 @@ class TestCourseDatesFragmentView(ModuleStoreTestCase): self.dates_fragment_url = reverse( 'openedx.course_experience.mobile_dates_fragment_view', kwargs={ - 'course_id': six.text_type(self.course.id) + 'course_id': str(self.course.id) } ) diff --git a/openedx/features/course_experience/tests/views/test_course_home.py b/openedx/features/course_experience/tests/views/test_course_home.py index 8b7d4d1381..84807b9667 100644 --- a/openedx/features/course_experience/tests/views/test_course_home.py +++ b/openedx/features/course_experience/tests/views/test_course_home.py @@ -1,14 +1,12 @@ -# coding=utf-8 """ Tests for the course home page. """ from datetime import datetime, timedelta +from unittest import mock import ddt -import mock -import six from django.conf import settings from django.http import QueryDict from django.urls import reverse @@ -92,7 +90,7 @@ def course_home_url(course): Arguments: course (CourseBlock): The course being tested. """ - return course_home_url_from_string(six.text_type(course.id)) + return course_home_url_from_string(str(course.id)) def course_home_url_from_string(course_key_string): @@ -369,7 +367,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): """ url = course_home_url(self.course) response = self.client.get(url) - self.assertContains(response, '/login?next={url}'.format(url=urlquote_plus(url))) + self.assertContains(response, f'/login?next={urlquote_plus(url)}') @mock.patch.dict(settings.FEATURES, {'DISABLE_START_DATES': False}) def test_non_live_course(self): @@ -410,7 +408,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): can_receive_discount_mock.return_value = applicability discount_percentage_mock.return_value = percentage user = self.create_user_for_course(self.course, CourseUserType.ENROLLED) - now_time = datetime.now(tz=UTC).strftime(u"%Y-%m-%d %H:%M:%S%z") + now_time = datetime.now(tz=UTC).strftime("%Y-%m-%d %H:%M:%S%z") ExperimentData.objects.create( user=user, experiment_id=REV1008_EXPERIMENT_ID, key=str(self.course.id), value=now_time ) @@ -419,7 +417,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): response = self.client.get(url) expiration_date = strftime_localized_html(get_discount_expiration_date(user, self.course), 'SHORT_DATE') upgrade_link = verified_upgrade_deadline_link(user=user, course=self.course) - bannerText = u'''
+ bannerText = '''
Upgrade by {discount_expiration_date} and save {percentage}% [{strikeout_price}]
Use code EDXWELCOME at checkout! Upgrade Now @@ -549,7 +547,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): expiration_date = strftime_localized(course.start + timedelta(weeks=4) + timedelta(days=1), 'SHORT_DATE') expected_params = QueryDict(mutable=True) course_name = CourseOverview.get_from_id(course.id).display_name_with_default - expected_params['access_response_error'] = u'Access to {run} expired on {expiration_date}'.format( + expected_params['access_response_error'] = 'Access to {run} expired on {expiration_date}'.format( run=course_name, expiration_date=expiration_date ) @@ -631,14 +629,14 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): future_course = self.create_future_course() self.create_user_for_course(future_course, CourseUserType.ENROLLED) - fake_unicode_start_time = u"üñîçø∂é_ßtå®t_tîµé" + fake_unicode_start_time = "üñîçø∂é_ßtå®t_tîµé" mock_strftime_localized.return_value = fake_unicode_start_time url = course_home_url(future_course) response = self.client.get(url) expected_params = QueryDict(mutable=True) expected_params['notlive'] = fake_unicode_start_time - expected_url = u'{url}?{params}'.format( + expected_url = '{url}?{params}'.format( url=reverse('dashboard'), params=expected_params.urlencode() ) @@ -857,7 +855,7 @@ class CourseHomeFragmentViewTests(ModuleStoreTestCase): CREATE_USER = False def setUp(self): - super(CourseHomeFragmentViewTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() CommerceConfiguration.objects.create(checkout_on_ecommerce_service=True) end = now() + timedelta(days=30) @@ -896,7 +894,7 @@ class CourseHomeFragmentViewTests(ModuleStoreTestCase): self.assertContains(response, url) self.assertContains( response, - u"Upgrade (${price})".format(price=self.verified_mode.min_price), + f"Upgrade (${self.verified_mode.min_price})", ) def test_no_upgrade_message_if_logged_out(self): diff --git a/openedx/features/course_experience/tests/views/test_course_outline.py b/openedx/features/course_experience/tests/views/test_course_outline.py index b42299e532..20fa2b3949 100644 --- a/openedx/features/course_experience/tests/views/test_course_outline.py +++ b/openedx/features/course_experience/tests/views/test_course_outline.py @@ -5,9 +5,9 @@ Tests for the Course Outline view and supporting views. import datetime import re +from unittest.mock import Mock, patch import ddt -import six from completion.waffle import ENABLE_COMPLETION_TRACKING_SWITCH from completion.models import BlockCompletion from completion.test_utils import CompletionWaffleTestMixin @@ -17,11 +17,9 @@ from django.urls import reverse from django.utils import timezone from edx_toggles.toggles.testutils import override_waffle_flag, override_waffle_switch from milestones.tests.utils import MilestonesTestCaseMixin -from mock import Mock, patch from opaque_keys.edx.keys import CourseKey, UsageKey from pyquery import PyQuery as pq from pytz import UTC -from six import text_type from waffle.models import Switch from common.djangoapps.course_modes.models import CourseMode @@ -71,7 +69,7 @@ class TestCourseOutlinePage(SharedModuleStoreTestCase, MasqueradeMixin): # setUpClassAndTestData() already calls setUpClass on SharedModuleStoreTestCase # pylint: disable=super-method-not-called - with super(TestCourseOutlinePage, cls).setUpClassAndTestData(): + with super().setUpClassAndTestData(): cls.courses = [] course = CourseFactory.create(self_paced=True) with cls.store.bulk_operations(course.id): @@ -134,7 +132,7 @@ class TestCourseOutlinePage(SharedModuleStoreTestCase, MasqueradeMixin): """ Set up for the tests. """ - super(TestCourseOutlinePage, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.client.login(username=self.user.username, password=TEST_PASSWORD) @override_waffle_flag(RELATIVE_DATES_FLAG, active=True) @@ -160,7 +158,7 @@ class TestCourseOutlinePage(SharedModuleStoreTestCase, MasqueradeMixin): self.assertContains(response, sequential['display_name']) if sequential['graded']: print(sequential) - self.assertContains(response, sequential['due'].strftime(u'%Y-%m-%d %H:%M:%S')) + self.assertContains(response, sequential['due'].strftime('%Y-%m-%d %H:%M:%S')) self.assertContains(response, sequential['format']) assert sequential['children'] @@ -288,7 +286,7 @@ class TestCourseOutlinePageWithPrerequisites(SharedModuleStoreTestCase, Mileston cls.PREREQ_REQUIRED = '(Prerequisite required)' cls.UNLOCKED = 'Unlocked' - with super(TestCourseOutlinePageWithPrerequisites, cls).setUpClassAndTestData(): + with super().setUpClassAndTestData(): cls.course, cls.course_blocks = cls.create_test_course() @classmethod @@ -339,7 +337,7 @@ class TestCourseOutlinePageWithPrerequisites(SharedModuleStoreTestCase, Mileston """ Set up for the tests. """ - super(TestCourseOutlinePageWithPrerequisites, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.client.login(username=self.user.username, password=TEST_PASSWORD) def setup_gated_section(self, gated_block, gating_block): @@ -350,7 +348,7 @@ class TestCourseOutlinePageWithPrerequisites(SharedModuleStoreTestCase, Mileston gating_block: (The prerequisite) The block that must be completed to get access to the gated block """ - gating_api.add_prerequisite(self.course.id, six.text_type(gating_block.location)) + gating_api.add_prerequisite(self.course.id, str(gating_block.location)) gating_api.set_required_content(self.course.id, gated_block.location, gating_block.location, 100) def test_content_locked(self): @@ -437,7 +435,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT """ # setUpClassAndTestData() already calls setUpClass on SharedModuleStoreTestCase # pylint: disable=super-method-not-called - with super(TestCourseOutlineResumeCourse, cls).setUpClassAndTestData(): + with super().setUpClassAndTestData(): cls.course = cls.create_test_course() @classmethod @@ -479,7 +477,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT """ Set up for the tests. """ - super(TestCourseOutlineResumeCourse, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.client.login(username=self.user.username, password=TEST_PASSWORD) def visit_sequential(self, course, chapter, sequential): @@ -489,7 +487,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT last_accessed_url = reverse( 'courseware_section', kwargs={ - 'course_id': text_type(course.id), + 'course_id': str(course.id), 'chapter': chapter.url_name, 'section': sequential.url_name, } @@ -503,7 +501,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT """ course_key = CourseKey.from_string(str(course.id)) # Fake a visit to sequence2/vertical2 - block_key = UsageKey.from_string(six.text_type(sequential.location)) + block_key = UsageKey.from_string(str(sequential.location)) if block_key.course_key.run is None: # Old mongo keys must be annotated with course run info before calling submit_completion: block_key = block_key.replace(course_key=course_key) @@ -564,7 +562,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT content = pq(response.content) vertical = course.children[0].children[0].children[0] - assert content('.action-resume-course').attr('href').endswith(('/vertical/' + vertical.url_name)) + assert content('.action-resume-course').attr('href').endswith('/vertical/' + vertical.url_name) @override_settings(LMS_BASE='test_url:9999') def test_resume_course_with_completion_api(self): @@ -584,7 +582,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT # Test for 'resume' link URL - should be vertical 1 content = pq(response.content) - assert content('.action-resume-course').attr('href').endswith(('/vertical/' + vertical1.url_name)) + assert content('.action-resume-course').attr('href').endswith('/vertical/' + vertical1.url_name) self.complete_sequential(self.course, vertical2) # Test for 'resume' link @@ -592,7 +590,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT # Test for 'resume' link URL - should be vertical 2 content = pq(response.content) - assert content('.action-resume-course').attr('href').endswith(('/vertical/' + vertical2.url_name)) + assert content('.action-resume-course').attr('href').endswith('/vertical/' + vertical2.url_name) # visit sequential 1, make sure 'Resume Course' URL is robust against 'Last Visited' # (even though I visited seq1/vert1, 'Resume Course' still points to seq2/vert2) @@ -601,7 +599,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT # Test for 'resume' link URL - should be vertical 2 (last completed block, NOT last visited) response = self.visit_course_home(course, resume_count=1) content = pq(response.content) - assert content('.action-resume-course').attr('href').endswith(('/vertical/' + vertical2.url_name)) + assert content('.action-resume-course').attr('href').endswith('/vertical/' + vertical2.url_name) def test_resume_course_deleted_sequential(self): """ @@ -627,7 +625,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT response = self.visit_course_home(course, resume_count=1) content = pq(response.content) - assert content('.action-resume-course').attr('href').endswith(('/sequential/' + sequential2.url_name)) + assert content('.action-resume-course').attr('href').endswith('/sequential/' + sequential2.url_name) def test_resume_course_deleted_sequentials(self): """ @@ -665,7 +663,7 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT response = self.visit_course_home(course, start_count=1, resume_count=0) content = pq(response.content) vertical = course.children[0].children[0].children[0] - assert content('.action-resume-course').attr('href').endswith(('/vertical/' + vertical.url_name)) + assert content('.action-resume-course').attr('href').endswith('/vertical/' + vertical.url_name) @override_waffle_switch(ENABLE_COMPLETION_TRACKING_SWITCH, active=True) def test_course_outline_auto_open(self): @@ -687,10 +685,10 @@ class TestCourseOutlineResumeCourse(SharedModuleStoreTestCase, CompletionWaffleT chapter2 = course.children[1] response_content = self.client.get(course_home_url(course)).content - stripped_response = text_type(re.sub(b"\\s+", b"", response_content), "utf-8") + stripped_response = str(re.sub(b"\\s+", b"", response_content), "utf-8") - assert get_sequential_button(text_type(chapter1.location), False) in stripped_response - assert get_sequential_button(text_type(chapter2.location), True) in stripped_response + assert get_sequential_button(str(chapter1.location), False) in stripped_response + assert get_sequential_button(str(chapter2.location), True) in stripped_response content = pq(response_content) button = content('#expand-collapse-outline-all-button') diff --git a/openedx/features/course_experience/tests/views/test_course_sock.py b/openedx/features/course_experience/tests/views/test_course_sock.py index 1552999140..77db02e06f 100644 --- a/openedx/features/course_experience/tests/views/test_course_sock.py +++ b/openedx/features/course_experience/tests/views/test_course_sock.py @@ -3,8 +3,9 @@ Tests for course verification sock """ +from unittest import mock + import ddt -import mock from edx_toggles.toggles.testutils import override_waffle_flag from common.djangoapps.course_modes.models import CourseMode @@ -29,7 +30,7 @@ class TestCourseSockView(SharedModuleStoreTestCase): """ @classmethod def setUpClass(cls): - super(TestCourseSockView, cls).setUpClass() + super().setUpClass() # Create four courses cls.standard_course = CourseFactory.create() @@ -43,7 +44,7 @@ class TestCourseSockView(SharedModuleStoreTestCase): add_course_mode(cls.verified_course_already_enrolled, upgrade_deadline_expired=False) def setUp(self): - super(TestCourseSockView, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.user = UserFactory.create() # Enroll the user in the four courses diff --git a/openedx/features/course_experience/tests/views/test_masquerade.py b/openedx/features/course_experience/tests/views/test_masquerade.py index 8fd2305616..b0c6c1c82e 100644 --- a/openedx/features/course_experience/tests/views/test_masquerade.py +++ b/openedx/features/course_experience/tests/views/test_masquerade.py @@ -26,7 +26,7 @@ class MasqueradeTestBase(SharedModuleStoreTestCase, MasqueradeMixin): """ @classmethod def setUpClass(cls): - super(MasqueradeTestBase, cls).setUpClass() + super().setUpClass() # Create two courses cls.verified_course = CourseFactory.create() @@ -37,7 +37,7 @@ class MasqueradeTestBase(SharedModuleStoreTestCase, MasqueradeMixin): add_course_mode(cls.masters_course, mode_slug='masters', mode_display_name='Masters') def setUp(self): - super(MasqueradeTestBase, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.course_staff = UserFactory.create() CourseStaffRole(self.verified_course.id).add_users(self.course_staff) CourseStaffRole(self.masters_course.id).add_users(self.course_staff) diff --git a/openedx/features/course_experience/url_helpers.py b/openedx/features/course_experience/url_helpers.py index 286ac02c3e..122e9ab7f5 100644 --- a/openedx/features/course_experience/url_helpers.py +++ b/openedx/features/course_experience/url_helpers.py @@ -88,13 +88,13 @@ def _get_legacy_courseware_url( # args provided by the redirect. # Rely on index to do all error handling and access control. if chapter is None: - redirect_url = reverse('courseware', args=(six.text_type(course_key), )) + redirect_url = reverse('courseware', args=(str(course_key), )) elif section is None: - redirect_url = reverse('courseware_chapter', args=(six.text_type(course_key), chapter)) + redirect_url = reverse('courseware_chapter', args=(str(course_key), chapter)) elif position is None: redirect_url = reverse( 'courseware_section', - args=(six.text_type(course_key), chapter, section) + args=(str(course_key), chapter, section) ) else: # Here we use the navigation_index from the position returned from @@ -102,9 +102,9 @@ def _get_legacy_courseware_url( # moment redirect_url = reverse( 'courseware_position', - args=(six.text_type(course_key), chapter, section, navigation_index(position)) + args=(str(course_key), chapter, section, navigation_index(position)) ) - redirect_url += "?{}".format(urlencode({'activate_block_id': six.text_type(final_target_id)})) + redirect_url += "?{}".format(urlencode({'activate_block_id': str(final_target_id)})) return redirect_url @@ -177,13 +177,13 @@ def make_learning_mfe_courseware_url( `course_key`, `sequence_key`, and `unit_key` can be either OpaqueKeys or strings. They're only ever used to concatenate a URL string. """ - mfe_link = '{}/course/{}'.format(settings.LEARNING_MICROFRONTEND_URL, course_key) + mfe_link = f'{settings.LEARNING_MICROFRONTEND_URL}/course/{course_key}' if sequence_key: - mfe_link += '/{}'.format(sequence_key) + mfe_link += f'/{sequence_key}' if unit_key: - mfe_link += '/{}'.format(unit_key) + mfe_link += f'/{unit_key}' return mfe_link diff --git a/openedx/features/course_experience/views/course_dates.py b/openedx/features/course_experience/views/course_dates.py index 985323dea4..5f0527ed86 100644 --- a/openedx/features/course_experience/views/course_dates.py +++ b/openedx/features/course_experience/views/course_dates.py @@ -67,7 +67,7 @@ class CourseDatesFragmentMobileView(CourseDatesFragmentView): def get(self, request, *args, **kwargs): if not request.user.is_authenticated: raise Http404 - return super(CourseDatesFragmentMobileView, self).get(request, *args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments + return super().get(request, *args, **kwargs) def css_dependencies(self): """ diff --git a/openedx/features/course_experience/views/course_home.py b/openedx/features/course_experience/views/course_home.py index a4d031f332..89f12028ea 100644 --- a/openedx/features/course_experience/views/course_home.py +++ b/openedx/features/course_experience/views/course_home.py @@ -52,7 +52,7 @@ from .course_sock import CourseSockFragmentView from .latest_update import LatestUpdateFragmentView from .welcome_message import WelcomeMessageFragmentView -EMPTY_HANDOUTS_HTML = u'
    ' +EMPTY_HANDOUTS_HTML = '
      ' class CourseHomeView(CourseTabView): @@ -67,10 +67,10 @@ class CourseHomeView(CourseTabView): """ Displays the home page for the specified course. """ - return super(CourseHomeView, self).get(request, course_id, 'courseware', **kwargs) # lint-amnesty, pylint: disable=super-with-arguments + return super().get(request, course_id, 'courseware', **kwargs) def render_to_fragment(self, request, course=None, tab=None, **kwargs): # lint-amnesty, pylint: disable=arguments-differ, unused-argument - course_id = six.text_type(course.id) + course_id = str(course.id) if course_home_mfe_outline_tab_is_active(course.id) and not request.user.is_staff: microfrontend_url = get_learning_mfe_home_url(course_key=course_id, view_name="home") raise Redirect(microfrontend_url) diff --git a/openedx/features/course_experience/views/course_home_messages.py b/openedx/features/course_experience/views/course_home_messages.py index 3c3ec19130..468237dcd8 100644 --- a/openedx/features/course_experience/views/course_home_messages.py +++ b/openedx/features/course_experience/views/course_home_messages.py @@ -114,17 +114,17 @@ def _register_course_home_messages(request, course, user_access, course_start_da allow_anonymous = check_public_access(course, [COURSE_VISIBILITY_PUBLIC]) if user_access['is_anonymous'] and not allow_anonymous: - sign_in_or_register_text = (_(u'{sign_in_link} or {register_link} and then enroll in this course.') + sign_in_or_register_text = (_('{sign_in_link} or {register_link} and then enroll in this course.') if not CourseMode.is_masters_only(course.id) - else _(u'{sign_in_link} or {register_link}.')) + else _('{sign_in_link} or {register_link}.')) CourseHomeMessages.register_info_message( request, Text(sign_in_or_register_text).format( - sign_in_link=HTML(u'{sign_in_label}').format( + sign_in_link=HTML('{sign_in_label}').format( sign_in_label=_('Sign in'), current_url=urlquote_plus(request.path), ), - register_link=HTML(u'{register_label}').format( + register_link=HTML('{register_label}').format( register_label=_('register'), current_url=urlquote_plus(request.path), ) @@ -134,7 +134,7 @@ def _register_course_home_messages(request, course, user_access, course_start_da if not user_access['is_anonymous'] and not user_access['is_staff'] and \ not user_access['is_enrolled']: - title = Text(_(u'Welcome to {course_display_name}')).format( + title = Text(_('Welcome to {course_display_name}')).format( course_display_name=course.display_name ) @@ -150,7 +150,7 @@ def _register_course_home_messages(request, course, user_access, course_start_da CourseHomeMessages.register_info_message( request, Text(_( - u'{open_enroll_link}Enroll now{close_enroll_link} to access the full course.' + '{open_enroll_link}Enroll now{close_enroll_link} to access the full course.' )).format( open_enroll_link=HTML('') @@ -171,7 +171,7 @@ def _register_course_goal_message(request, course): course_goal_options = get_course_goal_options() goal_choices_html = Text(_( 'To start, set a course goal by selecting the option below that best describes ' - u'your learning plan. {goal_options_container}' + 'your learning plan. {goal_options_container}' )).format( goal_options_container=HTML('
      ') ) @@ -181,11 +181,11 @@ def _register_course_goal_message(request, course): '{initial_tag}{choice}{closing_tag}' ).format( initial_tag=HTML( - u'
      ' ).format( goal_key=GOAL_KEY_CHOICES.unsure, - aria_label_choice=Text(_(u"Set goal to: {choice}")).format( + aria_label_choice=Text(_("Set goal to: {choice}")).format( choice=course_goal_options[GOAL_KEY_CHOICES.unsure], ), ), @@ -204,11 +204,11 @@ def _register_course_goal_message(request, course): '{initial_tag}{goal_text}{closing_tag}' ).format( initial_tag=HTML( - u'
      ') ), - title=Text(_(u'Welcome to {course_display_name}')).format( + title=Text(_('Welcome to {course_display_name}')).format( course_display_name=course.display_name ) ) diff --git a/openedx/features/course_experience/views/course_updates.py b/openedx/features/course_experience/views/course_updates.py index 7fa3acad65..5f76b592ee 100644 --- a/openedx/features/course_experience/views/course_updates.py +++ b/openedx/features/course_experience/views/course_updates.py @@ -29,10 +29,10 @@ class CourseUpdatesView(CourseTabView): """ Displays the home page for the specified course. """ - return super(CourseUpdatesView, self).get(request, course_id, 'courseware', **kwargs) # lint-amnesty, pylint: disable=super-with-arguments + return super().get(request, course_id, 'courseware', **kwargs) def render_to_fragment(self, request, course=None, tab=None, **kwargs): # lint-amnesty, pylint: disable=arguments-differ, unused-argument - course_id = six.text_type(course.id) + course_id = str(course.id) updates_fragment_view = CourseUpdatesFragmentView() return updates_fragment_view.render_to_fragment(request, course_id=course_id, **kwargs) @@ -49,7 +49,7 @@ class CourseUpdatesFragmentView(EdxFragmentView): course_key = CourseKey.from_string(course_id) course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=True) course_url_name = default_course_url_name(course.id) - course_url = reverse(course_url_name, kwargs={'course_id': six.text_type(course.id)}) + course_url = reverse(course_url_name, kwargs={'course_id': str(course.id)}) ordered_updates = get_ordered_updates(request, course) plain_html_updates = '' diff --git a/openedx/features/course_experience/views/welcome_message.py b/openedx/features/course_experience/views/welcome_message.py index 7ba05e0a36..19f64a68b9 100644 --- a/openedx/features/course_experience/views/welcome_message.py +++ b/openedx/features/course_experience/views/welcome_message.py @@ -36,7 +36,7 @@ class WelcomeMessageFragmentView(EdxFragmentView): return None dismiss_url = reverse( - 'openedx.course_experience.dismiss_welcome_message', kwargs={'course_id': six.text_type(course_key)} + 'openedx.course_experience.dismiss_welcome_message', kwargs={'course_id': str(course_key)} ) context = { diff --git a/openedx/features/course_experience/waffle.py b/openedx/features/course_experience/waffle.py index 0fe732ea0a..8fc7e14a63 100644 --- a/openedx/features/course_experience/waffle.py +++ b/openedx/features/course_experience/waffle.py @@ -6,7 +6,7 @@ Miscellaneous waffle switches that both LMS and Studio need to access from edx_toggles.toggles import LegacyWaffleSwitchNamespace # Namespace -WAFFLE_NAMESPACE = u'course_experience' +WAFFLE_NAMESPACE = 'course_experience' # Switches # .. toggle_name: course_experience.enable_about_sidebar_html @@ -16,7 +16,7 @@ WAFFLE_NAMESPACE = u'course_experience' # .. toggle_use_cases: open_edx # .. toggle_creation_date: 2018-01-26 # TODO: Replace with WaffleSwitch(). See waffle() docstring. -ENABLE_COURSE_ABOUT_SIDEBAR_HTML = u'enable_about_sidebar_html' +ENABLE_COURSE_ABOUT_SIDEBAR_HTML = 'enable_about_sidebar_html' def waffle(): @@ -29,4 +29,4 @@ def waffle(): ENABLE_COURSE_ABOUT_SIDEBAR_HTML = WaffleSwitch(f'{WAFFLE_NAMESPACE}.enable_about_sidebar_html') """ - return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'Course Experience: ') + return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix='Course Experience: ')