diff --git a/openedx/features/course_bookmarks/tests/test_course_bookmarks.py b/openedx/features/course_bookmarks/tests/test_course_bookmarks.py
index e71fc909c7c6949396dbce9e879b9318dd391991..264bc26e4448f06d5581ed1cee06355667b9b773 100644
--- a/openedx/features/course_bookmarks/tests/test_course_bookmarks.py
+++ b/openedx/features/course_bookmarks/tests/test_course_bookmarks.py
@@ -24,7 +24,7 @@ class TestCourseBookmarksTool(SharedModuleStoreTestCase):
         Set up a course to be used for testing.
         """
         # pylint: disable=super-method-not-called
-        with super(TestCourseBookmarksTool, cls).setUpClassAndTestData():
+        with super().setUpClassAndTestData():
             with cls.store.default_store(ModuleStoreEnum.Type.split):
                 cls.course = CourseFactory.create()
                 with cls.store.bulk_operations(cls.course.id):
diff --git a/openedx/features/course_bookmarks/views/course_bookmarks.py b/openedx/features/course_bookmarks/views/course_bookmarks.py
index 25b0783d4389f766e5191a3ff614e15f4aba7d69..b5a98e048381d021138122f647860f14edc5afb9 100644
--- a/openedx/features/course_bookmarks/views/course_bookmarks.py
+++ b/openedx/features/course_bookmarks/views/course_bookmarks.py
@@ -43,7 +43,7 @@ class CourseBookmarksView(View):
         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)})
 
         # Render the bookmarks list as a fragment
         bookmarks_fragment = CourseBookmarksFragmentView().render_to_fragment(request, course_id=course_id)
diff --git a/openedx/features/course_duration_limits/access.py b/openedx/features/course_duration_limits/access.py
index 0e498fcee722d4c15176d1e502dc1498d19c5581..60f9491ecd5f324cf25ab2e452e94a1355a42c90 100644
--- a/openedx/features/course_duration_limits/access.py
+++ b/openedx/features/course_duration_limits/access.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 """
 Contains code related to computing content gating course duration limits
 and course access based on these limits.
@@ -28,7 +27,7 @@ class AuditExpiredError(AccessError):
     """
     def __init__(self, user, course, expiration_date):
         error_code = 'audit_expired'
-        developer_message = 'User {} had access to {} until {}'.format(user, course, expiration_date)
+        developer_message = f'User {user} had access to {course} until {expiration_date}'
         expiration_date = strftime_localized(expiration_date, 'SHORT_DATE')
         user_message = _('Access expired on {expiration_date}').format(expiration_date=expiration_date)
         try:
@@ -42,8 +41,9 @@ class AuditExpiredError(AccessError):
                                                 ' for expired on {expiration_date}').format(
                 expiration_date=expiration_date
             )
-        super(AuditExpiredError, self).__init__(error_code, developer_message, user_message,  # lint-amnesty, pylint: disable=super-with-arguments
-                                                additional_context_user_message)
+
+        # lint-amnesty, pylint: disable=super-with-arguments
+        super().__init__(error_code, developer_message, user_message, additional_context_user_message)
 
 
 def get_user_course_duration(user, course):
@@ -219,7 +219,7 @@ def generate_course_expired_fragment_from_key(user, course_key):
     shouldn't show a course expired message for this user.
     """
     request_cache = RequestCache('generate_course_expired_fragment_from_key')
-    cache_key = 'message:{},{}'.format(user.id, course_key)
+    cache_key = f'message:{user.id},{course_key}'
     cache_response = request_cache.get_cached_response(cache_key)
     if cache_response.is_found:
         cached_message = cache_response.value
diff --git a/openedx/features/course_duration_limits/admin.py b/openedx/features/course_duration_limits/admin.py
index 56e64f5c9f36bb3da0117dd0b62b71a8019af48f..00efbcfb723c145875fd0f0fd528313e2cad3617 100644
--- a/openedx/features/course_duration_limits/admin.py
+++ b/openedx/features/course_duration_limits/admin.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 """
 Django Admin pages for CourseDurationLimitConfig.
 """
