diff --git a/openedx/features/effort_estimation/tests/test_block_transformers.py b/openedx/features/effort_estimation/tests/test_block_transformers.py index efbe9d5f8e..42dd51f25a 100644 --- a/openedx/features/effort_estimation/tests/test_block_transformers.py +++ b/openedx/features/effort_estimation/tests/test_block_transformers.py @@ -1,7 +1,7 @@ """Tests for effort_estimation transformers.""" from datetime import timedelta -from mock import patch +from unittest.mock import patch from crum import set_current_request from django.test.client import RequestFactory diff --git a/openedx/features/enterprise_support/admin/views.py b/openedx/features/enterprise_support/admin/views.py index a08aece032..21d5785ed2 100644 --- a/openedx/features/enterprise_support/admin/views.py +++ b/openedx/features/enterprise_support/admin/views.py @@ -28,7 +28,7 @@ class EnrollmentAttributeOverrideView(FormView): return reverse('admin:enterprise_override_attributes') def get_context_data(self, **kwargs): - context = super(EnrollmentAttributeOverrideView, self).get_context_data(**kwargs) # lint-amnesty, pylint: disable=super-with-arguments + context = super().get_context_data(**kwargs) context.update(self._get_admin_context(self.request)) return context @@ -68,4 +68,4 @@ class EnrollmentAttributeOverrideView(FormView): ).format(error_line_numbers=', '.join(error_line_numbers)) ) - return super(EnrollmentAttributeOverrideView, self).form_valid(form) # lint-amnesty, pylint: disable=super-with-arguments + return super().form_valid(form) diff --git a/openedx/features/enterprise_support/api.py b/openedx/features/enterprise_support/api.py index 18a4b8df60..9d4f888397 100644 --- a/openedx/features/enterprise_support/api.py +++ b/openedx/features/enterprise_support/api.py @@ -58,7 +58,7 @@ class EnterpriseApiException(Exception): """ -class ConsentApiClient(object): +class ConsentApiClient: """ Class for producing an Enterprise Consent service API client """ @@ -121,7 +121,7 @@ class ConsentApiClient(object): return response['consent_required'] -class EnterpriseServiceClientMixin(object): +class EnterpriseServiceClientMixin: """ Class for initializing an Enterprise API clients with service user. """ @@ -132,7 +132,7 @@ class EnterpriseServiceClientMixin(object): Enterprise worker user by default. """ user = User.objects.get(username=settings.ENTERPRISE_SERVICE_WORKER_USERNAME) - super(EnterpriseServiceClientMixin, self).__init__(user) # lint-amnesty, pylint: disable=super-with-arguments + super().__init__(user) class ConsentApiServiceClient(EnterpriseServiceClientMixin, ConsentApiClient): @@ -141,7 +141,7 @@ class ConsentApiServiceClient(EnterpriseServiceClientMixin, ConsentApiClient): """ -class EnterpriseApiClient(object): +class EnterpriseApiClient: """ Class for producing an Enterprise service API client. """ @@ -176,8 +176,8 @@ class EnterpriseApiClient(object): endpoint.post(data=data) except (HttpClientError, HttpServerError): message = ( - u"An error occured while posting EnterpriseCourseEnrollment for user {username} and " - u"course run {course_id} (consent_granted value: {consent_granted})" + "An error occured while posting EnterpriseCourseEnrollment for user {username} and " + "course run {course_id} (consent_granted value: {consent_granted})" ).format( username=username, course_id=course_id, @@ -273,7 +273,7 @@ class EnterpriseApiClient(object): response = endpoint().get(**querystring) except (HttpClientError, HttpServerError): LOGGER.exception( - u'Failed to get enterprise-learner for user [%s] with client user [%s]. Caller: %s, Request PATH: %s', + 'Failed to get enterprise-learner for user [%s] with client user [%s]. Caller: %s, Request PATH: %s', user.username, self.user.username, "".join(traceback.format_stack()), @@ -355,7 +355,7 @@ def data_sharing_consent_required(view_func): if consent_url: real_user = getattr(request.user, 'real_user', request.user) LOGGER.info( - u'User %s cannot access the course %s because they have not granted consent', + 'User %s cannot access the course %s because they have not granted consent', real_user, course_id, ) @@ -594,7 +594,7 @@ def consent_needed_for_course(request, user, course_id, enrollment_exists=False) data sharing permissions before accessing a course. """ LOGGER.info( - u"Determining if user [{username}] must consent to data sharing for course [{course_id}]".format( + "Determining if user [{username}] must consent to data sharing for course [{course_id}]".format( username=user.username, course_id=course_id ) @@ -604,8 +604,8 @@ def consent_needed_for_course(request, user, course_id, enrollment_exists=False) data_sharing_consent_needed_cache = TieredCache.get_cached_response(consent_cache_key) if data_sharing_consent_needed_cache.is_found and data_sharing_consent_needed_cache.value == 0: LOGGER.info( - u"Consent from user [{username}] is not needed for course [{course_id}]. The DSC cache was checked," - u" and the value was 0.".format( + "Consent from user [{username}] is not needed for course [{course_id}]. The DSC cache was checked," + " and the value was 0.".format( username=user.username, course_id=course_id ) @@ -616,8 +616,8 @@ def consent_needed_for_course(request, user, course_id, enrollment_exists=False) enterprise_learner_details = get_enterprise_learner_data_from_db(user) if not enterprise_learner_details: LOGGER.info( - u"Consent from user [{username}] is not needed for course [{course_id}]. The user is not linked to an" - u" enterprise.".format( + "Consent from user [{username}] is not needed for course [{course_id}]. The user is not linked to an" + " enterprise.".format( username=user.username, course_id=course_id ) @@ -665,16 +665,16 @@ def consent_needed_for_course(request, user, course_id, enrollment_exists=False) if consent_needed: LOGGER.info( - u"Consent from user [{username}] is needed for course [{course_id}]. The user's current enterprise" - u" required data sharing consent, and it has not been given.".format( + "Consent from user [{username}] is needed for course [{course_id}]. The user's current enterprise" + " required data sharing consent, and it has not been given.".format( username=user.username, course_id=course_id ) ) else: LOGGER.info( - u"Consent from user [{username}] is not needed for course [{course_id}]. The user's current enterprise " - u"does not require data sharing consent.".format( + "Consent from user [{username}] is not needed for course [{course_id}]. The user's current enterprise " + "does not require data sharing consent.".format( username=user.username, course_id=course_id ) @@ -727,7 +727,7 @@ def get_enterprise_consent_url(request, course_id, user=None, return_to=None, en user = user or request.user LOGGER.info( - u'Getting enterprise consent url for user [{username}] and course [{course_id}].'.format( + 'Getting enterprise consent url for user [{username}] and course [{course_id}].'.format( username=user.username, course_id=course_id ) @@ -755,7 +755,7 @@ def get_enterprise_consent_url(request, course_id, user=None, return_to=None, en } querystring = urlencode(url_params) full_url = reverse('grant_data_sharing_permissions') + '?' + querystring - LOGGER.info(u'Redirecting to %s to complete data sharing consent', full_url) + LOGGER.info('Redirecting to %s to complete data sharing consent', full_url) return full_url @@ -844,7 +844,7 @@ def get_consent_notification_data(enterprise_customer): message_template = consent_page.declined_notification_message except DataSharingConsentTextOverrides.DoesNotExist: LOGGER.info( - u"DataSharingConsentPage object doesn't exit for {enterprise_customer_name}".format( + "DataSharingConsentPage object doesn't exit for {enterprise_customer_name}".format( enterprise_customer_name=enterprise_customer['name'] ) ) @@ -891,12 +891,12 @@ def get_dashboard_consent_notification(request, user, course_enrollments): title_template, message_template = get_consent_notification_data(enterprise_customer) if not title_template: title_template = _( - u'Enrollment in {course_title} was not complete.' + 'Enrollment in {course_title} was not complete.' ) if not message_template: message_template = _( 'If you have concerns about sharing your data, please contact your administrator ' - u'at {enterprise_customer_name}.' + 'at {enterprise_customer_name}.' ) title = title_template.format( diff --git a/openedx/features/enterprise_support/signals.py b/openedx/features/enterprise_support/signals.py index c8f62fee24..c7f9bcc5e9 100644 --- a/openedx/features/enterprise_support/signals.py +++ b/openedx/features/enterprise_support/signals.py @@ -66,9 +66,9 @@ def update_dsc_cache_on_enterprise_customer_update(sender, instance, **kwargs): new_value = instance.enable_data_sharing_consent old_value = old_instance.enable_data_sharing_consent if new_value != old_value: - kwargs = {'enterprise_customer_uuid': six.text_type(instance.uuid)} + kwargs = {'enterprise_customer_uuid': str(instance.uuid)} result = clear_enterprise_customer_data_consent_share_cache.apply_async(kwargs=kwargs) - log.info(u"DSC: Created {task_name}[{task_id}] with arguments {kwargs}".format( + log.info("DSC: Created {task_name}[{task_id}] with arguments {kwargs}".format( task_name=clear_enterprise_customer_data_consent_share_cache.name, task_id=result.task_id, kwargs=kwargs, @@ -82,8 +82,8 @@ def handle_enterprise_learner_passing_grade(sender, user, course_id, **kwargs): """ if enterprise_enabled() and is_enterprise_learner(user): kwargs = { - 'username': six.text_type(user.username), - 'course_run_id': six.text_type(course_id) + 'username': str(user.username), + 'course_run_id': str(course_id) } transmit_single_learner_data.apply_async(kwargs=kwargs) @@ -125,7 +125,7 @@ def refund_order_voucher(sender, course_enrollment, skip_refund=False, **kwargs) client = ecommerce_api_client(service_user) order_number = course_enrollment.get_order_attribute_value('order_number') if order_number: - error_message = u"Encountered {} from ecommerce while creating refund voucher. Order={}, enrollment={}, user={}" + error_message = "Encountered {} from ecommerce while creating refund voucher. Order={}, enrollment={}, user={}" try: client.enterprise.coupons.create_refunded_voucher.post({"order": order_number}) except HttpClientError as ex: diff --git a/openedx/features/enterprise_support/tasks.py b/openedx/features/enterprise_support/tasks.py index f0b8506658..9bbc1af618 100644 --- a/openedx/features/enterprise_support/tasks.py +++ b/openedx/features/enterprise_support/tasks.py @@ -14,7 +14,7 @@ from openedx.features.enterprise_support.utils import clear_data_consent_share_c log = logging.getLogger('edx.celery.task') -@shared_task(name=u'openedx.features.enterprise_support.tasks.clear_enterprise_customer_data_consent_share_cache') +@shared_task(name='openedx.features.enterprise_support.tasks.clear_enterprise_customer_data_consent_share_cache') @set_code_owner_attribute def clear_enterprise_customer_data_consent_share_cache(enterprise_customer_uuid): """ @@ -25,7 +25,7 @@ def clear_enterprise_customer_data_consent_share_cache(enterprise_customer_uuid) ) count = enterprise_course_enrollments.count() log.info( - u'Stated Clearing {count} data_sharing_consent_needed cache for enterprise customer {uuid}'.format( + 'Stated Clearing {count} data_sharing_consent_needed cache for enterprise customer {uuid}'.format( count=count, uuid=enterprise_customer_uuid, ) @@ -35,6 +35,6 @@ def clear_enterprise_customer_data_consent_share_cache(enterprise_customer_uuid) enrollment.enterprise_customer_user.user_id, enrollment.course_id ) - log.info(u'Ended Clearing data_sharing_consent_needed cache for enterprise customer {uuid}'.format( + log.info('Ended Clearing data_sharing_consent_needed cache for enterprise customer {uuid}'.format( uuid=enterprise_customer_uuid, )) diff --git a/openedx/features/enterprise_support/tests/factories.py b/openedx/features/enterprise_support/tests/factories.py index dc3dd8dede..260c684d4d 100644 --- a/openedx/features/enterprise_support/tests/factories.py +++ b/openedx/features/enterprise_support/tests/factories.py @@ -28,7 +28,7 @@ class EnterpriseCustomerFactory(factory.django.DjangoModelFactory): parameters for EnterpriseCustomer constructor. """ - class Meta(object): + class Meta: """ Meta for EnterpriseCustomerFactory. """ @@ -52,7 +52,7 @@ class EnterpriseCustomerUserFactory(factory.django.DjangoModelFactory): parameters for EnterpriseCustomerUser constructor. """ - class Meta(object): + class Meta: """ Meta for EnterpriseCustomerFactory. """ @@ -70,7 +70,7 @@ class EnterpriseCourseEnrollmentFactory(factory.django.DjangoModelFactory): Creates an instance of EnterpriseCourseEnrollment with minimal boilerplate. """ - class Meta(object): + class Meta: """ Meta for EnterpriseCourseEnrollmentFactory. """ @@ -88,7 +88,7 @@ class EnterpriseCustomerBrandingConfigurationFactory(factory.django.DjangoModelF Creates an instance of EnterpriseCustomerBrandingConfiguration with minimal boilerplate. """ - class Meta(object): + class Meta: """ Meta for EnterpriseCustomerBrandingConfigurationFactory. """ @@ -106,7 +106,7 @@ class EnterpriseCustomerIdentityProviderFactory(factory.django.DjangoModelFactor EnterpriseCustomerIdentityProvider factory. """ - class Meta(object): + class Meta: """ Meta for EnterpriseCustomerIdentityProviderFactory. """ diff --git a/openedx/features/enterprise_support/tests/mixins/enterprise.py b/openedx/features/enterprise_support/tests/mixins/enterprise.py index 6febb21e8e..c4f716f85d 100644 --- a/openedx/features/enterprise_support/tests/mixins/enterprise.py +++ b/openedx/features/enterprise_support/tests/mixins/enterprise.py @@ -5,7 +5,7 @@ Mixins for the EnterpriseApiClient. import json -import mock +from unittest import mock import httpretty from django.conf import settings @@ -15,7 +15,7 @@ from django.urls import reverse from openedx.features.enterprise_support.tests import FAKE_ENTERPRISE_CUSTOMER -class EnterpriseServiceMockMixin(object): +class EnterpriseServiceMockMixin: """ Mocks for the Enterprise service responses. """ @@ -23,13 +23,13 @@ class EnterpriseServiceMockMixin(object): consent_url = '{}{}'.format(settings.ENTERPRISE_CONSENT_API_URL, 'data_sharing_consent') def setUp(self): - super(EnterpriseServiceMockMixin, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() cache.clear() @staticmethod def get_enterprise_url(path): """Return a URL to the configured Enterprise API. """ - return '{}{}/'.format(settings.ENTERPRISE_API_URL, path) + return f'{settings.ENTERPRISE_API_URL}{path}/' def mock_get_enterprise_customer(self, uuid, response, status): """ diff --git a/openedx/features/enterprise_support/tests/test_admin.py b/openedx/features/enterprise_support/tests/test_admin.py index a5237b516e..9e1087b59c 100644 --- a/openedx/features/enterprise_support/tests/test_admin.py +++ b/openedx/features/enterprise_support/tests/test_admin.py @@ -24,7 +24,7 @@ class EnrollmentAttributeOverrideViewTest(ModuleStoreTestCase): def setUp(self): """ Test case setup """ - super(EnrollmentAttributeOverrideViewTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.client = Client() user = AdminFactory() diff --git a/openedx/features/enterprise_support/tests/test_api.py b/openedx/features/enterprise_support/tests/test_api.py index 4b3ffe9f6d..221a19f3dd 100644 --- a/openedx/features/enterprise_support/tests/test_api.py +++ b/openedx/features/enterprise_support/tests/test_api.py @@ -3,7 +3,7 @@ Test the enterprise support APIs. """ import ddt import httpretty -import mock +from unittest import mock import pytest from consent.models import DataSharingConsent from django.conf import settings @@ -80,7 +80,7 @@ class TestEnterpriseApi(EnterpriseServiceMockMixin, CacheIsolationTestCase): email='ent_worker@example.com', password='password123', ) - super(TestEnterpriseApi, cls).setUpTestData() + super().setUpTestData() def _assert_api_service_client(self, api_client, mocked_jwt_builder): """ @@ -659,7 +659,7 @@ class TestEnterpriseApi(EnterpriseServiceMockMixin, CacheIsolationTestCase): 'course_id': ['course-v1:edX+DemoX+Demo_Course'], 'failure_url': ['http://localhost:8000/dashboard?consent_failed=course-v1%3AedX%2BDemoX%2BDemo_Course'], 'enterprise_customer_uuid': ['cf246b88-d5f6-4908-a522-fc307e0b0c59'], - 'next': ['http://localhost:8000{}'.format(expected_path)] + 'next': [f'http://localhost:8000{expected_path}'] } actual_url = get_enterprise_consent_url(request_mock, course_id, return_to=return_to) diff --git a/openedx/features/enterprise_support/tests/test_logout.py b/openedx/features/enterprise_support/tests/test_logout.py index 851a5054d6..c517f46909 100644 --- a/openedx/features/enterprise_support/tests/test_logout.py +++ b/openedx/features/enterprise_support/tests/test_logout.py @@ -4,7 +4,7 @@ Tests for logout for enterprise flow import ddt -import mock +from unittest import mock from django.test.utils import override_settings from django.urls import reverse @@ -28,7 +28,7 @@ class EnterpriseLogoutTests(EnterpriseServiceMockMixin, CacheIsolationTestCase, """ Tests for the enterprise logout functionality. """ def setUp(self): - super(EnterpriseLogoutTests, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() self.user = UserFactory() self.enterprise_customer = FAKE_ENTERPRISE_CUSTOMER diff --git a/openedx/features/enterprise_support/tests/test_signals.py b/openedx/features/enterprise_support/tests/test_signals.py index bd6ff4c93e..40a1b17a28 100644 --- a/openedx/features/enterprise_support/tests/test_signals.py +++ b/openedx/features/enterprise_support/tests/test_signals.py @@ -8,7 +8,7 @@ import ddt from django.test.utils import override_settings from django.utils.timezone import now from edx_django_utils.cache import TieredCache -from mock import patch +from unittest.mock import patch from opaque_keys.edx.keys import CourseKey from slumber.exceptions import HttpClientError, HttpServerError from testfixtures import LogCapture @@ -50,7 +50,7 @@ class EnterpriseSupportSignals(SharedModuleStoreTestCase): self.user = UserFactory.create(username='test', email=TEST_EMAIL) self.course_id = 'course-v1:edX+DemoX+Demo_Course' self.enterprise_customer = EnterpriseCustomerFactory() - super(EnterpriseSupportSignals, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments + super().setUp() @staticmethod def _create_dsc_cache(user_id, course_id): diff --git a/openedx/features/enterprise_support/tests/test_utils.py b/openedx/features/enterprise_support/tests/test_utils.py index 7a66df628c..1c82db4fe0 100644 --- a/openedx/features/enterprise_support/tests/test_utils.py +++ b/openedx/features/enterprise_support/tests/test_utils.py @@ -6,7 +6,7 @@ import json import uuid import ddt -import mock +from unittest import mock from django.conf import settings from django.test import TestCase from django.test.utils import override_settings @@ -52,7 +52,7 @@ class TestEnterpriseUtils(TestCase): @classmethod def setUpTestData(cls): cls.user = UserFactory.create(password='password') - super(TestEnterpriseUtils, cls).setUpTestData() + super().setUpTestData() @mock.patch('openedx.features.enterprise_support.utils.get_cache_key') def test_get_data_consent_share_cache_key(self, mock_get_cache_key): diff --git a/openedx/features/enterprise_support/utils.py b/openedx/features/enterprise_support/utils.py index 78e8243c56..9839e218f1 100644 --- a/openedx/features/enterprise_support/utils.py +++ b/openedx/features/enterprise_support/utils.py @@ -165,10 +165,10 @@ def update_third_party_auth_context_for_enterprise(request, context, enterprise_ """ if context['data']['third_party_auth']['errorMessage']: context['data']['third_party_auth']['errorMessage'] = Text(_( - u'We are sorry, you are not authorized to access {platform_name} via this channel. ' - u'Please contact your learning administrator or manager in order to access {platform_name}.' - u'{line_break}{line_break}' - u'Error Details:{line_break}{error_message}') + 'We are sorry, you are not authorized to access {platform_name} via this channel. ' + 'Please contact your learning administrator or manager in order to access {platform_name}.' + '{line_break}{line_break}' + 'Error Details:{line_break}{error_message}') ).format( platform_name=configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME), error_message=context['data']['third_party_auth']['errorMessage'],