Skip to content

Commit

Permalink
Upgrade Python to 3.9 (#4769)
Browse files Browse the repository at this point in the history
* Upgrade Python to 3.9 & pylint to 2.6.0

* Removed unnecessary pinned requirement cffi
  • Loading branch information
arslanashraf7 authored Feb 18, 2021
1 parent 076d78e commit f5d8b6c
Show file tree
Hide file tree
Showing 58 changed files with 100 additions and 100 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.7"
python-version: "3.9.1"

- id: cache
uses: actions/cache@v1
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.7-buster
FROM python:3.9-buster
LABEL maintainer "ODL DevOps <[email protected]>"


Expand Down
2 changes: 1 addition & 1 deletion backends/edxorg.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,6 @@ def refresh_token(self, token, *args, **kwargs):
Returns:
dict of information about the user
"""
response = super(EdxOrgOAuth2, self).refresh_token(token, *args, **kwargs)
response = super().refresh_token(token, *args, **kwargs)
response['updated_at'] = now_in_utc().timestamp()
return response
2 changes: 1 addition & 1 deletion backends/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
class InvalidCredentialStored(Exception):
"""Custom exception to throw in some specific situations"""
def __init__(self, message, http_status_code):
super(InvalidCredentialStored, self).__init__(message)
super().__init__(message)
self.http_status_code = http_status_code
2 changes: 1 addition & 1 deletion backends/pipeline_api_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def setUp(self):
"""
Set up class
"""
super(EdxPipelineApiTest, self).setUp()
super().setUp()
self.user = UserFactory(username="user_1")
self.user.social_auth.create(
provider='not_edx',
Expand Down
2 changes: 1 addition & 1 deletion backends/utils_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def setUpTestData(cls):
)

def setUp(self):
super(RefreshTest, self).setUp()
super().setUp()
self.now = now_in_utc()

def update_social_extra_data(self, data):
Expand Down
10 changes: 6 additions & 4 deletions cms/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def get_context(self, request, *args, **kwargs):
}

username = get_social_username(request.user)
context = super(HomePage, self).get_context(request)
context = super().get_context(request)

def get_program_page(program):
"""Return a None if ProgramPage does not exist, to avoid template errors"""
Expand Down Expand Up @@ -248,7 +248,7 @@ class CourseTeamTabPage(ProgramChildPage):
]

def get_context(self, request, *args, **kwargs):
context = super(CourseTeamTabPage, self).get_context(request)
context = super().get_context(request)

# this will help us to disable instructors carousel on course team page
context['course_team_tab_title'] = self.title
Expand Down Expand Up @@ -392,6 +392,7 @@ def get_context(self, request, *args, **kwargs):
course_team_page = child_pages.type(CourseTeamTabPage).live().first()

# the course team tab should always be second, first one is about tab
# pylint: disable=unnecessary-comprehension
context['child_pages'] = [course_team_page] + [page for page in child_pages.not_type(CourseTeamTabPage)]
context['course_team_page'] = course_team_page

Expand All @@ -415,6 +416,7 @@ def get_program_page_context(programpage, request):
"program": ProgramPageSerializer(programpage).data,
}
username = get_social_username(request.user)
# pylint: disable=bad-super-call
context = super(ProgramPage, programpage).get_context(request)

context["is_staff"] = has_role(request.user, [Staff.ROLE_ID, Instructor.ROLE_ID])
Expand Down Expand Up @@ -538,7 +540,7 @@ class FrequentlyAskedQuestion(Orderable):
answer = RichTextField()
slug = models.SlugField(unique=True, default=None, blank=True)

def save(self, *args, **kwargs): # pylint: disable=arguments-differ
def save(self, *args, **kwargs): # pylint: disable=signature-differs
if not self.slug:
max_length = FrequentlyAskedQuestion._meta.get_field('slug').max_length
slug = orig_slug = slugify(self.question)[:max_length]
Expand All @@ -551,7 +553,7 @@ def save(self, *args, **kwargs): # pylint: disable=arguments-differ
slug_is_unique = not FrequentlyAskedQuestion.objects.filter(slug=slug).exists()
count += 1
self.slug = slug
super(FrequentlyAskedQuestion, self).save(*args, **kwargs)
super().save(*args, **kwargs)

panels = [
MultiFieldPanel(
Expand Down
4 changes: 2 additions & 2 deletions courses/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,11 +204,11 @@ class Meta:
def __str__(self):
return self.title

def save(self, *args, **kwargs): # pylint: disable=arguments-differ
def save(self, *args, **kwargs): # pylint: disable=signature-differs
"""Overridden save method"""
if not self.edx_course_key:
self.edx_course_key = None
super(CourseRun, self).save(*args, **kwargs)
super().save(*args, **kwargs)

@property
def is_current(self):
Expand Down
2 changes: 1 addition & 1 deletion courses/models_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def setUpTestData(cls):
cls.course = CourseFactory.create(title="Title")

def setUp(self):
super(CourseModelTests, self).setUp()
super().setUp()
self.now = now_in_utc()

def create_run(self, course=None, start=None, end=None,
Expand Down
2 changes: 1 addition & 1 deletion courses/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class ProgramLearnersView(APIView):
)
serializer_class = ProfileImageSerializer

def get(self, request, *args, **kargs):
def get(self, request, *args, **kargs): # pylint: disable=unused-argument
"""
Get eight random learners with images and
the total count of visible learners in the program
Expand Down
4 changes: 2 additions & 2 deletions courses/views_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def setUpTestData(cls):
cls.url = reverse('user_program_enrollments')

def setUp(self):
super(ProgramEnrollmentTests, self).setUp()
super().setUp()
self.default_enrollments = [
ProgramEnrollmentFactory(
user=self.user1,
Expand All @@ -139,7 +139,7 @@ def setUp(self):
self.client.force_login(self.user1)

def tearDown(self):
super(ProgramEnrollmentTests, self).tearDown()
super().tearDown()
ProgramEnrollment.objects.all().delete()

def assert_program_enrollments_count(self, expected_count=None):
Expand Down
2 changes: 1 addition & 1 deletion dashboard/api_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def setUpTestData(cls):
cls.user = UserFactory.create()

def setUp(self):
super(CourseTests, self).setUp()
super().setUp()
self.now = now_in_utc()
self.mmtrack = MagicMock(wraps=MMTrack)

Expand Down
2 changes: 1 addition & 1 deletion dashboard/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ def ready(self):
"""
Ready handler. Import signals.
"""
import dashboard.signals # pylint: disable=unused-variable
import dashboard.signals # pylint: disable=unused-import
2 changes: 1 addition & 1 deletion dashboard/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ class ProgramEnrollment(Model):
class Meta:
unique_together = (('user', 'program'), )

def save(self, *args, **kwargs): # pylint: disable=arguments-differ
def save(self, *args, **kwargs): # pylint: disable=signature-differs
"""Overridden save method"""
if not self.hash:
self.hash = generate_md5(
Expand Down
4 changes: 2 additions & 2 deletions dashboard/views_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def setUpTestData(cls):
cls.url = reverse('dashboard_api', args=[cls.user.social_auth.first().uid])

def setUp(self):
super(DashboardTest, self).setUp()
super().setUp()
self.client.force_login(self.user)

def test_anonym_access(self):
Expand Down Expand Up @@ -144,7 +144,7 @@ def setUpTestData(cls):
cls.url = reverse('dashboard_api', args=[cls.social_auth.uid])

def setUp(self):
super(DashboardTokensTest, self).setUp()
super().setUp()
self.client.force_login(self.user)
self.now = now_in_utc()

Expand Down
2 changes: 1 addition & 1 deletion discussions/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ def ready(self):
"""
Ready handler. Import signals.
"""
import discussions.signals # pylint: disable=unused-variable
import discussions.signals # pylint: disable=unused-import
2 changes: 1 addition & 1 deletion discussions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class ChannelsView(APIView):
CanCreateChannel,
)

def post(self, request, *args, **kwargs):
def post(self, request, *args, **kwargs): # pylint: disable=unused-argument
"""Create a new channel"""
serializer = ChannelSerializer(data=request.data, context={'request': request})
serializer.is_valid(raise_exception=True)
Expand Down
2 changes: 1 addition & 1 deletion ecommerce/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ def to_dict(self):
"""
return serialize_model_object(self)

def save(self, *args, **kwargs): # pylint: disable=arguments-differ
def save(self, *args, **kwargs): # pylint: disable=signature-differs
"""Override save to do certain validations"""
self.full_clean()
super().save(*args, **kwargs)
Expand Down
6 changes: 3 additions & 3 deletions ecommerce/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class CheckoutView(APIView):
)
permission_classes = (IsAuthenticated,)

def post(self, request, *args, **kwargs):
def post(self, request, *args, **kwargs): # pylint: disable=unused-argument
"""
If the course run is part of a financial aid program, create a new unfulfilled Order
and return information used to submit to CyberSource.
Expand Down Expand Up @@ -142,7 +142,7 @@ class OrderFulfillmentView(APIView):
authentication_classes = ()
permission_classes = (IsSignedByCyberSource, )

def post(self, request, *args, **kwargs):
def post(self, request, *args, **kwargs): # pylint: disable=unused-argument
"""
Confirmation from CyberSource which fulfills an existing Order.
"""
Expand Down Expand Up @@ -246,7 +246,7 @@ class UserCouponsView(APIView):
TokenAuthentication,
)

def post(self, request, code, *args, **kwargs):
def post(self, request, code, *args, **kwargs): # pylint: disable=unused-argument
"""Attach a coupon to a user"""
with transaction.atomic():
coupon = get_object_or_404(Coupon, coupon_code=code)
Expand Down
2 changes: 1 addition & 1 deletion exams/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ def ready(self):
"""
Ready handler. Import signals.
"""
import exams.signals # pylint: disable=unused-variable
import exams.signals # pylint: disable=unused-import
2 changes: 1 addition & 1 deletion exams/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def _match_field(profile, field):
pattern = r'^[\u0020-\u00FF]*$'
reg = re.compile(pattern)
value = getattr(profile, field)
return (True if reg.match(value) else False) if value else False
return bool(reg.match(value)) if value else False


def validate_profile(profile):
Expand Down
4 changes: 2 additions & 2 deletions financialaid/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class FinancialAidAdmin(admin.ModelAdmin):
"""Admin for FinancialAid"""
model = FinancialAid

def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, signature-differs
return False

def save_model(self, request, obj, form, change):
Expand All @@ -43,7 +43,7 @@ class FinancialAidAuditAdmin(admin.ModelAdmin):
def has_add_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
return False

def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, signature-differs
return False


Expand Down
6 changes: 3 additions & 3 deletions financialaid/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ def __str__(self):
return 'tier "{0}" for program "{1}"'.format(self.tier.name, self.program.title)

@transaction.atomic
def save(self, *args, **kwargs): # pylint: disable=arguments-differ
def save(self, *args, **kwargs): # pylint: disable=signature-differs
"""
Override the save to enforce the existence of only one `current` = True
per program and tier
"""
if self.current:
TierProgram.objects.filter(program=self.program, tier=self.tier, current=True).update(current=False)
return super(TierProgram, self).save(*args, **kwargs)
return super().save(*args, **kwargs)


class FinancialAid(TimestampedModel, AuditableModel):
Expand All @@ -77,7 +77,7 @@ class FinancialAid(TimestampedModel, AuditableModel):
justification = models.TextField(null=True)
country_of_residence = models.TextField()

def save(self, *args, **kwargs): # pylint: disable=arguments-differ
def save(self, *args, **kwargs): # pylint: disable=signature-differs
"""
Override save to make sure only one FinancialAid object exists for a User and the associated Program
"""
Expand Down
2 changes: 1 addition & 1 deletion financialaid/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def sync_currency_exchange_rates():
# check specifically if maximum number of api calls per month has been exceeded
if resp.status_code == 429:
raise ExceededAPICallsException(resp_json["description"])
elif resp.status_code != 200: # check for other API errors
if resp.status_code != 200: # check for other API errors
raise UnexpectedAPIErrorException(resp_json["description"])
latest_rates = resp_json["rates"]
update_currency_exchange_rate(latest_rates)
2 changes: 1 addition & 1 deletion financialaid/tasks_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def setUpTestData(cls):
)

def setUp(self):
super(TasksTest, self).setUp()
super().setUp()
self.data = {
"extraneous information": "blah blah blah",
"rates": {
Expand Down
4 changes: 2 additions & 2 deletions financialaid/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ class CoursePriceListView(APIView):
)
permission_classes = (IsAuthenticated, CanReadIfStaffOrSelf)

def get(self, request, username, *args, **kwargs):
def get(self, request, username, *args, **kwargs): # pylint: disable=unused-argument
"""
GET handler
"""
Expand Down Expand Up @@ -370,7 +370,7 @@ class CoursePriceDetailView(APIView):
)
permission_classes = (IsAuthenticated, )

def get(self, request, *args, **kwargs):
def get(self, request, *args, **kwargs): # pylint: disable=unused-argument
"""
GET handler
"""
Expand Down
8 changes: 4 additions & 4 deletions grades/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class FinalGradeAdmin(admin.ModelAdmin):
'user__username',
)

def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, signature-differs
return False

def save_model(self, request, obj, form, change):
Expand All @@ -39,7 +39,7 @@ class FinalGradeAuditAdmin(admin.ModelAdmin):
def has_add_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
return False

def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, signature-differs
return False


Expand All @@ -60,7 +60,7 @@ class ProctoredExamGradeAdmin(admin.ModelAdmin):
'user__username',
)

def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, signature-differs
return False

def save_model(self, request, obj, form, change):
Expand All @@ -81,7 +81,7 @@ class ProctoredExamGradeAuditAdmin(admin.ModelAdmin):
def has_add_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
return False

def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, arguments-differ
def has_delete_permission(self, *args, **kwargs): # pylint: disable=unused-argument, signature-differs
return False


Expand Down
2 changes: 1 addition & 1 deletion grades/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ def ready(self):
"""
Ready handler. Import signals.
"""
import grades.signals # pylint: disable=unused-variable
import grades.signals # pylint: disable=unused-import
Loading

0 comments on commit f5d8b6c

Please sign in to comment.