diff --git a/openedx/features/course_duration_limits/migrations/0001_initial.py b/openedx/features/course_duration_limits/migrations/0001_initial.py
index 9d4eda696bfb90c79a677931f10f6de2e3e7ce77..c233db4904587cf5f9a8a5579babf1b1f25b37ca 100644
--- a/openedx/features/course_duration_limits/migrations/0001_initial.py
+++ b/openedx/features/course_duration_limits/migrations/0001_initial.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.16 on 2018-11-08 19:43
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0002_auto_20181119_0959.py b/openedx/features/course_duration_limits/migrations/0002_auto_20181119_0959.py
index fc13db3c6346354b33a06c35315c966234fdd210..c13e3aa5f2f42ccd77f23e7a657aae37a3ee1d0d 100644
--- a/openedx/features/course_duration_limits/migrations/0002_auto_20181119_0959.py
+++ b/openedx/features/course_duration_limits/migrations/0002_auto_20181119_0959.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.16 on 2018-11-19 14:59
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0003_auto_20181128_1407.py b/openedx/features/course_duration_limits/migrations/0003_auto_20181128_1407.py
index f656e439873f82128a86c153e2e9568c1e266688..2f25cee76990e8ca80b1a17b06a640473ca59d73 100644
--- a/openedx/features/course_duration_limits/migrations/0003_auto_20181128_1407.py
+++ b/openedx/features/course_duration_limits/migrations/0003_auto_20181128_1407.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.16 on 2018-11-28 19:07
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0004_auto_20181128_1521.py b/openedx/features/course_duration_limits/migrations/0004_auto_20181128_1521.py
index 94f97f6f69a1361a8a124b29543e94108da7047e..cb85f856abb3201c5ef04116b98e1a508273be35 100644
--- a/openedx/features/course_duration_limits/migrations/0004_auto_20181128_1521.py
+++ b/openedx/features/course_duration_limits/migrations/0004_auto_20181128_1521.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.16 on 2018-11-28 20:21
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0005_auto_20190306_1546.py b/openedx/features/course_duration_limits/migrations/0005_auto_20190306_1546.py
index ca7748e5007d29c5c9aa8cc42583d4b224509fc1..cbbb50b234f71e3d885550d1e90fb56f0b4ae670 100644
--- a/openedx/features/course_duration_limits/migrations/0005_auto_20190306_1546.py
+++ b/openedx/features/course_duration_limits/migrations/0005_auto_20190306_1546.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.20 on 2019-03-06 15:46
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0006_auto_20190308_1447.py b/openedx/features/course_duration_limits/migrations/0006_auto_20190308_1447.py
index d0e0b26204a9ead64c22bd17b148d24bc69e5cf5..5d05b030a3b0213f1396a086f6d6b06323aed044 100644
--- a/openedx/features/course_duration_limits/migrations/0006_auto_20190308_1447.py
+++ b/openedx/features/course_duration_limits/migrations/0006_auto_20190308_1447.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.20 on 2019-03-08 14:47
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0007_auto_20190311_1919.py b/openedx/features/course_duration_limits/migrations/0007_auto_20190311_1919.py
index d06d18cb437e74a82bef11a05069d4eaac18211f..10813ce59ca966c5d23c76679bde19d0fc637d0f 100644
--- a/openedx/features/course_duration_limits/migrations/0007_auto_20190311_1919.py
+++ b/openedx/features/course_duration_limits/migrations/0007_auto_20190311_1919.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.20 on 2019-03-11 19:19
 
 
diff --git a/openedx/features/course_duration_limits/migrations/0008_auto_20190313_1634.py b/openedx/features/course_duration_limits/migrations/0008_auto_20190313_1634.py
index 60f357de12aaf9604d8cbae814f035500d99c1bd..0c0377d4a7b1254e70cd6046f7e2ee79ad4f526d 100644
--- a/openedx/features/course_duration_limits/migrations/0008_auto_20190313_1634.py
+++ b/openedx/features/course_duration_limits/migrations/0008_auto_20190313_1634.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.11.20 on 2019-03-13 16:34
 
 
diff --git a/openedx/features/course_duration_limits/tests/test_access.py b/openedx/features/course_duration_limits/tests/test_access.py
index 8b18d3a9bdf8d6a9739e30f6688164dab8be7ad8..263561dd5a96abfb3cdfb74418b236d6d66ad30f 100644
--- a/openedx/features/course_duration_limits/tests/test_access.py
+++ b/openedx/features/course_duration_limits/tests/test_access.py
@@ -32,7 +32,7 @@ from common.djangoapps.util.date_utils import strftime_localized
 class TestAccess(CacheIsolationTestCase):
     """Tests of openedx.features.course_duration_limits.access"""
     def setUp(self):
-        super(TestAccess, self).setUp()  # lint-amnesty, pylint: disable=super-with-arguments
+        super().setUp()  # lint-amnesty, pylint: disable=super-with-arguments
 
         CourseDurationLimitConfig.objects.create(enabled=True, enabled_as_of=datetime(2018, 1, 1, tzinfo=UTC))
         DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True)
diff --git a/openedx/features/course_duration_limits/tests/test_course_expiration.py b/openedx/features/course_duration_limits/tests/test_course_expiration.py
index ee0edc4e183137ef9ebf3bfb26ec1f43088e99cc..54470bb702086f5702ce66019a73f3548ce0b480 100644
--- a/openedx/features/course_duration_limits/tests/test_course_expiration.py
+++ b/openedx/features/course_duration_limits/tests/test_course_expiration.py
@@ -3,15 +3,18 @@ Contains tests to verify correctness of course expiration functionality
 """
 
 from datetime import timedelta
+from unittest import mock
 
 import ddt
-import mock
 import six
 from django.conf import settings
 from django.urls import reverse
 from django.utils.timezone import now
 
 from common.djangoapps.course_modes.models import CourseMode
+from common.djangoapps.student.models import CourseEnrollment, FBEEnrollmentExclusion
+from common.djangoapps.student.roles import CourseInstructorRole
+from common.djangoapps.student.tests.factories import TEST_PASSWORD, CourseEnrollmentFactory, UserFactory
 from lms.djangoapps.courseware.tests.factories import (
     BetaTesterFactory,
     GlobalStaffFactory,
@@ -35,9 +38,6 @@ from openedx.features.content_type_gating.helpers import CONTENT_GATING_PARTITIO
 from openedx.features.course_duration_limits.access import get_user_course_expiration_date
 from openedx.features.course_duration_limits.models import CourseDurationLimitConfig
 from openedx.features.course_experience.tests.views.helpers import add_course_mode
-from common.djangoapps.student.models import CourseEnrollment, FBEEnrollmentExclusion
-from common.djangoapps.student.roles import CourseInstructorRole
-from common.djangoapps.student.tests.factories import TEST_PASSWORD, CourseEnrollmentFactory, UserFactory
 from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
 from xmodule.modulestore.tests.factories import CourseFactory
 from xmodule.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID
@@ -48,7 +48,7 @@ from xmodule.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID
 class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
     """Tests to verify the get_user_course_expiration_date function is working correctly"""
     def setUp(self):
-        super(CourseExpirationTestCase, self).setUp()  # lint-amnesty, pylint: disable=super-with-arguments
+        super().setUp()  # lint-amnesty, pylint: disable=super-with-arguments
         self.course = CourseFactory(
             start=now() - timedelta(weeks=10),
         )
@@ -61,7 +61,7 @@ class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
 
     def tearDown(self):
         CourseEnrollment.unenroll(self.user, self.course.id)
-        super(CourseExpirationTestCase, self).tearDown()  # lint-amnesty, pylint: disable=super-with-arguments
+        super().tearDown()  # lint-amnesty, pylint: disable=super-with-arguments
 
     def test_enrollment_mode(self):
         """Tests that verified enrollments do not have an expiration"""
@@ -236,10 +236,10 @@ class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
 
         self.update_masquerade(**masquerade_config)
 
-        course_home_url = reverse('openedx.course_experience.course_home', args=[six.text_type(self.course.id)])
+        course_home_url = reverse('openedx.course_experience.course_home', args=[str(self.course.id)])
         response = self.client.get(course_home_url, follow=True)
         assert response.status_code == 200
-        six.assertCountEqual(self, response.redirect_chain, [])
+        self.assertCountEqual(response.redirect_chain, [])
         banner_text = 'You lose all access to this course, including your progress,'
         if show_expiration_banner:
             self.assertContains(response, banner_text)
@@ -273,10 +273,10 @@ class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
 
         self.update_masquerade(username='audit')
 
-        course_home_url = reverse('openedx.course_experience.course_home', args=[six.text_type(self.course.id)])
+        course_home_url = reverse('openedx.course_experience.course_home', args=[str(self.course.id)])
         response = self.client.get(course_home_url, follow=True)
         assert response.status_code == 200
-        six.assertCountEqual(self, response.redirect_chain, [])
+        self.assertCountEqual(response.redirect_chain, [])
         banner_text = 'You lose all access to this course, including your progress,'
         self.assertNotContains(response, banner_text)
 
@@ -309,10 +309,10 @@ class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
 
         self.update_masquerade(username='audit')
 
-        course_home_url = reverse('openedx.course_experience.course_home', args=[six.text_type(self.course.id)])
+        course_home_url = reverse('openedx.course_experience.course_home', args=[str(self.course.id)])
         response = self.client.get(course_home_url, follow=True)
         assert response.status_code == 200
-        six.assertCountEqual(self, response.redirect_chain, [])
+        self.assertCountEqual(response.redirect_chain, [])
         banner_text = 'This learner does not have access to this course. Their access expired on'
         self.assertContains(response, banner_text)
 
@@ -360,10 +360,10 @@ class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
 
         self.update_masquerade(username=expired_staff.username)
 
-        course_home_url = reverse('openedx.course_experience.course_home', args=[six.text_type(self.course.id)])
+        course_home_url = reverse('openedx.course_experience.course_home', args=[str(self.course.id)])
         response = self.client.get(course_home_url, follow=True)
         assert response.status_code == 200
-        six.assertCountEqual(self, response.redirect_chain, [])
+        self.assertCountEqual(response.redirect_chain, [])
         banner_text = 'This learner does not have access to this course. Their access expired on'
         self.assertNotContains(response, banner_text)
 
@@ -409,9 +409,9 @@ class CourseExpirationTestCase(ModuleStoreTestCase, MasqueradeMixin):
 
         self.update_masquerade(username=expired_staff.username)
 
-        course_home_url = reverse('openedx.course_experience.course_home', args=[six.text_type(self.course.id)])
+        course_home_url = reverse('openedx.course_experience.course_home', args=[str(self.course.id)])
         response = self.client.get(course_home_url, follow=True)
         assert response.status_code == 200
-        six.assertCountEqual(self, response.redirect_chain, [])
+        self.assertCountEqual(response.redirect_chain, [])
         banner_text = 'This learner does not have access to this course. Their access expired on'
         self.assertNotContains(response, banner_text)
diff --git a/openedx/features/course_duration_limits/tests/test_models.py b/openedx/features/course_duration_limits/tests/test_models.py
index 5f3878aa2ef9db4b613f383d87c7360f0107d4db..0473faefd3304a1c9b7f342690da950a3b5f1319 100644
--- a/openedx/features/course_duration_limits/tests/test_models.py
+++ b/openedx/features/course_duration_limits/tests/test_models.py
@@ -4,13 +4,13 @@ Tests of CourseDurationLimitConfig.
 
 import itertools
 from datetime import datetime, timedelta
+from unittest.mock import Mock
 
 import ddt
 import pytest
 import pytz
 from django.utils import timezone
 from edx_django_utils.cache import RequestCache
-from mock import Mock
 from opaque_keys.edx.locator import CourseLocator
 
 from common.djangoapps.course_modes.tests.factories import CourseModeFactory
@@ -35,7 +35,7 @@ class TestCourseDurationLimitConfig(CacheIsolationTestCase):
         CourseModeFactory.create(course_id=self.course_overview.id, mode_slug='audit')
         CourseModeFactory.create(course_id=self.course_overview.id, mode_slug='verified')
         self.user = UserFactory.create()
-        super(TestCourseDurationLimitConfig, self).setUp()  # lint-amnesty, pylint: disable=super-with-arguments
+        super().setUp()  # lint-amnesty, pylint: disable=super-with-arguments
 
     @ddt.data(
         (True, True),
@@ -188,7 +188,7 @@ class TestCourseDurationLimitConfig(CacheIsolationTestCase):
                 )
 
                 for org_setting in (True, False, None):
-                    test_org = "{}-{}".format(test_site_cfg.id, org_setting)
+                    test_org = f"{test_site_cfg.id}-{org_setting}"
                     test_site_cfg.site_values['course_org_filter'].append(test_org)
                     test_site_cfg.save()
 
@@ -199,7 +199,7 @@ class TestCourseDurationLimitConfig(CacheIsolationTestCase):
                     for course_setting in (True, False, None):
                         test_course = CourseOverviewFactory.create(
                             org=test_org,
-                            id=CourseLocator(test_org, 'test_course', 'run-{}'.format(course_setting))
+                            id=CourseLocator(test_org, 'test_course', f'run-{course_setting}')
                         )
                         CourseDurationLimitConfig.objects.create(
                             course=test_course, enabled=course_setting, enabled_as_of=datetime(2018, 1, 1, tzinfo=pytz.UTC)  # lint-amnesty, pylint: disable=line-too-long